PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5QYXNzd29yZCBGb3JtYXRzIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjQ8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1pc2NlbGxhbmVvdXMgRG9jdW1lbnRhdGlvbjwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPjxkaXYgaWQ9InByZWFtYmxlIj48aDE+UGFzc3dvcmQgRm9ybWF0czwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbWlzYy9wYXNzd29yZF9lbmNyeXB0aW9ucy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvbWlzYy9wYXNzd29yZF9lbmNyeXB0aW9ucy5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPjwvcD4KPC9kaXY+CgogICAgPHA+Tm90ZXMgYWJvdXQgdGhlIHBhc3N3b3JkIGVuY3J5cHRpb24gZm9ybWF0cyBnZW5lcmF0ZWQgYW5kIHVuZGVyc3Rvb2QgYnkKICAgIEFwYWNoZS48L3A+CiAgPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PGEgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2NvbnRyaWJ1dGluZy5odG1sIiBjbGFzcz0iYmFkZ2UiPjxpbWcgc3JjPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2ltYWdlcy9TdXBwb3J0QXBhY2hlLXNtYWxsLnBuZyIgYWx0PSJTdXBwb3J0IEFwYWNoZSEiIC8+PC9hPjx1bCBpZD0idG9jIj48bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNiYXNpYyI+QmFzaWMgQXV0aGVudGljYXRpb248L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZGlnZXN0Ij5EaWdlc3QgQXV0aGVudGljYXRpb248L2E+PC9saT4KPC91bD48aDM+U2VlIGFsc288L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImJhc2ljIiBpZD0iYmFzaWMiPkJhc2ljIEF1dGhlbnRpY2F0aW9uPC9hPjwvaDI+CgogICAgPHA+VGhlcmUgYXJlIGZpdmUgZm9ybWF0cyB0aGF0IEFwYWNoZSByZWNvZ25pemVzIGZvciBiYXNpYy1hdXRoZW50aWNhdGlvbgogICAgcGFzc3dvcmRzLiBOb3RlIHRoYXQgbm90IGFsbCBmb3JtYXRzIHdvcmsgb24gZXZlcnkgcGxhdGZvcm06PC9wPgoKICAgIDxkbD4KICAgICAgIDxkdD5iY3J5cHQ8L2R0PgogICAgICAgPGRkPiIkMnkkIiArIHRoZSByZXN1bHQgb2YgdGhlIGNyeXB0X2Jsb3dmaXNoIGFsZ29yaXRobS4KICAgICAgIFNlZSB0aGUgQVBSIHNvdXJjZSBmaWxlCiAgICAgICA8YSBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL2Fwci9hcHIvdHJ1bmsvY3J5cHRvL2NyeXB0X2Jsb3dmaXNoLmM/dmlldz1tYXJrdXAiPmNyeXB0X2Jsb3dmaXNoLmM8L2E+CiAgICAgICBmb3IgdGhlIGRldGFpbHMgb2YgdGhlIGFsZ29yaXRobS48L2RkPgoKICAgICAgIDxkdD5NRDU8L2R0PgogICAgICAgPGRkPiIkYXByMSQiICsgdGhlIHJlc3VsdCBvZiBhbiBBcGFjaGUtc3BlY2lmaWMgYWxnb3JpdGhtIHVzaW5nIGFuCiAgICAgICBpdGVyYXRlZCAoMSwwMDAgdGltZXMpIE1ENSBkaWdlc3Qgb2YgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgYQogICAgICAgcmFuZG9tIDMyLWJpdCBzYWx0IGFuZCB0aGUgcGFzc3dvcmQuIFNlZSB0aGUgQVBSIHNvdXJjZSBmaWxlCiAgICAgICA8YSBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL2Fwci9hcHIvdHJ1bmsvY3J5cHRvL2Fwcl9tZDUuYz92aWV3PW1hcmt1cCI+YXByX21kNS5jPC9hPgogICAgICAgZm9yIHRoZSBkZXRhaWxzIG9mIHRoZSBhbGdvcml0aG0uPC9kZD4KCiAgICAgICA8ZHQ+U0hBMTwvZHQ+CiAgICAgICA8ZGQ+IntTSEF9IiArIEJhc2U2NC1lbmNvZGVkIFNIQS0xIGRpZ2VzdCBvZiB0aGUgcGFzc3dvcmQuIEluc2VjdXJlLjwvZGQ+CgogICAgICAgPGR0PkNSWVBUPC9kdD4KICAgICAgIDxkZD5Vbml4IG9ubHkuIFVzZXMgdGhlIHRyYWRpdGlvbmFsIFVuaXggPGNvZGU+Y3J5cHQoMyk8L2NvZGU+IGZ1bmN0aW9uCiAgICAgICB3aXRoIGEgcmFuZG9tbHktZ2VuZXJhdGVkIDMyLWJpdCBzYWx0IChvbmx5IDEyIGJpdHMgdXNlZCkgYW5kIHRoZSBmaXJzdCA4CiAgICAgICBjaGFyYWN0ZXJzIG9mIHRoZSBwYXNzd29yZC4gSW5zZWN1cmUuPC9kZD4KCiAgICAgICA8ZHQ+UExBSU4gVEVYVCAoaS5lLiA8ZW0+dW5lbmNyeXB0ZWQ8L2VtPik8L2R0PgogICAgICAgPGRkPldpbmRvd3MgJmFtcDsgTmV0d2FyZSBvbmx5LiBJbnNlY3VyZS48L2RkPgogICAgPC9kbD4KCiAgICA8aDM+R2VuZXJhdGluZyB2YWx1ZXMgd2l0aCBodHBhc3N3ZDwvaDM+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+YmNyeXB0PC9oMz48cD48Y29kZT4KICAgICAgJCBodHBhc3N3ZCAtbmJCIG15TmFtZSBteVBhc3N3b3JkPGJyIC8+CiAgICAgIG15TmFtZTokMnkkMDUkYzRXb01QbzNTWHNhZmt2YS5ISGE2dVhRWldyN29ib1BpQzJiVC9yN3ExQkI4STJzMEJScUMKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5NRDU8L2gzPjxwPjxjb2RlPgogICAgICAkIGh0cGFzc3dkIC1uYm0gbXlOYW1lIG15UGFzc3dvcmQ8YnIgLz4KICAgICAgbXlOYW1lOiRhcHIxJHIzMS4uLi4uJEhxSlppbWNLUUZBTVlheUJsemtyQS8KICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5TSEExPC9oMz48cD48Y29kZT4KICAgICAgJCBodHBhc3N3ZCAtbmJzIG15TmFtZSBteVBhc3N3b3JkPGJyIC8+CiAgICAgIG15TmFtZTp7U0hBfVZCUHVKSEk3dWl4YWE2TFFHV3g0cys1R0tORT0KICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5DUllQVDwvaDM+PHA+PGNvZGU+CiAgICAgICQgaHRwYXNzd2QgLW5iZCBteU5hbWUgbXlQYXNzd29yZDxiciAvPgogICAgICBteU5hbWU6cnFYZXhTNlpob2JLQQogICAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIAoKICAgIDxoMz5HZW5lcmF0aW5nIENSWVBUIGFuZCBNRDUgdmFsdWVzIHdpdGggdGhlIE9wZW5TU0wKICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBwcm9ncmFtPC9oMz4KICAgICAgCgogICAgICA8cD5PcGVuU1NMIGtub3dzIHRoZSBBcGFjaGUtc3BlY2lmaWMgTUQ1IGFsZ29yaXRobS48L3A+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+TUQ1PC9oMz48cD48Y29kZT4KICAgICAgJCBvcGVuc3NsIHBhc3N3ZCAtYXByMSBteVBhc3N3b3JkPGJyIC8+CiAgICAgICRhcHIxJHFIREZmaFBDJG5JVFNWSGdZYkRBSzFZMGFjR1JuWTAKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5DUllQVDwvaDM+PHA+PGNvZGU+CiAgICAgIG9wZW5zc2wgcGFzc3dkIC1jcnlwdCBteVBhc3N3b3JkPGJyIC8+CiAgICAgIHFRNXZUWU8zYzhkc1UKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgIAoKICAgIDxoMz5WYWxpZGF0aW5nIENSWVBUIG9yIE1ENSBwYXNzd29yZHMgd2l0aCB0aGUgT3BlblNTTCBjb21tYW5kCiAgICAgICAgICAgICBsaW5lIHByb2dyYW08L2gzPgogICAgICAKICAgICAgPHA+VGhlIHNhbHQgZm9yIGEgQ1JZUFQgcGFzc3dvcmQgaXMgdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIChjb252ZXJ0ZWQgdG8KICAgICAgYSBiaW5hcnkgdmFsdWUpLiBUbyB2YWxpZGF0ZSA8Y29kZT5teVBhc3N3b3JkPC9jb2RlPiBhZ2FpbnN0CiAgICAgIDxjb2RlPnJxWGV4UzZaaG9iS0E8L2NvZGU+PC9wPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkNSWVBUPC9oMz48cD48Y29kZT4KICAgICAgJCBvcGVuc3NsIHBhc3N3ZCAtY3J5cHQgLXNhbHQgcnEgbXlQYXNzd29yZDxiciAvPgogICAgICBXYXJuaW5nOiB0cnVuY2F0aW5nIHBhc3N3b3JkIHRvIDggY2hhcmFjdGVyczxiciAvPgogICAgICBycVhleFM2WmhvYktBCiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICA8cD5Ob3RlIHRoYXQgdXNpbmcgPGNvZGU+bXlQYXNzd288L2NvZGU+IGluc3RlYWQgb2YKICAgICAgPGNvZGU+bXlQYXNzd29yZDwvY29kZT4gd2lsbCBwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdCBiZWNhdXNlIG9ubHkgdGhlCiAgICAgIGZpcnN0IDggY2hhcmFjdGVycyBvZiBDUllQVCBwYXNzd29yZHMgYXJlIGNvbnNpZGVyZWQuPC9wPgoKICAgICAgPHA+VGhlIHNhbHQgZm9yIGFuIE1ENSBwYXNzd29yZCBpcyBiZXR3ZWVuIDxjb2RlPiRhcHIxJDwvY29kZT4gYW5kIHRoZQogICAgICBmb2xsb3dpbmcgPGNvZGU+JDwvY29kZT4gKGFzIGEgQmFzZTY0LWVuY29kZWQgYmluYXJ5IHZhbHVlIC0gbWF4IDggY2hhcnMpLgogICAgICBUbyB2YWxpZGF0ZSA8Y29kZT5teVBhc3N3b3JkPC9jb2RlPiBhZ2FpbnN0CiAgICAgIDxjb2RlPiRhcHIxJHIzMS4uLi4uJEhxSlppbWNLUUZBTVlheUJsemtyQS88L2NvZGU+PC9wPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPk1ENTwvaDM+PHA+PGNvZGU+CiAgICAgICQgb3BlbnNzbCBwYXNzd2QgLWFwcjEgLXNhbHQgcjMxLi4uLi4gbXlQYXNzd29yZDxiciAvPgogICAgICAkYXByMSRyMzEuLi4uLiRIcUpaaW1jS1FGQU1ZYXlCbHprckEvCiAgICAgIDwvY29kZT48L3A+PC9kaXY+CiAgICAKCiAgICA8aDM+RGF0YWJhc2UgcGFzc3dvcmQgZmllbGRzIGZvciBtb2RfZGJkPC9oMz4KICAgICAgPHA+VGhlIFNIQTEgdmFyaWFudCBpcyBwcm9iYWJseSB0aGUgbW9zdCB1c2VmdWwgZm9ybWF0IGZvciBEQkQKICAgICAgYXV0aGVudGljYXRpb24uIFNpbmNlIHRoZSBTSEExIGFuZCBCYXNlNjQgZnVuY3Rpb25zIGFyZSBjb21tb25seQogICAgICBhdmFpbGFibGUsIG90aGVyIHNvZnR3YXJlIGNhbiBwb3B1bGF0ZSBhIGRhdGFiYXNlIHdpdGggZW5jcnlwdGVkIHBhc3N3b3JkcwogICAgICB0aGF0IGFyZSB1c2FibGUgYnkgQXBhY2hlIGJhc2ljIGF1dGhlbnRpY2F0aW9uLjwvcD4KCiAgICAgIDxwPlRvIGNyZWF0ZSBBcGFjaGUgU0hBMS12YXJpYW50IGJhc2ljLWF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkcyBpbiB2YXJpb3VzCiAgICAgIGxhbmd1YWdlczo8L3A+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+UEhQPC9oMz48cD48Y29kZT4KICAgICAgJ3tTSEF9JyAuIGJhc2U2NF9lbmNvZGUoc2hhMSgkcGFzc3dvcmQsIFRSVUUpKQogICAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkphdmE8L2gzPjxwPjxjb2RlPgogICAgICAie1NIQX0iICsgbmV3IHN1bi5taXNjLkJBU0U2NEVuY29kZXIoKS5lbmNvZGUoamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJTSEExIikuZGlnZXN0KHBhc3N3b3JkLmdldEJ5dGVzKCkpKQogICAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkNvbGRGdXNpb248L2gzPjxwPjxjb2RlPgogICAgICAie1NIQX0iICZhbXA7IFRvQmFzZTY0KEJpbmFyeURlY29kZShIYXNoKHBhc3N3b3JkLCAiU0hBMSIpLCAiSGV4IikpCiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+UnVieTwvaDM+PHA+PGNvZGU+CiAgICAgIHJlcXVpcmUgJ2RpZ2VzdC9zaGExJzxiciAvPgogICAgICByZXF1aXJlICdiYXNlNjQnPGJyIC8+CiAgICAgICd7U0hBfScgKyBCYXNlNjQuZW5jb2RlNjQoRGlnZXN0OjpTSEExLmRpZ2VzdChwYXNzd29yZCkpCiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+QyBvciBDKys8L2gzPjxwPjxjb2RlPgogICAgICBVc2UgdGhlIEFQUiBmdW5jdGlvbjogYXByX3NoYTFfYmFzZTY0CiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+UHl0aG9uPC9oMz48cD48Y29kZT4KICAgICAgaW1wb3J0IGJhc2U2NDxiciAvPgogICAgICBpbXBvcnQgaGFzaGxpYjxiciAvPgogICAgICAie1NIQX0iICsgZm9ybWF0KGJhc2U2NC5iNjRlbmNvZGUoaGFzaGxpYi5zaGExKHBhc3N3b3JkKS5kaWdlc3QoKSkpCiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+UG9zdGdyZVNRTCAod2l0aCB0aGUgY29udHJpYi9wZ2NyeXB0byBmdW5jdGlvbnMKICAgICAgICAgICAgICAgaW5zdGFsbGVkKTwvaDM+PHA+PGNvZGU+CiAgICAgICAgCiAgICAgICAgJ3tTSEF9J3x8ZW5jb2RlKGRpZ2VzdChwYXNzd29yZCwnc2hhMScpLCdiYXNlNjQnKQogICAgICA8L2NvZGU+PC9wPjwvZGl2PgogICAgCgogIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImRpZ2VzdCIgaWQ9ImRpZ2VzdCI+RGlnZXN0IEF1dGhlbnRpY2F0aW9uPC9hPjwvaDI+CiAgICA8cD5BcGFjaGUgcmVjb2duaXplcyBvbmUgZm9ybWF0IGZvcgogICAgZGlnZXN0LWF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkcyAtIHRoZSBNRDUgaGFzaCBvZiB0aGUgc3RyaW5nCiAgICA8Y29kZT51c2VyOnJlYWxtOnBhc3N3b3JkPC9jb2RlPiBhcyBhIDMyLWNoYXJhY3RlciBzdHJpbmcgb2YgaGV4YWRlY2ltYWwKICAgIGRpZ2l0cy4gPGNvZGU+cmVhbG08L2NvZGU+IGlzIHRoZSBBdXRob3JpemF0aW9uIFJlYWxtIGFyZ3VtZW50IHRvIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobl9jb3JlLmh0bWwjYXV0aG5hbWUiPkF1dGhOYW1lPC9hPjwvY29kZT4gZGlyZWN0aXZlIGluCiAgICBodHRwZC5jb25mLjwvcD4KCiAgICA8aDM+RGF0YWJhc2UgcGFzc3dvcmQgZmllbGRzIGZvciBtb2RfZGJkPC9oMz4KCiAgICAgIDxwPlNpbmNlIHRoZSBNRDUgZnVuY3Rpb24gaXMgY29tbW9ubHkgYXZhaWxhYmxlLCBvdGhlciBzb2Z0d2FyZSBjYW4KICAgICAgcG9wdWxhdGUgYSBkYXRhYmFzZSB3aXRoIGVuY3J5cHRlZCBwYXNzd29yZHMgdGhhdCBhcmUgdXNhYmxlIGJ5IEFwYWNoZQogICAgICBkaWdlc3QgYXV0aGVudGljYXRpb24uPC9wPgoKICAgICAgPHA+VG8gY3JlYXRlIEFwYWNoZSBkaWdlc3QtYXV0aGVudGljYXRpb24gcGFzc3dvcmRzIGluIHZhcmlvdXMKICAgICAgbGFuZ3VhZ2VzOjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5QSFA8L2gzPjxwPjxjb2RlPgogICAgICBtZDUoJHVzZXIgLiAnOicgLiAkcmVhbG0gLiAnOicgLiRwYXNzd29yZCkKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5KYXZhPC9oMz48cD48Y29kZT4KICAgICAgYnl0ZSBiW10gPSBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoIk1ENSIpLmRpZ2VzdCggKHVzZXIgKyAiOiIgKyByZWFsbSArICI6IiArIHBhc3N3b3JkICkuZ2V0Qnl0ZXMoKSk7PGJyIC8+CiAgICAgIGphdmEubWF0aC5CaWdJbnRlZ2VyIGJpID0gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKDEsIGIpOzxiciAvPgogICAgICBTdHJpbmcgcyA9IGJpLnRvU3RyaW5nKDE2KTs8YnIgLz4KICAgICAgd2hpbGUgKHMubGVuZ3RoKCkgJmx0OyAzMik8YnIgLz4KICAgICAgPHNwYW4gY2xhc3M9ImluZGVudCI+CiAgICAgICAgcyA9ICIwIiArIHM7CiAgICAgIDwvc3Bhbj4KICAgICAgLy8gU3RyaW5nIHMgaXMgdGhlIGVuY3J5cHRlZCBwYXNzd29yZAogICAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkNvbGRGdXNpb248L2gzPjxwPjxjb2RlPgogICAgICBMQ2FzZShIYXNoKCAodXNlciAmYW1wOyAiOiIgJmFtcDsgcmVhbG0gJmFtcDsgIjoiICZhbXA7IHBhc3N3b3JkKSAsICJNRDUiKSkKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5SdWJ5PC9oMz48cD48Y29kZT4KICAgICAgcmVxdWlyZSAnZGlnZXN0L21kNSc8YnIgLz4KICAgICAgRGlnZXN0OjpNRDUuaGV4ZGlnZXN0KHVzZXIgKyAnOicgKyByZWFsbSArICc6JyArIHBhc3N3b3JkKQogICAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPlBvc3RncmVTUUwgKHdpdGggdGhlIGNvbnRyaWIvcGdjcnlwdG8gZnVuY3Rpb25zIGluc3RhbGxlZCk8L2gzPjxwPjxjb2RlPgogICAgICAgIAogICAgICAgIGVuY29kZShkaWdlc3QoIHVzZXIgfHwgJzonIHx8IHJlYWxtIHx8ICc6JyB8fCBwYXNzd29yZCAsICdtZDUnKSwgJ2hleCcpCiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgCiAgPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbWlzYy9wYXNzd29yZF9lbmNyeXB0aW9ucy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvbWlzYy9wYXNzd29yZF9lbmNyeXB0aW9ucy5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9taXNjL3Bhc3N3b3JkX2VuY3J5cHRpb25zLmh0bWwnOwooZnVuY3Rpb24odywgZCkgewogICAgaWYgKHcubG9jYXRpb24uaG9zdG5hbWUudG9Mb3dlckNhc2UoKSA9PSAiaHR0cGQuYXBhY2hlLm9yZyIpIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPjxcL2Rpdj4nKTsKICAgICAgICB2YXIgcyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgcy50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgcy5hc3luYyA9IHRydWU7CiAgICAgICAgcy5zcmMgPSAnaHR0cHM6Ly9jb21tZW50cy5hcGFjaGUub3JnL3Nob3dfY29tbWVudHMubHVhP3NpdGU9JyArIGNvbW1lbnRzX3Nob3J0bmFtZSArICcmcGFnZT0nICsgY29tbWVudHNfaWRlbnRpZmllcjsKICAgICAgICAoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSkuYXBwZW5kQ2hpbGQocyk7CiAgICB9CiAgICBlbHNlIHsgCiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj5Db21tZW50cyBhcmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFnZSBhdCB0aGUgbW9tZW50LjxcL2Rpdj4nKTsKICAgIH0KfSkod2luZG93LCBkb2N1bWVudCk7Ci8vLS0+PCFdXT48L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxOSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+