PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vYXBwLmNsYXNzLnBocCIpOwlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9uYXYuY2xhc3MucGhwIik7IAlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9tZW51LmNsYXNzLnBocCIpOyAJJEFwcCAJPSBuZXcgQXBwKCk7CSROYXYJPSBuZXcgTmF2KCk7CSRNZW51IAk9IG5ldyBNZW51KCk7CQlpbmNsdWRlKCRBcHAtPmdldFByb2plY3RDb21tb24oKSk7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCQoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkjCgkjIHRlbXBsYXRlLnBocAoJIwoJIyBBdXRob3I6IAkJRGVuaXMgUm95CgkjIERhdGU6CQkJMjAwNS0wNi0xNgoJIwoJIyBEZXNjcmlwdGlvbjogVHlwZSB5b3VyIHBhZ2UgY29tbWVudHMgaGVyZSAtIHRoZXNlIGFyZSBub3Qgc2VudCB0byB0aGUgYnJvd3NlcgoJIwoJIwoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCSRkb2N1bWVudFJvb3QgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOwoJLy9yZXF1aXJlX29uY2UgKCRkb2N1bWVudFJvb3QgLicvZXVyb3BhL3NjcmlwdHMvcHJvamVjdHNUYWJsZS5waHAnKTsKCS8vcmVxdWlyZV9vbmNlICgkZG9jdW1lbnRSb290IC4gJy9yZXNvdXJjZXMvc2NyaXB0cy9yZXNvdXJjZXNfaHRtbC5waHAnKTsJCglyZXF1aXJlX29uY2UgKCRkb2N1bWVudFJvb3QgLiAnL2V1cm9wYS9zY3JpcHRzL3doYXRzbmV3LnBocCcpOwoJIwoJIyBCZWdpbjogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncy4gIENoYW5nZSB0aGVzZS4gCgkkcGFnZVRpdGxlIAkJPSAiRWNsaXBzZSBFdXJvcGEgUmVsZWFzZSI7CgkkcGFnZUtleXdvcmRzCT0gIkVjbGlwc2UgRXVyb3BhIFNpbXVsdGFuZW91cyBSZWxlYXNlIjsKCSRwYWdlQXV0aG9yCQk9ICJOYXRoYW4gR2VydmFpcyI7CgkKCSMgQWRkIHBhZ2Utc3BlY2lmaWMgTmF2IGJhcnMgaGVyZQoJIyBGb3JtYXQgaXMgTGluayB0ZXh0LCBsaW5rIFVSTCAoY2FuIGJlIGh0dHA6Ly93d3cuc29tZW90aGVyc2l0ZS5jb20vKSwgdGFyZ2V0IChfc2VsZiwgX2JsYW5rKSwgbGV2ZWwgKDEsIDIgb3IgMykKCSMgJE5hdi0+YWRkTmF2U2VwYXJhdG9yKCJNeSBQYWdlIExpbmtzIiwgCSJkb3dubG9hZHMucGhwIik7CgkjICROYXYtPmFkZEN1c3RvbU5hdigiTXkgTGluayIsICJteXBhZ2UucGhwIiwgIl9zZWxmIiwgMSk7CgkjICROYXYtPmFkZEN1c3RvbU5hdigiR29vZ2xlIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiX2JsYW5rIiwgMSk7CgoJIyBFbmQ6IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MKCSMKCS8vIFRoaXMgZmlsZSBpcyBsaW5rZWQgdG8gZnJvbSBsb3RzIG9mIGRpZmZlcmVudCBwbGFjZXMuCgkvLyBVc2UgYWJzb2x1dGUgcGF0aHMgdG8gbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGFjdHVhbGx5IHRlc3QKCS8vIHRoYXQgdGhlIGZpbGUgcmVuZGVycyBwcm9wZXJseSAoaS5lLiB0ZXN0aW5nIHVzaW5nKSAiL2luZGV4LnBocCIsCgkvLyBhbmQgIi9ob21lL2luZGV4LnBocCIgYm90aCB3b3JrLgoJIyBQYXN0ZSB5b3VyIEhUTUwgY29udGVudCBiZXR3ZWVuIHRoZSBFT0hUTUwgbWFya2VycyEKCQoJCgkkd2hhdHNuZXcgPSByc3NfdG9fc2lkZWl0ZW1faHRtbCgnL2NvbW11bml0eS9uZXdzLzIwMDVpbnRoZW5ld3NhcmNoaXZlJywgMywgImV1cm9wYSIpOwkKCSRyZXNvdXJjZV9maWx0ZXIgPSAiRXVyb3BhIjsKCS8vJGRpc3BsYXlUYWJzID0gZGlzcGxheVRhYnMoKTsJCQoJLy8kcmVzb3VyY2VzX3RhYmxlID0gJFJlc291cmNlc19IVE1MLT5nZXRfcGlsbGFyX3Jlc291cmNlc190YWJsZSgkcmVzb3VyY2VfZmlsdGVyKTsKCSAKCW9iX3N0YXJ0KCk7Cgk/PgoJPG1hcCBuYW1lPSJkZXZlbG9wZXJCYXJNYXAiPgoJCTxhcmVhIHNoYXBlPSJyZWN0IiBhbHQ9IiIgY29vcmRzPSI1MzcsMCw2NzAsNTgiIGhyZWY9Ii9kb3dubG9hZHMvbW9yZWluZm8vY3VzdG9tLnBocCI+CgkJPGFyZWEgc2hhcGU9InJlY3QiIGFsdD0iIiBjb29yZHM9IjM5NiwwLDUzNyw1OCIgaHJlZj0iL2Rvd25sb2Fkcy9tb3JlaW5mby9yY3AucGhwIj4KCQk8YXJlYSBzaGFwZT0icmVjdCIgYWx0PSIiIGNvb3Jkcz0iMjYzLDAsMzk2LDU4IiBocmVmPSIvZG93bmxvYWRzL21vcmVpbmZvL2MucGhwIj4KCQk8YXJlYSBzaGFwZT0icmVjdCIgYWx0PSIiIGNvb3Jkcz0iMTI1LDAsMjYzLDU4IiBocmVmPSIvZG93bmxvYWRzL21vcmVpbmZvL2plZS5waHAiPgoJCTxhcmVhIHNoYXBlPSJyZWN0IiBhbHQ9IiIgY29vcmRzPSIwLDAsMTI1LDU4IiBocmVmPSIvZG93bmxvYWRzL21vcmVpbmZvL2phdmEucGhwIj4KCTwvbWFwPgkJCgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJsYXlvdXQuY3NzIiBtZWRpYT0ic2NyZWVuIiAvPgoJPGRpdiBpZD0ibWlkY29sdW1uIj4KCQk8ZGl2IGlkPSJoZWFkZXJCRyI+CgkJCTx0YWJsZSBjZWxsc3BhY2luZz0wIGNsYXNzPSJoZWFkZXJCYXIgcmVsZWFzZSI+CgkgICAgICAgIAk8dHI+CgkgICAgICAgIAkJPHRkIGFsaWduPSJyaWdodCI+PC90ZD4KCQkJCTwvdHI+CQkJCQoJCQk8L3RhYmxlPgoJCTwvZGl2PgoJCTxwPgoJCQkJRWNsaXBzZSBFdXJvcGEgaXMgdGhlIGFubnVhbCByZWxlYXNlIG9mIEVjbGlwc2UgcHJvamVjdHMuICBMaWtlIGxhc3QgeWVhcpJzIENhbGxpc3RvIHJlbGVhc2UsIHRoZSBFdXJvcGEgcmVsZWFzZSBpcyBhIGNvb3JkaW5hdGVkIHJlbGVhc2Ugb2YgZGlmZmVyZW50IEVjbGlwc2UgcHJvamVjdCB0ZWFtcy4gICBUaGlzIHllYXIsIHRoZSBhbm51YWwgcmVsZWFzZSBpbmNsdWRlcyA8YSBocmVmPSJwcm9qZWN0cy5waHAiPjIxIHByb2plY3RzLjwvYT4gICBCeSByZWxlYXNpbmcgdGhlc2UgcHJvamVjdHMgYXQgdGhlIHNhbWUgdGltZSwgdGhlIGdvYWwgaXMgdG8gZWxpbWluYXRlIHVuY2VydGFpbnR5IGFib3V0IHZlcnNpb24gY29tcGF0aWJpbGl0eSBhbmQgbWFrZSBpdCBlYXNpZXIgdG8gaW5jb3Jwb3JhdGUgbXVsdGlwbGUgcHJvamVjdHMgaW50byB5b3VyIGVudmlyb25tZW50LgoJCSAgICAgICAgPGJyIC8+PGJyIC8+CgkJICAgICAgICAgICAgICAKCQkgICAgICAgIDxlbT5XaGlsZSBFdXJvcGEgaXMgYWJvdXQgdGhlIHNpbXVsdGFuZW91cyByZWxlYXNlIG9mIDxhIGhyZWY9InByb2plY3RzLnBocCI+dHdlbnR5IG9uZSBwcm9qZWN0czwvYT4sIGl0IGlzCgkJICAgICAgICBub3QgYSB1bmlmaWNhdGlvbiBvZiB0aGUgcHJvamVjdHMgLSBlYWNoIHByb2plY3QgcmVtYWlucyBhIHNlcGFyYXRlIG9wZW4gc291cmNlIHByb2plY3Qgb3BlcmF0aW5nIHdpdGggaXRzIG93biBwcm9qZWN0IGxlYWRlcnNoaXAsIGl0cyBvd24gY29tbWl0dGVycywgYW5kIGl0cyBvd24gcHJvamVjdCBwbGFuLjwvZW0+CgkJCQk8YnIvPgoJCQkJPGJyLz4KCQkJCTxkaXYgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9ImltYWdlcy9kZXZlbG9wZXJCYXIuanBnIiB1c2VNYXA9IiNkZXZlbG9wZXJCYXJNYXAiPjwvZGl2Pjxici8+CgkJCQk8IS0tIDxzcGFuIGNsYXNzPSJldXJvcGFMaW5rIj5IZWxwIFByb21vdGUgRWNsaXBzZSBFdXJvcGE8L3NwYW4+PGJyLz4KCQkJCVZpc2l0IG91ciA8YSBocmVmPSJmcmllbmRzLnBocCI+RnJpZW5kcyBvZiBFdXJvcGE8L2E+IHBhZ2UgYW5kIGluY2x1ZGUgb25lIG9mIHRoZSBpbWFnZXMgb24geW91ciBzaXRlLjxici8+PGJyLz4KCQkJCTxzcGFuIGNsYXNzPSJldXJvcGFMaW5rIj5UZXN0IERyaXZlIHRoZSBMYXRlc3QgRWNsaXBzZSBFdXJvcGEgUmVsZWFzZSBDYW5kaWRhdGVzIChSQyk8L3NwYW4+PGJyLz4KCQkJCVRoZSBFY2xpcHNlIEV1cm9wYSB1cGRhdGUgc2l0ZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9ldXJvcGEvc2l0ZS54bWw8YnIvPlRvIHVzZSB0aGUgdXBkYXRlIHNpdGUgY29weSB0aGUgVVJMIGFib3ZlIGFuZCBwYXN0ZSBpdCBpbnRvIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLjxici8+PGJyLz4KCQkJCTxzcGFuIGNsYXNzPSJldXJvcGFMaW5rIj5Gb2xsb3cgdGhlIEVjbGlwc2UgRXVyb3BhIERldmVsb3BtZW50IENvb3JkaW5hdGlvbjwvc3Bhbj48YnIvPgoJCQkJQ2hlY2sgb3V0IHRoZSA8YSBocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9pbmRleC5waHAvRXVyb3BhX1NpbXVsdGFuZW91c19SZWxlYXNlIj5FY2xpcHNlIEV1cm9wYSBXaWtpIFBhZ2U8L2E+IHRvIGNoZWNrIG91dCB0aGUgc3RhdHVzIG9mIEV1cm9wYTwvYnI+PGJyLz4gLS0+CgkJPC9wPgoJCgkKICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJob21laXRlbSBub01hcmdpbkxlZnQiPgogICAgICAgIDxoMz5MZWFybiBtb3JlPC9oMz4KICAgICAgICA8dWw+CiAgICAgICAgCTxsaT48YSBocmVmPSJldXJvcGFyZXZpZXdzLnBocCI+RXVyb3BhIFJldmlld3M8L2E+PC9saT4KICAgICAgICAJPGxpPkNoZWNrIG91dCB0aGUgbGF0ZXN0IDxhIGhyZWY9Imh0dHA6Ly9saXZlLmVjbGlwc2Uub3JnL3NlYXJjaC9ub2RlL2V1cm9wYSI+V2ViaW5hcnM8L2E+IGF0IDxhIGhyZWY9Imh0dHA6Ly9saXZlLmVjbGlwc2Uub3JnIj5FY2xpcHNlIExpdmU8L2E+PC9saT4KICAgICAgICAJPGxpPklTVnMgYWRvcHRpbmcgPGEgaHJlZj0iZXVyb3BhZWZmZWN0LnBocCI+RXVyb3BhIHByb2plY3RzPC9hPjwvbGk+IAogICAgICAgIAk8bGk+IExpc3RlbiB0byB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlem9uZS5jb20vcG9kY2FzdHMuanNwIiB0YXJnZXQ9ImJsYW5rIj5FY2xpcHNlWm9uZSBFdXJvcGEgUG9kY2FzdHM8L2E+CiAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4JCgoJCTw/PSR3aGF0c25ldzs/PgoJCTxici8+CgkJPD8gLyo8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MD4KCQkJPHRyPgoJCQkJPHRkIGNvbHNwYW49IjIiPgkJCQkKCQkJCQk8ZGl2IGlkPSJ0ZWNobmljYWxSZXNvdXJjZXMiPgoJCQkJCQk8Pz0kcmVzb3VyY2VzX3RhYmxlOz8+CgkJCQkJPC9kaXY+CgkJCQk8L3RkPgoJCQk8L3RyPgoJCQk8L3RhYmxlPiAqLyA/PgkJCgoJCTxwPiZuYnNwOzwvcD4KCgk8L2Rpdj4KCgk8ZGl2IGlkPSJyaWdodGNvbHVtbiI+CgkJPGRpdiBjbGFzcz0ic2lkZWl0ZW0iPgoJCQk8aDY+UmVsYXRlZCBMaW5rczwvaDY+CgkJCQk8dWw+CgkJCQkJPGxpPjxhIGhyZWY9ImZyaWVuZHMucGhwIj5GcmllbmRzIG9mIEV1cm9wYTwvYT48L2xpPgoJCQkJCTxsaT48YSBocmVmPSJwcm9qZWN0cy5waHAiPkV1cm9wYSBQcm9qZWN0czwvYT48L2xpPgoJCQkJCTxsaT48YSBocmVmPSIvb3JnL3ByZXNzLXJlbGVhc2UvMjAwNzA2MTJjYl9ldXJvcGFyZXZpZXdzLnBocCI+V3JpdGUgYSBSZXZpZXcsIFdpbiBhbiBFY2xpcHNlIFNoaXJ0PC9hPjwvbGk+CgkJCQk8L3VsPgoJCTwvZGl2PgoJCQoKCTwvZGl2PgoKPD8gCiRodG1sID0gb2JfZ2V0X2NvbnRlbnRzKCk7Cm9iX2VuZF9jbGVhbigpOwoKCSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCgkkQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4KCg==