ZGlmZiAtLWdpdCBhLy5jbGFzc3BhdGggYi8uY2xhc3NwYXRoCmluZGV4IDNkYWMyMDEuLjQyY2JmYmMgMTAwNjQ0Ci0tLSBhLy5jbGFzc3BhdGgKKysrIGIvLmNsYXNzcGF0aApAQCAtMjEsMTMgKzIxLDEzIEBACiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L3dpY2tldC0xLjQuMjIuamFyIiBzb3VyY2VwYXRoPSJleHQvc3JjL3dpY2tldC0xLjQuMjIuamFyIiAvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9ImV4dC93aWNrZXQtYXV0aC1yb2xlcy0xLjQuMjIuamFyIiBzb3VyY2VwYXRoPSJleHQvc3JjL3dpY2tldC1hdXRoLXJvbGVzLTEuNC4yMi5qYXIiIC8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L3dpY2tldC1leHRlbnNpb25zLTEuNC4yMi5qYXIiIHNvdXJjZXBhdGg9ImV4dC9zcmMvd2lja2V0LWV4dGVuc2lvbnMtMS40LjIyLmphciIgLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJleHQvbHVjZW5lLWNvcmUtNC4xMC40LmphciIgc291cmNlcGF0aD0iZXh0L3NyYy9sdWNlbmUtY29yZS00LjEwLjQuamFyIiAvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9ImV4dC9sdWNlbmUtYW5hbHl6ZXJzLWNvbW1vbi00LjEwLjQuamFyIiBzb3VyY2VwYXRoPSJleHQvc3JjL2x1Y2VuZS1hbmFseXplcnMtY29tbW9uLTQuMTAuNC5qYXIiIC8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L2x1Y2VuZS1oaWdobGlnaHRlci00LjEwLjQuamFyIiBzb3VyY2VwYXRoPSJleHQvc3JjL2x1Y2VuZS1oaWdobGlnaHRlci00LjEwLjQuamFyIiAvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9ImV4dC9sdWNlbmUtbWVtb3J5LTQuMTAuNC5qYXIiIHNvdXJjZXBhdGg9ImV4dC9zcmMvbHVjZW5lLW1lbW9yeS00LjEwLjQuamFyIiAvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9ImV4dC9sdWNlbmUtcXVlcmllcy00LjEwLjQuamFyIiBzb3VyY2VwYXRoPSJleHQvc3JjL2x1Y2VuZS1xdWVyaWVzLTQuMTAuNC5qYXIiIC8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L2x1Y2VuZS1xdWVyeXBhcnNlci00LjEwLjQuamFyIiBzb3VyY2VwYXRoPSJleHQvc3JjL2x1Y2VuZS1xdWVyeXBhcnNlci00LjEwLjQuamFyIiAvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9ImV4dC9sdWNlbmUtc2FuZGJveC00LjEwLjQuamFyIiBzb3VyY2VwYXRoPSJleHQvc3JjL2x1Y2VuZS1zYW5kYm94LTQuMTAuNC5qYXIiIC8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L2x1Y2VuZS1jb3JlLTUuNS4yLmphciIgc291cmNlcGF0aD0iZXh0L3NyYy9sdWNlbmUtY29yZS01LjUuMi5qYXIiIC8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L2x1Y2VuZS1hbmFseXplcnMtY29tbW9uLTUuNS4yLmphciIgc291cmNlcGF0aD0iZXh0L3NyYy9sdWNlbmUtYW5hbHl6ZXJzLWNvbW1vbi01LjUuMi5qYXIiIC8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L2x1Y2VuZS1oaWdobGlnaHRlci01LjUuMi5qYXIiIHNvdXJjZXBhdGg9ImV4dC9zcmMvbHVjZW5lLWhpZ2hsaWdodGVyLTUuNS4yLmphciIgLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJleHQvbHVjZW5lLW1lbW9yeS01LjUuMi5qYXIiIHNvdXJjZXBhdGg9ImV4dC9zcmMvbHVjZW5lLW1lbW9yeS01LjUuMi5qYXIiIC8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L2x1Y2VuZS1xdWVyaWVzLTUuNS4yLmphciIgc291cmNlcGF0aD0iZXh0L3NyYy9sdWNlbmUtcXVlcmllcy01LjUuMi5qYXIiIC8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L2x1Y2VuZS1xdWVyeXBhcnNlci01LjUuMi5qYXIiIHNvdXJjZXBhdGg9ImV4dC9zcmMvbHVjZW5lLXF1ZXJ5cGFyc2VyLTUuNS4yLmphciIgLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJleHQvbHVjZW5lLXNhbmRib3gtNS41LjIuamFyIiBzb3VyY2VwYXRoPSJleHQvc3JjL2x1Y2VuZS1zYW5kYm94LTUuNS4yLmphciIgLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJleHQvamFrYXJ0YS1yZWdleHAtMS40LmphciIgLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJleHQvcGVnZG93bi0xLjUuMC5qYXIiIHNvdXJjZXBhdGg9ImV4dC9zcmMvcGVnZG93bi0xLjUuMC5qYXIiIC8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0L3BhcmJvaWxlZC1qYXZhLTEuMS43LmphciIgc291cmNlcGF0aD0iZXh0L3NyYy9wYXJib2lsZWQtamF2YS0xLjEuNy5qYXIiIC8+CmRpZmYgLS1naXQgYS9idWlsZC5tb3hpZSBiL2J1aWxkLm1veGllCmluZGV4IGViMDVlMmMuLmYyMTI0MWQgMTAwNjQ0Ci0tLSBhL2J1aWxkLm1veGllCisrKyBiL2J1aWxkLm1veGllCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgamV0dHkudmVyc2lvbiAgOiA5LjIuMTMudjIwMTUwNzMwCiAgIHNsZjRqLnZlcnNpb24gIDogMS43LjEyCiAgIHdpY2tldC52ZXJzaW9uIDogMS40LjIyCi0gIGx1Y2VuZS52ZXJzaW9uIDogNC4xMC40CisgIGx1Y2VuZS52ZXJzaW9uIDogNS41LjIKICAgamdpdC52ZXJzaW9uICAgOiA0LjEuMS4yMDE1MTExMzE4MTAtcgogICBncm9vdnkudmVyc2lvbiA6IDIuNC40CiAgIGJvdW5jeWNhc3RsZS52ZXJzaW9uIDogMS41MgpAQCAtMTQ2LDkgKzE0Niw5IEBACiAtIGNvbXBpbGUgJ29yZy5hcGFjaGUud2lja2V0OndpY2tldC1leHRlbnNpb25zOiR7d2lja2V0LnZlcnNpb259JyA6d2FyICFvcmcubW9ja2l0bwogLSBjb21waWxlICdvcmcuYXBhY2hlLmx1Y2VuZTpsdWNlbmUtY29yZToke2x1Y2VuZS52ZXJzaW9ufScgOndhciA6ZmVkY2xpZW50CiAtIGNvbXBpbGUgJ29yZy5hcGFjaGUubHVjZW5lOmx1Y2VuZS1hbmFseXplcnMtY29tbW9uOiR7bHVjZW5lLnZlcnNpb259JyA6d2FyIDpmZWRjbGllbnQKLS0gY29tcGlsZSAnb3JnLmFwYWNoZS5sdWNlbmU6bHVjZW5lLWhpZ2hsaWdodGVyOiR7bHVjZW5lLnZlcnNpb259JyA6d2FyIDpmZWRjbGllbnQKKy0gY29tcGlsZSAnb3JnLmFwYWNoZS5sdWNlbmU6bHVjZW5lLWhpZ2hsaWdodGVyOiR7bHVjZW5lLnZlcnNpb259JyA6d2FyIDpmZWRjbGllbnQgIW9yZy5hcGFjaGUubHVjZW5lOmx1Y2VuZS1qb2luCiAtIGNvbXBpbGUgJ29yZy5hcGFjaGUubHVjZW5lOmx1Y2VuZS1tZW1vcnk6JHtsdWNlbmUudmVyc2lvbn0nIDp3YXIgOmZlZGNsaWVudAotLSBjb21waWxlICdvcmcuYXBhY2hlLmx1Y2VuZTpsdWNlbmUtcXVlcnlwYXJzZXI6JHtsdWNlbmUudmVyc2lvbn0nIDp3YXIgOmZlZGNsaWVudAorLSBjb21waWxlICdvcmcuYXBhY2hlLmx1Y2VuZTpsdWNlbmUtcXVlcnlwYXJzZXI6JHtsdWNlbmUudmVyc2lvbn0nIDp3YXIgOmZlZGNsaWVudCAhb3JnLmFwYWNoZS5sdWNlbmU6bHVjZW5lLXNwYXRpYWwKIC0gY29tcGlsZSAnb3JnLnBlZ2Rvd246cGVnZG93bjoxLjUuMCcgOndhcgogLSBjb21waWxlICdvcmcuZnVzZXNvdXJjZS53aWtpdGV4dDp3aWtpdGV4dC1jb3JlOiR7d2lraXRleHQudmVyc2lvbn0nIDp3YXIKIC0gY29tcGlsZSAnb3JnLmZ1c2Vzb3VyY2Uud2lraXRleHQ6dHdpa2ktY29yZToke3dpa2l0ZXh0LnZlcnNpb259JyA6d2FyCmRpZmYgLS1naXQgYS9naXRibGl0LmltbCBiL2dpdGJsaXQuaW1sCmluZGV4IDAzOGM0ZjQuLjFmNGFhMjQgMTAwNjQ0Ci0tLSBhL2dpdGJsaXQuaW1sCisrKyBiL2dpdGJsaXQuaW1sCkBAIC0xODAsNzkgKzE4MCw3OSBAQAogICAgICAgPC9saWJyYXJ5PgogICAgIDwvb3JkZXJFbnRyeT4KICAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUtbGlicmFyeSI+Ci0gICAgICA8bGlicmFyeSBuYW1lPSJsdWNlbmUtY29yZS00LjEwLjQuamFyIj4KKyAgICAgIDxsaWJyYXJ5IG5hbWU9Imx1Y2VuZS1jb3JlLTUuNS4yLmphciI+CiAgICAgICAgIDxDTEFTU0VTPgotICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9sdWNlbmUtY29yZS00LjEwLjQuamFyIS8iIC8+CisgICAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly8kTU9EVUxFX0RJUiQvZXh0L2x1Y2VuZS1jb3JlLTUuNS4yLmphciEvIiAvPgogICAgICAgICA8L0NMQVNTRVM+CiAgICAgICAgIDxKQVZBRE9DIC8+CiAgICAgICAgIDxTT1VSQ0VTPgotICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9zcmMvbHVjZW5lLWNvcmUtNC4xMC40LmphciEvIiAvPgorICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9zcmMvbHVjZW5lLWNvcmUtNS41LjIuamFyIS8iIC8+CiAgICAgICAgIDwvU09VUkNFUz4KICAgICAgIDwvbGlicmFyeT4KICAgICA8L29yZGVyRW50cnk+CiAgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlLWxpYnJhcnkiPgotICAgICAgPGxpYnJhcnkgbmFtZT0ibHVjZW5lLWFuYWx5emVycy1jb21tb24tNC4xMC40LmphciI+CisgICAgICA8bGlicmFyeSBuYW1lPSJsdWNlbmUtYW5hbHl6ZXJzLWNvbW1vbi01LjUuMi5qYXIiPgogICAgICAgICA8Q0xBU1NFUz4KLSAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvbHVjZW5lLWFuYWx5emVycy1jb21tb24tNC4xMC40LmphciEvIiAvPgorICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9sdWNlbmUtYW5hbHl6ZXJzLWNvbW1vbi01LjUuMi5qYXIhLyIgLz4KICAgICAgICAgPC9DTEFTU0VTPgogICAgICAgICA8SkFWQURPQyAvPgogICAgICAgICA8U09VUkNFUz4KLSAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvc3JjL2x1Y2VuZS1hbmFseXplcnMtY29tbW9uLTQuMTAuNC5qYXIhLyIgLz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvc3JjL2x1Y2VuZS1hbmFseXplcnMtY29tbW9uLTUuNS4yLmphciEvIiAvPgogICAgICAgICA8L1NPVVJDRVM+CiAgICAgICA8L2xpYnJhcnk+CiAgICAgPC9vcmRlckVudHJ5PgogICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZS1saWJyYXJ5Ij4KLSAgICAgIDxsaWJyYXJ5IG5hbWU9Imx1Y2VuZS1oaWdobGlnaHRlci00LjEwLjQuamFyIj4KKyAgICAgIDxsaWJyYXJ5IG5hbWU9Imx1Y2VuZS1oaWdobGlnaHRlci01LjUuMi5qYXIiPgogICAgICAgICA8Q0xBU1NFUz4KLSAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvbHVjZW5lLWhpZ2hsaWdodGVyLTQuMTAuNC5qYXIhLyIgLz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvbHVjZW5lLWhpZ2hsaWdodGVyLTUuNS4yLmphciEvIiAvPgogICAgICAgICA8L0NMQVNTRVM+CiAgICAgICAgIDxKQVZBRE9DIC8+CiAgICAgICAgIDxTT1VSQ0VTPgotICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9zcmMvbHVjZW5lLWhpZ2hsaWdodGVyLTQuMTAuNC5qYXIhLyIgLz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvc3JjL2x1Y2VuZS1oaWdobGlnaHRlci01LjUuMi5qYXIhLyIgLz4KICAgICAgICAgPC9TT1VSQ0VTPgogICAgICAgPC9saWJyYXJ5PgogICAgIDwvb3JkZXJFbnRyeT4KICAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUtbGlicmFyeSI+Ci0gICAgICA8bGlicmFyeSBuYW1lPSJsdWNlbmUtbWVtb3J5LTQuMTAuNC5qYXIiPgorICAgICAgPGxpYnJhcnkgbmFtZT0ibHVjZW5lLW1lbW9yeS01LjUuMi5qYXIiPgogICAgICAgICA8Q0xBU1NFUz4KLSAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvbHVjZW5lLW1lbW9yeS00LjEwLjQuamFyIS8iIC8+CisgICAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly8kTU9EVUxFX0RJUiQvZXh0L2x1Y2VuZS1tZW1vcnktNS41LjIuamFyIS8iIC8+CiAgICAgICAgIDwvQ0xBU1NFUz4KICAgICAgICAgPEpBVkFET0MgLz4KICAgICAgICAgPFNPVVJDRVM+Ci0gICAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly8kTU9EVUxFX0RJUiQvZXh0L3NyYy9sdWNlbmUtbWVtb3J5LTQuMTAuNC5qYXIhLyIgLz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvc3JjL2x1Y2VuZS1tZW1vcnktNS41LjIuamFyIS8iIC8+CiAgICAgICAgIDwvU09VUkNFUz4KICAgICAgIDwvbGlicmFyeT4KICAgICA8L29yZGVyRW50cnk+CiAgICAgPG9yZGVyRW50cnkgdHlwZT0ibW9kdWxlLWxpYnJhcnkiPgotICAgICAgPGxpYnJhcnkgbmFtZT0ibHVjZW5lLXF1ZXJpZXMtNC4xMC40LmphciI+CisgICAgICA8bGlicmFyeSBuYW1lPSJsdWNlbmUtcXVlcmllcy01LjUuMi5qYXIiPgogICAgICAgICA8Q0xBU1NFUz4KLSAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvbHVjZW5lLXF1ZXJpZXMtNC4xMC40LmphciEvIiAvPgorICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9sdWNlbmUtcXVlcmllcy01LjUuMi5qYXIhLyIgLz4KICAgICAgICAgPC9DTEFTU0VTPgogICAgICAgICA8SkFWQURPQyAvPgogICAgICAgICA8U09VUkNFUz4KLSAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvc3JjL2x1Y2VuZS1xdWVyaWVzLTQuMTAuNC5qYXIhLyIgLz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvc3JjL2x1Y2VuZS1xdWVyaWVzLTUuNS4yLmphciEvIiAvPgogICAgICAgICA8L1NPVVJDRVM+CiAgICAgICA8L2xpYnJhcnk+CiAgICAgPC9vcmRlckVudHJ5PgogICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZS1saWJyYXJ5Ij4KLSAgICAgIDxsaWJyYXJ5IG5hbWU9Imx1Y2VuZS1xdWVyeXBhcnNlci00LjEwLjQuamFyIj4KKyAgICAgIDxsaWJyYXJ5IG5hbWU9Imx1Y2VuZS1xdWVyeXBhcnNlci01LjUuMi5qYXIiPgogICAgICAgICA8Q0xBU1NFUz4KLSAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvbHVjZW5lLXF1ZXJ5cGFyc2VyLTQuMTAuNC5qYXIhLyIgLz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvbHVjZW5lLXF1ZXJ5cGFyc2VyLTUuNS4yLmphciEvIiAvPgogICAgICAgICA8L0NMQVNTRVM+CiAgICAgICAgIDxKQVZBRE9DIC8+CiAgICAgICAgIDxTT1VSQ0VTPgotICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9zcmMvbHVjZW5lLXF1ZXJ5cGFyc2VyLTQuMTAuNC5qYXIhLyIgLz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC9leHQvc3JjL2x1Y2VuZS1xdWVyeXBhcnNlci01LjUuMi5qYXIhLyIgLz4KICAgICAgICAgPC9TT1VSQ0VTPgogICAgICAgPC9saWJyYXJ5PgogICAgIDwvb3JkZXJFbnRyeT4KICAgICA8b3JkZXJFbnRyeSB0eXBlPSJtb2R1bGUtbGlicmFyeSI+Ci0gICAgICA8bGlicmFyeSBuYW1lPSJsdWNlbmUtc2FuZGJveC00LjEwLjQuamFyIj4KKyAgICAgIDxsaWJyYXJ5IG5hbWU9Imx1Y2VuZS1zYW5kYm94LTUuNS4yLmphciI+CiAgICAgICAgIDxDTEFTU0VTPgotICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9sdWNlbmUtc2FuZGJveC00LjEwLjQuamFyIS8iIC8+CisgICAgICAgICAgPHJvb3QgdXJsPSJqYXI6Ly8kTU9EVUxFX0RJUiQvZXh0L2x1Y2VuZS1zYW5kYm94LTUuNS4yLmphciEvIiAvPgogICAgICAgICA8L0NMQVNTRVM+CiAgICAgICAgIDxKQVZBRE9DIC8+CiAgICAgICAgIDxTT1VSQ0VTPgotICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9zcmMvbHVjZW5lLXNhbmRib3gtNC4xMC40LmphciEvIiAvPgorICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkL2V4dC9zcmMvbHVjZW5lLXNhbmRib3gtNS41LjIuamFyIS8iIC8+CiAgICAgICAgIDwvU09VUkNFUz4KICAgICAgIDwvbGlicmFyeT4KICAgICA8L29yZGVyRW50cnk+CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3NlcnZpY2UvTHVjZW5lUmVwb0luZGV4U3RvcmUuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvc2VydmljZS9MdWNlbmVSZXBvSW5kZXhTdG9yZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmN2QwODgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3NlcnZpY2UvTHVjZW5lUmVwb0luZGV4U3RvcmUuamF2YQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTcgZ2l0YmxpdC5jb20uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZ2l0YmxpdC5zZXJ2aWNlOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgY29tLmdpdGJsaXQudXRpbHMuTHVjZW5lSW5kZXhTdG9yZTsKKworLyoqCisgKiBAYXV0aG9yIEZsb3JpYW4gWnNjaG9ja2UKKyAqCisgKiBAc2luY2UgMS45LjAKKyAqLworY2xhc3MgTHVjZW5lUmVwb0luZGV4U3RvcmUgZXh0ZW5kcyBMdWNlbmVJbmRleFN0b3JlCit7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTFVDRU5FX0RJUiA9ICJsdWNlbmUiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GX0ZJTEUgPSAiZ2JfbHVjZW5lLmNvbmYiOworCisKKwkvKioKKwkgKiBAcGFyYW0gcmVwb3NpdG9yeUZvbGRlcgorCSAqIAkJCVRoZSBkaXJlY3Rvcnkgb2YgdGhlIHJlcG9zaXRvcnkgZm9yIHRoaXMgaW5kZXgKKwkgKiBAcGFyYW0gaW5kZXhWZXJzaW9uCisJICogCQkJVmVyc2lvbiBvZiB0aGUgaW5kZXggZGVmaW5pdGlvbgorCSAqLworCXB1YmxpYyBMdWNlbmVSZXBvSW5kZXhTdG9yZShGaWxlIHJlcG9zaXRvcnlGb2xkZXIsIGludCBpbmRleFZlcnNpb24pIHsKKwkJc3VwZXIobmV3IEZpbGUocmVwb3NpdG9yeUZvbGRlciwgTFVDRU5FX0RJUiksIGluZGV4VmVyc2lvbik7CisJfQorCisKKwkvKioKKwkgKiBHZXQgdGhlIGluZGV4IGNvbmZpZyBGaWxlLgorCSAqCisJICogQHJldHVybglUaGUgaW5kZXggY29uZmlnIEZpbGUKKwkgKi8KKwlwdWJsaWMgRmlsZSBnZXRDb25maWdGaWxlKCkgeworCQlyZXR1cm4gbmV3IEZpbGUodGhpcy5pbmRleEZvbGRlciwgQ09ORl9GSUxFKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvc2VydmljZS9MdWNlbmVTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3NlcnZpY2UvTHVjZW5lU2VydmljZS5qYXZhCmluZGV4IDA5N2EzOWIuLjkwNmEwYjUgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvc2VydmljZS9MdWNlbmVTZXJ2aWNlLmphdmEKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC9zZXJ2aWNlL0x1Y2VuZVNlcnZpY2UuamF2YQpAQCAtNjUsNyArNjUsNiBAQAogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnNlYXJjaC5oaWdobGlnaHQuU2ltcGxlU3BhbkZyYWdtZW50ZXI7DQogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnN0b3JlLkRpcmVjdG9yeTsNCiBpbXBvcnQgb3JnLmFwYWNoZS5sdWNlbmUuc3RvcmUuRlNEaXJlY3Rvcnk7DQotaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnV0aWwuVmVyc2lvbjsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZFbnRyeS5DaGFuZ2VUeXBlOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7DQogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkZpbGVNb2RlOw0KQEAgLTExOCwxNSArMTE3LDkgQEAKIAlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklFTERfREFURSA9ICJkYXRlIjsNCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJRUxEX1RBRyA9ICJ0YWciOw0KIA0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORl9GSUxFID0gImx1Y2VuZS5jb25mIjsNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExVQ0VORV9ESVIgPSAibHVjZW5lIjsNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZfSU5ERVggPSAiaW5kZXgiOw0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORl9WRVJTSU9OID0gInZlcnNpb24iOw0KIAlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORl9BTElBUyA9ICJhbGlhc2VzIjsNCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZfQlJBTkNIID0gImJyYW5jaGVzIjsNCiANCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgVmVyc2lvbiBMVUNFTkVfVkVSU0lPTiA9IFZlcnNpb24uTFVDRU5FXzRfMTBfMDsNCi0NCiAJcHJpdmF0ZSBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoTHVjZW5lU2VydmljZS5jbGFzcyk7DQogDQogCXByaXZhdGUgZmluYWwgSVN0b3JlZFNldHRpbmdzIHN0b3JlZFNldHRpbmdzOw0KQEAgLTI2Nyw3ICsyNjAsNyBAQAogCQkvLyBjbG9zZSBhbGwgd3JpdGVycw0KIAkJZm9yIChTdHJpbmcgd3JpdGVyIDogd3JpdGVycy5rZXlTZXQoKSkgew0KIAkJCXRyeSB7DQotCQkJCXdyaXRlcnMuZ2V0KHdyaXRlcikuY2xvc2UodHJ1ZSk7DQorCQkJCXdyaXRlcnMuZ2V0KHdyaXRlcikuY2xvc2UoKTsNCiAJCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgew0KIAkJCQlsb2dnZXIuZXJyb3IoIkZhaWxlZCB0byBjbG9zZSBMdWNlbmUgd3JpdGVyIGZvciAiICsgd3JpdGVyLCB0KTsNCiAJCQl9DQpAQCAtMjkzLDI2ICsyODYsMTMgQEAKIAkgKiBAcmV0dXJuIHRydWUsIGlmIHN1Y2Nlc3NmdWwNCiAJICovDQogCXB1YmxpYyBib29sZWFuIGRlbGV0ZUluZGV4KFN0cmluZyByZXBvc2l0b3J5TmFtZSkgew0KLQkJdHJ5IHsNCi0JCQkvLyBjbG9zZSBhbnkgb3BlbiB3cml0ZXIvc2VhcmNoZXINCi0JCQljbG9zZShyZXBvc2l0b3J5TmFtZSk7DQorCQkvLyBjbG9zZSBhbnkgb3BlbiB3cml0ZXIvc2VhcmNoZXINCisJCWNsb3NlKHJlcG9zaXRvcnlOYW1lKTsNCiANCi0JCQkvLyBkZWxldGUgdGhlIGluZGV4IGZvbGRlcg0KLQkJCUZpbGUgcmVwb3NpdG9yeUZvbGRlciA9IEZpbGVLZXkucmVzb2x2ZShuZXcgRmlsZShyZXBvc2l0b3JpZXNGb2xkZXIsIHJlcG9zaXRvcnlOYW1lKSwgRlMuREVURUNURUQpOw0KLQkJCUZpbGUgbHVjZW5lSW5kZXggPSBuZXcgRmlsZShyZXBvc2l0b3J5Rm9sZGVyLCBMVUNFTkVfRElSKTsNCi0JCQlpZiAobHVjZW5lSW5kZXguZXhpc3RzKCkpIHsNCi0JCQkJb3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlscy5kZWxldGUobHVjZW5lSW5kZXgsDQotCQkJCQkJb3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlscy5SRUNVUlNJVkUpOw0KLQkJCX0NCi0JCQkvLyBkZWxldGUgdGhlIGNvbmZpZyBmaWxlDQotCQkJRmlsZSBsdWNlbmVDb25maWcgPSBuZXcgRmlsZShyZXBvc2l0b3J5Rm9sZGVyLCBDT05GX0ZJTEUpOw0KLQkJCWlmIChsdWNlbmVDb25maWcuZXhpc3RzKCkpIHsNCi0JCQkJbHVjZW5lQ29uZmlnLmRlbGV0ZSgpOw0KLQkJCX0NCi0JCQlyZXR1cm4gdHJ1ZTsNCi0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCi0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsNCi0JCX0NCisJCS8vIGRlbGV0ZSB0aGUgaW5kZXggZm9sZGVyDQorCQlGaWxlIHJlcG9zaXRvcnlGb2xkZXIgPSBGaWxlS2V5LnJlc29sdmUobmV3IEZpbGUocmVwb3NpdG9yaWVzRm9sZGVyLCByZXBvc2l0b3J5TmFtZSksIEZTLkRFVEVDVEVEKTsNCisJCUx1Y2VuZVJlcG9JbmRleFN0b3JlIGx1Y2VuZUluZGV4ID0gbmV3IEx1Y2VuZVJlcG9JbmRleFN0b3JlKHJlcG9zaXRvcnlGb2xkZXIsIElOREVYX1ZFUlNJT04pOw0KKwkJcmV0dXJuIGx1Y2VuZUluZGV4LmRlbGV0ZSgpOw0KIAl9DQogDQogCS8qKg0KQEAgLTM4NiwyOSArMzY2LDIwIEBACiAJICogQHJldHVybiBhIGNvbmZpZyBvYmplY3QNCiAJICovDQogCXByaXZhdGUgRmlsZUJhc2VkQ29uZmlnIGdldENvbmZpZyhSZXBvc2l0b3J5IHJlcG9zaXRvcnkpIHsNCi0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKHJlcG9zaXRvcnkuZ2V0RGlyZWN0b3J5KCksIENPTkZfRklMRSk7DQotCQlGaWxlQmFzZWRDb25maWcgY29uZmlnID0gbmV3IEZpbGVCYXNlZENvbmZpZyhmaWxlLCBGUy5kZXRlY3QoKSk7DQorCQlMdWNlbmVSZXBvSW5kZXhTdG9yZSBsdWNlbmVJbmRleCA9IG5ldyBMdWNlbmVSZXBvSW5kZXhTdG9yZShyZXBvc2l0b3J5LmdldERpcmVjdG9yeSgpLCBJTkRFWF9WRVJTSU9OKTsNCisJCUZpbGVCYXNlZENvbmZpZyBjb25maWcgPSBuZXcgRmlsZUJhc2VkQ29uZmlnKGx1Y2VuZUluZGV4LmdldENvbmZpZ0ZpbGUoKSwgRlMuZGV0ZWN0KCkpOw0KIAkJcmV0dXJuIGNvbmZpZzsNCiAJfQ0KIA0KIAkvKioNCi0JICogUmVhZHMgdGhlIEx1Y2VuZSBjb25maWcgZmlsZSBmb3IgdGhlIHJlcG9zaXRvcnkgdG8gY2hlY2sgdGhlIGluZGV4DQotCSAqIHZlcnNpb24uIElmIHRoZSBpbmRleCB2ZXJzaW9uIGlzIGRpZmZlcmVudCwgdGhlbiByZWJ1aWxkIHRoZSByZXBvc2l0b3J5DQotCSAqIGluZGV4Lg0KKwkgKiBDaGVja3MgaWYgYW4gaW5kZXggZXhpc3RzIGZvciB0aGUgcmVwb3NpdG9yeSwgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgNCisJICogSU5ERVhfVkVSU0lPTiBhbmQgdGhlIEx1Y2VuZSB2ZXJzaW9uLg0KIAkgKg0KIAkgKiBAcGFyYW0gcmVwb3NpdG9yeQ0KLQkgKiBAcmV0dXJuIHRydWUgb2YgdGhlIG9uLWRpc2sgaW5kZXggZm9ybWF0IGlzIGRpZmZlcmVudCB0aGFuIElOREVYX1ZFUlNJT04NCisJICogQHJldHVybiB0cnVlIGlmIG5vIGluZGV4IGlzIGZvdW5kIGZvciB0aGUgcmVwb3NpdG9yeSwgZmFsc2Ugb3RoZXJ3aXNlLg0KIAkgKi8NCiAJcHJpdmF0ZSBib29sZWFuIHNob3VsZFJlaW5kZXgoUmVwb3NpdG9yeSByZXBvc2l0b3J5KSB7DQotCQl0cnkgew0KLQkJCUZpbGVCYXNlZENvbmZpZyBjb25maWcgPSBnZXRDb25maWcocmVwb3NpdG9yeSk7DQotCQkJY29uZmlnLmxvYWQoKTsNCi0JCQlpbnQgaW5kZXhWZXJzaW9uID0gY29uZmlnLmdldEludChDT05GX0lOREVYLCBDT05GX1ZFUlNJT04sIDApOw0KLQkJCS8vIHJlaW5kZXggaWYgdmVyc2lvbnMgZG8gbm90IG1hdGNoDQotCQkJcmV0dXJuIGluZGV4VmVyc2lvbiAhPSBJTkRFWF9WRVJTSU9OOw0KLQkJfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsNCi0JCX0NCi0JCXJldHVybiB0cnVlOw0KKwkJcmV0dXJuICEgKG5ldyBMdWNlbmVSZXBvSW5kZXhTdG9yZShyZXBvc2l0b3J5LmdldERpcmVjdG9yeSgpLCBJTkRFWF9WRVJTSU9OKS5oYXNJbmRleCgpKTsNCiAJfQ0KIA0KIA0KQEAgLTYxOCw3ICs1ODksNiBAQAogCQkJcmVhZGVyLmNsb3NlKCk7DQogDQogCQkJLy8gY29tbWl0IGFsbCBjaGFuZ2VzIGFuZCByZXNldCB0aGUgc2VhcmNoZXINCi0JCQljb25maWcuc2V0SW50KENPTkZfSU5ERVgsIG51bGwsIENPTkZfVkVSU0lPTiwgSU5ERVhfVkVSU0lPTik7DQogCQkJY29uZmlnLnNhdmUoKTsNCiAJCQl3cml0ZXIuY29tbWl0KCk7DQogCQkJcmVzZXRJbmRleFNlYXJjaGVyKG1vZGVsLm5hbWUpOw0KQEAgLTcyMSwxMCArNjkxLDkgQEAKIAkJU3RyaW5nIHBhdHRlcm4gPSBNZXNzYWdlRm9ybWF0LmZvcm1hdCgiezB9Oid7JzB9IEFORCB7MX06XCIneycxJ30nXCIgQU5EIHsyfTpcIid7JzInfSdcIiIsIEZJRUxEX09CSkVDVF9UWVBFLCBGSUVMRF9CUkFOQ0gsIEZJRUxEX1BBVEgpOw0KIAkJU3RyaW5nIHEgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChwYXR0ZXJuLCBTZWFyY2hPYmplY3RUeXBlLmJsb2IubmFtZSgpLCBicmFuY2gsIHBhdGgpOw0KIA0KLQkJQm9vbGVhblF1ZXJ5IHF1ZXJ5ID0gbmV3IEJvb2xlYW5RdWVyeSgpOw0KLQkJU3RhbmRhcmRBbmFseXplciBhbmFseXplciA9IG5ldyBTdGFuZGFyZEFuYWx5emVyKExVQ0VORV9WRVJTSU9OKTsNCi0JCVF1ZXJ5UGFyc2VyIHFwID0gbmV3IFF1ZXJ5UGFyc2VyKExVQ0VORV9WRVJTSU9OLCBGSUVMRF9TVU1NQVJZLCBhbmFseXplcik7DQotCQlxdWVyeS5hZGQocXAucGFyc2UocSksIE9jY3VyLk1VU1QpOw0KKwkJU3RhbmRhcmRBbmFseXplciBhbmFseXplciA9IG5ldyBTdGFuZGFyZEFuYWx5emVyKCk7DQorCQlRdWVyeVBhcnNlciBxcCA9IG5ldyBRdWVyeVBhcnNlcihGSUVMRF9TVU1NQVJZLCBhbmFseXplcik7DQorCQlCb29sZWFuUXVlcnkgcXVlcnkgPSBuZXcgQm9vbGVhblF1ZXJ5LkJ1aWxkZXIoKS5hZGQocXAucGFyc2UocSksIE9jY3VyLk1VU1QpLmJ1aWxkKCk7DQogDQogCQlJbmRleFdyaXRlciB3cml0ZXIgPSBnZXRJbmRleFdyaXRlcihyZXBvc2l0b3J5TmFtZSk7DQogCQlpbnQgbnVtRG9jc0JlZm9yZSA9IHdyaXRlci5udW1Eb2NzKCk7DQpAQCAtODQ4LDcgKzgxNyw2IEBACiAJCQkJfQ0KIA0KIAkJCQkvLyB1cGRhdGUgdGhlIGNvbmZpZw0KLQkJCQljb25maWcuc2V0SW50KENPTkZfSU5ERVgsIG51bGwsIENPTkZfVkVSU0lPTiwgSU5ERVhfVkVSU0lPTik7DQogCQkJCWNvbmZpZy5zZXRTdHJpbmcoQ09ORl9BTElBUywgbnVsbCwga2V5TmFtZSwgYnJhbmNoTmFtZSk7DQogCQkJCWNvbmZpZy5zZXRTdHJpbmcoQ09ORl9CUkFOQ0gsIG51bGwsIGtleU5hbWUsIGJyYW5jaC5nZXRPYmplY3RJZCgpLmdldE5hbWUoKSk7DQogCQkJCWNvbmZpZy5zYXZlKCk7DQpAQCAtOTY2LDE2ICs5MzQsMTMgQEAKIAkgKi8NCiAJcHJpdmF0ZSBJbmRleFdyaXRlciBnZXRJbmRleFdyaXRlcihTdHJpbmcgcmVwb3NpdG9yeSkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCiAJCUluZGV4V3JpdGVyIGluZGV4V3JpdGVyID0gd3JpdGVycy5nZXQocmVwb3NpdG9yeSk7DQotCQlGaWxlIHJlcG9zaXRvcnlGb2xkZXIgPSBGaWxlS2V5LnJlc29sdmUobmV3IEZpbGUocmVwb3NpdG9yaWVzRm9sZGVyLCByZXBvc2l0b3J5KSwgRlMuREVURUNURUQpOw0KLQkJRmlsZSBpbmRleEZvbGRlciA9IG5ldyBGaWxlKHJlcG9zaXRvcnlGb2xkZXIsIExVQ0VORV9ESVIpOw0KLQkJRGlyZWN0b3J5IGRpcmVjdG9yeSA9IEZTRGlyZWN0b3J5Lm9wZW4oaW5kZXhGb2xkZXIpOw0KLQ0KIAkJaWYgKGluZGV4V3JpdGVyID09IG51bGwpIHsNCi0JCQlpZiAoIWluZGV4Rm9sZGVyLmV4aXN0cygpKSB7DQotCQkJCWluZGV4Rm9sZGVyLm1rZGlycygpOw0KLQkJCX0NCi0JCQlTdGFuZGFyZEFuYWx5emVyIGFuYWx5emVyID0gbmV3IFN0YW5kYXJkQW5hbHl6ZXIoTFVDRU5FX1ZFUlNJT04pOw0KLQkJCUluZGV4V3JpdGVyQ29uZmlnIGNvbmZpZyA9IG5ldyBJbmRleFdyaXRlckNvbmZpZyhMVUNFTkVfVkVSU0lPTiwgYW5hbHl6ZXIpOw0KKwkJCUZpbGUgcmVwb3NpdG9yeUZvbGRlciA9IEZpbGVLZXkucmVzb2x2ZShuZXcgRmlsZShyZXBvc2l0b3JpZXNGb2xkZXIsIHJlcG9zaXRvcnkpLCBGUy5ERVRFQ1RFRCk7DQorCQkJTHVjZW5lUmVwb0luZGV4U3RvcmUgaW5kZXhTdG9yZSA9IG5ldyBMdWNlbmVSZXBvSW5kZXhTdG9yZShyZXBvc2l0b3J5Rm9sZGVyLCBJTkRFWF9WRVJTSU9OKTsNCisJCQlpbmRleFN0b3JlLmNyZWF0ZSgpOw0KKwkJCURpcmVjdG9yeSBkaXJlY3RvcnkgPSBGU0RpcmVjdG9yeS5vcGVuKGluZGV4U3RvcmUuZ2V0UGF0aCgpKTsNCisJCQlTdGFuZGFyZEFuYWx5emVyIGFuYWx5emVyID0gbmV3IFN0YW5kYXJkQW5hbHl6ZXIoKTsNCisJCQlJbmRleFdyaXRlckNvbmZpZyBjb25maWcgPSBuZXcgSW5kZXhXcml0ZXJDb25maWcoYW5hbHl6ZXIpOw0KIAkJCWNvbmZpZy5zZXRPcGVuTW9kZShPcGVuTW9kZS5DUkVBVEVfT1JfQVBQRU5EKTsNCiAJCQlpbmRleFdyaXRlciA9IG5ldyBJbmRleFdyaXRlcihkaXJlY3RvcnksIGNvbmZpZyk7DQogCQkJd3JpdGVycy5wdXQocmVwb3NpdG9yeSwgaW5kZXhXcml0ZXIpOw0KQEAgLTEwMjgsMTggKzk5MywxOCBAQAogCQkJcmV0dXJuIG51bGw7DQogCQl9DQogCQlTZXQ8U2VhcmNoUmVzdWx0PiByZXN1bHRzID0gbmV3IExpbmtlZEhhc2hTZXQ8U2VhcmNoUmVzdWx0PigpOw0KLQkJU3RhbmRhcmRBbmFseXplciBhbmFseXplciA9IG5ldyBTdGFuZGFyZEFuYWx5emVyKExVQ0VORV9WRVJTSU9OKTsNCisJCVN0YW5kYXJkQW5hbHl6ZXIgYW5hbHl6ZXIgPSBuZXcgU3RhbmRhcmRBbmFseXplcigpOw0KIAkJdHJ5IHsNCiAJCQkvLyBkZWZhdWx0IHNlYXJjaCBjaGVja3Mgc3VtbWFyeSBhbmQgY29udGVudA0KLQkJCUJvb2xlYW5RdWVyeSBxdWVyeSA9IG5ldyBCb29sZWFuUXVlcnkoKTsNCisJCQlCb29sZWFuUXVlcnkuQnVpbGRlciBibGRyID0gbmV3IEJvb2xlYW5RdWVyeS5CdWlsZGVyKCk7DQogCQkJUXVlcnlQYXJzZXIgcXA7DQotCQkJcXAgPSBuZXcgUXVlcnlQYXJzZXIoTFVDRU5FX1ZFUlNJT04sIEZJRUxEX1NVTU1BUlksIGFuYWx5emVyKTsNCisJCQlxcCA9IG5ldyBRdWVyeVBhcnNlcihGSUVMRF9TVU1NQVJZLCBhbmFseXplcik7DQogCQkJcXAuc2V0QWxsb3dMZWFkaW5nV2lsZGNhcmQodHJ1ZSk7DQotCQkJcXVlcnkuYWRkKHFwLnBhcnNlKHRleHQpLCBPY2N1ci5TSE9VTEQpOw0KKwkJCWJsZHIuYWRkKHFwLnBhcnNlKHRleHQpLCBPY2N1ci5TSE9VTEQpOw0KIA0KLQkJCXFwID0gbmV3IFF1ZXJ5UGFyc2VyKExVQ0VORV9WRVJTSU9OLCBGSUVMRF9DT05URU5ULCBhbmFseXplcik7DQorCQkJcXAgPSBuZXcgUXVlcnlQYXJzZXIoRklFTERfQ09OVEVOVCwgYW5hbHl6ZXIpOw0KIAkJCXFwLnNldEFsbG93TGVhZGluZ1dpbGRjYXJkKHRydWUpOw0KLQkJCXF1ZXJ5LmFkZChxcC5wYXJzZSh0ZXh0KSwgT2NjdXIuU0hPVUxEKTsNCisJCQlibGRyLmFkZChxcC5wYXJzZSh0ZXh0KSwgT2NjdXIuU0hPVUxEKTsNCiANCiAJCQlJbmRleFNlYXJjaGVyIHNlYXJjaGVyOw0KIAkJCWlmIChyZXBvc2l0b3JpZXMubGVuZ3RoID09IDEpIHsNCkBAIC0xMDU3LDEwICsxMDIyLDExIEBACiAJCQkJc2VhcmNoZXIgPSBuZXcgSW5kZXhTZWFyY2hlcihyZWFkZXIpOw0KIAkJCX0NCiANCisJCQlCb29sZWFuUXVlcnkgcXVlcnkgPSBibGRyLmJ1aWxkKCk7DQogCQkJUXVlcnkgcmV3cml0dGVuUXVlcnkgPSBzZWFyY2hlci5yZXdyaXRlKHF1ZXJ5KTsNCiAJCQlsb2dnZXIuZGVidWcocmV3cml0dGVuUXVlcnkudG9TdHJpbmcoKSk7DQogDQotCQkJVG9wU2NvcmVEb2NDb2xsZWN0b3IgY29sbGVjdG9yID0gVG9wU2NvcmVEb2NDb2xsZWN0b3IuY3JlYXRlKDUwMDAsIHRydWUpOw0KKwkJCVRvcFNjb3JlRG9jQ29sbGVjdG9yIGNvbGxlY3RvciA9IFRvcFNjb3JlRG9jQ29sbGVjdG9yLmNyZWF0ZSg1MDAwKTsNCiAJCQlzZWFyY2hlci5zZWFyY2gocmV3cml0dGVuUXVlcnksIGNvbGxlY3Rvcik7DQogCQkJaW50IG9mZnNldCA9IE1hdGgubWF4KDAsIChwYWdlIC0gMSkgKiBwYWdlU2l6ZSk7DQogCQkJU2NvcmVEb2NbXSBoaXRzID0gY29sbGVjdG9yLnRvcERvY3Mob2Zmc2V0LCBwYWdlU2l6ZSkuc2NvcmVEb2NzOw0KQEAgLTEyMjUsNyArMTE5MSw3IEBACiAJICovDQogCXByaXZhdGUgY2xhc3MgTXVsdGlTb3VyY2VSZWFkZXIgZXh0ZW5kcyBNdWx0aVJlYWRlciB7DQogDQotCQlNdWx0aVNvdXJjZVJlYWRlcihJbmRleFJlYWRlciBbXSByZWFkZXJzKSB7DQorCQlNdWx0aVNvdXJjZVJlYWRlcihJbmRleFJlYWRlciBbXSByZWFkZXJzKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KIAkJCXN1cGVyKHJlYWRlcnMsIGZhbHNlKTsNCiAJCX0NCiANCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3RpY2tldHMvQnJhbmNoVGlja2V0U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL0JyYW5jaFRpY2tldFNlcnZpY2UuamF2YQppbmRleCA3YmVmNDM1Li44NDMwYzU0IDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3RpY2tldHMvQnJhbmNoVGlja2V0U2VydmljZS5qYXZhCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvdGlja2V0cy9CcmFuY2hUaWNrZXRTZXJ2aWNlLmphdmEKQEAgLTExMCw5ICsxMTAsOCBAQAogCX0KIAogCUBPdmVycmlkZQotCXB1YmxpYyBCcmFuY2hUaWNrZXRTZXJ2aWNlIHN0YXJ0KCkgeworCXB1YmxpYyB2b2lkIG9uU3RhcnQoKSB7CiAJCWxvZy5pbmZvKCJ7fSBzdGFydGVkIiwgZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpOwotCQlyZXR1cm4gdGhpczsKIAl9CiAKIAlAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvdGlja2V0cy9GaWxlVGlja2V0U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL0ZpbGVUaWNrZXRTZXJ2aWNlLmphdmEKaW5kZXggMWU4MmYwZC4uMDU2NzA0NiAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL0ZpbGVUaWNrZXRTZXJ2aWNlLmphdmEKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL0ZpbGVUaWNrZXRTZXJ2aWNlLmphdmEKQEAgLTgwLDkgKzgwLDggQEAKIAl9CiAKIAlAT3ZlcnJpZGUKLQlwdWJsaWMgRmlsZVRpY2tldFNlcnZpY2Ugc3RhcnQoKSB7CisJcHVibGljIHZvaWQgb25TdGFydCgpIHsKIAkJbG9nLmluZm8oInt9IHN0YXJ0ZWQiLCBnZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7Ci0JCXJldHVybiB0aGlzOwogCX0KIAogCUBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL0lUaWNrZXRTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3RpY2tldHMvSVRpY2tldFNlcnZpY2UuamF2YQppbmRleCAyMGI2NTA1Li4zMjUyYTYwIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3RpY2tldHMvSVRpY2tldFNlcnZpY2UuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3RpY2tldHMvSVRpY2tldFNlcnZpY2UuamF2YQpAQCAtMTgxLDcgKzE4MSwyNCBAQAogCSAqIEBzaW5jZSAxLjQuMAogCSAqLwogCUBPdmVycmlkZQotCXB1YmxpYyBhYnN0cmFjdCBJVGlja2V0U2VydmljZSBzdGFydCgpOworCXB1YmxpYyBmaW5hbCBJVGlja2V0U2VydmljZSBzdGFydCgpIHsKKwkJb25TdGFydCgpOworCQlpZiAoc2hvdWxkUmVpbmRleCgpKSB7CisJCQlsb2cuaW5mbygiUmUtaW5kZXhpbmcgYWxsIHRpY2tldHMuLi4iKTsKKy8vCQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkJCXJlaW5kZXgoKTsKKy8vCQkJZmxvYXQgZHVyYXRpb24gPSAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWUpIC8gMTAwMGY7CisvLwkJCWxvZy5pbmZvKCJCdWlsdCBMdWNlbmUgaW5kZXggb3ZlciBhbGwgdGlja2V0cyBpbiB7fSBzZWNzIiwgZHVyYXRpb24pOworCQl9CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgorCSAqIFN0YXJ0IHRoZSBzcGVjaWZpYyB0aWNrZXQgc2VydmljZSBpbXBsZW1lbnRhdGlvbi4KKwkgKgorCSAqIEBzaW5jZSAxLjkuMAorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RhcnQoKTsKIAogCS8qKgogCSAqIFN0b3AgdGhlIHNlcnZpY2UuCkBAIC0xOTcsNiArMjE0LDEyIEBACiAJfQogCiAJLyoqCisJICogQ2xvc2VzIGFueSBvcGVuIHJlc291cmNlcyB1c2VkIGJ5IHRoaXMgc2VydmljZS4KKwkgKiBAc2luY2UgMS40LjAKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBjbG9zZSgpOworCisJLyoqCiAJICogQ3JlYXRlcyBhIHRpY2tldCBub3RpZmllci4gIFRoZSB0aWNrZXQgbm90aWZpZXIgaXMgbm90IHRocmVhZC1zYWZlIQogCSAqIEBzaW5jZSAxLjQuMAogCSAqLwpAQCAtMjc0LDEyICsyOTcsNiBAQAogCX0KIAogCS8qKgotCSAqIENsb3NlcyBhbnkgb3BlbiByZXNvdXJjZXMgdXNlZCBieSB0aGlzIHNlcnZpY2UuCi0JICogQHNpbmNlIDEuNC4wCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY2xvc2UoKTsKLQotCS8qKgogCSAqIFJlc2V0IGFsbCBjYWNoZXMgaW4gdGhlIHNlcnZpY2UuCiAJICogQHNpbmNlIDEuNC4wCiAJICovCkBAIC0xMzQzLDYgKzEzNjAsMTggQEAKIAkJcmV0dXJuIGluZGV4ZXIucXVlcnlGb3IocXVlcnksIHBhZ2UsIHBhZ2VTaXplLCBzb3J0QnksIGRlc2NlbmRpbmcpOwogCX0KIAorCisJLyoqCisJICogQ2hlY2tzIHRpY2tldHMgc2hvdWxkIGdldCByZS1pbmRleGVkLgorCSAqCisJICogQHJldHVybiB0cnVlIGlmIHRpY2tldHMgc2hvdWxkIGdldCByZS1pbmRleGVkLCBmYWxzZSBvdGhlcndpc2UuCisJICovCisJcHJpdmF0ZSBib29sZWFuIHNob3VsZFJlaW5kZXgoKQorCXsKKwkJcmV0dXJuIGluZGV4ZXIuc2hvdWxkUmVpbmRleCgpOworCX0KKworCiAJLyoqCiAJICogRGVzdHJveXMgYW4gZXhpc3RpbmcgaW5kZXggYW5kIHJlaW5kZXhlcyBhbGwgdGlja2V0cy4KIAkgKiBUaGlzIG9wZXJhdGlvbiBtYXkgYmUgZXhwZW5zaXZlIGFuZCB0aW1lLWNvbnN1bWluZy4KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvdGlja2V0cy9OdWxsVGlja2V0U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL051bGxUaWNrZXRTZXJ2aWNlLmphdmEKaW5kZXggMzk0N2I5NC4uMDUwYzY5OSAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL051bGxUaWNrZXRTZXJ2aWNlLmphdmEKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL051bGxUaWNrZXRTZXJ2aWNlLmphdmEKQEAgLTYxLDkgKzYxLDggQEAKIAl9CiAKIAlAT3ZlcnJpZGUKLQlwdWJsaWMgTnVsbFRpY2tldFNlcnZpY2Ugc3RhcnQoKSB7CisJcHVibGljIHZvaWQgb25TdGFydCgpIHsKIAkJbG9nLmluZm8oInt9IHN0YXJ0ZWQiLCBnZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7Ci0JCXJldHVybiB0aGlzOwogCX0KIAogCUBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL1JlZGlzVGlja2V0U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL1JlZGlzVGlja2V0U2VydmljZS5qYXZhCmluZGV4IDBmOWFkMTcuLjRlNjMyMzEgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvdGlja2V0cy9SZWRpc1RpY2tldFNlcnZpY2UuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3RpY2tldHMvUmVkaXNUaWNrZXRTZXJ2aWNlLmphdmEKQEAgLTgzLDEyICs4MywxMSBAQAogCX0KIAogCUBPdmVycmlkZQotCXB1YmxpYyBSZWRpc1RpY2tldFNlcnZpY2Ugc3RhcnQoKSB7CisJcHVibGljIHZvaWQgb25TdGFydCgpIHsKIAkJbG9nLmluZm8oInt9IHN0YXJ0ZWQiLCBnZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7CiAJCWlmICghaXNSZWFkeSgpKSB7CiAJCQlsb2cud2Fybigie30gaXMgbm90IHJlYWR5ISIsIGdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpKTsKIAkJfQotCQlyZXR1cm4gdGhpczsKIAl9CiAKIAlAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvdGlja2V0cy9UaWNrZXRJbmRleGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3RpY2tldHMvVGlja2V0SW5kZXhlci5qYXZhCmluZGV4IGUyZDUzYWYuLjdjMTY0NDggMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvdGlja2V0cy9UaWNrZXRJbmRleGVyLmphdmEKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC90aWNrZXRzL1RpY2tldEluZGV4ZXIuamF2YQpAQCAtMzEsNiArMzEsOCBAQAogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmRvY3VtZW50LkZpZWxkLlN0b3JlOwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmRvY3VtZW50LkludEZpZWxkOwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmRvY3VtZW50LkxvbmdGaWVsZDsKK2ltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5kb2N1bWVudC5OdW1lcmljRG9jVmFsdWVzRmllbGQ7CitpbXBvcnQgb3JnLmFwYWNoZS5sdWNlbmUuZG9jdW1lbnQuU29ydGVkRG9jVmFsdWVzRmllbGQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5sdWNlbmUuZG9jdW1lbnQuVGV4dEZpZWxkOwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmluZGV4LkRpcmVjdG9yeVJlYWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5pbmRleC5JbmRleFdyaXRlcjsKQEAgLTQ5LDcgKzUxLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5zZWFyY2guVG9wU2NvcmVEb2NDb2xsZWN0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS5sdWNlbmUuc3RvcmUuRGlyZWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnN0b3JlLkZTRGlyZWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnV0aWwuVmVyc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS51dGlsLkJ5dGVzUmVmOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKQEAgLTYwLDcgKzYyLDcgQEAKIGltcG9ydCBjb20uZ2l0YmxpdC5tb2RlbHMuVGlja2V0TW9kZWwuQXR0YWNobWVudDsKIGltcG9ydCBjb20uZ2l0YmxpdC5tb2RlbHMuVGlja2V0TW9kZWwuUGF0Y2hzZXQ7CiBpbXBvcnQgY29tLmdpdGJsaXQubW9kZWxzLlRpY2tldE1vZGVsLlN0YXR1czsKLWltcG9ydCBjb20uZ2l0YmxpdC51dGlscy5GaWxlVXRpbHM7CitpbXBvcnQgY29tLmdpdGJsaXQudXRpbHMuTHVjZW5lSW5kZXhTdG9yZTsKIGltcG9ydCBjb20uZ2l0YmxpdC51dGlscy5TdHJpbmdVdGlsczsKIAogLyoqCkBAIC0xMDgsNiArMTEwLDggQEAKIAkJcHJpb3JpdHkoVHlwZS5JTlQpLAogCQlzZXZlcml0eShUeXBlLklOVCk7CiAKKwkJZmluYWwgc3RhdGljIGludCBJTkRFWF9WRVJTSU9OID0gMjsKKwogCQlmaW5hbCBUeXBlIGZpZWxkVHlwZTsKIAogCQlMdWNlbmUoVHlwZSBmaWVsZFR5cGUpIHsKQEAgLTE2NywxNiArMTcxLDE1IEBACiAKIAlwcml2YXRlIGZpbmFsIExvZ2dlciBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihnZXRDbGFzcygpKTsKIAotCXByaXZhdGUgZmluYWwgVmVyc2lvbiBsdWNlbmVWZXJzaW9uID0gVmVyc2lvbi5MVUNFTkVfNDY7Ci0KLQlwcml2YXRlIGZpbmFsIEZpbGUgbHVjZW5lRGlyOworCXByaXZhdGUgZmluYWwgTHVjZW5lSW5kZXhTdG9yZSBpbmRleFN0b3JlOwogCiAJcHJpdmF0ZSBJbmRleFdyaXRlciB3cml0ZXI7CiAKIAlwcml2YXRlIEluZGV4U2VhcmNoZXIgc2VhcmNoZXI7CiAKIAlwdWJsaWMgVGlja2V0SW5kZXhlcihJUnVudGltZU1hbmFnZXIgcnVudGltZU1hbmFnZXIpIHsKLQkJdGhpcy5sdWNlbmVEaXIgPSBydW50aW1lTWFuYWdlci5nZXRGaWxlT3JGb2xkZXIoS2V5cy50aWNrZXRzLmluZGV4Rm9sZGVyLCAiJHtiYXNlRm9sZGVyfS90aWNrZXRzL2x1Y2VuZSIpOworCQlGaWxlIGx1Y2VuZURpciA9IHJ1bnRpbWVNYW5hZ2VyLmdldEZpbGVPckZvbGRlcihLZXlzLnRpY2tldHMuaW5kZXhGb2xkZXIsICIke2Jhc2VGb2xkZXJ9L3RpY2tldHMvbHVjZW5lIik7CisJCXRoaXMuaW5kZXhTdG9yZSA9IG5ldyBMdWNlbmVJbmRleFN0b3JlKGx1Y2VuZURpciwgTHVjZW5lLklOREVYX1ZFUlNJT04pOwogCX0KIAogCS8qKgpAQCAtMTkyLDcgKzE5NSw3IEBACiAJICovCiAJcHVibGljIHZvaWQgZGVsZXRlQWxsKCkgewogCQljbG9zZSgpOwotCQlGaWxlVXRpbHMuZGVsZXRlKGx1Y2VuZURpcik7CisJCWluZGV4U3RvcmUuZGVsZXRlKCk7CiAJfQogCiAJLyoqCkBAIC0yMDEsMTAgKzIwNCw5IEBACiAJcHVibGljIGJvb2xlYW4gZGVsZXRlQWxsKFJlcG9zaXRvcnlNb2RlbCByZXBvc2l0b3J5KSB7CiAJCXRyeSB7CiAJCQlJbmRleFdyaXRlciB3cml0ZXIgPSBnZXRXcml0ZXIoKTsKLQkJCVN0YW5kYXJkQW5hbHl6ZXIgYW5hbHl6ZXIgPSBuZXcgU3RhbmRhcmRBbmFseXplcihsdWNlbmVWZXJzaW9uKTsKLQkJCVF1ZXJ5UGFyc2VyIHFwID0gbmV3IFF1ZXJ5UGFyc2VyKGx1Y2VuZVZlcnNpb24sIEx1Y2VuZS5yaWQubmFtZSgpLCBhbmFseXplcik7Ci0JCQlCb29sZWFuUXVlcnkgcXVlcnkgPSBuZXcgQm9vbGVhblF1ZXJ5KCk7Ci0JCQlxdWVyeS5hZGQocXAucGFyc2UocmVwb3NpdG9yeS5nZXRSSUQoKSksIE9jY3VyLk1VU1QpOworCQkJU3RhbmRhcmRBbmFseXplciBhbmFseXplciA9IG5ldyBTdGFuZGFyZEFuYWx5emVyKCk7CisJCQlRdWVyeVBhcnNlciBxcCA9IG5ldyBRdWVyeVBhcnNlcihMdWNlbmUucmlkLm5hbWUoKSwgYW5hbHl6ZXIpOworCQkJQm9vbGVhblF1ZXJ5IHF1ZXJ5ID0gbmV3IEJvb2xlYW5RdWVyeS5CdWlsZGVyKCkuYWRkKHFwLnBhcnNlKHJlcG9zaXRvcnkuZ2V0UklEKCkpLCBPY2N1ci5NVVNUKS5idWlsZCgpOwogCiAJCQlpbnQgbnVtRG9jc0JlZm9yZSA9IHdyaXRlci5udW1Eb2NzKCk7CiAJCQl3cml0ZXIuZGVsZXRlRG9jdW1lbnRzKHF1ZXJ5KTsKQEAgLTIyNSw2ICsyMjcsMTggQEAKIAl9CiAKIAkvKioKKwkgKiBDaGVja3MgaWYgYSB0aWNrZXRzIGluZGV4IGV4aXN0cywgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggTHVjZW5lLklOREVYX1ZFUlNJT04KKwkgKiBhbmQgdGhlIEx1Y2VuZSBjb2RlYyB2ZXJzaW9uLgorCSAqCisJICogQHJldHVybiB0cnVlIGlmIG5vIHRpY2tldHMgaW5kZXggaXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKwkgKgorCSAqIEBzaW5jZSAxLjkuMAorCSAqLworCWJvb2xlYW4gc2hvdWxkUmVpbmRleCgpIHsKKwkJcmV0dXJuICEgdGhpcy5pbmRleFN0b3JlLmhhc0luZGV4KCk7CisJfQorCisJLyoqCiAJICogQnVsayBBZGQvVXBkYXRlIHRpY2tldHMgaW4gdGhlIEx1Y2VuZSBpbmRleAogCSAqCiAJICogQHBhcmFtIHRpY2tldHMKQEAgLTI4NywxMCArMzAxLDkgQEAKIAkgKiBAcmV0dXJuIHRydWUsIGlmIGRlbGV0ZWQsIGZhbHNlIGlmIG5vIHJlY29yZCB3YXMgZGVsZXRlZAogCSAqLwogCXByaXZhdGUgYm9vbGVhbiBkZWxldGUoU3RyaW5nIHJlcG9zaXRvcnksIGxvbmcgdGlja2V0SWQsIEluZGV4V3JpdGVyIHdyaXRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0YW5kYXJkQW5hbHl6ZXIgYW5hbHl6ZXIgPSBuZXcgU3RhbmRhcmRBbmFseXplcihsdWNlbmVWZXJzaW9uKTsKLQkJUXVlcnlQYXJzZXIgcXAgPSBuZXcgUXVlcnlQYXJzZXIobHVjZW5lVmVyc2lvbiwgTHVjZW5lLmRpZC5uYW1lKCksIGFuYWx5emVyKTsKLQkJQm9vbGVhblF1ZXJ5IHF1ZXJ5ID0gbmV3IEJvb2xlYW5RdWVyeSgpOwotCQlxdWVyeS5hZGQocXAucGFyc2UoU3RyaW5nVXRpbHMuZ2V0U0hBMShyZXBvc2l0b3J5ICsgdGlja2V0SWQpKSwgT2NjdXIuTVVTVCk7CisJCVN0YW5kYXJkQW5hbHl6ZXIgYW5hbHl6ZXIgPSBuZXcgU3RhbmRhcmRBbmFseXplcigpOworCQlRdWVyeVBhcnNlciBxcCA9IG5ldyBRdWVyeVBhcnNlcihMdWNlbmUuZGlkLm5hbWUoKSwgYW5hbHl6ZXIpOworCQlCb29sZWFuUXVlcnkgcXVlcnkgPSBuZXcgQm9vbGVhblF1ZXJ5LkJ1aWxkZXIoKS5hZGQocXAucGFyc2UoU3RyaW5nVXRpbHMuZ2V0U0hBMShyZXBvc2l0b3J5ICsgdGlja2V0SWQpKSwgT2NjdXIuTVVTVCkuYnVpbGQoKTsKIAogCQlpbnQgbnVtRG9jc0JlZm9yZSA9IHdyaXRlci5udW1Eb2NzKCk7CiAJCXdyaXRlci5kZWxldGVEb2N1bWVudHMocXVlcnkpOwpAQCAtMzMxLDMwICszNDQsMzAgQEAKIAkJCXJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKIAkJfQogCQlTZXQ8UXVlcnlSZXN1bHQ+IHJlc3VsdHMgPSBuZXcgTGlua2VkSGFzaFNldDxRdWVyeVJlc3VsdD4oKTsKLQkJU3RhbmRhcmRBbmFseXplciBhbmFseXplciA9IG5ldyBTdGFuZGFyZEFuYWx5emVyKGx1Y2VuZVZlcnNpb24pOworCQlTdGFuZGFyZEFuYWx5emVyIGFuYWx5emVyID0gbmV3IFN0YW5kYXJkQW5hbHl6ZXIoKTsKIAkJdHJ5IHsKIAkJCS8vIHNlYXJjaCB0aGUgdGl0bGUsIGRlc2NyaXB0aW9uIGFuZCBjb250ZW50Ci0JCQlCb29sZWFuUXVlcnkgcXVlcnkgPSBuZXcgQm9vbGVhblF1ZXJ5KCk7CisJCQlCb29sZWFuUXVlcnkuQnVpbGRlciBibGRyID0gbmV3IEJvb2xlYW5RdWVyeS5CdWlsZGVyKCk7CiAJCQlRdWVyeVBhcnNlciBxcDsKIAotCQkJcXAgPSBuZXcgUXVlcnlQYXJzZXIobHVjZW5lVmVyc2lvbiwgTHVjZW5lLnRpdGxlLm5hbWUoKSwgYW5hbHl6ZXIpOworCQkJcXAgPSBuZXcgUXVlcnlQYXJzZXIoTHVjZW5lLnRpdGxlLm5hbWUoKSwgYW5hbHl6ZXIpOwogCQkJcXAuc2V0QWxsb3dMZWFkaW5nV2lsZGNhcmQodHJ1ZSk7Ci0JCQlxdWVyeS5hZGQocXAucGFyc2UodGV4dCksIE9jY3VyLlNIT1VMRCk7CisJCQlibGRyLmFkZChxcC5wYXJzZSh0ZXh0KSwgT2NjdXIuU0hPVUxEKTsKIAotCQkJcXAgPSBuZXcgUXVlcnlQYXJzZXIobHVjZW5lVmVyc2lvbiwgTHVjZW5lLmJvZHkubmFtZSgpLCBhbmFseXplcik7CisJCQlxcCA9IG5ldyBRdWVyeVBhcnNlcihMdWNlbmUuYm9keS5uYW1lKCksIGFuYWx5emVyKTsKIAkJCXFwLnNldEFsbG93TGVhZGluZ1dpbGRjYXJkKHRydWUpOwotCQkJcXVlcnkuYWRkKHFwLnBhcnNlKHRleHQpLCBPY2N1ci5TSE9VTEQpOworCQkJYmxkci5hZGQocXAucGFyc2UodGV4dCksIE9jY3VyLlNIT1VMRCk7CiAKLQkJCXFwID0gbmV3IFF1ZXJ5UGFyc2VyKGx1Y2VuZVZlcnNpb24sIEx1Y2VuZS5jb250ZW50Lm5hbWUoKSwgYW5hbHl6ZXIpOworCQkJcXAgPSBuZXcgUXVlcnlQYXJzZXIoTHVjZW5lLmNvbnRlbnQubmFtZSgpLCBhbmFseXplcik7CiAJCQlxcC5zZXRBbGxvd0xlYWRpbmdXaWxkY2FyZCh0cnVlKTsKLQkJCXF1ZXJ5LmFkZChxcC5wYXJzZSh0ZXh0KSwgT2NjdXIuU0hPVUxEKTsKKwkJCWJsZHIuYWRkKHFwLnBhcnNlKHRleHQpLCBPY2N1ci5TSE9VTEQpOwogCiAJCQlJbmRleFNlYXJjaGVyIHNlYXJjaGVyID0gZ2V0U2VhcmNoZXIoKTsKLQkJCVF1ZXJ5IHJld3JpdHRlblF1ZXJ5ID0gc2VhcmNoZXIucmV3cml0ZShxdWVyeSk7CisJCQlRdWVyeSByZXdyaXR0ZW5RdWVyeSA9IHNlYXJjaGVyLnJld3JpdGUoYmxkci5idWlsZCgpKTsKIAogCQkJbG9nLmRlYnVnKHJld3JpdHRlblF1ZXJ5LnRvU3RyaW5nKCkpOwogCi0JCQlUb3BTY29yZURvY0NvbGxlY3RvciBjb2xsZWN0b3IgPSBUb3BTY29yZURvY0NvbGxlY3Rvci5jcmVhdGUoNTAwMCwgdHJ1ZSk7CisJCQlUb3BTY29yZURvY0NvbGxlY3RvciBjb2xsZWN0b3IgPSBUb3BTY29yZURvY0NvbGxlY3Rvci5jcmVhdGUoNTAwMCk7CiAJCQlzZWFyY2hlci5zZWFyY2gocmV3cml0dGVuUXVlcnksIGNvbGxlY3Rvcik7CiAJCQlpbnQgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgKHBhZ2UgLSAxKSAqIHBhZ2VTaXplKTsKIAkJCVNjb3JlRG9jW10gaGl0cyA9IGNvbGxlY3Rvci50b3BEb2NzKG9mZnNldCwgcGFnZVNpemUpLnNjb3JlRG9jczsKQEAgLTM5Miw5ICs0MDUsOSBAQAogCQl9CiAKIAkJU2V0PFF1ZXJ5UmVzdWx0PiByZXN1bHRzID0gbmV3IExpbmtlZEhhc2hTZXQ8UXVlcnlSZXN1bHQ+KCk7Ci0JCVN0YW5kYXJkQW5hbHl6ZXIgYW5hbHl6ZXIgPSBuZXcgU3RhbmRhcmRBbmFseXplcihsdWNlbmVWZXJzaW9uKTsKKwkJU3RhbmRhcmRBbmFseXplciBhbmFseXplciA9IG5ldyBTdGFuZGFyZEFuYWx5emVyKCk7CiAJCXRyeSB7Ci0JCQlRdWVyeVBhcnNlciBxcCA9IG5ldyBRdWVyeVBhcnNlcihsdWNlbmVWZXJzaW9uLCBMdWNlbmUuY29udGVudC5uYW1lKCksIGFuYWx5emVyKTsKKwkJCVF1ZXJ5UGFyc2VyIHFwID0gbmV3IFF1ZXJ5UGFyc2VyKEx1Y2VuZS5jb250ZW50Lm5hbWUoKSwgYW5hbHl6ZXIpOwogCQkJUXVlcnkgcXVlcnkgPSBxcC5wYXJzZShxdWVyeVRleHQpOwogCiAJCQlJbmRleFNlYXJjaGVyIHNlYXJjaGVyID0gZ2V0U2VhcmNoZXIoKTsKQEAgLTQwOSw3ICs0MjIsNyBAQAogCQkJCXNvcnQgPSBuZXcgU29ydChMdWNlbmUuZnJvbVN0cmluZyhzb3J0QnkpLmFzU29ydEZpZWxkKGRlc2MpKTsKIAkJCX0KIAkJCWludCBtYXhTaXplID0gNTAwMDsKLQkJCVRvcEZpZWxkRG9jcyBkb2NzID0gc2VhcmNoZXIuc2VhcmNoKHJld3JpdHRlblF1ZXJ5LCBudWxsLCBtYXhTaXplLCBzb3J0LCBmYWxzZSwgZmFsc2UpOworCQkJVG9wRmllbGREb2NzIGRvY3MgPSBzZWFyY2hlci5zZWFyY2gocmV3cml0dGVuUXVlcnksIG1heFNpemUsIHNvcnQsIGZhbHNlLCBmYWxzZSk7CiAJCQlpbnQgc2l6ZSA9IChwYWdlU2l6ZSA8PSAwKSA/IG1heFNpemUgOiBwYWdlU2l6ZTsKIAkJCWludCBvZmZzZXQgPSBNYXRoLm1heCgwLCAocGFnZSAtIDEpICogc2l6ZSk7CiAJCQlTY29yZURvY1tdIGhpdHMgPSBzdWJzZXQoZG9jcy5zY29yZURvY3MsIG9mZnNldCwgc2l6ZSk7CkBAIC00NDMsMTQgKzQ1NiwxMSBAQAogCiAJcHJpdmF0ZSBJbmRleFdyaXRlciBnZXRXcml0ZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQlpZiAod3JpdGVyID09IG51bGwpIHsKLQkJCURpcmVjdG9yeSBkaXJlY3RvcnkgPSBGU0RpcmVjdG9yeS5vcGVuKGx1Y2VuZURpcik7CisJCQlpbmRleFN0b3JlLmNyZWF0ZSgpOwogCi0JCQlpZiAoIWx1Y2VuZURpci5leGlzdHMoKSkgewotCQkJCWx1Y2VuZURpci5ta2RpcnMoKTsKLQkJCX0KLQotCQkJU3RhbmRhcmRBbmFseXplciBhbmFseXplciA9IG5ldyBTdGFuZGFyZEFuYWx5emVyKGx1Y2VuZVZlcnNpb24pOwotCQkJSW5kZXhXcml0ZXJDb25maWcgY29uZmlnID0gbmV3IEluZGV4V3JpdGVyQ29uZmlnKGx1Y2VuZVZlcnNpb24sIGFuYWx5emVyKTsKKwkJCURpcmVjdG9yeSBkaXJlY3RvcnkgPSBGU0RpcmVjdG9yeS5vcGVuKGluZGV4U3RvcmUuZ2V0UGF0aCgpKTsKKwkJCVN0YW5kYXJkQW5hbHl6ZXIgYW5hbHl6ZXIgPSBuZXcgU3RhbmRhcmRBbmFseXplcigpOworCQkJSW5kZXhXcml0ZXJDb25maWcgY29uZmlnID0gbmV3IEluZGV4V3JpdGVyQ29uZmlnKGFuYWx5emVyKTsKIAkJCWNvbmZpZy5zZXRPcGVuTW9kZShPcGVuTW9kZS5DUkVBVEVfT1JfQVBQRU5EKTsKIAkJCXdyaXRlciA9IG5ldyBJbmRleFdyaXRlcihkaXJlY3RvcnksIGNvbmZpZyk7CiAJCX0KQEAgLTU1NCwxNCArNTY0LDE3IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJZG9jLmFkZChuZXcgTG9uZ0ZpZWxkKGx1Y2VuZS5uYW1lKCksIHZhbHVlLmdldFRpbWUoKSwgU3RvcmUuWUVTKSk7CisJCWRvYy5hZGQobmV3IE51bWVyaWNEb2NWYWx1ZXNGaWVsZChsdWNlbmUubmFtZSgpLCB2YWx1ZS5nZXRUaW1lKCkpKTsKIAl9CiAKIAlwcml2YXRlIHZvaWQgdG9Eb2NGaWVsZChEb2N1bWVudCBkb2MsIEx1Y2VuZSBsdWNlbmUsIGxvbmcgdmFsdWUpIHsKIAkJZG9jLmFkZChuZXcgTG9uZ0ZpZWxkKGx1Y2VuZS5uYW1lKCksIHZhbHVlLCBTdG9yZS5ZRVMpKTsKKwkJZG9jLmFkZChuZXcgTnVtZXJpY0RvY1ZhbHVlc0ZpZWxkKGx1Y2VuZS5uYW1lKCksIHZhbHVlKSk7CiAJfQogCiAJcHJpdmF0ZSB2b2lkIHRvRG9jRmllbGQoRG9jdW1lbnQgZG9jLCBMdWNlbmUgbHVjZW5lLCBpbnQgdmFsdWUpIHsKIAkJZG9jLmFkZChuZXcgSW50RmllbGQobHVjZW5lLm5hbWUoKSwgdmFsdWUsIFN0b3JlLllFUykpOworCQlkb2MuYWRkKG5ldyBOdW1lcmljRG9jVmFsdWVzRmllbGQobHVjZW5lLm5hbWUoKSwgdmFsdWUpKTsKIAl9CiAKIAlwcml2YXRlIHZvaWQgdG9Eb2NGaWVsZChEb2N1bWVudCBkb2MsIEx1Y2VuZSBsdWNlbmUsIFN0cmluZyB2YWx1ZSkgewpAQCAtNTY5LDYgKzU4Miw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJZG9jLmFkZChuZXcgb3JnLmFwYWNoZS5sdWNlbmUuZG9jdW1lbnQuRmllbGQobHVjZW5lLm5hbWUoKSwgdmFsdWUsIFRleHRGaWVsZC5UWVBFX1NUT1JFRCkpOworCQlkb2MuYWRkKG5ldyBTb3J0ZWREb2NWYWx1ZXNGaWVsZChsdWNlbmUubmFtZSgpLCBuZXcgQnl0ZXNSZWYodmFsdWUpKSk7CiAJfQogCiAJLyoqCkBAIC02NjMsNCArNjc3LDQgQEAKIAkJaW50IGkgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbCk7CiAJCXJldHVybiBpOwogCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3V0aWxzL0x1Y2VuZUluZGV4U3RvcmUuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvdXRpbHMvTHVjZW5lSW5kZXhTdG9yZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNWUyMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3V0aWxzL0x1Y2VuZUluZGV4U3RvcmUuamF2YQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTcgZ2l0YmxpdC5jb20uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZ2l0YmxpdC51dGlsczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CisKKy8qKgorICogQGF1dGhvciBGbG9yaWFuIFpzY2hvY2tlCisgKgorICogQHNpbmNlIDEuOS4wCisgKi8KK3B1YmxpYyBjbGFzcyBMdWNlbmVJbmRleFN0b3JlCit7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMVUNFTkVfQ09ERUNfVkVSU0lPTiA9IDU0OworCisJcHJvdGVjdGVkIEZpbGUgaW5kZXhGb2xkZXI7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvciBmb3IgYSBiYXNlIGZvbGRlciB0aGF0IGNvbnRhaW5zIHRoZSB2ZXJzaW9uIHNwZWNpZmljIGluZGV4IGZvbGRlcnMKKwkgKiBhbmQgYW4gaW5kZXggdmVyc2lvbi4KKwkgKgorCSAqIEBwYXJhbSBsdWNlbmVGb2xkZXIKKwkgKiAJCQlQYXRoIHRvIHRoZSBiYXNlIGZvbGRlciBmb3IgdGhlIEx1Y2VuZSBpbmRpY2VzLCBpLmUuIHRoZSBjb21tb24gImx1Y2VuZSIgZGlyZWN0b3J5LgorCSAqIEBwYXJhbSBpbmRleFZlcnNpb24KKwkgKiAJCQlWZXJzaW9uIG9mIHRoZSBpbmRleCBkZWZpbml0aW9uCisJICovCisJcHVibGljIEx1Y2VuZUluZGV4U3RvcmUoRmlsZSBsdWNlbmVGb2xkZXIsIGludCBpbmRleFZlcnNpb24pCisJeworCQl0aGlzLmluZGV4Rm9sZGVyID0gbmV3IEZpbGUobHVjZW5lRm9sZGVyLCBpbmRleFZlcnNpb24gKyAiXyIgKyBMVUNFTkVfQ09ERUNfVkVSU0lPTik7CisJfQorCisKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgTHVjZW5lIGluZGV4IGRpcmVjdG9yeSBmb3IgdGhpcyBpbmRleCB2ZXJzaW9uIGFuZCBMdWNlbmUgY29kZWMgdmVyc2lvbgorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZSgpCisJeworCQlpZiAoISBpbmRleEZvbGRlci5leGlzdHMoKSkgeworCQkJaW5kZXhGb2xkZXIubWtkaXJzKCk7CisJCX0KKwl9CisKKworCS8qKgorCSAqIERlbGV0ZSB0aGUgTHVjZW5lIGluZGV4IGRpcmVjdG9yeSBmb3IgdGhpcyBpbmRleCB2ZXJzaW9uIGFuZCBMdWNlbmUgY29kZWMgdmVyc2lvbgorCSAqCisJICogQHJldHVybglUcnVlIGlmIHRoZSBkaXJlY3RvcnkgY291bGQgc3VjY2Vzc2Z1bGx5IGJlIGRlbGV0ZWQuCisJICovCisJcHVibGljIGJvb2xlYW4gZGVsZXRlKCkKKwl7CisJCWlmIChpbmRleEZvbGRlci5leGlzdHMoKSkgeworCQkJcmV0dXJuIEZpbGVVdGlscy5kZWxldGUoaW5kZXhGb2xkZXIpOworCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCisKKwkvKioKKwkgKiBAcmV0dXJuCVRoZSBQYXRoIHRvIHRoZSBpbmRleCBmb2xkZXIKKwkgKi8KKwlwdWJsaWMgUGF0aCBnZXRQYXRoKCkKKwl7CisJCXJldHVybiBpbmRleEZvbGRlci50b1BhdGgoKTsKKwl9CisKKworCisJLyoqCisJICogQ2hlY2sgaWYgYW4gaW5kZXggb2YgdGhlIHJlc3BlY3RpdmUgdmVyc2lvbiwgb3IgY29tcGF0aWJsZSwgYWxyZWFkeSBleGlzdHMuCisJICoKKwkgKiBAcmV0dXJuCVRydWUgaWYgYW4gaW5kZXggZXhpc3RzLCBGYWxzZSBvdGhlcndpc2UKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBoYXNJbmRleCgpCisJeworCQlyZXR1cm4gaW5kZXhGb2xkZXIuZXhpc3RzKCkgJiYKKwkJCQlpbmRleEZvbGRlci5pc0RpcmVjdG9yeSgpICYmCisJCQkJKGluZGV4Rm9sZGVyLmxpc3QoKS5sZW5ndGggPiAxKTsgIC8vIE11c3QgaGF2ZSBtb3JlIHRoYW4gJ3dyaXRlLmxvY2snCisJfQorCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwLnByb3BlcnRpZXMgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwLnByb3BlcnRpZXMKaW5kZXggNjYxMDFmNC4uYzQ2YmQ2MyAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcC5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHAucHJvcGVydGllcwpAQCAtMjE4LDcgKzIxOCw4IEBACiBnYi53b3JraW5nQ29weSA9IHdvcmtpbmcgY29weQogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gdGhpcyByZXBvc2l0b3J5IGhhcyBhIHdvcmtpbmcgY29weSBhbmQgY2FuIG5vdCByZWNlaXZlIHB1c2hlcwogZ2IucXVlcnkgPSBxdWVyeQotZ2IucXVlcnlIZWxwID0gU3RhbmRhcmQgcXVlcnkgc3ludGF4IGlzIHN1cHBvcnRlZC48cC8+PHAvPlBsZWFzZSBzZWUgPGEgdGFyZ2V0PSJfbmV3IiBocmVmPSJodHRwOi8vbHVjZW5lLmFwYWNoZS5vcmcvY29yZS9vbGRfdmVyc2lvbmVkX2RvY3MvdmVyc2lvbnMvM181XzAvcXVlcnlwYXJzZXJzeW50YXguaHRtbCI+THVjZW5lIFF1ZXJ5IFBhcnNlciBTeW50YXg8L2E+IGZvciBkZXRhaWxzLgorZ2IucXVlcnlIZWxwID0gU3RhbmRhcmQgcXVlcnkgc3ludGF4IGlzIHN1cHBvcnRlZC48cC8+PHAvPlBsZWFzZSBzZWUgJHtxdWVyeVN5bnRheH0gZm9yIGRldGFpbHMuCitnYi5xdWVyeVN5bnRheCA9IEx1Y2VuZSBRdWVyeSBQYXJzZXIgU3ludGF4CiBnYi5xdWVyeVJlc3VsdHMgPSByZXN1bHRzIHswfSAtIHsxfSAoezJ9IGhpdHMpCiBnYi5ub0hpdHMgPSBubyBoaXRzCiBnYi5hdXRob3JlZCA9IGF1dGhvcmVkCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX2NzLnByb3BlcnRpZXMgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX2NzLnByb3BlcnRpZXMKaW5kZXggZGMxNTllYS4uNDVlYjQyOCAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9jcy5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfY3MucHJvcGVydGllcwpAQCAtNzczLDcgKzc3Myw4IEBACiBnYi5zb3J0SGlnaGVzdFNldmVyaXR5PW5lanZ5XHUwMTYxXHUwMTYxXHUwMGVkIHpcdTAwZTF2YVx1MDE3ZW5vc3QKIGdiLmRpZmZGaWxlRGlmZlRvb0xhcmdlPVJvemRcdTAwZWRsIGplIHBcdTAxNTlcdTAwZWRsaVx1MDE2MSB2ZWxrXHUwMGZkCiBnYi5taXNzaW5nSW50ZWdyYXRpb25CcmFuY2hNb3JlPUNcdTAwZWRsb3ZcdTAwZTEgaW50ZWdyYVx1MDEwZG5cdTAwZWQgdlx1MDExYnRldiB2IHJlcG96aXRcdTAwZTFcdTAxNTlpIG5lZXhpc3R1amUhCi1nYi5xdWVyeUhlbHA9U3RhbmRhcmRuXHUwMGVkIHN5bnRheGUgZG90YXpcdTAxNmYgamUgcG9kcG9yb3ZcdTAwZTFuYS48cC8+PHAvPlBvZFx1MDBlZHZlanRlIHNlIHByb3NcdTAwZWRtIG5hIDxhIHRhcmdldD0iX25ldyIgaHJlZj0iaHR0cDovL2x1Y2VuZS5hcGFjaGUub3JnL2NvcmUvb2xkX3ZlcnNpb25lZF9kb2NzL3ZlcnNpb25zLzNfNV8wL3F1ZXJ5cGFyc2Vyc3ludGF4Lmh0bWwiPkx1Y2VuZSBRdWVyeSBQYXJzZXIgU3ludGF4PC9hPiBwcm8gZGV0YWlseS4KK2diLnF1ZXJ5SGVscD1TdGFuZGFyZG5cdTAwZWQgc3ludGF4ZSBkb3Rhelx1MDE2ZiBqZSBwb2Rwb3Jvdlx1MDBlMW5hLjxwLz48cC8+UG9kXHUwMGVkdmVqdGUgc2UgcHJvc1x1MDBlZG0gbmEgJHtxdWVyeVN5bnRheH0gcHJvIGRldGFpbHkuCitnYi5xdWVyeVN5bnRheD1MdWNlbmUgUXVlcnkgUGFyc2VyIFN5bnRheAogZ2IuZGlmZlRydW5jYXRlZD1EaWZmIG9cdTAxNTlpem51dCBwbyBwXHUwMTU5ZWRjaG96XHUwMGVkbSBzb3Vib3J1CiBnYi5ibGFtZT1ibGFtZQogZ2IuaW1nZGlmZlN1YnRyYWN0PU9kXHUwMTBkXHUwMGVkdGF0IChcdTAxMGRlcm5cdTAwZTEgPSBzdGVqblx1MDBlOWwpCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX2RlLnByb3BlcnRpZXMgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX2RlLnByb3BlcnRpZXMKaW5kZXggZWNhM2ZkMi4uOTU5OWY3ZSAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9kZS5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfZGUucHJvcGVydGllcwpAQCAtMjE4LDcgKzIxOCw4IEBACiBnYi53b3JraW5nQ29weSA9IEFyYmVpdHNrb3BpZQogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gRGllc2VzIFJlcG9zaXRvcnkgYmVzaXR6dCBlaW5lIEFyYmVpdHNrb3BpZSB1bmQga2FubiBrZWluZSBQdXNoZXMgZW1wZmFuZ2VuCiBnYi5xdWVyeSA9IEFiZnJhZ2UKLWdiLnF1ZXJ5SGVscCA9IFN0YW5kYXJkIEFiZnJhZ2VzeW50YXggd2lyZCB1bnRlcnN0XHUwMGZjdHp0LjxwLz48cC8+VW50ZXIgPGEgdGFyZ2V0PSJfbmV3IiBocmVmPSJodHRwOi8vbHVjZW5lLmFwYWNoZS5vcmcvY29yZS9vbGRfdmVyc2lvbmVkX2RvY3MvdmVyc2lvbnMvM181XzAvcXVlcnlwYXJzZXJzeW50YXguaHRtbCI+THVjZW5lIFF1ZXJ5IFBhcnNlciBTeW50YXg8L2E+IGZpbmRlbiBTaWUgd2VpdGVyZSBEZXRhaWxzLgorZ2IucXVlcnlIZWxwID0gU3RhbmRhcmQgQWJmcmFnZXN5bnRheCB3aXJkIHVudGVyc3RcdTAwZmN0enQuPHAvPjxwLz5VbnRlciAke3F1ZXJ5U3ludGF4fSBmaW5kZW4gU2llIHdlaXRlcmUgRGV0YWlscy4KK2diLnF1ZXJ5U3ludGF4ID0gTHVjZW5lIFF1ZXJ5IFBhcnNlciBTeW50YXgKIGdiLnF1ZXJ5UmVzdWx0cyA9IEVyZ2Vibmlzc2UgezB9IC0gezF9ICh7Mn0gVHJlZmZlcikKIGdiLm5vSGl0cyA9IEtlaW5lIFRyZWZmZXIKIGdiLmF1dGhvcmVkID0gaXN0IEF1dG9yIHZvbgpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9lcy5wcm9wZXJ0aWVzIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9lcy5wcm9wZXJ0aWVzCmluZGV4IDc5MWIyODYuLmZhMDg0ODUgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfZXMucHJvcGVydGllcworKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX2VzLnByb3BlcnRpZXMKQEAgLTIxOCw3ICsyMTgsOCBAQAogZ2Iud29ya2luZ0NvcHkgPSBDb3BpYSBkZSB0cmFiYWpvDQogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gRXN0ZSByZXBvc2l0b3JpbyB0aWVuZSB1bmEgY29waWEgZGUgdHJhYmFqbyB5IG5vIHNlIGxlIHB1ZWRlIGVtcHVqYXINCiBnYi5xdWVyeSA9IENvbnN1bHRhDQotZ2IucXVlcnlIZWxwID0gU2UgYWRtaXRlIGxhIHNpbnRheGlzIGRlIGNvbnN1bHRhIGVzdFx1MDBFMW5kYXIuPHAvPlBvciBmYXZvciwgbGVlIGVsOiA8YSB0YXJnZXQ9Il9uZXciIGhyZWY9Imh0dHA6Ly9sdWNlbmUuYXBhY2hlLm9yZy9jb3JlL29sZF92ZXJzaW9uZWRfZG9jcy92ZXJzaW9ucy8zXzVfMC9xdWVyeXBhcnNlcnN5bnRheC5odG1sIj5BbmFsaXphZG9yIHNpbnRcdTAwRTFjdGljbyBkZSBjb25zdWx0YXMgZGUgTHVjZW5lPC9hPiBwYXJhIG1cdTAwRTFzIGRldGFsbGVzLg0KK2diLnF1ZXJ5SGVscCA9IFNlIGFkbWl0ZSBsYSBzaW50YXhpcyBkZSBjb25zdWx0YSBlc3RcdTAwRTFuZGFyLjxwLz5Qb3IgZmF2b3IsIGxlZSBlbDogJHtxdWVyeVN5bnRheH0gcGFyYSBtXHUwMEUxcyBkZXRhbGxlcy4NCitnYi5xdWVyeVN5bnRheCA9IEFuYWxpemFkb3Igc2ludFx1MDBFMWN0aWNvIGRlIGNvbnN1bHRhcyBkZSBMdWNlbmUNCiBnYi5xdWVyeVJlc3VsdHMgPSBSZXN1bHRhZG9zIHswfSAtIHsxfSAoezJ9IGNvaW5jaWRlbmNpYXMpDQogZ2Iubm9IaXRzID0gU2luIGNvaW5jaWRlbmNpYXMNCiBnYi5hdXRob3JlZCA9IEF1dG9yDQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9mci5wcm9wZXJ0aWVzIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9mci5wcm9wZXJ0aWVzCmluZGV4IGQ0NzliM2QuLjNlNzU3MTIgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfZnIucHJvcGVydGllcworKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX2ZyLnByb3BlcnRpZXMKQEAgLTIxOCw3ICsyMTgsOCBAQAogZ2Iud29ya2luZ0NvcHkgPSBkXHUwMGU5cFx1MDBmNHQgZGUgdHJhdmFpbAogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gY2UgZFx1MDBlOXBcdTAwZjR0IHBvc3NcdTAwZThkZSB1biBkXHUwMGU5cFx1MDBmNHQgZGUgdHJhdmFpbCBldCBuZSBwZXV0IGRvbmMgcGFzIHJlY2V2b2lyIGRlIHB1c2hlcwogZ2IucXVlcnkgPSByZWNoZXJjaGUKLWdiLnF1ZXJ5SGVscCA9IExhIHN5bnRheGUgTHVjZW5lIHN0YW5kYXJkIGVzdCBzdXBwb3J0XHUwMGU5ZS48cC8+PHAvPlNlIHJcdTAwZTlmXHUwMGU5cmVyIFx1MDBlMCBsYSA8YSB0YXJnZXQ9Il9uZXciIGhyZWY9Imh0dHA6Ly9sdWNlbmUuYXBhY2hlLm9yZy9jb3JlL29sZF92ZXJzaW9uZWRfZG9jcy92ZXJzaW9ucy8zXzVfMC9xdWVyeXBhcnNlcnN5bnRheC5odG1sIj5TeW50YXhlIGRlIHJlY2hlcmNoZSBMdWNlbmU8L2E+IHBvdXIgcGx1cyBkZSBkXHUwMGU5dGFpbHMuCitnYi5xdWVyeUhlbHAgPSBMYSBzeW50YXhlIEx1Y2VuZSBzdGFuZGFyZCBlc3Qgc3VwcG9ydFx1MDBlOWUuPHAvPjxwLz5TZSByXHUwMGU5Zlx1MDBlOXJlciBcdTAwZTAgbGEgJHtxdWVyeVN5bnRheH0gcG91ciBwbHVzIGRlIGRcdTAwZTl0YWlscy4KK2diLnF1ZXJ5U3ludGF4ID0gU3ludGF4ZSBkZSByZWNoZXJjaGUgTHVjZW5lCiBnYi5xdWVyeVJlc3VsdHMgPSByXHUwMGU5c3VsdGF0cyB7MH0gLSB7MX0gKHsyfSBoaXRzKQogZ2Iubm9IaXRzID0gYXVjdW4gclx1MDBlOXN1bHRhdHMKIGdiLmF1dGhvcmVkID0gYXV0aG9yZWQKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfaXQucHJvcGVydGllcyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfaXQucHJvcGVydGllcwppbmRleCA3MjMwZWM4Li45NzA0OTZiIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX2l0LnByb3BlcnRpZXMKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9pdC5wcm9wZXJ0aWVzCkBAIC0yMTgsNyArMjE4LDggQEAKIGdiLndvcmtpbmdDb3B5ID0gY29waWEgZGkgbGF2b3JvCiBnYi53b3JraW5nQ29weVdhcm5pbmcgPSBxdWVzdG8gcmVwb3NpdG9yeSDoIHVuYSBjb3BpYSBkaSBsYXZvcm8gYSBub24gYW1tZXR0ZSBwdXNoCiBnYi5xdWVyeSA9IGludGVycm9nYXppb25lCi1nYi5xdWVyeUhlbHAgPSBMYSBzaW50YXNzaSBzdGFuZGFyZCDoIHN1cHBvcnRhdGEuPHAvPjxwLz5TaSB2ZWRpIDxhIHRhcmdldD0iX25ldyIgaHJlZj0iaHR0cDovL2x1Y2VuZS5hcGFjaGUub3JnL2NvcmUvb2xkX3ZlcnNpb25lZF9kb2NzL3ZlcnNpb25zLzNfNV8wL3F1ZXJ5cGFyc2Vyc3ludGF4Lmh0bWwiPkx1Y2VuZSBRdWVyeSBQYXJzZXIgU3ludGF4PC9hPiBwZXIgdWx0ZXJpb3JpIGRldHRhZ2xpLgorZ2IucXVlcnlIZWxwID0gTGEgc2ludGFzc2kgc3RhbmRhcmQg6CBzdXBwb3J0YXRhLjxwLz48cC8+U2kgdmVkaSAke3F1ZXJ5U3ludGF4fSBwZXIgdWx0ZXJpb3JpIGRldHRhZ2xpLgorZ2IucXVlcnlTeW50YXggPSBMdWNlbmUgUXVlcnkgUGFyc2VyIFN5bnRheAogZ2IucXVlcnlSZXN1bHRzID0gcmlzdWx0YXRpIHswfSAtIHsxfSAoezJ9IGNvcnJpc3BvbmRlbnplKQogZ2Iubm9IaXRzID0gbmVzc3VuYSBjb3JyaXNwb25kZW56YQogZ2IuYXV0aG9yZWQgPSBjcmVhdG8gZGEKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfamEucHJvcGVydGllcyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfamEucHJvcGVydGllcwppbmRleCBjOGEyNDQ5Li4zNmUyMWE3IDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX2phLnByb3BlcnRpZXMKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9qYS5wcm9wZXJ0aWVzCkBAIC0yMTcsNyArMjE3LDggQEAKIGdiLndvcmtpbmdDb3B5ID0gXHU0ZjVjXHU2OTZkXHUzMGIzXHUzMGQ0XHUzMGZjDQogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gXHUzMDUzXHUzMDZlXHUzMGVhXHUzMGRkXHUzMGI4XHUzMGM4XHUzMGVhXHUzMDZiXHUzMDZmXHU0ZjVjXHU2OTZkXHUzMGIzXHUzMGQ0XHUzMGZjXHUzMDRjXHUzMDQyXHUzMDhiXHUzMDVmXHUzMDgxIHB1c2ggXHUzMDY3XHUzMDRkXHUzMDdlXHUzMDViXHUzMDkzDQogZ2IucXVlcnkgPSBcdTMwYWZcdTMwYThcdTMwZWFcdTMwZmMNCi1nYi5xdWVyeUhlbHAgPSBcdTZhMTlcdTZlOTZcdTc2ODRcdTMwNmFcdTMwYWZcdTMwYThcdTMwZWFcdTMwZmNcdTY2ZjhcdTVmMGZcdTMwOTJcdTMwYjVcdTMwZGRcdTMwZmNcdTMwYzhcdTMwNTdcdTMwNjZcdTMwNDRcdTMwN2VcdTMwNTlcdTMwMDI8cC8+PHAvPlx1OGE3M1x1N2QzMFx1MzA2ZiA8YSB0YXJnZXQ9Il9uZXciIGhyZWY9Imh0dHA6Ly9sdWNlbmUuYXBhY2hlLm9yZy9jb3JlL29sZF92ZXJzaW9uZWRfZG9jcy92ZXJzaW9ucy8zXzVfMC9xdWVyeXBhcnNlcnN5bnRheC5odG1sIj5MdWNlbmUgUXVlcnkgUGFyc2VyIFN5bnRheDwvYT4gXHUzMDkyXHU1M2MyXHU3MTY3XHUzMDU3XHUzMDY2XHU0ZTBiXHUzMDU1XHUzMDQ0XHUzMDAyDQorZ2IucXVlcnlIZWxwID0gXHU2YTE5XHU2ZTk2XHU3Njg0XHUzMDZhXHUzMGFmXHUzMGE4XHUzMGVhXHUzMGZjXHU2NmY4XHU1ZjBmXHUzMDkyXHUzMGI1XHUzMGRkXHUzMGZjXHUzMGM4XHUzMDU3XHUzMDY2XHUzMDQ0XHUzMDdlXHUzMDU5XHUzMDAyPHAvPjxwLz5cdThhNzNcdTdkMzBcdTMwNmYgJHtxdWVyeVN5bnRheH0gXHUzMDkyXHU1M2MyXHU3MTY3XHUzMDU3XHUzMDY2XHU0ZTBiXHUzMDU1XHUzMDQ0XHUzMDAyDQorZ2IucXVlcnlTeW50YXggPSBMdWNlbmUgUXVlcnkgUGFyc2VyIFN5bnRheA0KIGdiLnF1ZXJ5UmVzdWx0cyA9IFx1NjkxY1x1N2QyMlx1N2Q1MFx1Njc5YyB7MH0gLSB7MX0gKHsyfSBcdTMwZDJcdTMwYzNcdTMwYzgpDQogZ2Iubm9IaXRzID0gXHU4OThiXHUzMDY0XHUzMDRiXHUzMDhhXHUzMDdlXHUzMDViXHUzMDkzXHUzMDY3XHUzMDU3XHUzMDVmXHUzMDAyDQogZ2IuYXV0aG9yZWQgPSBhdXRob3JlZA0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfa28ucHJvcGVydGllcyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfa28ucHJvcGVydGllcwppbmRleCAwMzFmZjhkLi5iNGE2NzVjIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX2tvLnByb3BlcnRpZXMKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9rby5wcm9wZXJ0aWVzCkBAIC0xODAsMTEwICsxODAsMTExIEBACiBnYi52ZXJzaW9uID0gXHVCQzg0XHVDODA0CiBnYi5yZWxlYXNlRGF0ZSA9IFx1QjlCNFx1QjlBQ1x1Qzk4OCBcdUIwQTBcdUM5REMKIGdiLmRhdGUgPSBkYXRlCi1nYi5hY3Rpdml0eSA9IFx1QzU2MVx1RDJGMFx1QkU0NFx1RDJGMAotZ2Iuc3Vic2NyaWJlID0gXHVBRDZDXHVCM0M1Ci1nYi5icmFuY2ggPSBcdUJFMENcdUI3OUNcdUNFNTgKLWdiLm1heEhpdHMgPSBcdUI5RTVcdUMyQTRcdUQ3ODhcdUQyQjgKLWdiLnJlY2VudEFjdGl2aXR5ID0gXHVDRDVDXHVBREZDIFx1QzU2MVx1RDJGMFx1QkU0NFx1RDJGMAotZ2IucmVjZW50QWN0aXZpdHlTdGF0cyA9IFx1QzlDMFx1QjA5QyB7MH1cdUM3N0MgLyBcdUM3OTFcdUMxMzFcdUM3OTAgezJ9XHVCQTg1XHVDNzc0IHsxfVx1QUMxQyBcdUNFRTRcdUJDMEJcdUQ1NjgKLWdiLnJlY2VudEFjdGl2aXR5Tm9uZSA9IFx1QzlDMFx1QjA5QyB7MH1cdUM3N0MgLyBcdUM1QzZcdUM3NEMKLWdiLmRhaWx5QWN0aXZpdHkgPSBcdUM3N0NcdUM3N0MgXHVDNTYxXHVEMkYwXHVCRTQ0XHVEMkYwCi1nYi5hY3RpdmVSZXBvc2l0b3JpZXMgPSBcdUMwQUNcdUM2QTlcdUM5MTFcdUM3NzggXHVDODAwXHVDN0E1XHVDMThDCi1nYi5hY3RpdmVBdXRob3JzID0gXHVDMEFDXHVDNkE5XHVDOTExXHVDNzc4IFx1Qzc5MVx1QzEzMVx1Qzc5MAotZ2IuY29tbWl0cyA9IFx1Q0VFNFx1QkMwQgotZ2IudGVhbXMgPSBcdUQzMDAKLWdiLnRlYW1OYW1lID0gXHVEMzAwIFx1Qzc3NFx1Qjk4NAotZ2IudGVhbU1lbWJlcnMgPSBcdUQzMDAgXHVCQTY0XHVCQzg0Ci1nYi50ZWFtTWVtYmVyc2hpcHMgPSBcdUQzMDAgXHVCOUY0XHVCQzg0XHVDMjdECi1nYi5uZXdUZWFtID0gXHVDMEM4XHVCODVDXHVDNkI0IFx1RDMwMAotZ2IucGVybWl0dGVkVGVhbXMgPSBcdUQ1QzhcdUM2QTlcdUI0MUMgXHVEMzAwCi1nYi5lbXB0eVJlcG9zaXRvcnkgPSBcdUJFNDggXHVDODAwXHVDN0E1XHVDMThDCi1nYi5yZXBvc2l0b3J5VXJsID0gXHVDODAwXHVDN0E1XHVDMThDIHVybAotZ2IubWFpbGluZ0xpc3RzID0gXHVCQTU0XHVDNzdDXHVCOUMxIFx1QjlBQ1x1QzJBNFx1RDJCOAotZ2IucHJlUmVjZWl2ZVNjcmlwdHMgPSBwcmUtcmVjZWl2ZSBcdUMyQTRcdUQwNkNcdUI5QkRcdUQyQjgKLWdiLnBvc3RSZWNlaXZlU2NyaXB0cyA9IHBvc3QtcmVjZWl2ZSBcdUMyQTRcdUQwNkNcdUI5QkRcdUQyQjgKLWdiLmhvb2tTY3JpcHRzID0gXHVENkM0XHVEMDZDIFx1QzJBNFx1RDA2Q1x1QjlCRFx1RDJCOAotZ2IuY3VzdG9tRmllbGRzID0gXHVDMEFDXHVDNkE5XHVDNzkwIFx1RDU0NFx1QjREQwotZ2IuY3VzdG9tRmllbGRzRGVzY3JpcHRpb24gPSBcdUFERjhcdUI4RThcdUJFNDQgXHVENkM1XHVDNUQwIFx1QzBBQ1x1QzZBOVx1Qzc5MCBcdUQ1NDRcdUI0REMgXHVDMEFDXHVDNkE5IFx1QUMwMFx1QjJBNQotZ2IuYWNjZXNzUGVybWlzc2lvbnMgPSBcdUM4MTFcdUMxOEQgXHVBRDhDXHVENTVDCi1nYi5maWx0ZXJzID0gXHVENTQ0XHVEMTMwCi1nYi5nZW5lcmFsRGVzY3JpcHRpb24gPSBcdUM3N0NcdUJDMTggXHVDMTI0XHVDODE1Ci1nYi5hY2Nlc3NQZXJtaXNzaW9uc0Rlc2NyaXB0aW9uID0gXHVDNzIwXHVDODAwXHVDNjQwIFx1RDMwMFx1QzczQ1x1Qjg1QyBcdUM4MTFcdUMxOERcdUFEOENcdUQ1NUMgXHVCRDgwXHVDNUVDCi1nYi5hY2Nlc3NQZXJtaXNzaW9uc0ZvclVzZXJEZXNjcmlwdGlvbiA9IFx1RDMwMFx1Qzc0NCBcdUM5QzBcdUM4MTVcdUQ1NThcdUFDNzBcdUIwOTggXHVDODExXHVDMThEIFx1QUQ4Q1x1RDU1Q1x1Qzc0NCBcdUM5QzBcdUM4MTVcdUQ1NjAgXHVDODAwXHVDN0E1XHVDMThDIFx1QzEyMFx1RDBERAotZ2IuYWNjZXNzUGVybWlzc2lvbnNGb3JUZWFtRGVzY3JpcHRpb24gPSBcdUQzMDAgXHVCOUY0XHVCQzg0XHVCOTdDIFx1QzEyMFx1RDBERFx1RDU1OFx1QUNFMCwgXHVDODExXHVDMThEIFx1QUQ4Q1x1RDU1Q1x1Qzc0NCBcdUM5QzBcdUM4MTVcdUQ1NjAgXHVDODAwXHVDN0E1XHVDMThDIFx1QzEyMFx1RDBERAotZ2IuZmVkZXJhdGlvblJlcG9zaXRvcnlEZXNjcmlwdGlvbiA9IFx1Qzc3NCBcdUM4MDBcdUM3QTVcdUMxOENcdUI5N0MgXHVCMkU0XHVCOTc4IEdpdGJsaXQgXHVDMTFDXHVCQzg0XHVDNjQwIFx1QUNGNVx1QzcyMAotZ2IuaG9va1NjcmlwdHNEZXNjcmlwdGlvbiA9IFx1Qzc3NCBHaXRibGl0IFx1QzExQ1x1QkM4NFx1QzVEMCBcdUQ0NzhcdUMyRENcdUI0MThcdUJBNzQgXHVBREY4XHVCOEU4XHVCRTQ0KEdyb292eSkgXHVDMkE0XHVEMDZDXHVCOUJEXHVEMkI4XHVCOTdDIFx1QzJFNFx1RDU4OQotZ2IucmVzZXQgPSBcdUI5QUNcdUMxNEIKLWdiLnBhZ2VzID0gXHVEMzk4XHVDNzc0XHVDOUMwCi1nYi53b3JraW5nQ29weSA9IFx1QzZDQ1x1RDBCOSBcdUNFNzRcdUQ1M0MKLWdiLndvcmtpbmdDb3B5V2FybmluZyA9IFx1Qzc3NCBcdUM4MDBcdUM3QTVcdUMxOENcdUIyOTQgXHVDNkNDXHVEMEI5XHVDRTc0XHVENTNDXHVCOTdDIFx1QUMwMFx1QzlDMFx1QUNFMCBcdUM3ODhcdUFDRTAgXHVENDc4XHVDMkRDXHVCOTdDIFx1QkMxQlx1Qzc0NCBcdUMyMTggXHVDNUM2XHVDNzRDCi1nYi5xdWVyeSA9IFx1Q0ZGQ1x1QjlBQwotZ2IucXVlcnlIZWxwID0gXHVENDVDXHVDOTAwIFx1Q0ZGQ1x1QjlBQyBcdUJCMzhcdUJDOTVcdUM3NDQgXHVDOUMwXHVDNkQwLjxwLz48cC8+XHVDNzkwXHVDMTM4XHVENTVDIFx1QUM4M1x1Qzc0NCBcdUM2RDBcdUQ1NUNcdUIyRTRcdUJBNzQgPGEgdGFyZ2V0PSJfbmV3IiBocmVmPSJodHRwOi8vbHVjZW5lLmFwYWNoZS5vcmcvY29yZS9vbGRfdmVyc2lvbmVkX2RvY3MvdmVyc2lvbnMvM181XzAvcXVlcnlwYXJzZXJzeW50YXguaHRtbCI+XHVCOEU4XHVDMkUwIFx1Q0ZGQ1x1QjlBQyBcdUQzMENcdUMxMUMgXHVCQjM4XHVCQzk1PC9hPiBcdUM3NDQgXHVCQzI5XHVCQjM4XHVENTc0IFx1QzhGQ1x1QzEzOFx1QzY5NC4KLWdiLnF1ZXJ5UmVzdWx0cyA9IFx1QUM4MFx1QzBDOVx1QUNCMFx1QUNGQyB7MH0gLSB7MX0gKHsyfVx1QUMxQyBcdUFDODBcdUMwQzlcdUI0MjgpCi1nYi5ub0hpdHMgPSBcdUFDODBcdUMwQzkgXHVBQ0IwXHVBQ0ZDIFx1QzVDNlx1Qzc0QwotZ2IuYXV0aG9yZWQgPSBcdUFDMDAgXHVDNzkxXHVDMTMxXHVENTY4LgotZ2IuY29tbWl0dGVkID0gXHVDRUU0XHVCQzBCXHVCNDI4Ci1nYi5pbmRleGVkQnJhbmNoZXMgPSBcdUM3NzhcdUIzNzFcdUMyRjFcdUQ1NjAgXHVCRTBDXHVCNzlDXHVDRTU4Ci1nYi5pbmRleGVkQnJhbmNoZXNEZXNjcmlwdGlvbiA9IFx1QjhFOFx1QzJFMCBcdUM3NzhcdUIzNzFcdUMyQTRcdUM1RDAgXHVEM0VDXHVENTY4XHVENTYwIFx1QkUwQ1x1Qjc5Q1x1Q0U1OCBcdUMxMjBcdUQwREQKLWdiLm5vSW5kZXhlZFJlcG9zaXRvcmllc1dhcm5pbmcgPSBcdUM4MDBcdUM3QTVcdUMxOENcdUFDMDAgXHVCOEU4XHVDMkUwIFx1Qzc3OFx1QjM3MVx1QzJGMVx1QzVEMCBcdUMxMjRcdUM4MTVcdUI0MThcdUM5QzAgXHVDNTRBXHVDNzRDCi1nYi51bmRlZmluZWRRdWVyeVdhcm5pbmcgPSBcdUNGRkNcdUI5QUMgXHVDOUMwXHVDODE1XHVCNDE4XHVDOUMwIFx1QzU0QVx1Qzc0QyEKLWdiLm5vU2VsZWN0ZWRSZXBvc2l0b3JpZXNXYXJuaW5nID0gXHVENTU4XHVCMDk4IFx1QjYxMFx1QjI5NCBcdUFERjggXHVDNzc0XHVDMEMxXHVDNzU4IFx1QzgwMFx1QzdBNVx1QzE4Q1x1Qjk3QyBcdUMxMjBcdUQwRERcdUQ1NThcdUMxMzhcdUM2OTQhCi1nYi5sdWNlbmVEaXNhYmxlZCA9IFx1QjhFOFx1QzJFMCBcdUM3NzhcdUIzNzFcdUMyRjEgXHVDOTExXHVDOUMwXHVCNDI4Ci1nYi5mYWlsZWR0b1JlYWQgPSBcdUM3N0NcdUFFMzAgXHVDMkU0XHVEMzI4Ci1nYi5pc05vdFZhbGlkRmlsZSA9IFx1QzcyMFx1RDZBOFx1RDU1QyBcdUQzMENcdUM3N0NcdUM3NzQgXHVDNTQ0XHVCMkQ4Ci1nYi5mYWlsZWRUb1JlYWRNZXNzYWdlID0gezB9XHVDNUQwXHVDMTFDIFx1QjUxNFx1RDNGNFx1RDJCOCBcdUJBNTRcdUMyRENcdUM5QzAgXHVDNzdDXHVBRTMwIFx1QzJFNFx1RDMyOCEKLWdiLnBhc3N3b3Jkc0RvTm90TWF0Y2ggPSBcdUQzMjhcdUMyQTRcdUM2Q0NcdUI0RENcdUFDMDAgXHVDNzdDXHVDRTU4XHVENTU4XHVDOUMwIFx1QzU0QVx1QzU0NFx1QzY5NCEKLWdiLnBhc3N3b3JkVG9vU2hvcnQgPSBcdUQzMjhcdUMyQTRcdUM2Q0NcdUI0RENcdUFDMDAgXHVCMTA4XHVCQjM0IFx1QzlFN1x1QzU0NFx1QzY5NC4gXHVDODAxXHVDNUI0XHVCM0M0IHswfSBcdUFDMUMgXHVCQjM4XHVDNzkwXHVDNUVDXHVDNTdDIFx1RDU2OVx1QjJDOFx1QjJFNC4KLWdiLnBhc3N3b3JkQ2hhbmdlZCA9IFx1RDMyOFx1QzJBNFx1QzZDQ1x1QjREQ1x1QUMwMCBcdUJDQzBcdUFDQkQgXHVDMTMxXHVBQ0Y1LgotZ2IucGFzc3dvcmRDaGFuZ2VBYm9ydGVkID0gXHVEMzI4XHVDMkE0XHVDNkNDXHVCNERDIFx1QkNDMFx1QUNCRCBcdUNERThcdUMxOENcdUI0MjguCi1nYi5wbGVhc2VTZXRSZXBvc2l0b3J5TmFtZSA9IFx1QzgwMFx1QzdBNVx1QzE4QyBcdUM3NzRcdUI5ODRcdUM3NDQgXHVDNzg1XHVCODI1XHVENTU4XHVDMTM4XHVDNjk0IQotZ2IuaWxsZWdhbExlYWRpbmdTbGFzaCA9IFx1QzgwMFx1QzdBNVx1QzE4QyBcdUM3NzRcdUI5ODQgXHVCNjEwXHVCMjk0IFx1RDNGNFx1QjM1NFx1QjI5NCAoLykgXHVCODVDIFx1QzJEQ1x1Qzc5MVx1RDU2MCBcdUMyMTggXHVDNUM2XHVDMkI1XHVCMkM4XHVCMkU0LgotZ2IuaWxsZWdhbFJlbGF0aXZlU2xhc2ggPSBcdUMwQzFcdUIzMDAgXHVBQ0JEXHVCODVDIFx1QzlDMFx1QzgxNSAoLi4vKSBcdUM3NDAgXHVDMEFDXHVDNkE5XHVENTYwIFx1QzIxOCBcdUM1QzZcdUMyQjVcdUIyQzhcdUIyRTQuLgotZ2IuaWxsZWdhbENoYXJhY3RlclJlcG9zaXRvcnlOYW1lID0gXHVCQjM4XHVDNzkwICcnezB9JycgXHVDODAwXHVDN0E1XHVDMThDIFx1Qzc3NFx1Qjk4NFx1QzVEMCBcdUMwQUNcdUM2QTlcdUQ1NjAgXHVDMjE4IFx1QzVDNlx1QzVCNFx1QzY5NCEKLWdiLnNlbGVjdEFjY2Vzc1Jlc3RyaWN0aW9uID0gXHVDODExXHVDMThEIFx1QUQ4Q1x1RDU1Q1x1Qzc0NCBcdUMxMjBcdUQwRERcdUQ1NThcdUMxMzhcdUM2OTQhCi1nYi5zZWxlY3RGZWRlcmF0aW9uU3RyYXRlZ3kgPSBcdUQzOThcdUIzNTRcdUI4MDhcdUM3NzRcdUMxNTggXHVDODE1XHVDQzQ1XHVDNzQ0IFx1QzEyMFx1RDBERFx1RDU1OFx1QzEzOFx1QzY5NCEKLWdiLnBsZWFzZVNldFRlYW1OYW1lID0gXHVEMzAwXHVDNzc0XHVCOTg0XHVDNzQ0IFx1Qzc4NVx1QjgyNVx1RDU1OFx1QzEzOFx1QzY5NCEKLWdiLnRlYW1OYW1lVW5hdmFpbGFibGUgPSAnJ3swfScnIFx1RDMwMFx1Qzc0MCBcdUMwQUNcdUM2QTlcdUQ1NjAgXHVDMjE4IFx1QzVDNlx1QzVCNFx1QzY5NC4KLWdiLnRlYW1NdXN0U3BlY2lmeVJlcG9zaXRvcnkgPSBcdUQzMDBcdUM3NDAgXHVDODAxXHVDNUI0XHVCM0M0IFx1RDU1OFx1QjA5OFx1Qzc1OCBcdUM4MDBcdUM3QTVcdUMxOENcdUI5N0MgXHVDOUMwXHVDODE1XHVENTc0XHVDNTdDIFx1RDU2OVx1QjJDOFx1QjJFNC4KLWdiLnRlYW1DcmVhdGVkID0gXHVDMEM4XHVCODVDXHVDNkI0IFx1RDMwMCAnJ3swfScnIFx1QzBERFx1QzEzMSBcdUM2NDRcdUI4Q0MuCi1nYi5wbGVhc2VTZXRVc2VybmFtZSA9IFx1QzcyMFx1QzgwMFx1QjEyNFx1Qzc4NFx1Qzc0NCBcdUM3ODVcdUI4MjVcdUQ1NThcdUMxMzhcdUM2OTQhCi1nYi51c2VybmFtZVVuYXZhaWxhYmxlID0gJyd7MH0nJyBcdUM3MjBcdUM4MDBcdUIxMjRcdUM3ODRcdUM3NDAgXHVDMEFDXHVDNkE5XHVENTYwIFx1QzIxOCBcdUM1QzZcdUM1QjRcdUM2OTQuCi1nYi5jb21iaW5lZE1kNVJlbmFtZSA9IEdpdGJsaXQgXHVDNzQwIGNvbWJpbmVkLW1kNSBcdUQ1NzRcdUMyRjEgXHVEMzI4XHVDMkE0XHVDNkNDXHVCNERDXHVCODVDIFx1QzEyNFx1QzgxNVx1QjQxOFx1QzVDOFx1QzJCNVx1QjJDOFx1QjJFNC4gXHVBQ0M0XHVDODE1IFx1Qzc3NFx1Qjk4NCBcdUJDQzBcdUFDQkQgXHVDMkRDIFx1QzBDOCBcdUQzMjhcdUMyQTRcdUM2Q0NcdUI0RENcdUI5N0MgXHVDNzg1XHVCODI1XHVENTc0XHVDNTdDIFx1RDU2OVx1QjJDOFx1QjJFNC4KLWdiLnVzZXJDcmVhdGVkID0gXHVDMEM4XHVCODVDXHVDNkI0IFx1QzcyMFx1QzgwMCAnJ3swfScnIFx1QzBERFx1QzEzMSBcdUM2NDRcdUI4Q0MuCi1nYi5jb3VsZE5vdEZpbmRGZWRlcmF0aW9uUmVnaXN0cmF0aW9uID0gXHVEMzk4XHVCMzU0XHVCODA4XHVDNzc0XHVDMTU4IFx1QjRGMVx1Qjg1RFx1Qzc0NCBcdUNDM0VcdUM3NDQgXHVDMjE4IFx1QzVDNlx1QzJCNVx1QjJDOFx1QjJFNCEKLWdiLmZhaWxlZFRvRmluZEdyYXZhdGFyUHJvZmlsZSA9IHswfSBcdUM3NTggR3JhdmF0YXIgXHVENTA0XHVCODVDXHVEMzBDXHVDNzdDIFx1Q0MzRVx1QUUzMCBcdUMyRTRcdUQzMjgKLWdiLmJyYW5jaFN0YXRzID0gezJ9IFx1QzU0OFx1QzVEMCB7MH0gXHVDRUU0XHVCQzBCIHsxfSBcdUQwRENcdUFERjgKLWdiLnJlcG9zaXRvcnlOb3RTcGVjaWZpZWQgPSBcdUM4MDBcdUM3QTVcdUMxOENcdUFDMDAgXHVDOUMwXHVDODE1XHVCNDE4XHVDOUMwIFx1QzU0QVx1Qzc0QyEKLWdiLnJlcG9zaXRvcnlOb3RTcGVjaWZpZWRGb3IgPSB7MH0gXHVCOTdDIFx1QzcwNFx1RDU1QyBcdUM4MDBcdUM3QTVcdUMxOENcdUFDMDAgXHVDOUMwXHVDODE1XHVCNDE4XHVDOUMwIFx1QzU0QVx1Qzc0QyEKLWdiLmNhbk5vdExvYWRSZXBvc2l0b3J5ID0gXHVDODAwXHVDN0E1XHVDMThDXHVCOTdDIFx1QkQ4OFx1QjdFQ1x1QzYyQyBcdUMyMTggXHVDNUM2XHVDNzRDCi1nYi5jb21taXRJc051bGwgPSBcdUIxMTAgXHVDRUU0XHVCQzBCCi1nYi51bmF1dGhvcml6ZWRBY2Nlc3NGb3JSZXBvc2l0b3J5ID0gXHVDODAwXHVDN0E1XHVDMThDXHVDNUQwIFx1QzgxMVx1QURGQyBcdUQ1QzhcdUM2QTlcdUI0MThcdUM5QzAgXHVDNTRBXHVDNzRDCi1nYi5mYWlsZWRUb0ZpbmRDb21taXQgPSBcdUNFRTRcdUJDMEJcdUM3NDQgXHVDQzNFXHVDNzQ0IFx1QzIxOCBcdUM1QzZcdUM3NEMgXCJ7MH1cIiBpbiB7MX0gZm9yIHsyfSBcdUQzOThcdUM3NzRcdUM5QzAhCi1nYi5jb3VsZE5vdEZpbmRGZWRlcmF0aW9uUHJvcG9zYWwgPSBcdUQzOThcdUIzNTRcdUI4MDhcdUM3NzRcdUMxNTggXHVDODFDXHVDNTQ4XHVDNzQ0IFx1Q0MzRVx1Qzc0NCBcdUMyMTggXHVDNUM2XHVDMkI1XHVCMkM4XHVCMkU0IQotZ2IuaW52YWxpZFVzZXJuYW1lT3JQYXNzd29yZCA9IFx1Qzc5OFx1QkFCQlx1QjQxQyBcdUM3MjBcdUM4MDBcdUIxMjRcdUM3ODQgXHVCNjEwXHVCMjk0IFx1RDMyOFx1QzJBNFx1QzZDQ1x1QjREQyEKLWdiLk9uZVByb3Bvc2FsVG9SZXZpZXcgPSBcdUFDODBcdUQxQTBcdUI5N0MgXHVBRTMwXHVCMkU0XHVCOUFDXHVBQ0UwIFx1Qzc4OFx1QjI5NCAxXHVBQzFDXHVDNzU4IFx1RDM5OFx1QjM1NFx1QjgwOFx1Qzc3NFx1QzE1OCBcdUM4MUNcdUM1NDhcdUM3NzQgXHVDNzg4XHVDMkI1XHVCMkM4XHVCMkU0LgotZ2IubkZlZGVyYXRpb25Qcm9wb3NhbHNUb1JldmlldyA9IFx1QUM4MFx1RDFBMFx1Qjk3QyBcdUFFMzBcdUIyRTRcdUI5QUNcdUFDRTAgXHVDNzg4XHVCMjk0IHswfSBcdUFDMUNcdUM3NTggXHVEMzk4XHVCMzU0XHVCODA4XHVDNzc0XHVDMTU4IFx1QzgxQ1x1QzU0OFx1Qzc3NCBcdUM3ODhcdUMyQjVcdUIyQzhcdUIyRTQuCi1nYi5jb3VsZE5vdEZpbmRUYWcgPSBcdUQwRENcdUFERjggezB9IFx1Qjk3QyhcdUM3NDQpIFx1Q0MzRVx1Qzc0NCBcdUMyMTggXHVDNUM2XHVDNzRDCi1nYi5jb3VsZE5vdENyZWF0ZUZlZGVyYXRpb25Qcm9wb3NhbCA9IFx1RDM5OFx1QjM1NFx1QjgwOFx1Qzc3NFx1QzE1OCBcdUM4MUNcdUM1NDggXHVDMEREXHVDMTMxIFx1QzJFNFx1RDMyOCEKLWdiLnBsZWFzZVNldEdpdGJsaXRVcmwgPSBHaXRibGl0IHVybCBcdUM3NDQgXHVDNzg1XHVCODI1XHVENTU4XHVDMTM4XHVDNjk0IQotZ2IucGxlYXNlU2V0RGVzdGluYXRpb25VcmwgPSBcdUIyRjlcdUMyRTBcdUM3NTggXHVDODFDXHVDNTQ4XHVDNUQwIFx1QjMwMFx1RDU1QyBcdUIzMDBcdUMwQzEgdXJsIFx1Qzc0NCBcdUM3ODVcdUI4MjVcdUQ1NThcdUMxMzhcdUM2OTQhCi1nYi5wcm9wb3NhbFJlY2VpdmVkID0gezB9IFx1Qzc1OCBcdUM4MUNcdUM1NDggXHVDMTMxXHVBQ0Y1XHVDODAxIFx1QzIxOFx1QzJFMAotZ2Iubm9HaXRibGl0Rm91bmQgPSBcdUM4QzRcdUMxQTFcdUQ1NjlcdUIyQzhcdUIyRTQsIEdpdGJsaXQgXHVDNzc4XHVDMkE0XHVEMTM0XHVDMkE0IHsxfSBcdUM1RDBcdUMxMUMgezB9IFx1Qjk3QyBcdUNDM0VcdUM3NDQgXHVDMjE4IFx1QzVDNlx1QzJCNVx1QjJDOFx1QjJFNC4KLWdiLm5vUHJvcG9zYWxzID0gXHVDOEM0XHVDMUExXHVENTY5XHVCMkM4XHVCMkU0LCBcdUM3NzRcdUJDODhcdUM1RDBcdUIyOTQgezB9IFx1Qzc1OCBcdUM4MUNcdUM1NDhcdUM3NDQgXHVDMjE4XHVDNkE5XHVENTU4XHVDOUMwIFx1QzU0QVx1QzU1OFx1QzJCNVx1QjJDOFx1QjJFNC4KLWdiLm5vRmVkZXJhdGlvbiA9IFx1QzhDNFx1QzFBMVx1RDU2OVx1QjJDOFx1QjJFNCwgezB9IFx1QzVEMFx1QjI5NCBcdUQzOThcdUIzNTRcdUI4MDhcdUM3NzRcdUMxNTggXHVDMTI0XHVDODE1XHVCNDFDIEdpdGJsaXQgXHVDNzc4XHVDMkE0XHVEMTM0XHVDMkE0XHVBQzAwIFx1QzVDNlx1QzJCNVx1QjJDOFx1QjJFNC4KLWdiLnByb3Bvc2FsRmFpbGVkID0gXHVDOEM0XHVDMUExXHVENTY5XHVCMkM4XHVCMkU0LCB7MH0gXHVDNUQwXHVCMjk0IFx1QzgxQ1x1QzU0OCBcdUIzNzBcdUM3NzRcdUQxMzBcdUI5N0MgXHVCQzFCXHVDOUMwIFx1QzU0QVx1QzU1OFx1QzJCNVx1QjJDOFx1QjJFNC4KLWdiLnByb3Bvc2FsRXJyb3IgPSBcdUM4QzRcdUMxQTFcdUQ1NjlcdUIyQzhcdUIyRTQsIHswfSBcdUM1RDAgXHVCMzAwXHVENTVDIFx1QzYyNFx1Qjk1OCBcdUJDMUNcdUMwREQgXHVCQ0Y0XHVBQ0UwCi1nYi5mYWlsZWRUb1NlbmRQcm9wb3NhbCA9IFx1QzgxQ1x1QzU0OCBcdUJDRjRcdUIwQjRcdUFFMzAgXHVDMkU0XHVEMzI4IQotZ2IudXNlclNlcnZpY2VEb2VzTm90UGVybWl0QWRkVXNlciA9IHswfSBcdUMwQzhcdUI4NUNcdUM2QjQgXHVDNzIwXHVDODAwXHVCOTdDIFx1Q0Q5NFx1QUMwMFx1RDU2MCBcdUMyMTggXHVDNUM2XHVDNzRDIQotZ2IudXNlclNlcnZpY2VEb2VzTm90UGVybWl0UGFzc3dvcmRDaGFuZ2VzID0gezB9IFx1RDMyOFx1QzJBNFx1QzZDQ1x1QjREQ1x1Qjk3QyBcdUJDQzBcdUFDQkRcdUQ1NjAgXHVDMjE4IFx1QzVDNlx1Qzc0QyEKLWdiLmRpc3BsYXlOYW1lID0gXHVENDVDXHVDMkRDXHVCNDE4XHVCMjk0IFx1Qzc3NFx1Qjk4NAotZ2IuZW1haWxBZGRyZXNzID0gXHVDNzc0XHVCQTU0XHVDNzdDIFx1QzhGQ1x1QzE4QwotZ2IuZXJyb3JBZG1pbkxvZ2luUmVxdWlyZWQgPSBcdUFEMDBcdUI5QUNcdUI5N0MgXHVDNzA0XHVENTc0XHVDMTFDXHVCMjk0IFx1Qjg1Q1x1QURGOFx1Qzc3OFx1Qzc3NCBcdUQ1NDRcdUM2OTQKLWdiLmVycm9yT25seUFkbWluTWF5Q3JlYXRlUmVwb3NpdG9yeSA9IFx1QUQwMFx1QjlBQ1x1Qzc5MFx1QjlDQyBcdUM4MDBcdUM3QTVcdUMxOENcdUI5N0MgXHVCOUNDXHVCNEU0XHVDMjE4IFx1Qzc4OFx1Qzc0QwotZ2IuZXJyb3JPbmx5QWRtaW5Pck93bmVyTWF5RWRpdFJlcG9zaXRvcnkgPSBcdUFEMDBcdUI5QUNcdUM3OTBcdUM2NDAgXHVDMThDXHVDNzIwXHVDNzkwXHVCOUNDIFx1QzgwMFx1QzdBNVx1QzE4Q1x1Qjk3QyBcdUMyMThcdUM4MTVcdUQ1NjAgXHVDMjE4IFx1Qzc4OFx1Qzc0QwotZ2IuZXJyb3JBZG1pbmlzdHJhdGlvbkRpc2FibGVkID0gXHVBRDAwXHVCOUFDXHVBRTMwXHVCMkE1IFx1QkU0NFx1RDY1Q1x1QzEzMVx1RDY1NFx1QjQyOAotZ2IubGFzdE5EYXlzID0gezB9IFx1Qzc3Q1x1QzgwNAotZ2IuY29tcGxldGVHcmF2YXRhclByb2ZpbGUgPSBHcmF2YXRhci5jb20gXHVDNUQwIFx1RDUwNFx1Qjg1Q1x1RDMwQ1x1Qzc3QyBcdUMwRERcdUMxMzFcdUI0MjgKK2diLmFjdGl2aXR5ID0gXHVjNTYxXHVkMmYwXHViZTQ0XHVkMmYwCitnYi5zdWJzY3JpYmUgPSBcdWFkNmNcdWIzYzUKK2diLmJyYW5jaCA9IFx1YmUwY1x1Yjc5Y1x1Y2U1OAorZ2IubWF4SGl0cyA9IFx1YjllNVx1YzJhNFx1ZDc4OFx1ZDJiOAorZ2IucmVjZW50QWN0aXZpdHkgPSBcdWNkNWNcdWFkZmMgXHVjNTYxXHVkMmYwXHViZTQ0XHVkMmYwCitnYi5yZWNlbnRBY3Rpdml0eVN0YXRzID0gXHVjOWMwXHViMDljIHswfVx1Yzc3YyAvIFx1Yzc5MVx1YzEzMVx1Yzc5MCB7Mn1cdWJhODVcdWM3NzQgezF9XHVhYzFjIFx1Y2VlNFx1YmMwYlx1ZDU2OAorZ2IucmVjZW50QWN0aXZpdHlOb25lID0gXHVjOWMwXHViMDljIHswfVx1Yzc3YyAvIFx1YzVjNlx1Yzc0YworZ2IuZGFpbHlBY3Rpdml0eSA9IFx1Yzc3Y1x1Yzc3YyBcdWM1NjFcdWQyZjBcdWJlNDRcdWQyZjAKK2diLmFjdGl2ZVJlcG9zaXRvcmllcyA9IFx1YzBhY1x1YzZhOVx1YzkxMVx1Yzc3OCBcdWM4MDBcdWM3YTVcdWMxOGMKK2diLmFjdGl2ZUF1dGhvcnMgPSBcdWMwYWNcdWM2YTlcdWM5MTFcdWM3NzggXHVjNzkxXHVjMTMxXHVjNzkwCitnYi5jb21taXRzID0gXHVjZWU0XHViYzBiCitnYi50ZWFtcyA9IFx1ZDMwMAorZ2IudGVhbU5hbWUgPSBcdWQzMDAgXHVjNzc0XHViOTg0CitnYi50ZWFtTWVtYmVycyA9IFx1ZDMwMCBcdWJhNjRcdWJjODQKK2diLnRlYW1NZW1iZXJzaGlwcyA9IFx1ZDMwMCBcdWI5ZjRcdWJjODRcdWMyN2QKK2diLm5ld1RlYW0gPSBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkMzAwCitnYi5wZXJtaXR0ZWRUZWFtcyA9IFx1ZDVjOFx1YzZhOVx1YjQxYyBcdWQzMDAKK2diLmVtcHR5UmVwb3NpdG9yeSA9IFx1YmU0OCBcdWM4MDBcdWM3YTVcdWMxOGMKK2diLnJlcG9zaXRvcnlVcmwgPSBcdWM4MDBcdWM3YTVcdWMxOGMgdXJsCitnYi5tYWlsaW5nTGlzdHMgPSBcdWJhNTRcdWM3N2NcdWI5YzEgXHViOWFjXHVjMmE0XHVkMmI4CitnYi5wcmVSZWNlaXZlU2NyaXB0cyA9IHByZS1yZWNlaXZlIFx1YzJhNFx1ZDA2Y1x1YjliZFx1ZDJiOAorZ2IucG9zdFJlY2VpdmVTY3JpcHRzID0gcG9zdC1yZWNlaXZlIFx1YzJhNFx1ZDA2Y1x1YjliZFx1ZDJiOAorZ2IuaG9va1NjcmlwdHMgPSBcdWQ2YzRcdWQwNmMgXHVjMmE0XHVkMDZjXHViOWJkXHVkMmI4CitnYi5jdXN0b21GaWVsZHMgPSBcdWMwYWNcdWM2YTlcdWM3OTAgXHVkNTQ0XHViNGRjCitnYi5jdXN0b21GaWVsZHNEZXNjcmlwdGlvbiA9IFx1YWRmOFx1YjhlOFx1YmU0NCBcdWQ2YzVcdWM1ZDAgXHVjMGFjXHVjNmE5XHVjNzkwIFx1ZDU0NFx1YjRkYyBcdWMwYWNcdWM2YTkgXHVhYzAwXHViMmE1CitnYi5hY2Nlc3NQZXJtaXNzaW9ucyA9IFx1YzgxMVx1YzE4ZCBcdWFkOGNcdWQ1NWMKK2diLmZpbHRlcnMgPSBcdWQ1NDRcdWQxMzAKK2diLmdlbmVyYWxEZXNjcmlwdGlvbiA9IFx1Yzc3Y1x1YmMxOCBcdWMxMjRcdWM4MTUKK2diLmFjY2Vzc1Blcm1pc3Npb25zRGVzY3JpcHRpb24gPSBcdWM3MjBcdWM4MDBcdWM2NDAgXHVkMzAwXHVjNzNjXHViODVjIFx1YzgxMVx1YzE4ZFx1YWQ4Y1x1ZDU1YyBcdWJkODBcdWM1ZWMKK2diLmFjY2Vzc1Blcm1pc3Npb25zRm9yVXNlckRlc2NyaXB0aW9uID0gXHVkMzAwXHVjNzQ0IFx1YzljMFx1YzgxNVx1ZDU1OFx1YWM3MFx1YjA5OCBcdWM4MTFcdWMxOGQgXHVhZDhjXHVkNTVjXHVjNzQ0IFx1YzljMFx1YzgxNVx1ZDU2MCBcdWM4MDBcdWM3YTVcdWMxOGMgXHVjMTIwXHVkMGRkCitnYi5hY2Nlc3NQZXJtaXNzaW9uc0ZvclRlYW1EZXNjcmlwdGlvbiA9IFx1ZDMwMCBcdWI5ZjRcdWJjODRcdWI5N2MgXHVjMTIwXHVkMGRkXHVkNTU4XHVhY2UwLCBcdWM4MTFcdWMxOGQgXHVhZDhjXHVkNTVjXHVjNzQ0IFx1YzljMFx1YzgxNVx1ZDU2MCBcdWM4MDBcdWM3YTVcdWMxOGMgXHVjMTIwXHVkMGRkCitnYi5mZWRlcmF0aW9uUmVwb3NpdG9yeURlc2NyaXB0aW9uID0gXHVjNzc0IFx1YzgwMFx1YzdhNVx1YzE4Y1x1Yjk3YyBcdWIyZTRcdWI5NzggR2l0YmxpdCBcdWMxMWNcdWJjODRcdWM2NDAgXHVhY2Y1XHVjNzIwCitnYi5ob29rU2NyaXB0c0Rlc2NyaXB0aW9uID0gXHVjNzc0IEdpdGJsaXQgXHVjMTFjXHViYzg0XHVjNWQwIFx1ZDQ3OFx1YzJkY1x1YjQxOFx1YmE3NCBcdWFkZjhcdWI4ZThcdWJlNDQoR3Jvb3Z5KSBcdWMyYTRcdWQwNmNcdWI5YmRcdWQyYjhcdWI5N2MgXHVjMmU0XHVkNTg5CitnYi5yZXNldCA9IFx1YjlhY1x1YzE0YgorZ2IucGFnZXMgPSBcdWQzOThcdWM3NzRcdWM5YzAKK2diLndvcmtpbmdDb3B5ID0gXHVjNmNjXHVkMGI5IFx1Y2U3NFx1ZDUzYworZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gXHVjNzc0IFx1YzgwMFx1YzdhNVx1YzE4Y1x1YjI5NCBcdWM2Y2NcdWQwYjlcdWNlNzRcdWQ1M2NcdWI5N2MgXHVhYzAwXHVjOWMwXHVhY2UwIFx1Yzc4OFx1YWNlMCBcdWQ0NzhcdWMyZGNcdWI5N2MgXHViYzFiXHVjNzQ0IFx1YzIxOCBcdWM1YzZcdWM3NGMKK2diLnF1ZXJ5ID0gXHVjZmZjXHViOWFjCitnYi5xdWVyeUhlbHAgPSBcdWQ0NWNcdWM5MDAgXHVjZmZjXHViOWFjIFx1YmIzOFx1YmM5NVx1Yzc0NCBcdWM5YzBcdWM2ZDAuPHAvPjxwLz5cdWM3OTBcdWMxMzhcdWQ1NWMgXHVhYzgzXHVjNzQ0IFx1YzZkMFx1ZDU1Y1x1YjJlNFx1YmE3NCAke3F1ZXJ5U3ludGF4fSBcdWM3NDQgXHViYzI5XHViYjM4XHVkNTc0IFx1YzhmY1x1YzEzOFx1YzY5NC4KK2diLnF1ZXJ5U3ludGF4ID0gXHViOGU4XHVjMmUwIFx1Y2ZmY1x1YjlhYyBcdWQzMGNcdWMxMWMgXHViYjM4XHViYzk1CitnYi5xdWVyeVJlc3VsdHMgPSBcdWFjODBcdWMwYzlcdWFjYjBcdWFjZmMgezB9IC0gezF9ICh7Mn1cdWFjMWMgXHVhYzgwXHVjMGM5XHViNDI4KQorZ2Iubm9IaXRzID0gXHVhYzgwXHVjMGM5IFx1YWNiMFx1YWNmYyBcdWM1YzZcdWM3NGMKK2diLmF1dGhvcmVkID0gXHVhYzAwIFx1Yzc5MVx1YzEzMVx1ZDU2OC4KK2diLmNvbW1pdHRlZCA9IFx1Y2VlNFx1YmMwYlx1YjQyOAorZ2IuaW5kZXhlZEJyYW5jaGVzID0gXHVjNzc4XHViMzcxXHVjMmYxXHVkNTYwIFx1YmUwY1x1Yjc5Y1x1Y2U1OAorZ2IuaW5kZXhlZEJyYW5jaGVzRGVzY3JpcHRpb24gPSBcdWI4ZThcdWMyZTAgXHVjNzc4XHViMzcxXHVjMmE0XHVjNWQwIFx1ZDNlY1x1ZDU2OFx1ZDU2MCBcdWJlMGNcdWI3OWNcdWNlNTggXHVjMTIwXHVkMGRkCitnYi5ub0luZGV4ZWRSZXBvc2l0b3JpZXNXYXJuaW5nID0gXHVjODAwXHVjN2E1XHVjMThjXHVhYzAwIFx1YjhlOFx1YzJlMCBcdWM3NzhcdWIzNzFcdWMyZjFcdWM1ZDAgXHVjMTI0XHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworZ2IudW5kZWZpbmVkUXVlcnlXYXJuaW5nID0gXHVjZmZjXHViOWFjIFx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMhCitnYi5ub1NlbGVjdGVkUmVwb3NpdG9yaWVzV2FybmluZyA9IFx1ZDU1OFx1YjA5OCBcdWI2MTBcdWIyOTQgXHVhZGY4IFx1Yzc3NFx1YzBjMVx1Yzc1OCBcdWM4MDBcdWM3YTVcdWMxOGNcdWI5N2MgXHVjMTIwXHVkMGRkXHVkNTU4XHVjMTM4XHVjNjk0IQorZ2IubHVjZW5lRGlzYWJsZWQgPSBcdWI4ZThcdWMyZTAgXHVjNzc4XHViMzcxXHVjMmYxIFx1YzkxMVx1YzljMFx1YjQyOAorZ2IuZmFpbGVkdG9SZWFkID0gXHVjNzdjXHVhZTMwIFx1YzJlNFx1ZDMyOAorZ2IuaXNOb3RWYWxpZEZpbGUgPSBcdWM3MjBcdWQ2YThcdWQ1NWMgXHVkMzBjXHVjNzdjXHVjNzc0IFx1YzU0NFx1YjJkOAorZ2IuZmFpbGVkVG9SZWFkTWVzc2FnZSA9IHswfVx1YzVkMFx1YzExYyBcdWI1MTRcdWQzZjRcdWQyYjggXHViYTU0XHVjMmRjXHVjOWMwIFx1Yzc3Y1x1YWUzMCBcdWMyZTRcdWQzMjghCitnYi5wYXNzd29yZHNEb05vdE1hdGNoID0gXHVkMzI4XHVjMmE0XHVjNmNjXHViNGRjXHVhYzAwIFx1Yzc3Y1x1Y2U1OFx1ZDU1OFx1YzljMCBcdWM1NGFcdWM1NDRcdWM2OTQhCitnYi5wYXNzd29yZFRvb1Nob3J0ID0gXHVkMzI4XHVjMmE0XHVjNmNjXHViNGRjXHVhYzAwIFx1YjEwOFx1YmIzNCBcdWM5ZTdcdWM1NDRcdWM2OTQuIFx1YzgwMVx1YzViNFx1YjNjNCB7MH0gXHVhYzFjIFx1YmIzOFx1Yzc5MFx1YzVlY1x1YzU3YyBcdWQ1NjlcdWIyYzhcdWIyZTQuCitnYi5wYXNzd29yZENoYW5nZWQgPSBcdWQzMjhcdWMyYTRcdWM2Y2NcdWI0ZGNcdWFjMDAgXHViY2MwXHVhY2JkIFx1YzEzMVx1YWNmNS4KK2diLnBhc3N3b3JkQ2hhbmdlQWJvcnRlZCA9IFx1ZDMyOFx1YzJhNFx1YzZjY1x1YjRkYyBcdWJjYzBcdWFjYmQgXHVjZGU4XHVjMThjXHViNDI4LgorZ2IucGxlYXNlU2V0UmVwb3NpdG9yeU5hbWUgPSBcdWM4MDBcdWM3YTVcdWMxOGMgXHVjNzc0XHViOTg0XHVjNzQ0IFx1Yzc4NVx1YjgyNVx1ZDU1OFx1YzEzOFx1YzY5NCEKK2diLmlsbGVnYWxMZWFkaW5nU2xhc2ggPSBcdWM4MDBcdWM3YTVcdWMxOGMgXHVjNzc0XHViOTg0IFx1YjYxMFx1YjI5NCBcdWQzZjRcdWIzNTRcdWIyOTQgKC8pIFx1Yjg1YyBcdWMyZGNcdWM3OTFcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1YzJiNVx1YjJjOFx1YjJlNC4KK2diLmlsbGVnYWxSZWxhdGl2ZVNsYXNoID0gXHVjMGMxXHViMzAwIFx1YWNiZFx1Yjg1YyBcdWM5YzBcdWM4MTUgKC4uLykgXHVjNzQwIFx1YzBhY1x1YzZhOVx1ZDU2MCBcdWMyMTggXHVjNWM2XHVjMmI1XHViMmM4XHViMmU0Li4KK2diLmlsbGVnYWxDaGFyYWN0ZXJSZXBvc2l0b3J5TmFtZSA9IFx1YmIzOFx1Yzc5MCAnJ3swfScnIFx1YzgwMFx1YzdhNVx1YzE4YyBcdWM3NzRcdWI5ODRcdWM1ZDAgXHVjMGFjXHVjNmE5XHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM1YjRcdWM2OTQhCitnYi5zZWxlY3RBY2Nlc3NSZXN0cmljdGlvbiA9IFx1YzgxMVx1YzE4ZCBcdWFkOGNcdWQ1NWNcdWM3NDQgXHVjMTIwXHVkMGRkXHVkNTU4XHVjMTM4XHVjNjk0IQorZ2Iuc2VsZWN0RmVkZXJhdGlvblN0cmF0ZWd5ID0gXHVkMzk4XHViMzU0XHViODA4XHVjNzc0XHVjMTU4IFx1YzgxNVx1Y2M0NVx1Yzc0NCBcdWMxMjBcdWQwZGRcdWQ1NThcdWMxMzhcdWM2OTQhCitnYi5wbGVhc2VTZXRUZWFtTmFtZSA9IFx1ZDMwMFx1Yzc3NFx1Yjk4NFx1Yzc0NCBcdWM3ODVcdWI4MjVcdWQ1NThcdWMxMzhcdWM2OTQhCitnYi50ZWFtTmFtZVVuYXZhaWxhYmxlID0gJyd7MH0nJyBcdWQzMDBcdWM3NDAgXHVjMGFjXHVjNmE5XHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM1YjRcdWM2OTQuCitnYi50ZWFtTXVzdFNwZWNpZnlSZXBvc2l0b3J5ID0gXHVkMzAwXHVjNzQwIFx1YzgwMVx1YzViNFx1YjNjNCBcdWQ1NThcdWIwOThcdWM3NTggXHVjODAwXHVjN2E1XHVjMThjXHViOTdjIFx1YzljMFx1YzgxNVx1ZDU3NFx1YzU3YyBcdWQ1NjlcdWIyYzhcdWIyZTQuCitnYi50ZWFtQ3JlYXRlZCA9IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQzMDAgJyd7MH0nJyBcdWMwZGRcdWMxMzEgXHVjNjQ0XHViOGNjLgorZ2IucGxlYXNlU2V0VXNlcm5hbWUgPSBcdWM3MjBcdWM4MDBcdWIxMjRcdWM3ODRcdWM3NDQgXHVjNzg1XHViODI1XHVkNTU4XHVjMTM4XHVjNjk0IQorZ2IudXNlcm5hbWVVbmF2YWlsYWJsZSA9ICcnezB9JycgXHVjNzIwXHVjODAwXHViMTI0XHVjNzg0XHVjNzQwIFx1YzBhY1x1YzZhOVx1ZDU2MCBcdWMyMTggXHVjNWM2XHVjNWI0XHVjNjk0LgorZ2IuY29tYmluZWRNZDVSZW5hbWUgPSBHaXRibGl0IFx1Yzc0MCBjb21iaW5lZC1tZDUgXHVkNTc0XHVjMmYxIFx1ZDMyOFx1YzJhNFx1YzZjY1x1YjRkY1x1Yjg1YyBcdWMxMjRcdWM4MTVcdWI0MThcdWM1YzhcdWMyYjVcdWIyYzhcdWIyZTQuIFx1YWNjNFx1YzgxNSBcdWM3NzRcdWI5ODQgXHViY2MwXHVhY2JkIFx1YzJkYyBcdWMwYzggXHVkMzI4XHVjMmE0XHVjNmNjXHViNGRjXHViOTdjIFx1Yzc4NVx1YjgyNVx1ZDU3NFx1YzU3YyBcdWQ1NjlcdWIyYzhcdWIyZTQuCitnYi51c2VyQ3JlYXRlZCA9IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM3MjBcdWM4MDAgJyd7MH0nJyBcdWMwZGRcdWMxMzEgXHVjNjQ0XHViOGNjLgorZ2IuY291bGROb3RGaW5kRmVkZXJhdGlvblJlZ2lzdHJhdGlvbiA9IFx1ZDM5OFx1YjM1NFx1YjgwOFx1Yzc3NFx1YzE1OCBcdWI0ZjFcdWI4NWRcdWM3NDQgXHVjYzNlXHVjNzQ0IFx1YzIxOCBcdWM1YzZcdWMyYjVcdWIyYzhcdWIyZTQhCitnYi5mYWlsZWRUb0ZpbmRHcmF2YXRhclByb2ZpbGUgPSB7MH0gXHVjNzU4IEdyYXZhdGFyIFx1ZDUwNFx1Yjg1Y1x1ZDMwY1x1Yzc3YyBcdWNjM2VcdWFlMzAgXHVjMmU0XHVkMzI4CitnYi5icmFuY2hTdGF0cyA9IHsyfSBcdWM1NDhcdWM1ZDAgezB9IFx1Y2VlNFx1YmMwYiB7MX0gXHVkMGRjXHVhZGY4CitnYi5yZXBvc2l0b3J5Tm90U3BlY2lmaWVkID0gXHVjODAwXHVjN2E1XHVjMThjXHVhYzAwIFx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMhCitnYi5yZXBvc2l0b3J5Tm90U3BlY2lmaWVkRm9yID0gezB9IFx1Yjk3YyBcdWM3MDRcdWQ1NWMgXHVjODAwXHVjN2E1XHVjMThjXHVhYzAwIFx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMhCitnYi5jYW5Ob3RMb2FkUmVwb3NpdG9yeSA9IFx1YzgwMFx1YzdhNVx1YzE4Y1x1Yjk3YyBcdWJkODhcdWI3ZWNcdWM2MmMgXHVjMjE4IFx1YzVjNlx1Yzc0YworZ2IuY29tbWl0SXNOdWxsID0gXHViMTEwIFx1Y2VlNFx1YmMwYgorZ2IudW5hdXRob3JpemVkQWNjZXNzRm9yUmVwb3NpdG9yeSA9IFx1YzgwMFx1YzdhNVx1YzE4Y1x1YzVkMCBcdWM4MTFcdWFkZmMgXHVkNWM4XHVjNmE5XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworZ2IuZmFpbGVkVG9GaW5kQ29tbWl0ID0gXHVjZWU0XHViYzBiXHVjNzQ0IFx1Y2MzZVx1Yzc0NCBcdWMyMTggXHVjNWM2XHVjNzRjIFwiezB9XCIgaW4gezF9IGZvciB7Mn0gXHVkMzk4XHVjNzc0XHVjOWMwIQorZ2IuY291bGROb3RGaW5kRmVkZXJhdGlvblByb3Bvc2FsID0gXHVkMzk4XHViMzU0XHViODA4XHVjNzc0XHVjMTU4IFx1YzgxY1x1YzU0OFx1Yzc0NCBcdWNjM2VcdWM3NDQgXHVjMjE4IFx1YzVjNlx1YzJiNVx1YjJjOFx1YjJlNCEKK2diLmludmFsaWRVc2VybmFtZU9yUGFzc3dvcmQgPSBcdWM3OThcdWJhYmJcdWI0MWMgXHVjNzIwXHVjODAwXHViMTI0XHVjNzg0IFx1YjYxMFx1YjI5NCBcdWQzMjhcdWMyYTRcdWM2Y2NcdWI0ZGMhCitnYi5PbmVQcm9wb3NhbFRvUmV2aWV3ID0gXHVhYzgwXHVkMWEwXHViOTdjIFx1YWUzMFx1YjJlNFx1YjlhY1x1YWNlMCBcdWM3ODhcdWIyOTQgMVx1YWMxY1x1Yzc1OCBcdWQzOThcdWIzNTRcdWI4MDhcdWM3NzRcdWMxNTggXHVjODFjXHVjNTQ4XHVjNzc0IFx1Yzc4OFx1YzJiNVx1YjJjOFx1YjJlNC4KK2diLm5GZWRlcmF0aW9uUHJvcG9zYWxzVG9SZXZpZXcgPSBcdWFjODBcdWQxYTBcdWI5N2MgXHVhZTMwXHViMmU0XHViOWFjXHVhY2UwIFx1Yzc4OFx1YjI5NCB7MH0gXHVhYzFjXHVjNzU4IFx1ZDM5OFx1YjM1NFx1YjgwOFx1Yzc3NFx1YzE1OCBcdWM4MWNcdWM1NDhcdWM3NzQgXHVjNzg4XHVjMmI1XHViMmM4XHViMmU0LgorZ2IuY291bGROb3RGaW5kVGFnID0gXHVkMGRjXHVhZGY4IHswfSBcdWI5N2MoXHVjNzQ0KSBcdWNjM2VcdWM3NDQgXHVjMjE4IFx1YzVjNlx1Yzc0YworZ2IuY291bGROb3RDcmVhdGVGZWRlcmF0aW9uUHJvcG9zYWwgPSBcdWQzOThcdWIzNTRcdWI4MDhcdWM3NzRcdWMxNTggXHVjODFjXHVjNTQ4IFx1YzBkZFx1YzEzMSBcdWMyZTRcdWQzMjghCitnYi5wbGVhc2VTZXRHaXRibGl0VXJsID0gR2l0YmxpdCB1cmwgXHVjNzQ0IFx1Yzc4NVx1YjgyNVx1ZDU1OFx1YzEzOFx1YzY5NCEKK2diLnBsZWFzZVNldERlc3RpbmF0aW9uVXJsID0gXHViMmY5XHVjMmUwXHVjNzU4IFx1YzgxY1x1YzU0OFx1YzVkMCBcdWIzMDBcdWQ1NWMgXHViMzAwXHVjMGMxIHVybCBcdWM3NDQgXHVjNzg1XHViODI1XHVkNTU4XHVjMTM4XHVjNjk0IQorZ2IucHJvcG9zYWxSZWNlaXZlZCA9IHswfSBcdWM3NTggXHVjODFjXHVjNTQ4IFx1YzEzMVx1YWNmNVx1YzgwMSBcdWMyMThcdWMyZTAKK2diLm5vR2l0YmxpdEZvdW5kID0gXHVjOGM0XHVjMWExXHVkNTY5XHViMmM4XHViMmU0LCBHaXRibGl0IFx1Yzc3OFx1YzJhNFx1ZDEzNFx1YzJhNCB7MX0gXHVjNWQwXHVjMTFjIHswfSBcdWI5N2MgXHVjYzNlXHVjNzQ0IFx1YzIxOCBcdWM1YzZcdWMyYjVcdWIyYzhcdWIyZTQuCitnYi5ub1Byb3Bvc2FscyA9IFx1YzhjNFx1YzFhMVx1ZDU2OVx1YjJjOFx1YjJlNCwgXHVjNzc0XHViYzg4XHVjNWQwXHViMjk0IHswfSBcdWM3NTggXHVjODFjXHVjNTQ4XHVjNzQ0IFx1YzIxOFx1YzZhOVx1ZDU1OFx1YzljMCBcdWM1NGFcdWM1NThcdWMyYjVcdWIyYzhcdWIyZTQuCitnYi5ub0ZlZGVyYXRpb24gPSBcdWM4YzRcdWMxYTFcdWQ1NjlcdWIyYzhcdWIyZTQsIHswfSBcdWM1ZDBcdWIyOTQgXHVkMzk4XHViMzU0XHViODA4XHVjNzc0XHVjMTU4IFx1YzEyNFx1YzgxNVx1YjQxYyBHaXRibGl0IFx1Yzc3OFx1YzJhNFx1ZDEzNFx1YzJhNFx1YWMwMCBcdWM1YzZcdWMyYjVcdWIyYzhcdWIyZTQuCitnYi5wcm9wb3NhbEZhaWxlZCA9IFx1YzhjNFx1YzFhMVx1ZDU2OVx1YjJjOFx1YjJlNCwgezB9IFx1YzVkMFx1YjI5NCBcdWM4MWNcdWM1NDggXHViMzcwXHVjNzc0XHVkMTMwXHViOTdjIFx1YmMxYlx1YzljMCBcdWM1NGFcdWM1NThcdWMyYjVcdWIyYzhcdWIyZTQuCitnYi5wcm9wb3NhbEVycm9yID0gXHVjOGM0XHVjMWExXHVkNTY5XHViMmM4XHViMmU0LCB7MH0gXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWM2MjRcdWI5NTggXHViYzFjXHVjMGRkIFx1YmNmNFx1YWNlMAorZ2IuZmFpbGVkVG9TZW5kUHJvcG9zYWwgPSBcdWM4MWNcdWM1NDggXHViY2Y0XHViMGI0XHVhZTMwIFx1YzJlNFx1ZDMyOCEKK2diLnVzZXJTZXJ2aWNlRG9lc05vdFBlcm1pdEFkZFVzZXIgPSB7MH0gXHVjMGM4XHViODVjXHVjNmI0IFx1YzcyMFx1YzgwMFx1Yjk3YyBcdWNkOTRcdWFjMDBcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1Yzc0YyEKK2diLnVzZXJTZXJ2aWNlRG9lc05vdFBlcm1pdFBhc3N3b3JkQ2hhbmdlcyA9IHswfSBcdWQzMjhcdWMyYTRcdWM2Y2NcdWI0ZGNcdWI5N2MgXHViY2MwXHVhY2JkXHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM3NGMhCitnYi5kaXNwbGF5TmFtZSA9IFx1ZDQ1Y1x1YzJkY1x1YjQxOFx1YjI5NCBcdWM3NzRcdWI5ODQKK2diLmVtYWlsQWRkcmVzcyA9IFx1Yzc3NFx1YmE1NFx1Yzc3YyBcdWM4ZmNcdWMxOGMKK2diLmVycm9yQWRtaW5Mb2dpblJlcXVpcmVkID0gXHVhZDAwXHViOWFjXHViOTdjIFx1YzcwNFx1ZDU3NFx1YzExY1x1YjI5NCBcdWI4NWNcdWFkZjhcdWM3NzhcdWM3NzQgXHVkNTQ0XHVjNjk0CitnYi5lcnJvck9ubHlBZG1pbk1heUNyZWF0ZVJlcG9zaXRvcnkgPSBcdWFkMDBcdWI5YWNcdWM3OTBcdWI5Y2MgXHVjODAwXHVjN2E1XHVjMThjXHViOTdjIFx1YjljY1x1YjRlNFx1YzIxOCBcdWM3ODhcdWM3NGMKK2diLmVycm9yT25seUFkbWluT3JPd25lck1heUVkaXRSZXBvc2l0b3J5ID0gXHVhZDAwXHViOWFjXHVjNzkwXHVjNjQwIFx1YzE4Y1x1YzcyMFx1Yzc5MFx1YjljYyBcdWM4MDBcdWM3YTVcdWMxOGNcdWI5N2MgXHVjMjE4XHVjODE1XHVkNTYwIFx1YzIxOCBcdWM3ODhcdWM3NGMKK2diLmVycm9yQWRtaW5pc3RyYXRpb25EaXNhYmxlZCA9IFx1YWQwMFx1YjlhY1x1YWUzMFx1YjJhNSBcdWJlNDRcdWQ2NWNcdWMxMzFcdWQ2NTRcdWI0MjgKK2diLmxhc3RORGF5cyA9IHswfSBcdWM3N2NcdWM4MDQKK2diLmNvbXBsZXRlR3JhdmF0YXJQcm9maWxlID0gR3JhdmF0YXIuY29tIFx1YzVkMCBcdWQ1MDRcdWI4NWNcdWQzMGNcdWM3N2MgXHVjMGRkXHVjMTMxXHViNDI4CiBnYi5ub25lID0gbm9uZQogZ2IubGluZSA9IFx1Qjc3Q1x1Qzc3OAogZ2IuY29udGVudCA9IFx1QjBCNFx1QzZBOQpAQCAtNzgyLDQgKzc4Myw0IEBACiBnYi5kZWxldGVQYXRjaHNldFN1Y2Nlc3MgPSB7MH0gXHVEMzI4XHVDRTU4XHVDMTRCXHVDNzc0IFx1QzBBRFx1QzgxQ1x1QjQxOFx1QzVDOFx1QzVCNFx1QzY5NC4KIGdiLmRlbGV0ZVBhdGNoc2V0RmFpbHVyZSA9IHswfSBcdUQzMjhcdUNFNThcdUMxNEIgXHVDMEFEXHVDODFDIFx1QzYyNFx1Qjk1OC4KIGdiLnJlZmVyZW5jZWRCeUNvbW1pdCA9IFx1Q0VFNFx1QkMwQlx1QzVEMCBcdUNDMzhcdUM4NzBcdUI0MjguCi1nYi5yZWZlcmVuY2VkQnlUaWNrZXQgPSBcdUQyRjBcdUNGMTNcdUM1RDAgXHVDQzM4XHVDODcwXHVCNDI4LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2diLnJlZmVyZW5jZWRCeVRpY2tldCA9IFx1RDJGMFx1Q0YxM1x1QzVEMCBcdUNDMzhcdUM4NzBcdUI0MjguCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX25sLnByb3BlcnRpZXMgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX25sLnByb3BlcnRpZXMKaW5kZXggZjcxZDY3ZC4uNDE2NTZlOCAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9ubC5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfbmwucHJvcGVydGllcwpAQCAtMjE4LDcgKzIxOCw4IEBACiBnYi53b3JraW5nQ29weSA9IHdlcmtrb3BpZQogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gZGV6ZSByZXBvc2l0b3JpZSBoZWVmdCBlZW4gd2Vya2tvcGllIGVuIGthbiBnZWVuIHB1c2hlcyBvbnR2YW5nZW4KIGdiLnF1ZXJ5ID0gcXVlcnkKLWdiLnF1ZXJ5SGVscCA9IFN0YW5kYWFyZCBxdWVyeSBzeW50YXggd29yZHQgb25kZXJzdGV1bmQuPHAvPjxwLz5aaWUgYXViIDxhIHRhcmdldD0iX25ldyIgaHJlZj0iaHR0cDovL2x1Y2VuZS5hcGFjaGUub3JnL2NvcmUvb2xkX3ZlcnNpb25lZF9kb2NzL3ZlcnNpb25zLzNfNV8wL3F1ZXJ5cGFyc2Vyc3ludGF4Lmh0bWwiPkx1Y2VuZSBRdWVyeSBQYXJzZXIgU3ludGF4PC9hPiB2b29yIGluZm9ybWF0aWUuCitnYi5xdWVyeUhlbHAgPSBTdGFuZGFhcmQgcXVlcnkgc3ludGF4IHdvcmR0IG9uZGVyc3RldW5kLjxwLz48cC8+WmllIGF1YiAke3F1ZXJ5U3ludGF4fSB2b29yIGluZm9ybWF0aWUuCitnYi5xdWVyeVN5bnRheCA9IEx1Y2VuZSBRdWVyeSBQYXJzZXIgU3ludGF4CiBnYi5xdWVyeVJlc3VsdHMgPSByZXN1bHRhdGVuIHswfSAtIHsxfSAoezJ9IGhpdHMpCiBnYi5ub0hpdHMgPSBnZWVuIGhpdHMKIGdiLmF1dGhvcmVkID0gZ2VzY2hyZXZlbgpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9uby5wcm9wZXJ0aWVzIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9uby5wcm9wZXJ0aWVzCmluZGV4IGVmYzEzYTEuLmEwMmEzMGYgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfbm8ucHJvcGVydGllcworKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX25vLnByb3BlcnRpZXMKQEAgLTIxOCw3ICsyMTgsOCBAQAogZ2Iud29ya2luZ0NvcHkgPSBhcmJlaWRza29waQogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gZGV0dGUgcmVwb3NpdG9yaWV0IGhhciBlbiBhcmJlaWRza29waSwgb2cga2FuIGlra2UgcHVzaGVzIHRpbC4KIGdiLnF1ZXJ5ID0gc3BcdTAwRjhycmluZwotZ2IucXVlcnlIZWxwID0gU3RhbmRhcmQgbHVjZW5lIHNwXHUwMEY4cnJpbmdzc3ludGFrcyBzdFx1MDBGOHR0ZXMuPHAvPjxwLz5TZSA8YSB0YXJnZXQ9Il9uZXciIGhyZWY9Imh0dHA6Ly9sdWNlbmUuYXBhY2hlLm9yZy9jb3JlL29sZF92ZXJzaW9uZWRfZG9jcy92ZXJzaW9ucy8zXzVfMC9xdWVyeXBhcnNlcnN5bnRheC5odG1sIj5MdWNlbmUgUXVlcnkgUGFyc2VyIFN5bnRheDwvYT4gZm9yIG1lciBpbmZvLgorZ2IucXVlcnlIZWxwID0gU3RhbmRhcmQgbHVjZW5lIHNwXHUwMEY4cnJpbmdzc3ludGFrcyBzdFx1MDBGOHR0ZXMuPHAvPjxwLz5TZSAke3F1ZXJ5U3ludGF4fSBmb3IgbWVyIGluZm8uCitnYi5xdWVyeVN5bnRheCA9IEx1Y2VuZSBRdWVyeSBQYXJzZXIgU3ludGF4CiBnYi5xdWVyeVJlc3VsdHMgPSByZXN1bHRhdGVyIHswfSAtIHsxfSAoezJ9IHRyZWZmKQogZ2Iubm9IaXRzID0gaW5nZW4gdHJlZmYKIGdiLmF1dGhvcmVkID0gZm9yZmF0dGV0CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX3BsLnByb3BlcnRpZXMgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX3BsLnByb3BlcnRpZXMKaW5kZXggYjAwZDFmZi4uZmVlNGI5NyAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9wbC5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfcGwucHJvcGVydGllcwpAQCAtMjE3LDcgKzIxNyw4IEBACiBnYi53b3JraW5nQ29weSA9IEtvcGlhIHJvYm9jemEKIGdiLndvcmtpbmdDb3B5V2FybmluZyA9IFRvIHJlcG96eXRvcml1bSBtYSBrb3BpXHUwMTE5IHJvYm9jelx1MDEwNSBpIG5pZSBtb1x1MDE3Q2Ugb3RyenlteXdhXHUwMTA3IHptaWFuCiBnYi5xdWVyeSA9IFN6dWthagotZ2IucXVlcnlIZWxwID0gU3RhbmRhcmRvd2Egc2tcdTAxNDJhZG5pYSB3eXN6dWtpd2FcdTAxNDQgamVzdCB3c3BpZXJhbmEuPHAvPjxwLz5OYSBzdHJvbmllIDxhIHRhcmdldD0iX25ldyIgaHJlZj0iaHR0cDovL2x1Y2VuZS5hcGFjaGUub3JnL2NvcmUvb2xkX3ZlcnNpb25lZF9kb2NzL3ZlcnNpb25zLzNfNV8wL3F1ZXJ5cGFyc2Vyc3ludGF4Lmh0bWwiPkx1Y2VuZSBRdWVyeSBQYXJzZXIgU3ludGF4PC9hPiBkb3N0XHUwMTE5cG5lIHNcdTAxMDUgZGFsc3plIHN6Y3plZ1x1MDBGM1x1MDE0MnkuCitnYi5xdWVyeUhlbHAgPSBTdGFuZGFyZG93YSBza1x1MDE0MmFkbmlhIHd5c3p1a2l3YVx1MDE0NCBqZXN0IHdzcGllcmFuYS48cC8+PHAvPk5hIHN0cm9uaWUgJHtxdWVyeVN5bnRheH0gZG9zdFx1MDExOXBuZSBzXHUwMTA1IGRhbHN6ZSBzemN6ZWdcdTAwRjNcdTAxNDJ5LgorZ2IucXVlcnlTeW50YXggPSBMdWNlbmUgUXVlcnkgUGFyc2VyIFN5bnRheAogZ2IucXVlcnlSZXN1bHRzID0gV3luaWtpIHswfSAtIHsxfSAoezJ9IHd5bmlrXHUwMEYzdykKIGdiLm5vSGl0cyA9IEJyYWsgd3luaWtcdTAwRjN3CiBnYi5hdXRob3JlZCA9IHV0d29yenlcdTAxNDIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfcHRfQlIucHJvcGVydGllcyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfcHRfQlIucHJvcGVydGllcwppbmRleCA0ZDJlYTU1Li5iNTczNzkyIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX3B0X0JSLnByb3BlcnRpZXMKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF9wdF9CUi5wcm9wZXJ0aWVzCkBAIC0yMTcsNyArMjE3LDggQEAKIGdiLndvcmtpbmdDb3B5ID0gd29ya2luZyBjb3B5DQogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gZXN0ZSByZXBvc2l083JpbyB0ZW0gdW1hIHdvcmtpbmcgY29weSBlIG7jbyBwb2RlIHJlY2ViZXIgcHVzaGVzDQogZ2IucXVlcnkgPSBxdWVyeQ0KLWdiLnF1ZXJ5SGVscCA9ICBTdGFuZGFyZCBxdWVyeSBzeW50YXgg6SBzdXBvcnRhZGEuPHAvPjxwLz5Qb3IgZmF2b3IgdmVqYSA8YSB0YXJnZXQ9Il9uZXciIGhyZWY9Imh0dHA6Ly9sdWNlbmUuYXBhY2hlLm9yZy9jb3JlL29sZF92ZXJzaW9uZWRfZG9jcy92ZXJzaW9ucy8zXzVfMC9xdWVyeXBhcnNlcnN5bnRheC5odG1sIj5MdWNlbmUgUXVlcnkgUGFyc2VyIFN5bnRheDwvYT4gcGFyYSBtYWlzIGRldGFsaGVzLg0KK2diLnF1ZXJ5SGVscCA9IFN0YW5kYXJkIHF1ZXJ5IHN5bnRheCDpIHN1cG9ydGFkYS48cC8+PHAvPlBvciBmYXZvciB2ZWphICR7cXVlcnlTeW50YXh9IHBhcmEgbWFpcyBkZXRhbGhlcy4NCitnYi5xdWVyeVN5bnRheCA9IEx1Y2VuZSBRdWVyeSBQYXJzZXIgU3ludGF4DQogZ2IucXVlcnlSZXN1bHRzID0gcmVzdWx0YWRvcyB7MH0gLSB7MX0gKHsyfSBoaXRzKQ0KIGdiLm5vSGl0cyA9IHNlbSBoaXRzDQogZ2IuYXV0aG9yZWQgPSBmb2kgYXV0b3IgZGUNCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX3poX0NOLnByb3BlcnRpZXMgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX3poX0NOLnByb3BlcnRpZXMKaW5kZXggYjVlNGY2NS4uYzgyZTEyZiAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF96aF9DTi5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfemhfQ04ucHJvcGVydGllcwpAQCAtMjE4LDcgKzIxOCw4IEBACiBnYi53b3JraW5nQ29weSA9IFx1NWRlNVx1NGY1Y1x1NTI2Zlx1NjcyYwogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gXHU2YjY0XHU3MjQ4XHU2NzJjXHU1ZTkzXHU1YjU4XHU1NzI4XHU0ZTAwXHU0ZWZkXHU1ZGU1XHU0ZjVjXHU1MjZmXHU2NzJjXHVmZjBjXHU2NWUwXHU2Y2Q1XHU4ZmRiXHU4ODRjXHU2M2E4XHU5MDAxCiBnYi5xdWVyeSA9IFx1NjdlNVx1OGJlMgotZ2IucXVlcnlIZWxwID0gXHU2NTJmXHU2MzAxXHU2ODA3XHU1MWM2XHU2N2U1XHU4YmUyXHU2ODNjXHU1ZjBmLjxwLz48cC8+XHU4YmY3XHU2N2U1XHU3NzBiIDxhIHRhcmdldD0iX25ldyIgaHJlZj0iaHR0cDovL2x1Y2VuZS5hcGFjaGUub3JnL2NvcmUvb2xkX3ZlcnNpb25lZF9kb2NzL3ZlcnNpb25zLzNfNV8wL3F1ZXJ5cGFyc2Vyc3ludGF4Lmh0bWwiPkx1Y2VuZSBcdTY3ZTVcdThiZTJcdTU5MDRcdTc0MDZcdTU2NjhcdTY4M2NcdTVmMGY8L2E+IFx1NGVlNVx1ODNiN1x1NTNkNlx1OGJlNlx1N2VjNlx1NTE4NVx1NWJiOVx1MzAwMgorZ2IucXVlcnlIZWxwID0gXHU2NTJmXHU2MzAxXHU2ODA3XHU1MWM2XHU2N2U1XHU4YmUyXHU2ODNjXHU1ZjBmLjxwLz48cC8+XHU4YmY3XHU2N2U1XHU3NzBiICR7cXVlcnlTeW50YXh9IFx1NGVlNVx1ODNiN1x1NTNkNlx1OGJlNlx1N2VjNlx1NTE4NVx1NWJiOVx1MzAwMgorZ2IucXVlcnlTeW50YXggPSBMdWNlbmUgXHU2N2U1XHU4YmUyXHU1OTA0XHU3NDA2XHU1NjY4XHU2ODNjXHU1ZjBmCiBnYi5xdWVyeVJlc3VsdHMgPSBcdTdlZDNcdTY3OWMgezB9IC0gezF9ICh7Mn0gXHU2YjIxXHU1NDdkXHU0ZTJkKQogZ2Iubm9IaXRzID0gXHU2NzJhXHU1NDdkXHU0ZTJkCiBnYi5hdXRob3JlZCA9IGF1dGhvcmVkCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX3poX1RXLnByb3BlcnRpZXMgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9HaXRCbGl0V2ViQXBwX3poX1RXLnByb3BlcnRpZXMKaW5kZXggMTU3ZGQ1Ni4uNjMxMDY0NiAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvR2l0QmxpdFdlYkFwcF96aF9UVy5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L0dpdEJsaXRXZWJBcHBfemhfVFcucHJvcGVydGllcwpAQCAtMjE5LDcgKzIxOSw4IEBACiBnYi53b3JraW5nQ29weSA9IFx1NjZhYlx1NWI1OFx1ODkwN1x1NjcyYwogZ2Iud29ya2luZ0NvcHlXYXJuaW5nID0gXHU4YTcyXHU3MjQ4XHU2NzJjXHU1ZWFiXHU0ZWNkXHU2NzA5XHU2NmFiXHU1YjU4XHU4OTA3XHU2NzJjLFx1NTZlMFx1NmI2NFx1NzEyMVx1NmNkNVx1NjNhNVx1NTNkN1x1NjNhOFx1OTAwMShwdXNoKQogZ2IucXVlcnkgPSBcdTY3ZTVcdThhNjIKLWdiLnF1ZXJ5SGVscCA9IFx1NjUyZlx1NjNmNFx1NmExOVx1NmU5Nlx1NjdlNVx1OGE2Mlx1OGE5ZVx1NmNkNS48cC8+PHAvPlx1OGE3M1x1NjBjNVx1OGFjYlx1NTNjM1x1ODAwMyA8YSB0YXJnZXRcID0gIl9uZXciIGhyZWZcID0gImh0dHBcOi8vbHVjZW5lLmFwYWNoZS5vcmcvY29yZS9vbGRfdmVyc2lvbmVkX2RvY3MvdmVyc2lvbnMvM181XzAvcXVlcnlwYXJzZXJzeW50YXguaHRtbCI+THVjZW5lIFF1ZXJ5IFBhcnNlciBTeW50YXg8L2E+CitnYi5xdWVyeUhlbHAgPSBcdTY1MmZcdTYzZjRcdTZhMTlcdTZlOTZcdTY3ZTVcdThhNjJcdThhOWVcdTZjZDUuPHAvPjxwLz5cdThhNzNcdTYwYzVcdThhY2JcdTUzYzNcdTgwMDMgJHtxdWVyeVN5bnRheH0KK2diLnF1ZXJ5U3ludGF4ID0gTHVjZW5lIFF1ZXJ5IFBhcnNlciBTeW50YXgKIGdiLnF1ZXJ5UmVzdWx0cyA9IFx1N2Q1MFx1Njc5YyB7MH0gLSB7MX0gKHsyfSBcdTY3ZTVcdThhNjIpCiBnYi5ub0hpdHMgPSBcdTcxMjFcdTllZGVcdTY0Y2EKIGdiLmF1dGhvcmVkID0gXHU2Mzg4XHU2YjBhCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9wYWdlcy9MdWNlbmVTZWFyY2hQYWdlLmh0bWwgYi9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9wYWdlcy9MdWNlbmVTZWFyY2hQYWdlLmh0bWwKaW5kZXggZDYyYjdiMi4uYTM4NmY0MiAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvcGFnZXMvTHVjZW5lU2VhcmNoUGFnZS5odG1sCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L3BhZ2VzL0x1Y2VuZVNlYXJjaFBhZ2UuaHRtbApAQCAtNTIsNyArNTIsOSBAQAogCQkJCQkJPC9kaXY+DQogCQkJCQk8L2Rpdj4NCiAJCQkJCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OjEwcHg7IiBjbGFzcz0ic3BhbjIiPg0KLQkJCQkJCTx3aWNrZXQ6bWVzc2FnZSBrZXk9ImdiLnF1ZXJ5SGVscCI+PC93aWNrZXQ6bWVzc2FnZT4NCisJCQkJCQk8d2lja2V0Om1lc3NhZ2Uga2V5PSJnYi5xdWVyeUhlbHAiPg0KKwkJCQkJCSAgPGEgdGFyZ2V0PSJfbmV3IiB3aWNrZXQ6aWQ9InF1ZXJ5U3ludGF4Ij48d2lja2V0Om1lc3NhZ2Uga2V5PSJnYi5xdWVyeVN5bnRheCIvPjwvYT4NCisJCQkJCQk8L3dpY2tldDptZXNzYWdlPg0KIAkJCQkJPC9kaXY+DQogCQkJCTwvZGl2Pg0KIAkJCTwvZGl2Pg0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L3BhZ2VzL0x1Y2VuZVNlYXJjaFBhZ2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2dpdGJsaXQvd2lja2V0L3BhZ2VzL0x1Y2VuZVNlYXJjaFBhZ2UuamF2YQppbmRleCAxZDgxMDYxLi5hOTdkMzdhIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9naXRibGl0L3dpY2tldC9wYWdlcy9MdWNlbmVTZWFyY2hQYWdlLmphdmEKKysrIGIvc3JjL21haW4vamF2YS9jb20vZ2l0YmxpdC93aWNrZXQvcGFnZXMvTHVjZW5lU2VhcmNoUGFnZS5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS53aWNrZXQubWFya3VwLmh0bWwuZm9ybS5DaGVja0JveDsNCiBpbXBvcnQgb3JnLmFwYWNoZS53aWNrZXQubWFya3VwLmh0bWwuZm9ybS5MaXN0TXVsdGlwbGVDaG9pY2U7DQogaW1wb3J0IG9yZy5hcGFjaGUud2lja2V0Lm1hcmt1cC5odG1sLmZvcm0uVGV4dEZpZWxkOw0KK2ltcG9ydCBvcmcuYXBhY2hlLndpY2tldC5tYXJrdXAuaHRtbC5saW5rLkV4dGVybmFsTGluazsNCiBpbXBvcnQgb3JnLmFwYWNoZS53aWNrZXQubWFya3VwLmh0bWwucGFuZWwuRnJhZ21lbnQ7DQogaW1wb3J0IG9yZy5hcGFjaGUud2lja2V0Lm1hcmt1cC5yZXBlYXRlci5JdGVtOw0KIGltcG9ydCBvcmcuYXBhY2hlLndpY2tldC5tYXJrdXAucmVwZWF0ZXIuZGF0YS5EYXRhVmlldzsNCkBAIC01MCw2ICs1MSw4IEBACiANCiBwdWJsaWMgY2xhc3MgTHVjZW5lU2VhcmNoUGFnZSBleHRlbmRzIFJvb3RQYWdlIHsNCiANCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIExVQ0VORV9RVUVSWV9TWU5UQVhfTElOSyA9ICJodHRwczovL2x1Y2VuZS5hcGFjaGUub3JnL2NvcmUvNV81XzAvcXVlcnlwYXJzZXIvb3JnL2FwYWNoZS9sdWNlbmUvcXVlcnlwYXJzZXIvY2xhc3NpYy9wYWNrYWdlLXN1bW1hcnkuaHRtbCNwYWNrYWdlX2Rlc2NyaXB0aW9uIjsNCisNCiAJcHVibGljIEx1Y2VuZVNlYXJjaFBhZ2UoKSB7DQogCQlzdXBlcigpOw0KIAkJc2V0dXAobnVsbCk7DQpAQCAtMTY3LDYgKzE3MCw3IEBACiAJCWZvcm0uYWRkKHNlbGVjdGlvbnMuc2V0RW5hYmxlZChsdWNlbmVFbmFibGVkKSk7DQogCQlmb3JtLmFkZChuZXcgVGV4dEZpZWxkPFN0cmluZz4oInF1ZXJ5IiwgcXVlcnlNb2RlbCkuc2V0RW5hYmxlZChsdWNlbmVFbmFibGVkKSk7DQogCQlmb3JtLmFkZChuZXcgQ2hlY2tCb3goImFsbHJlcG9zIiwgYWxscmVwb3NNb2RlbCkpOw0KKwkJZm9ybS5hZGQobmV3IEV4dGVybmFsTGluaygicXVlcnlTeW50YXgiLCBMVUNFTkVfUVVFUllfU1lOVEFYX0xJTkspKTsNCiAJCWFkZChmb3JtLnNldEVuYWJsZWQobHVjZW5lRW5hYmxlZCkpOw0KIA0KIAkJLy8gZXhlY3V0ZSBzZWFyY2gNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9naXRibGl0L3NlcnZpY2UvTHVjZW5lUmVwb0luZGV4U3RvcmVUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9naXRibGl0L3NlcnZpY2UvTHVjZW5lUmVwb0luZGV4U3RvcmVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhYzM1MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2phdmEvY29tL2dpdGJsaXQvc2VydmljZS9MdWNlbmVSZXBvSW5kZXhTdG9yZVRlc3QuamF2YQpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE3IGdpdGJsaXQuY29tLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmdpdGJsaXQuc2VydmljZTsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CisKK2ltcG9ydCBvcmcuanVuaXQuUnVsZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQucnVsZXMuVGVtcG9yYXJ5Rm9sZGVyOworCitpbXBvcnQgY29tLmdpdGJsaXQudXRpbHMuTHVjZW5lSW5kZXhTdG9yZTsKKworLyoqCisgKiBAYXV0aG9yIEZsb3JpYW4gWnNjaG9ja2UKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBMdWNlbmVSZXBvSW5kZXhTdG9yZVRlc3QKK3sKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMVUNFTkVfVkVSU0lPTiA9IEx1Y2VuZUluZGV4U3RvcmUuTFVDRU5FX0NPREVDX1ZFUlNJT047CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExVQ0VORV9ESVIgPSAibHVjZW5lIjsKKworCisJQFJ1bGUKKwlwdWJsaWMgVGVtcG9yYXJ5Rm9sZGVyIGJhc2VGb2xkZXIgPSBuZXcgVGVtcG9yYXJ5Rm9sZGVyKCk7CisKKworCXByaXZhdGUgU3RyaW5nIGdldEluZGV4RGlyKGludCB2ZXJzaW9uKQorCXsKKwkJcmV0dXJuIHZlcnNpb24gKyAiXyIgKyBMVUNFTkVfVkVSU0lPTjsKKwl9CisKKworCXByaXZhdGUgU3RyaW5nIGdldEx1Y2VuZUluZGV4RGlyKGludCB2ZXJzaW9uKQorCXsKKwkJcmV0dXJuIExVQ0VORV9ESVIgKyAiLyIgKyB2ZXJzaW9uICsgIl8iICsgTFVDRU5FX1ZFUlNJT047CisJfQorCisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWdGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uCisJeworCQlpbnQgdmVyc2lvbiA9IDE7CisJCUZpbGUgcmVwb3NpdG9yeUZvbGRlciA9IGJhc2VGb2xkZXIuZ2V0Um9vdCgpOworCQlMdWNlbmVSZXBvSW5kZXhTdG9yZSBsaSA9IG5ldyBMdWNlbmVSZXBvSW5kZXhTdG9yZShyZXBvc2l0b3J5Rm9sZGVyLCB2ZXJzaW9uKTsKKwkJRmlsZSBjb25mRmlsZT0gbGkuZ2V0Q29uZmlnRmlsZSgpOworCQlGaWxlIGx1Y2VuZURpciA9IG5ldyBGaWxlKHJlcG9zaXRvcnlGb2xkZXIsIGdldEx1Y2VuZUluZGV4RGlyKHZlcnNpb24pICsgIi9nYl9sdWNlbmUuY29uZiIpOworCQlhc3NlcnRFcXVhbHMobHVjZW5lRGlyLCBjb25mRmlsZSk7CisJfQorCisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGUoKQorCXsKKwkJaW50IHZlcnNpb24gPSAwOworCQlGaWxlIHJlcG9zaXRvcnlGb2xkZXIgPSBiYXNlRm9sZGVyLmdldFJvb3QoKTsKKwkJRmlsZSBsdWNlbmVEaXIgPSBuZXcgRmlsZShyZXBvc2l0b3J5Rm9sZGVyLCBnZXRMdWNlbmVJbmRleERpcih2ZXJzaW9uKSk7CisJCWFzc2VydEZhbHNlKCJQcmVjb25kaXRpb24gZmFpbHVyZTogZGlyZWN0b3J5IGV4aXN0cyBhbHJlYWR5IiwgbmV3IEZpbGUocmVwb3NpdG9yeUZvbGRlciwgTFVDRU5FX0RJUikuZXhpc3RzKCkpOworCQlhc3NlcnRGYWxzZSgiUHJlY29uZGl0aW9uIGZhaWx1cmU6IGRpcmVjdG9yeSBleGlzdHMgYWxyZWFkeSIsIGx1Y2VuZURpci5leGlzdHMoKSk7CisKKwkJTHVjZW5lSW5kZXhTdG9yZSBsaSA9IG5ldyBMdWNlbmVSZXBvSW5kZXhTdG9yZShyZXBvc2l0b3J5Rm9sZGVyLCB2ZXJzaW9uKTsKKwkJbGkuY3JlYXRlKCk7CisKKwkJYXNzZXJ0VHJ1ZShsdWNlbmVEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKGx1Y2VuZURpci5pc0RpcmVjdG9yeSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVJbmRleERpcigpCisJeworCQlpbnQgdmVyc2lvbiA9IDc3Nzc7CisJCUZpbGUgcmVwb3NpdG9yeUZvbGRlciA9IGJhc2VGb2xkZXIuZ2V0Um9vdCgpOworCQl0cnkgeworCQkJYmFzZUZvbGRlci5uZXdGb2xkZXIoTFVDRU5FX0RJUik7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoIkZhaWxlZCBpbiBzZXR1cCBvZiBmb2xkZXI6ICIgKyBlKTsKKwkJfQorCQlGaWxlIGx1Y2VuZURpciA9IG5ldyBGaWxlKHJlcG9zaXRvcnlGb2xkZXIsIGdldEx1Y2VuZUluZGV4RGlyKHZlcnNpb24pKTsKKworCQlhc3NlcnRUcnVlKCJQcmVjb25kaXRpb24gZmFpbHVyZTogZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IiwgbmV3IEZpbGUocmVwb3NpdG9yeUZvbGRlciwgTFVDRU5FX0RJUikuZXhpc3RzKCkpOworCQlhc3NlcnRGYWxzZSgiUHJlY29uZGl0aW9uIGZhaWx1cmU6IGRpcmVjdG9yeSBleGlzdHMgYWxyZWFkeSIsIGx1Y2VuZURpci5leGlzdHMoKSk7CisKKwkJTHVjZW5lSW5kZXhTdG9yZSBsaSA9IG5ldyBMdWNlbmVSZXBvSW5kZXhTdG9yZShyZXBvc2l0b3J5Rm9sZGVyLCB2ZXJzaW9uKTsKKwkJbGkuY3JlYXRlKCk7CisKKwkJYXNzZXJ0VHJ1ZShsdWNlbmVEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKGx1Y2VuZURpci5pc0RpcmVjdG9yeSgpKTsKKworCQkvLyBNYWtlIHN1cmUgbm90aGluZyBlbHNlIHdhcyBjcmVhdGVkLgorCQlhc3NlcnRFcXVhbHMoMCwgbHVjZW5lRGlyLmxpc3QoKS5sZW5ndGgpOworCQlhc3NlcnRFcXVhbHMoMSwgbHVjZW5lRGlyLmdldFBhcmVudEZpbGUoKS5saXN0KCkubGVuZ3RoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVJZk5lY2Vzc2FyeSgpCisJeworCQlpbnQgdmVyc2lvbiA9IDc3Nzc4ODg7CisJCUZpbGUgcmVwb3NpdG9yeUZvbGRlciA9IGJhc2VGb2xkZXIuZ2V0Um9vdCgpOworCQlGaWxlIGx1Y2VuZURpciA9IG51bGw7CisJCXRyeSB7CisJCQlsdWNlbmVEaXIgPSBiYXNlRm9sZGVyLm5ld0ZvbGRlcihMVUNFTkVfRElSLCBnZXRJbmRleERpcih2ZXJzaW9uKSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoIkZhaWxlZCBpbiBzZXR1cCBvZiBmb2xkZXI6ICIgKyBlKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJQcmVjb25kaXRpb24gZmFpbHVyZTogZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IiwgbmV3IEZpbGUocmVwb3NpdG9yeUZvbGRlciwgTFVDRU5FX0RJUikuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKCJQcmVjb25kaXRpb24gZmFpbHVyZTogZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IiwgbHVjZW5lRGlyLmV4aXN0cygpKTsKKworCQlMdWNlbmVJbmRleFN0b3JlIGxpID0gbmV3IEx1Y2VuZVJlcG9JbmRleFN0b3JlKHJlcG9zaXRvcnlGb2xkZXIsIHZlcnNpb24pOworCQlsaS5jcmVhdGUoKTsKKworCQlhc3NlcnRUcnVlKGx1Y2VuZURpci5leGlzdHMoKSk7CisJCWFzc2VydFRydWUobHVjZW5lRGlyLmlzRGlyZWN0b3J5KCkpOworCisJCS8vIE1ha2Ugc3VyZSBub3RoaW5nIGVsc2Ugd2FzIGNyZWF0ZWQuCisJCWFzc2VydEVxdWFscygwLCBsdWNlbmVEaXIubGlzdCgpLmxlbmd0aCk7CisJCWFzc2VydEVxdWFscygxLCBsdWNlbmVEaXIuZ2V0UGFyZW50RmlsZSgpLmxpc3QoKS5sZW5ndGgpOworCX0KKworCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlKCkKKwl7CisJCWludCB2ZXJzaW9uID0gMTExMjIyMzMzOworCisJCUZpbGUgcmVwb3NpdG9yeUZvbGRlciA9IGJhc2VGb2xkZXIuZ2V0Um9vdCgpOworCQlGaWxlIGx1Y2VuZURpciA9IG51bGw7CisJCXRyeSB7CisJCQlsdWNlbmVEaXIgPSBiYXNlRm9sZGVyLm5ld0ZvbGRlcihMVUNFTkVfRElSLCBnZXRJbmRleERpcih2ZXJzaW9uKSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoIkZhaWxlZCBpbiBzZXR1cCBvZiBmb2xkZXI6ICIgKyBlKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJQcmVjb25kaXRpb24gZmFpbHVyZTogZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IiwgbHVjZW5lRGlyLmV4aXN0cygpKTsKKworCQlMdWNlbmVJbmRleFN0b3JlIGxpID0gbmV3IEx1Y2VuZVJlcG9JbmRleFN0b3JlKHJlcG9zaXRvcnlGb2xkZXIsIHZlcnNpb24pOworCQlhc3NlcnRUcnVlKGxpLmRlbGV0ZSgpKTsKKworCQlhc3NlcnRGYWxzZShsdWNlbmVEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKG5ldyBGaWxlKHJlcG9zaXRvcnlGb2xkZXIsIExVQ0VORV9ESVIpLmV4aXN0cygpKTsKKwl9CisKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlbGV0ZU5vdEV4aXN0KCkKKwl7CisJCWludCB2ZXJzaW9uID0gMDsKKworCQlGaWxlIHJlcG9zaXRvcnlGb2xkZXIgPSBiYXNlRm9sZGVyLmdldFJvb3QoKTsKKwkJdHJ5IHsKKwkJCWJhc2VGb2xkZXIubmV3Rm9sZGVyKExVQ0VORV9ESVIpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlmYWlsKCJGYWlsZWQgaW4gc2V0dXAgb2YgZm9sZGVyOiAiICsgZSk7CisJCX0KKwkJRmlsZSBsdWNlbmVEaXIgPSBuZXcgRmlsZShyZXBvc2l0b3J5Rm9sZGVyLCBnZXRMdWNlbmVJbmRleERpcih2ZXJzaW9uKSk7CisJCWFzc2VydFRydWUoIlByZWNvbmRpdGlvbiBmYWlsdXJlOiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiLCBuZXcgRmlsZShyZXBvc2l0b3J5Rm9sZGVyLCBMVUNFTkVfRElSKS5leGlzdHMoKSk7CisJCWFzc2VydEZhbHNlKCJQcmVjb25kaXRpb24gZmFpbHVyZTogZGlyZWN0b3J5IGRvZXMgZXhpc3QiLCBsdWNlbmVEaXIuZXhpc3RzKCkpOworCisJCUx1Y2VuZUluZGV4U3RvcmUgbGkgPSBuZXcgTHVjZW5lUmVwb0luZGV4U3RvcmUocmVwb3NpdG9yeUZvbGRlciwgdmVyc2lvbik7CisJCWFzc2VydFRydWUobGkuZGVsZXRlKCkpOworCisJCWFzc2VydEZhbHNlKGx1Y2VuZURpci5leGlzdHMoKSk7CisJCWFzc2VydFRydWUobmV3IEZpbGUocmVwb3NpdG9yeUZvbGRlciwgTFVDRU5FX0RJUikuZXhpc3RzKCkpOworCX0KKworCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlV2l0aEZpbGVzKCkKKwl7CisJCWludCB2ZXJzaW9uID0gNTsKKworCQlGaWxlIHJlcG9zaXRvcnlGb2xkZXIgPSBiYXNlRm9sZGVyLmdldFJvb3QoKTsKKwkJRmlsZSBsdWNlbmVGb2xkZXIgPSBuZXcgRmlsZShiYXNlRm9sZGVyLmdldFJvb3QoKSwgTFVDRU5FX0RJUik7CisJCUZpbGUgbHVjZW5lRGlyID0gbnVsbDsKKworCQlGaWxlIG90aGVyRGlyID0gbmV3IEZpbGUobHVjZW5lRm9sZGVyLCB2ZXJzaW9uICsgIl8xMCIpOworCQlGaWxlIGRiRmlsZSA9IG51bGw7CisJCXRyeSB7CisJCQlsdWNlbmVEaXIgPSBiYXNlRm9sZGVyLm5ld0ZvbGRlcihMVUNFTkVfRElSLCBnZXRJbmRleERpcih2ZXJzaW9uKSk7CisJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShsdWNlbmVEaXIsICJfZmlsZTEiKTsKKwkJCWZpbGUuY3JlYXRlTmV3RmlsZSgpOworCQkJZmlsZSA9IG5ldyBGaWxlKGx1Y2VuZURpciwgIl9maWxlMi5kYiIpOworCQkJZmlsZS5jcmVhdGVOZXdGaWxlKCk7CisJCQlmaWxlID0gbmV3IEZpbGUobHVjZW5lRGlyLCAiY29uZi5jb25mIik7CisJCQlmaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKKworCQkJb3RoZXJEaXIubWtkaXJzKCk7CisJCQlkYkZpbGUgPSBuZXcgRmlsZShvdGhlckRpciwgIl9maWxlMi5kYiIpOworCQkJZGJGaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKKwkJCWZpbGUgPSBuZXcgRmlsZShvdGhlckRpciwgImNvbmYuY29uZiIpOworCQkJZmlsZS5jcmVhdGVOZXdGaWxlKCk7CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoIkZhaWxlZCBpbiBzZXR1cCBvZiBmb2xkZXI6ICIgKyBlKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJQcmVjb25kaXRpb24gZmFpbHVyZTogaW5kZXggZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IiwgbHVjZW5lRGlyLmV4aXN0cygpKTsKKwkJYXNzZXJ0VHJ1ZSgiUHJlY29uZGl0aW9uIGZhaWx1cmU6IG90aGVyIGluZGV4IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIsIG90aGVyRGlyLmV4aXN0cygpKTsKKworCQlMdWNlbmVJbmRleFN0b3JlIGxpID0gbmV3IEx1Y2VuZVJlcG9JbmRleFN0b3JlKHJlcG9zaXRvcnlGb2xkZXIsIHZlcnNpb24pOworCQlsaS5kZWxldGUoKTsKKworCQlhc3NlcnRGYWxzZShsdWNlbmVEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKGx1Y2VuZUZvbGRlci5leGlzdHMoKSk7CisJCWFzc2VydFRydWUob3RoZXJEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKGRiRmlsZS5leGlzdHMoKSk7CisJfQorCisKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEdldFBhdGgoKSB0aHJvd3MgSU9FeGNlcHRpb24KKwl7CisJCWludCB2ZXJzaW9uID0gNzsKKwkJRmlsZSByZXBvc2l0b3J5Rm9sZGVyID0gYmFzZUZvbGRlci5nZXRSb290KCk7CisJCUx1Y2VuZUluZGV4U3RvcmUgbGkgPSBuZXcgTHVjZW5lUmVwb0luZGV4U3RvcmUocmVwb3NpdG9yeUZvbGRlciwgdmVyc2lvbik7CisJCVBhdGggZGlyID0gbGkuZ2V0UGF0aCgpOworCQlGaWxlIGx1Y2VuZURpciA9IG5ldyBGaWxlKHJlcG9zaXRvcnlGb2xkZXIsIGdldEx1Y2VuZUluZGV4RGlyKHZlcnNpb24pKTsKKwkJYXNzZXJ0RXF1YWxzKGx1Y2VuZURpci50b1BhdGgoKSwgZGlyKTsKKwl9CisKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEhhc0luZGV4KCkgdGhyb3dzIElPRXhjZXB0aW9uCisJeworCQlpbnQgdmVyc2lvbiA9IDA7CisJCUZpbGUgbHVjZW5lRm9sZGVyID0gbmV3IEZpbGUoYmFzZUZvbGRlci5nZXRSb290KCksICJsdWNlbmUiKTsKKworCQlMdWNlbmVJbmRleFN0b3JlIGxpID0gbmV3IEx1Y2VuZVJlcG9JbmRleFN0b3JlKGx1Y2VuZUZvbGRlciwgdmVyc2lvbik7CisJCWFzc2VydEZhbHNlKGxpLmhhc0luZGV4KCkpOworCisJCWJhc2VGb2xkZXIubmV3Rm9sZGVyKCJsdWNlbmUiKTsKKwkJbGkgPSBuZXcgTHVjZW5lSW5kZXhTdG9yZShsdWNlbmVGb2xkZXIsIHZlcnNpb24pOworCQlhc3NlcnRGYWxzZShsaS5oYXNJbmRleCgpKTsKKworCQlGaWxlIGx1Y2VuZURpciA9IGJhc2VGb2xkZXIubmV3Rm9sZGVyKCJsdWNlbmUiLCBnZXRJbmRleERpcih2ZXJzaW9uKSk7CisJCWxpID0gbmV3IEx1Y2VuZUluZGV4U3RvcmUobHVjZW5lRm9sZGVyLCB2ZXJzaW9uKTsKKwkJYXNzZXJ0RmFsc2UobGkuaGFzSW5kZXgoKSk7CisKKwkJbmV3IEZpbGUobHVjZW5lRGlyLCAid3JpdGUubG9jayIpLmNyZWF0ZU5ld0ZpbGUoKTsKKwkJbGkgPSBuZXcgTHVjZW5lSW5kZXhTdG9yZShsdWNlbmVGb2xkZXIsIHZlcnNpb24pOworCQlhc3NlcnRGYWxzZShsaS5oYXNJbmRleCgpKTsKKworCQluZXcgRmlsZShsdWNlbmVEaXIsICJzZWdtZW50c18xIikuY3JlYXRlTmV3RmlsZSgpOworCQlsaSA9IG5ldyBMdWNlbmVJbmRleFN0b3JlKGx1Y2VuZUZvbGRlciwgdmVyc2lvbik7CisJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2hlY2sgIiArIGx1Y2VuZURpcik7CisJCWFzc2VydFRydWUobGkuaGFzSW5kZXgoKSk7CisKKwl9CisKKworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZ2l0YmxpdC90ZXN0cy9CcmFuY2hUaWNrZXRTZXJ2aWNlVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9jb20vZ2l0YmxpdC90ZXN0cy9CcmFuY2hUaWNrZXRTZXJ2aWNlVGVzdC5qYXZhCmluZGV4IDBhNWRlMTkuLjBlOWQ4ODcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2dpdGJsaXQvdGVzdHMvQnJhbmNoVGlja2V0U2VydmljZVRlc3QuamF2YQorKysgYi9zcmMvdGVzdC9qYXZhL2NvbS9naXRibGl0L3Rlc3RzL0JyYW5jaFRpY2tldFNlcnZpY2VUZXN0LmphdmEKQEAgLTU5LDcgKzU5LDcgQEAKIAkJSVVzZXJNYW5hZ2VyIHVzZXJNYW5hZ2VyID0gbmV3IFVzZXJNYW5hZ2VyKHJ1bnRpbWVNYW5hZ2VyLCBwbHVnaW5NYW5hZ2VyKS5zdGFydCgpOwogCQlJUmVwb3NpdG9yeU1hbmFnZXIgcmVwb3NpdG9yeU1hbmFnZXIgPSBuZXcgUmVwb3NpdG9yeU1hbmFnZXIocnVudGltZU1hbmFnZXIsIHBsdWdpbk1hbmFnZXIsIHVzZXJNYW5hZ2VyKS5zdGFydCgpOwogCi0JCUJyYW5jaFRpY2tldFNlcnZpY2Ugc2VydmljZSA9IG5ldyBCcmFuY2hUaWNrZXRTZXJ2aWNlKAorCQlCcmFuY2hUaWNrZXRTZXJ2aWNlIHNlcnZpY2UgPSAoQnJhbmNoVGlja2V0U2VydmljZSkgbmV3IEJyYW5jaFRpY2tldFNlcnZpY2UoCiAJCQkJcnVudGltZU1hbmFnZXIsCiAJCQkJcGx1Z2luTWFuYWdlciwKIAkJCQlub3RpZmljYXRpb25NYW5hZ2VyLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZ2l0YmxpdC90ZXN0cy9GaWxlVGlja2V0U2VydmljZVRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2dpdGJsaXQvdGVzdHMvRmlsZVRpY2tldFNlcnZpY2VUZXN0LmphdmEKaW5kZXggMWZiMmVlZC4uYzRhNjNjNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvamF2YS9jb20vZ2l0YmxpdC90ZXN0cy9GaWxlVGlja2V0U2VydmljZVRlc3QuamF2YQorKysgYi9zcmMvdGVzdC9qYXZhL2NvbS9naXRibGl0L3Rlc3RzL0ZpbGVUaWNrZXRTZXJ2aWNlVGVzdC5qYXZhCkBAIC01OCw3ICs1OCw3IEBACiAJCUlVc2VyTWFuYWdlciB1c2VyTWFuYWdlciA9IG5ldyBVc2VyTWFuYWdlcihydW50aW1lTWFuYWdlciwgcGx1Z2luTWFuYWdlcikuc3RhcnQoKTsKIAkJSVJlcG9zaXRvcnlNYW5hZ2VyIHJlcG9zaXRvcnlNYW5hZ2VyID0gbmV3IFJlcG9zaXRvcnlNYW5hZ2VyKHJ1bnRpbWVNYW5hZ2VyLCBwbHVnaW5NYW5hZ2VyLCB1c2VyTWFuYWdlcikuc3RhcnQoKTsKIAotCQlGaWxlVGlja2V0U2VydmljZSBzZXJ2aWNlID0gbmV3IEZpbGVUaWNrZXRTZXJ2aWNlKAorCQlGaWxlVGlja2V0U2VydmljZSBzZXJ2aWNlID0gKEZpbGVUaWNrZXRTZXJ2aWNlKSBuZXcgRmlsZVRpY2tldFNlcnZpY2UoCiAJCQkJcnVudGltZU1hbmFnZXIsCiAJCQkJcGx1Z2luTWFuYWdlciwKIAkJCQlub3RpZmljYXRpb25NYW5hZ2VyLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZ2l0YmxpdC90ZXN0cy9SZWRpc1RpY2tldFNlcnZpY2VUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9naXRibGl0L3Rlc3RzL1JlZGlzVGlja2V0U2VydmljZVRlc3QuamF2YQppbmRleCA0ODAxMWFkLi41ZjNjYjk0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9qYXZhL2NvbS9naXRibGl0L3Rlc3RzL1JlZGlzVGlja2V0U2VydmljZVRlc3QuamF2YQorKysgYi9zcmMvdGVzdC9qYXZhL2NvbS9naXRibGl0L3Rlc3RzL1JlZGlzVGlja2V0U2VydmljZVRlc3QuamF2YQpAQCAtNjYsNyArNjYsNyBAQAogCQlJVXNlck1hbmFnZXIgdXNlck1hbmFnZXIgPSBuZXcgVXNlck1hbmFnZXIocnVudGltZU1hbmFnZXIsIHBsdWdpbk1hbmFnZXIpLnN0YXJ0KCk7CiAJCUlSZXBvc2l0b3J5TWFuYWdlciByZXBvc2l0b3J5TWFuYWdlciA9IG5ldyBSZXBvc2l0b3J5TWFuYWdlcihydW50aW1lTWFuYWdlciwgcGx1Z2luTWFuYWdlciwgdXNlck1hbmFnZXIpLnN0YXJ0KCk7CiAKLQkJUmVkaXNUaWNrZXRTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgUmVkaXNUaWNrZXRTZXJ2aWNlKAorCQlSZWRpc1RpY2tldFNlcnZpY2Ugc2VydmljZSA9IChSZWRpc1RpY2tldFNlcnZpY2UpIG5ldyBSZWRpc1RpY2tldFNlcnZpY2UoCiAJCQkJcnVudGltZU1hbmFnZXIsCiAJCQkJcGx1Z2luTWFuYWdlciwKIAkJCQlub3RpZmljYXRpb25NYW5hZ2VyLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZ2l0YmxpdC90ZXN0cy9VSVRpY2tldFRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2dpdGJsaXQvdGVzdHMvVUlUaWNrZXRUZXN0LmphdmEKaW5kZXggNTRhYTFlMS4uZTg5YzMyZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvamF2YS9jb20vZ2l0YmxpdC90ZXN0cy9VSVRpY2tldFRlc3QuamF2YQorKysgYi9zcmMvdGVzdC9qYXZhL2NvbS9naXRibGl0L3Rlc3RzL1VJVGlja2V0VGVzdC5qYXZhCkBAIC04Myw3ICs4Myw3IEBACiAJCUlVc2VyTWFuYWdlciB1c2VyTWFuYWdlciA9IG5ldyBVc2VyTWFuYWdlcihydW50aW1lTWFuYWdlciwgcGx1Z2luTWFuYWdlcikuc3RhcnQoKTsKIAkJSVJlcG9zaXRvcnlNYW5hZ2VyIHJlcG9zaXRvcnlNYW5hZ2VyID0gbmV3IFJlcG9zaXRvcnlNYW5hZ2VyKHJ1bnRpbWVNYW5hZ2VyLCBwbHVnaW5NYW5hZ2VyLCB1c2VyTWFuYWdlcikuc3RhcnQoKTsKIAotCQlCcmFuY2hUaWNrZXRTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgQnJhbmNoVGlja2V0U2VydmljZSgKKwkJQnJhbmNoVGlja2V0U2VydmljZSBzZXJ2aWNlID0gKEJyYW5jaFRpY2tldFNlcnZpY2UpIG5ldyBCcmFuY2hUaWNrZXRTZXJ2aWNlKAogCQkJCXJ1bnRpbWVNYW5hZ2VyLAogCQkJCXBsdWdpbk1hbmFnZXIsCiAJCQkJbm90aWZpY2F0aW9uTWFuYWdlciwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2dpdGJsaXQvdXRpbHMvTHVjZW5lSW5kZXhTdG9yZVRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2dpdGJsaXQvdXRpbHMvTHVjZW5lSW5kZXhTdG9yZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY2YzVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9jb20vZ2l0YmxpdC91dGlscy9MdWNlbmVJbmRleFN0b3JlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTcgZ2l0YmxpdC5jb20uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZ2l0YmxpdC51dGlsczsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CisKK2ltcG9ydCBvcmcuanVuaXQuUnVsZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQucnVsZXMuVGVtcG9yYXJ5Rm9sZGVyOworCisKKy8qKgorICogQGF1dGhvciBGbG9yaWFuIFpzY2hvY2tlCisgKgorICovCitwdWJsaWMgY2xhc3MgTHVjZW5lSW5kZXhTdG9yZVRlc3QKK3sKKworCXByaXZhdGUgZmluYWwgaW50IExVQ0VORV9WRVJTSU9OID0gTHVjZW5lSW5kZXhTdG9yZS5MVUNFTkVfQ09ERUNfVkVSU0lPTjsKKworCUBSdWxlCisJcHVibGljIFRlbXBvcmFyeUZvbGRlciBiYXNlRm9sZGVyID0gbmV3IFRlbXBvcmFyeUZvbGRlcigpOworCisJcHJpdmF0ZSBTdHJpbmcgZ2V0SW5kZXhEaXIoaW50IHZlcnNpb24pCisJeworCQlyZXR1cm4gdmVyc2lvbiArICJfIiArIExVQ0VORV9WRVJTSU9OOworCX0KKworCisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGUoKQorCXsKKwkJaW50IHZlcnNpb24gPSAwOworCQlGaWxlIGx1Y2VuZUZvbGRlciA9IG5ldyBGaWxlKGJhc2VGb2xkZXIuZ2V0Um9vdCgpLCAidGlja2V0cy9sdWNlbmUiKTsKKwkJYXNzZXJ0RmFsc2UoIlByZWNvbmRpdGlvbiBmYWlsdXJlOiBkaXJlY3RvcnkgZXhpc3RzIGFscmVhZHkiLCBsdWNlbmVGb2xkZXIuZXhpc3RzKCkpOworCisJCUx1Y2VuZUluZGV4U3RvcmUgbGkgPSBuZXcgTHVjZW5lSW5kZXhTdG9yZShsdWNlbmVGb2xkZXIsIHZlcnNpb24pOworCQlsaS5jcmVhdGUoKTsKKworCQlGaWxlIGx1Y2VuZURpciA9IG5ldyBGaWxlKGx1Y2VuZUZvbGRlciwgZ2V0SW5kZXhEaXIodmVyc2lvbikpOworCQlhc3NlcnRUcnVlKGx1Y2VuZURpci5leGlzdHMoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlSW5kZXhEaXIoKQorCXsKKwkJaW50IHZlcnNpb24gPSAxMTEyMjI7CisJCUZpbGUgbHVjZW5lRm9sZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWx1Y2VuZUZvbGRlciA9IGJhc2VGb2xkZXIubmV3Rm9sZGVyKCJ0aWNrZXRzIiwgImx1Y2VuZSIpOworCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlmYWlsKCJGYWlsZWQgaW4gc2V0dXAgb2YgZm9sZGVyOiAiICsgZSk7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgiUHJlY29uZGl0aW9uIGZhaWx1cmU6IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIsIGx1Y2VuZUZvbGRlci5leGlzdHMoKSk7CisKKwkJTHVjZW5lSW5kZXhTdG9yZSBsaSA9IG5ldyBMdWNlbmVJbmRleFN0b3JlKGx1Y2VuZUZvbGRlciwgdmVyc2lvbik7CisJCWxpLmNyZWF0ZSgpOworCisJCUZpbGUgbHVjZW5lRGlyID0gbmV3IEZpbGUobHVjZW5lRm9sZGVyLCBnZXRJbmRleERpcih2ZXJzaW9uKSk7CisJCWFzc2VydFRydWUobHVjZW5lRGlyLmV4aXN0cygpKTsKKwkJYXNzZXJ0VHJ1ZShsdWNlbmVEaXIuaXNEaXJlY3RvcnkoKSk7CisKKwkJLy8gTWFrZSBzdXJlIG5vdGhpbmcgZWxzZSB3YXMgY3JlYXRlZC4KKwkJYXNzZXJ0RXF1YWxzKDAsIGx1Y2VuZURpci5saXN0KCkubGVuZ3RoKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGx1Y2VuZURpci5nZXRQYXJlbnRGaWxlKCkubGlzdCgpLmxlbmd0aCk7CisJCWFzc2VydEVxdWFscygxLCBsdWNlbmVEaXIuZ2V0UGFyZW50RmlsZSgpLmdldFBhcmVudEZpbGUoKS5saXN0KCkubGVuZ3RoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVJZk5lY2Vzc2FyeSgpCisJeworCQlpbnQgdmVyc2lvbiA9IDE7CisJCUZpbGUgbHVjZW5lRm9sZGVyID0gbmV3IEZpbGUoYmFzZUZvbGRlci5nZXRSb290KCksICJ0aWNrZXRzL2x1Y2VuZSIpOworCQlGaWxlIGx1Y2VuZURpciA9IG51bGw7CisJCXRyeSB7CisJCQlsdWNlbmVEaXIgPSBiYXNlRm9sZGVyLm5ld0ZvbGRlcigidGlja2V0cyIsICJsdWNlbmUiLCBnZXRJbmRleERpcih2ZXJzaW9uKSk7CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoIkZhaWxlZCBpbiBzZXR1cCBvZiBmb2xkZXI6ICIgKyBlKTsKKwkJfQorCQlhc3NlcnRUcnVlKCJQcmVjb25kaXRpb24gZmFpbHVyZTogZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IiwgbHVjZW5lRGlyLmV4aXN0cygpKTsKKworCQlMdWNlbmVJbmRleFN0b3JlIGxpID0gbmV3IEx1Y2VuZUluZGV4U3RvcmUobHVjZW5lRm9sZGVyLCB2ZXJzaW9uKTsKKwkJbGkuY3JlYXRlKCk7CisKKwkJYXNzZXJ0VHJ1ZShsdWNlbmVEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKGx1Y2VuZURpci5pc0RpcmVjdG9yeSgpKTsKKworCQkvLyBNYWtlIHN1cmUgbm90aGluZyBlbHNlIHdhcyBjcmVhdGVkLgorCQlhc3NlcnRFcXVhbHMoMCwgbHVjZW5lRGlyLmxpc3QoKS5sZW5ndGgpOworCQlhc3NlcnRFcXVhbHMoMSwgbHVjZW5lRGlyLmdldFBhcmVudEZpbGUoKS5saXN0KCkubGVuZ3RoKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGx1Y2VuZURpci5nZXRQYXJlbnRGaWxlKCkuZ2V0UGFyZW50RmlsZSgpLmxpc3QoKS5sZW5ndGgpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlbGV0ZSgpCisJeworCQlpbnQgdmVyc2lvbiA9IDExMTIyMjMzMzsKKwkJRmlsZSBsdWNlbmVGb2xkZXIgPSBuZXcgRmlsZShiYXNlRm9sZGVyLmdldFJvb3QoKSwgInJlcG8xL2x1Y2VuZSIpOworCQlGaWxlIGx1Y2VuZURpciA9IG51bGw7CisJCXRyeSB7CisJCQlsdWNlbmVEaXIgPSBiYXNlRm9sZGVyLm5ld0ZvbGRlcigicmVwbzEiLCAibHVjZW5lIiwgZ2V0SW5kZXhEaXIodmVyc2lvbikpOworCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlmYWlsKCJGYWlsZWQgaW4gc2V0dXAgb2YgZm9sZGVyOiAiICsgZSk7CisJCX0KKwkJYXNzZXJ0VHJ1ZSgiUHJlY29uZGl0aW9uIGZhaWx1cmU6IGluZGV4IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIsIGx1Y2VuZURpci5leGlzdHMoKSk7CisKKwkJTHVjZW5lSW5kZXhTdG9yZSBsaSA9IG5ldyBMdWNlbmVJbmRleFN0b3JlKGx1Y2VuZUZvbGRlciwgdmVyc2lvbik7CisJCWFzc2VydFRydWUobGkuZGVsZXRlKCkpOworCisJCWFzc2VydEZhbHNlKGx1Y2VuZURpci5leGlzdHMoKSk7CisJCWFzc2VydFRydWUobHVjZW5lRm9sZGVyLmV4aXN0cygpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REZWxldGVOb3RFeGlzdCgpCisJeworCQlpbnQgdmVyc2lvbiA9IDA7CisKKwkJRmlsZSBsdWNlbmVGb2xkZXIgPSBudWxsOworCQl0cnkgeworCQkJbHVjZW5lRm9sZGVyID0gYmFzZUZvbGRlci5uZXdGb2xkZXIoInJlcG8xIiwgImx1Y2VuZSIpOworCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlmYWlsKCJGYWlsZWQgaW4gc2V0dXAgb2YgZm9sZGVyOiAiICsgZSk7CisJCX0KKwkJRmlsZSBsdWNlbmVEaXIgPSBuZXcgRmlsZShsdWNlbmVGb2xkZXIsIGdldEluZGV4RGlyKHZlcnNpb24pKTsKKwkJYXNzZXJ0RmFsc2UoIlByZWNvbmRpdGlvbiBmYWlsdXJlOiBpbmRleCBkaXJlY3RvcnkgZXhpc3RzIGFscmVhZHkiLCBsdWNlbmVEaXIuZXhpc3RzKCkpOworCisJCUx1Y2VuZUluZGV4U3RvcmUgbGkgPSBuZXcgTHVjZW5lSW5kZXhTdG9yZShsdWNlbmVGb2xkZXIsIHZlcnNpb24pOworCQlhc3NlcnRUcnVlKGxpLmRlbGV0ZSgpKTsKKworCQlhc3NlcnRGYWxzZShsdWNlbmVEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKGx1Y2VuZUZvbGRlci5leGlzdHMoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlV2l0aEZpbGVzKCkKKwl7CisJCWludCB2ZXJzaW9uID0gMTExMjIyMzMzOworCisJCUZpbGUgbHVjZW5lRm9sZGVyID0gbmV3IEZpbGUoYmFzZUZvbGRlci5nZXRSb290KCksICJ0aWNrZXRzL2x1Y2VuZSIpOworCQlGaWxlIGx1Y2VuZURpciA9IG51bGw7CisKKwkJRmlsZSBvdGhlckRpciA9IG5ldyBGaWxlKGJhc2VGb2xkZXIuZ2V0Um9vdCgpLCAidGlja2V0cy9sdWNlbmUvIiArIHZlcnNpb24gKyAiXzEwIik7CisJCUZpbGUgZGJGaWxlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWx1Y2VuZURpciA9IGJhc2VGb2xkZXIubmV3Rm9sZGVyKCJ0aWNrZXRzIiwgImx1Y2VuZSIsIGdldEluZGV4RGlyKHZlcnNpb24pKTsKKwkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGx1Y2VuZURpciwgIl9maWxlMSIpOworCQkJZmlsZS5jcmVhdGVOZXdGaWxlKCk7CisJCQlmaWxlID0gbmV3IEZpbGUobHVjZW5lRGlyLCAiX2ZpbGUyLmRiIik7CisJCQlmaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKKwkJCWZpbGUgPSBuZXcgRmlsZShsdWNlbmVEaXIsICJjb25mLmNvbmYiKTsKKwkJCWZpbGUuY3JlYXRlTmV3RmlsZSgpOworCisJCQlvdGhlckRpci5ta2RpcnMoKTsKKwkJCWRiRmlsZSA9IG5ldyBGaWxlKG90aGVyRGlyLCAiX2ZpbGUyLmRiIik7CisJCQlkYkZpbGUuY3JlYXRlTmV3RmlsZSgpOworCQkJZmlsZSA9IG5ldyBGaWxlKG90aGVyRGlyLCAiY29uZi5jb25mIik7CisJCQlmaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZmFpbCgiRmFpbGVkIGluIHNldHVwIG9mIGZvbGRlcjogIiArIGUpOworCQl9CisJCWFzc2VydFRydWUoIlByZWNvbmRpdGlvbiBmYWlsdXJlOiBpbmRleCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiLCBsdWNlbmVEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKCJQcmVjb25kaXRpb24gZmFpbHVyZTogb3RoZXIgaW5kZXggZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0Iiwgb3RoZXJEaXIuZXhpc3RzKCkpOworCisJCUx1Y2VuZUluZGV4U3RvcmUgbGkgPSBuZXcgTHVjZW5lSW5kZXhTdG9yZShsdWNlbmVGb2xkZXIsIHZlcnNpb24pOworCQlsaS5kZWxldGUoKTsKKworCQlhc3NlcnRGYWxzZShsdWNlbmVEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKGx1Y2VuZUZvbGRlci5leGlzdHMoKSk7CisJCWFzc2VydFRydWUob3RoZXJEaXIuZXhpc3RzKCkpOworCQlhc3NlcnRUcnVlKGRiRmlsZS5leGlzdHMoKSk7CisJfQorCisKKworCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0UGF0aCgpIHRocm93cyBJT0V4Y2VwdGlvbgorCXsKKwkJaW50IHZlcnNpb24gPSAyOworCQlGaWxlIGx1Y2VuZUZvbGRlciA9IGJhc2VGb2xkZXIubmV3Rm9sZGVyKCJ0aWNrZXRzIiwgImx1Y2VuZSIpOworCQlMdWNlbmVJbmRleFN0b3JlIGxpID0gbmV3IEx1Y2VuZUluZGV4U3RvcmUobHVjZW5lRm9sZGVyLCB2ZXJzaW9uKTsKKwkJUGF0aCBkaXIgPSBsaS5nZXRQYXRoKCk7CisJCUZpbGUgbHVjZW5lRGlyID0gbmV3IEZpbGUobHVjZW5lRm9sZGVyLCBnZXRJbmRleERpcih2ZXJzaW9uKSk7CisJCWFzc2VydEVxdWFscyhsdWNlbmVEaXIudG9QYXRoKCksIGRpcik7CisJfQorCisKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEhhc0luZGV4KCkgdGhyb3dzIElPRXhjZXB0aW9uCisJeworCQlpbnQgdmVyc2lvbiA9IDA7CisJCUZpbGUgbHVjZW5lRm9sZGVyID0gbmV3IEZpbGUoYmFzZUZvbGRlci5nZXRSb290KCksICJ0aWNrdG9jay9sdWNlbmUiKTsKKworCQlMdWNlbmVJbmRleFN0b3JlIGxpID0gbmV3IEx1Y2VuZUluZGV4U3RvcmUobHVjZW5lRm9sZGVyLCB2ZXJzaW9uKTsKKwkJYXNzZXJ0RmFsc2UobGkuaGFzSW5kZXgoKSk7CisKKwkJYmFzZUZvbGRlci5uZXdGb2xkZXIoInRpY2t0b2NrIik7CisJCWxpID0gbmV3IEx1Y2VuZUluZGV4U3RvcmUobHVjZW5lRm9sZGVyLCB2ZXJzaW9uKTsKKwkJYXNzZXJ0RmFsc2UobGkuaGFzSW5kZXgoKSk7CisKKwkJYmFzZUZvbGRlci5uZXdGb2xkZXIoInRpY2t0b2NrIiwgImx1Y2VuZSIpOworCQlsaSA9IG5ldyBMdWNlbmVJbmRleFN0b3JlKGx1Y2VuZUZvbGRlciwgdmVyc2lvbik7CisJCWFzc2VydEZhbHNlKGxpLmhhc0luZGV4KCkpOworCisJCUZpbGUgbHVjZW5lRGlyID0gYmFzZUZvbGRlci5uZXdGb2xkZXIoInRpY2t0b2NrIiwgImx1Y2VuZSIsIGdldEluZGV4RGlyKHZlcnNpb24pKTsKKwkJbGkgPSBuZXcgTHVjZW5lSW5kZXhTdG9yZShsdWNlbmVGb2xkZXIsIHZlcnNpb24pOworCQlhc3NlcnRGYWxzZShsaS5oYXNJbmRleCgpKTsKKworCQluZXcgRmlsZShsdWNlbmVEaXIsICJ3cml0ZS5sb2NrIikuY3JlYXRlTmV3RmlsZSgpOworCQlsaSA9IG5ldyBMdWNlbmVJbmRleFN0b3JlKGx1Y2VuZUZvbGRlciwgdmVyc2lvbik7CisJCWFzc2VydEZhbHNlKGxpLmhhc0luZGV4KCkpOworCisJCW5ldyBGaWxlKGx1Y2VuZURpciwgInNlZ21lbnRzXzEiKS5jcmVhdGVOZXdGaWxlKCk7CisJCWxpID0gbmV3IEx1Y2VuZUluZGV4U3RvcmUobHVjZW5lRm9sZGVyLCB2ZXJzaW9uKTsKKwkJYXNzZXJ0VHJ1ZShsaS5oYXNJbmRleCgpKTsKKworCX0KKworfQo=