PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+CjwhLS1OZXdQYWdlLS0+CjxIVE1MPgo8SEVBRD4KPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBGcmkgQXVnIDIyIDAzOjQ0OjEwIEVEVCAyMDAzIC0tPgo8VElUTEU+ClJlcXVlc3RQcm9jZXNzb3IgKEFwYWNoZSBTdHJ1dHMgQVBJIERvY3VtZW50YXRpb24pCjwvVElUTEU+CjxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uUmVxdWVzdFByb2Nlc3NvcixSZXF1ZXN0UHJvY2Vzc29yIGNsYXNzIj4KPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgo8L0hFQUQ+CjxTQ1JJUFQ+CmZ1bmN0aW9uIGFzZCgpCnsKcGFyZW50LmRvY3VtZW50LnRpdGxlPSJSZXF1ZXN0UHJvY2Vzc29yIChBcGFjaGUgU3RydXRzIEFQSSBEb2N1bWVudGF0aW9uKSI7Cn0KPC9TQ1JJUFQ+CjxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Cgo8IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+CjxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KPFRSPgo8VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+CjxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgogIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvUmVxdWVzdFByb2Nlc3Nvci5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDwvVFI+CjwvVEFCTEU+CjwvVEQ+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgo8L0VNPgo8L1REPgo8L1RSPgoKPFRSPgo8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgombmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdEFjdGlvbk1hcHBpbmcuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7CiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9TZXNzaW9uQWN0aW9uTWFwcGluZy5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKJm5ic3A7PEEgSFJFRj0iUmVxdWVzdFByb2Nlc3Nvci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKJm5ic3A7CjxTQ1JJUFQ+CiAgPCEtLQogIGlmKHdpbmRvdz09dG9wKSB7CiAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKICB9CiAgLy8tLT4KPC9TQ1JJUFQ+CjxOT1NDUklQVD4KPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+CjwvTk9TQ1JJUFQ+CjwvRk9OVD48L1REPgo8L1RSPgo8VFI+CjxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+CiAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+CjwvVFI+CjwvVEFCTEU+CjwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KCjxIUj4KPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgo8SDI+CjxGT05UIFNJWkU9Ii0xIj4Kb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uPC9GT05UPgo8QlI+CkNsYXNzIFJlcXVlc3RQcm9jZXNzb3I8L0gyPgo8UFJFPgpqYXZhLmxhbmcuT2JqZWN0CiAgfAogICstLTxCPm9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5SZXF1ZXN0UHJvY2Vzc29yPC9CPgo8L1BSRT4KPERMPgo8RFQ+PEI+RGlyZWN0IEtub3duIFN1YmNsYXNzZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvdGlsZXMvVGlsZXNSZXF1ZXN0UHJvY2Vzc29yLmh0bWwiPlRpbGVzUmVxdWVzdFByb2Nlc3NvcjwvQT48L0REPgo8L0RMPgo8SFI+CjxETD4KPERUPnB1YmxpYyBjbGFzcyA8Qj5SZXF1ZXN0UHJvY2Vzc29yPC9CPjxEVD5leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L0RMPgoKPFA+CjxwPjxzdHJvbmc+UmVxdWVzdFByb2Nlc3Nvcjwvc3Ryb25nPiBjb250YWlucyB0aGUgcHJvY2Vzc2luZyBsb2dpYyB0aGF0CiB0aGUgU3RydXRzIGNvbnRyb2xsZXIgc2VydmxldCBwZXJmb3JtcyBhcyBpdCByZWNlaXZlcyBlYWNoIHNlcnZsZXQgcmVxdWVzdAogZnJvbSB0aGUgY29udGFpbmVyLiAgWW91IGNhbiBjdXN0b21pemUgdGhlIHJlcXVlc3QgcHJvY2Vzc2luZyBiZWhhdmlvciBieQogc3ViY2xhc3NpbmcgdGhpcyBjbGFzcyBhbmQgb3ZlcnJpZGluZyB0aGUgbWV0aG9kKHMpIHdob3NlIGJlaGF2aW9yIHlvdSBhcmUKIGludGVyZXN0ZWQgaW4gY2hhbmdpbmcuPC9wPgo8UD4KCjxQPgo8REw+CjxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KICA8REQ+U3RydXRzIDEuMTwvREQ+CjxEVD48Qj5WZXJzaW9uOjwvQj48L0RUPgogIDxERD4kUmV2aXNpb246IDEuMSAkICREYXRlJDwvREQ+CjxEVD48Qj5BdXRob3I6PC9CPjwvRFQ+CiAgPEREPkNyYWlnIFIuIE1jQ2xhbmFoYW4sIENlZHJpYyBEdW1vdWxpbjwvREQ+CjwvREw+CjxIUj4KCjxQPgo8IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgoKCjwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KCjxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+CjxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgo8Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7amF2YS51dGlsLkhhc2hNYXA8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI2FjdGlvbnMiPmFjdGlvbnM8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNldCBvZiBBY3Rpb24gaW5zdGFuY2VzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkLAoga2V5ZWQgYnkgdGhlIGZ1bGx5IHF1YWxpZmllZCBKYXZhIGNsYXNzIG5hbWUgb2YgdGhlIEFjdGlvbiBjbGFzcy48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvY29uZmlnL01vZHVsZUNvbmZpZy5odG1sIj5Nb2R1bGVDb25maWc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNhcHBDb25maWciPmFwcENvbmZpZzwvQT48L0I+PC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST51c2UgbW9kdWxlQ29uZmlnIGluc3RlYWQuPC9JPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO2phdmEubGFuZy5TdHJpbmc8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI0lOQ0xVREVfUEFUSF9JTkZPIj5JTkNMVURFX1BBVEhfSU5GTzwvQT48L0I+PC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgcmVxdWVzdCBhdHRyaWJ1dGUgdW5kZXIgd2hpY2ggdGhlIHBhdGggaW5mb3JtYXRpb24gaXMgc3RvcmVkIGZvcgogcHJvY2Vzc2luZyBkdXJpbmcgYSBSZXF1ZXN0RGlzcGF0Y2hlci5pbmNsdWRlKCkgY2FsbC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNJTkNMVURFX1NFUlZMRVRfUEFUSCI+SU5DTFVERV9TRVJWTEVUX1BBVEg8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHJlcXVlc3QgYXR0cmlidXRlIHVuZGVyIHdoaWNoIHRoZSBzZXJ2bGV0IHBhdGggaW5mb3JtYXRpb24gaXMgc3RvcmVkCiBmb3IgcHJvY2Vzc2luZyBkdXJpbmcgYSBSZXF1ZXN0RGlzcGF0Y2hlci5pbmNsdWRlKCkgY2FsbC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgc3RhdGljJm5ic3A7b3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNsb2ciPmxvZzwvQT48L0I+PC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb21tb25zIExvZ2dpbmcgaW5zdGFuY2UuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2NvbmZpZy9Nb2R1bGVDb25maWcuaHRtbCI+TW9kdWxlQ29uZmlnPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9SZXF1ZXN0UHJvY2Vzc29yLmh0bWwjbW9kdWxlQ29uZmlnIj5tb2R1bGVDb25maWc8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIE1vZHVsZUNvbmZpZ3VyYXRpb24gd2UgYXJlIGFzc29jaWF0ZWQgd2l0aC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvblNlcnZsZXQuaHRtbCI+QWN0aW9uU2VydmxldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI3NlcnZsZXQiPnNlcnZsZXQ8L0E+PC9CPjwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnRyb2xsZXIgc2VydmxldCB3ZSBhcmUgYXNzb2NpYXRlZCB3aXRoLjwvVEQ+CjwvVFI+CjwvVEFCTEU+CiZuYnNwOwo8IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Cgo8QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI1JlcXVlc3RQcm9jZXNzb3IoKSI+UmVxdWVzdFByb2Nlc3NvcjwvQT48L0I+KCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+CjwvVFI+CjwvVEFCTEU+CiZuYnNwOwo8IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Cgo8QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+CjxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNkZXN0cm95KCkiPmRlc3Ryb3k8L0E+PC9CPigpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDbGVhbiB1cCBpbiBwcmVwYXJhdGlvbiBmb3IgYSBzaHV0ZG93biBvZiB0aGlzIGFwcGxpY2F0aW9uLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNkb0ZvcndhcmQoamF2YS5sYW5nLlN0cmluZywgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj5kb0ZvcndhcmQ8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dXJpLAogICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RG8gYSBmb3J3YXJkIHRvIHNwZWNpZmllZCB1cmkgdXNpbmcgcmVxdWVzdCBkaXNwYXRjaGVyLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNkb0luY2x1ZGUoamF2YS5sYW5nLlN0cmluZywgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj5kb0luY2x1ZGU8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dXJpLAogICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RG8gYW4gaW5jbHVkZSBvZiBzcGVjaWZpZWQgdXJpIHVzaW5nIHJlcXVlc3QgZGlzcGF0Y2hlci48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI2dldERlYnVnKCkiPmdldERlYnVnPC9BPjwvQj4oKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+Q29uZmlndXJlIHRoZSBsb2dnaW5nIGRldGFpbCBsZXZlbCBpbiB5b3VyCiAgdW5kZXJseWluZyBsb2dnaW5nIGltcGxlbWVudGF0aW9uPC9JPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy91dGlsL01lc3NhZ2VSZXNvdXJjZXMuaHRtbCI+TWVzc2FnZVJlc291cmNlczwvQT48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI2dldEludGVybmFsKCkiPmdldEludGVybmFsPC9BPjwvQj4oKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJuIHRoZSA8Y29kZT5NZXNzYWdlUmVzb3VyY2VzPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIG91cgogaW50ZXJuYWwgbWVzc2FnZSBzdHJpbmdzLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDtqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNnZXRTZXJ2bGV0Q29udGV4dCgpIj5nZXRTZXJ2bGV0Q29udGV4dDwvQT48L0I+KCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybiB0aGUgU2VydmxldENvbnRleHQgZm9yIHRoZSB3ZWIgYXBwbGljYXRpb24gd2UgYXJlIHJ1bm5pbmcgaW4uPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9SZXF1ZXN0UHJvY2Vzc29yLmh0bWwjaW5pdChvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uU2VydmxldCwgb3JnLmFwYWNoZS5zdHJ1dHMuY29uZmlnLk1vZHVsZUNvbmZpZykiPmluaXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uU2VydmxldC5odG1sIj5BY3Rpb25TZXJ2bGV0PC9BPiZuYnNwO3NlcnZsZXQsCiAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvY29uZmlnL01vZHVsZUNvbmZpZy5odG1sIj5Nb2R1bGVDb25maWc8L0E+Jm5ic3A7bW9kdWxlQ29uZmlnKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5pdGlhbGl6ZSB0aGlzIHJlcXVlc3QgcHJvY2Vzc29yIGluc3RhbmNlLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNpbnRlcm5hbE1vZHVsZVJlbGF0aXZlRm9yd2FyZChqYXZhLmxhbmcuU3RyaW5nLCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPmludGVybmFsTW9kdWxlUmVsYXRpdmVGb3J3YXJkPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEbyBhIG1vZHVsZSByZWxhdGl2ZSBmb3J3YXJkIHRvIHNwZWNpZmllZCB1cmkgdXNpbmcgcmVxdWVzdCBkaXNwYXRjaGVyLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNpbnRlcm5hbE1vZHVsZVJlbGF0aXZlSW5jbHVkZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPmludGVybmFsTW9kdWxlUmVsYXRpdmVJbmNsdWRlPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEbyBhIG1vZHVsZSByZWxhdGl2ZSBpbmNsdWRlIHRvIHNwZWNpZmllZCB1cmkgdXNpbmcgcmVxdWVzdCBkaXNwYXRjaGVyLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNsb2coamF2YS5sYW5nLlN0cmluZykiPmxvZzwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDttZXNzYWdlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TG9nIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSB0byB0aGUgc2VydmxldCBjb250ZXh0IGxvZyBmb3IgdGhpcwogd2ViIGFwcGxpY2F0aW9uLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNsb2coamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSkiPmxvZzwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDttZXNzYWdlLAogICAgamF2YS5sYW5nLlRocm93YWJsZSZuYnNwO2V4Y2VwdGlvbik8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0xvZyB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UgYW5kIGV4Y2VwdGlvbiB0byB0aGUgc2VydmxldCBjb250ZXh0IGxvZwogZm9yIHRoaXMgd2ViIGFwcGxpY2F0aW9uLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI3Byb2Nlc3MoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj5wcm9jZXNzPC9BPjwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Byb2Nlc3MgYW4gPGNvZGU+SHR0cFNlcnZsZXRSZXF1ZXN0PC9jb2RlPiBhbmQgY3JlYXRlIHRoZQogY29ycmVzcG9uZGluZyA8Y29kZT5IdHRwU2VydmxldFJlc3BvbnNlPC9jb2RlPi48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbi5odG1sIj5BY3Rpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNwcm9jZXNzQWN0aW9uQ3JlYXRlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLCBvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uTWFwcGluZykiPnByb2Nlc3NBY3Rpb25DcmVhdGU8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25NYXBwaW5nLmh0bWwiPkFjdGlvbk1hcHBpbmc8L0E+Jm5ic3A7bWFwcGluZyk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybiBhbiA8Y29kZT5BY3Rpb248L2NvZGU+IGluc3RhbmNlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHByb2Nlc3MKIHRoZSBjdXJyZW50IHJlcXVlc3QsIGNyZWF0aW5nIGEgbmV3IG9uZSBpZiBuZWNlc3NhcnkuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25Gb3JtLmh0bWwiPkFjdGlvbkZvcm08L0E+PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNwcm9jZXNzQWN0aW9uRm9ybShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbk1hcHBpbmcpIj5wcm9jZXNzQWN0aW9uRm9ybTwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uTWFwcGluZy5odG1sIj5BY3Rpb25NYXBwaW5nPC9BPiZuYnNwO21hcHBpbmcpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSA8Y29kZT5BY3Rpb25Gb3JtPC9jb2RlPiBiZWFuIGFzc29jaWF0ZWQgd2l0aAogdGhpcyBtYXBwaW5nLCBjcmVhdGluZyBhbmQgc3Rhc2hpbmcgb25lIGlmIG5lY2Vzc2FyeS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9SZXF1ZXN0UHJvY2Vzc29yLmh0bWwjcHJvY2Vzc0FjdGlvbkZvcndhcmQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25Gb3J3YXJkKSI+cHJvY2Vzc0FjdGlvbkZvcndhcmQ8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbkZvcndhcmQuaHRtbCI+QWN0aW9uRm9yd2FyZDwvQT4mbmJzcDtmb3J3YXJkKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VXNlIHByb2Nlc3NGb3J3YXJkQ29uZmlnKCkgaW5zdGVhZC48L0k+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25Gb3J3YXJkLmh0bWwiPkFjdGlvbkZvcndhcmQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNwcm9jZXNzQWN0aW9uUGVyZm9ybShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbiwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbkZvcm0sIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25NYXBwaW5nKSI+cHJvY2Vzc0FjdGlvblBlcmZvcm08L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbi5odG1sIj5BY3Rpb248L0E+Jm5ic3A7YWN0aW9uLAogICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uRm9ybS5odG1sIj5BY3Rpb25Gb3JtPC9BPiZuYnNwO2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25NYXBwaW5nLmh0bWwiPkFjdGlvbk1hcHBpbmc8L0E+Jm5ic3A7bWFwcGluZyk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FzayB0aGUgc3BlY2lmaWVkIDxjb2RlPkFjdGlvbjwvY29kZT4gaW5zdGFuY2UgdG8gaGFuZGxlIHRoaXMKIHJlcXVlc3QuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI3Byb2Nlc3NDb250ZW50KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSI+cHJvY2Vzc0NvbnRlbnQ8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldCB0aGUgZGVmYXVsdCBjb250ZW50IHR5cGUgKHdpdGggb3B0aW9uYWwgY2hhcmFjdGVyIGVuY29kaW5nKSBmb3IKIGFsbCByZXNwb25zZXMgaWYgcmVxdWVzdGVkLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uRm9yd2FyZC5odG1sIj5BY3Rpb25Gb3J3YXJkPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9SZXF1ZXN0UHJvY2Vzc29yLmh0bWwjcHJvY2Vzc0V4Y2VwdGlvbihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgamF2YS5sYW5nLkV4Y2VwdGlvbiwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbkZvcm0sIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25NYXBwaW5nKSI+cHJvY2Vzc0V4Y2VwdGlvbjwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgamF2YS5sYW5nLkV4Y2VwdGlvbiZuYnNwO2V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uRm9ybS5odG1sIj5BY3Rpb25Gb3JtPC9BPiZuYnNwO2Zvcm0sCiAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbk1hcHBpbmcuaHRtbCI+QWN0aW9uTWFwcGluZzwvQT4mbmJzcDttYXBwaW5nKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QXNrIG91ciBleGNlcHRpb24gaGFuZGxlciB0byBoYW5kbGUgdGhlIGV4Y2VwdGlvbi48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9SZXF1ZXN0UHJvY2Vzc29yLmh0bWwjcHJvY2Vzc0ZvcndhcmQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25NYXBwaW5nKSI+cHJvY2Vzc0ZvcndhcmQ8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbk1hcHBpbmcuaHRtbCI+QWN0aW9uTWFwcGluZzwvQT4mbmJzcDttYXBwaW5nKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UHJvY2VzcyBhIGZvcndhcmQgcmVxdWVzdGVkIGJ5IHRoaXMgbWFwcGluZyAoaWYgYW55KS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9SZXF1ZXN0UHJvY2Vzc29yLmh0bWwjcHJvY2Vzc0ZvcndhcmRDb25maWcoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIG9yZy5hcGFjaGUuc3RydXRzLmNvbmZpZy5Gb3J3YXJkQ29uZmlnKSI+cHJvY2Vzc0ZvcndhcmRDb25maWc8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvY29uZmlnL0ZvcndhcmRDb25maWcuaHRtbCI+Rm9yd2FyZENvbmZpZzwvQT4mbmJzcDtmb3J3YXJkKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Rm9yd2FyZCBvciByZWRpcmVjdCB0byB0aGUgc3BlY2lmaWVkIGRlc3RpbmF0aW9uLCBieSB0aGUgc3BlY2lmaWVkCiBtZWNoYW5pc20uPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI3Byb2Nlc3NJbmNsdWRlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLCBvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uTWFwcGluZykiPnByb2Nlc3NJbmNsdWRlPC9BPjwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UsCiAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25NYXBwaW5nLmh0bWwiPkFjdGlvbk1hcHBpbmc8L0E+Jm5ic3A7bWFwcGluZyk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Byb2Nlc3MgYW4gaW5jbHVkZSByZXF1ZXN0ZWQgYnkgdGhpcyBtYXBwaW5nIChpZiBhbnkpLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNwcm9jZXNzTG9jYWxlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSI+cHJvY2Vzc0xvY2FsZTwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBdXRvbWF0aWNhbGx5IHNlbGVjdCBhIExvY2FsZSBmb3IgdGhlIGN1cnJlbnQgdXNlciwgaWYgcmVxdWVzdGVkLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uTWFwcGluZy5odG1sIj5BY3Rpb25NYXBwaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9SZXF1ZXN0UHJvY2Vzc29yLmh0bWwjcHJvY2Vzc01hcHBpbmcoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIGphdmEubGFuZy5TdHJpbmcpIj5wcm9jZXNzTWFwcGluZzwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlLAogICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cGF0aCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NlbGVjdCB0aGUgbWFwcGluZyB1c2VkIHRvIHByb2Nlc3MgdGhlIHNlbGVjdGlvbiBwYXRoIGZvciB0aGlzIHJlcXVlc3QuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwO2phdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI3Byb2Nlc3NNdWx0aXBhcnQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCkiPnByb2Nlc3NNdWx0aXBhcnQ8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoaXMgaXMgYSBtdWx0aXBhcnQgcmVxdWVzdCwgd3JhcCBpdCB3aXRoIGEgc3BlY2lhbCB3cmFwcGVyLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNwcm9jZXNzTm9DYWNoZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPnByb2Nlc3NOb0NhY2hlPC9BPjwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXQgdGhlIG5vLWNhY2hlIGhlYWRlcnMgZm9yIGFsbCByZXNwb25zZXMsIGlmIHJlcXVlc3RlZC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7amF2YS5sYW5nLlN0cmluZzwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9SZXF1ZXN0UHJvY2Vzc29yLmh0bWwjcHJvY2Vzc1BhdGgoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj5wcm9jZXNzUGF0aDwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SWRlbnRpZnkgYW5kIHJldHVybiB0aGUgcGF0aCBjb21wb25lbnQgKGZyb20gdGhlIHJlcXVlc3QgVVJJKSB0aGF0CiB3ZSB3aWxsIHVzZSB0byBzZWxlY3QgYW4gQWN0aW9uTWFwcGluZyB0byBkaXNwYXRjaCB3aXRoLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNwcm9jZXNzUG9wdWxhdGUoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25Gb3JtLCBvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uTWFwcGluZykiPnByb2Nlc3NQb3B1bGF0ZTwvQT48L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25Gb3JtLmh0bWwiPkFjdGlvbkZvcm08L0E+Jm5ic3A7Zm9ybSwKICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25NYXBwaW5nLmh0bWwiPkFjdGlvbk1hcHBpbmc8L0E+Jm5ic3A7bWFwcGluZyk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BvcHVsYXRlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzcGVjaWZpZWQgQWN0aW9uRm9ybSBpbnN0YW5jZSBmcm9tCiB0aGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGluY2x1ZGVkIHdpdGggdGhpcyByZXF1ZXN0LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnByb3RlY3RlZCAmbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNwcm9jZXNzUHJlcHJvY2VzcyhqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPnByb2Nlc3NQcmVwcm9jZXNzPC9BPjwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZW5lcmFsLXB1cnBvc2UgcHJlcHJvY2Vzc2luZyBob29rIHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gYXMgcmVxdWlyZWQKIGJ5IHN1YmNsYXNzZXMuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+cHJvdGVjdGVkICZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdFByb2Nlc3Nvci5odG1sI3Byb2Nlc3NSb2xlcyhqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbk1hcHBpbmcpIj5wcm9jZXNzUm9sZXM8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UsCiAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uTWFwcGluZy5odG1sIj5BY3Rpb25NYXBwaW5nPC9BPiZuYnNwO21hcHBpbmcpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJZiB0aGlzIGFjdGlvbiBpcyBwcm90ZWN0ZWQgYnkgc2VjdXJpdHkgcm9sZXMsIG1ha2Ugc3VyZSB0aGF0IHRoZQogY3VycmVudCB1c2VyIHBvc3Nlc3NlcyBhdCBsZWFzdCBvbmUgb2YgdGhlbS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5wcm90ZWN0ZWQgJm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9SZXF1ZXN0UHJvY2Vzc29yLmh0bWwjcHJvY2Vzc1ZhbGlkYXRlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLCBvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uRm9ybSwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbk1hcHBpbmcpIj5wcm9jZXNzVmFsaWRhdGU8L0E+PC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UsCiAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uRm9ybS5odG1sIj5BY3Rpb25Gb3JtPC9BPiZuYnNwO2Zvcm0sCiAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uTWFwcGluZy5odG1sIj5BY3Rpb25NYXBwaW5nPC9BPiZuYnNwO21hcHBpbmcpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJZiB0aGlzIHJlcXVlc3Qgd2FzIG5vdCBjYW5jZWxsZWQsIGFuZCB0aGUgcmVxdWVzdCdzCiA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uTWFwcGluZy5odG1sIj48Q09ERT5BY3Rpb25NYXBwaW5nPC9DT0RFPjwvQT4gaGFzIG5vdCBkaXNhYmxlZCB2YWxpZGF0aW9uLCBjYWxsIHRoZQogPGNvZGU+dmFsaWRhdGUoKTwvY29kZT4gbWV0aG9kIG9mIHRoZSBzcGVjaWZpZWQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbkZvcm0uaHRtbCI+PENPREU+QWN0aW9uRm9ybTwvQ09ERT48L0E+LAogYW5kIGZvcndhcmQgYmFjayB0byB0aGUgaW5wdXQgZm9ybSBpZiB0aGVyZSB3ZXJlIGFueSBlcnJvcnMuPC9URD4KPC9UUj4KPC9UQUJMRT4KJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgo8VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuT2JqZWN0PC9CPjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQ+PENPREU+Y2xvbmUsIGVxdWFscywgZmluYWxpemUsIGdldENsYXNzLCBoYXNoQ29kZSwgbm90aWZ5LCBub3RpZnlBbGwsIHRvU3RyaW5nLCB3YWl0LCB3YWl0LCB3YWl0PC9DT0RFPjwvVEQ+CjwvVFI+CjwvVEFCTEU+CiZuYnNwOwo8UD4KCjwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KCjxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+CjxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KPC9UUj4KPC9UQUJMRT4KCjxBIE5BTUU9IklOQ0xVREVfUEFUSF9JTkZPIj48IS0tIC0tPjwvQT48SDM+CklOQ0xVREVfUEFUSF9JTkZPPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIDxCPklOQ0xVREVfUEFUSF9JTkZPPC9CPjwvUFJFPgo8REw+CjxERD5UaGUgcmVxdWVzdCBhdHRyaWJ1dGUgdW5kZXIgd2hpY2ggdGhlIHBhdGggaW5mb3JtYXRpb24gaXMgc3RvcmVkIGZvcgogcHJvY2Vzc2luZyBkdXJpbmcgYSBSZXF1ZXN0RGlzcGF0Y2hlci5pbmNsdWRlKCkgY2FsbC4KPFA+CjxETD4KPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLlJlcXVlc3RQcm9jZXNzb3IuSU5DTFVERV9QQVRIX0lORk8iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJJTkNMVURFX1NFUlZMRVRfUEFUSCI+PCEtLSAtLT48L0E+PEgzPgpJTkNMVURFX1NFUlZMRVRfUEFUSDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyA8Qj5JTkNMVURFX1NFUlZMRVRfUEFUSDwvQj48L1BSRT4KPERMPgo8REQ+VGhlIHJlcXVlc3QgYXR0cmlidXRlIHVuZGVyIHdoaWNoIHRoZSBzZXJ2bGV0IHBhdGggaW5mb3JtYXRpb24gaXMgc3RvcmVkCiBmb3IgcHJvY2Vzc2luZyBkdXJpbmcgYSBSZXF1ZXN0RGlzcGF0Y2hlci5pbmNsdWRlKCkgY2FsbC4KPFA+CjxETD4KPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLlJlcXVlc3RQcm9jZXNzb3IuSU5DTFVERV9TRVJWTEVUX1BBVEgiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJhY3Rpb25zIj48IS0tIC0tPjwvQT48SDM+CmFjdGlvbnM8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgamF2YS51dGlsLkhhc2hNYXAgPEI+YWN0aW9uczwvQj48L1BSRT4KPERMPgo8REQ+VGhlIHNldCBvZiBBY3Rpb24gaW5zdGFuY2VzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkLAoga2V5ZWQgYnkgdGhlIGZ1bGx5IHF1YWxpZmllZCBKYXZhIGNsYXNzIG5hbWUgb2YgdGhlIEFjdGlvbiBjbGFzcy4KPFA+CjxETD4KPC9ETD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iYXBwQ29uZmlnIj48IS0tIC0tPjwvQT48SDM+CmFwcENvbmZpZzwvSDM+CjxQUkU+CnByb3RlY3RlZCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9jb25maWcvTW9kdWxlQ29uZmlnLmh0bWwiPk1vZHVsZUNvbmZpZzwvQT4gPEI+YXBwQ29uZmlnPC9CPjwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST51c2UgbW9kdWxlQ29uZmlnIGluc3RlYWQuPC9JPgo8UD4KPEREPlRoZSBNb2R1bGVDb25maWd1cmF0aW9uIHdlIGFyZSBhc3NvY2lhdGVkIHdpdGguCjxQPgo8REw+CjwvREw+CjwvREw+CjxIUj4KCjxBIE5BTUU9Im1vZHVsZUNvbmZpZyI+PCEtLSAtLT48L0E+PEgzPgptb2R1bGVDb25maWc8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvY29uZmlnL01vZHVsZUNvbmZpZy5odG1sIj5Nb2R1bGVDb25maWc8L0E+IDxCPm1vZHVsZUNvbmZpZzwvQj48L1BSRT4KPERMPgo8REQ+VGhlIE1vZHVsZUNvbmZpZ3VyYXRpb24gd2UgYXJlIGFzc29jaWF0ZWQgd2l0aC4KPFA+CjxETD4KPC9ETD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0ibG9nIj48IS0tIC0tPjwvQT48SDM+CmxvZzwvSDM+CjxQUkU+CnByb3RlY3RlZCBzdGF0aWMgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nIDxCPmxvZzwvQj48L1BSRT4KPERMPgo8REQ+Q29tbW9ucyBMb2dnaW5nIGluc3RhbmNlLgo8UD4KPERMPgo8L0RMPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJzZXJ2bGV0Ij48IS0tIC0tPjwvQT48SDM+CnNlcnZsZXQ8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvblNlcnZsZXQuaHRtbCI+QWN0aW9uU2VydmxldDwvQT4gPEI+c2VydmxldDwvQj48L1BSRT4KPERMPgo8REQ+VGhlIGNvbnRyb2xsZXIgc2VydmxldCB3ZSBhcmUgYXNzb2NpYXRlZCB3aXRoLgo8UD4KPERMPgo8L0RMPgo8L0RMPgoKPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgoKPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgo8L1RSPgo8L1RBQkxFPgoKPEEgTkFNRT0iUmVxdWVzdFByb2Nlc3NvcigpIj48IS0tIC0tPjwvQT48SDM+ClJlcXVlc3RQcm9jZXNzb3I8L0gzPgo8UFJFPgpwdWJsaWMgPEI+UmVxdWVzdFByb2Nlc3NvcjwvQj4oKTwvUFJFPgo8REw+CjwvREw+Cgo8IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Cgo8QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+CjxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgo8VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KPC9UUj4KPC9UQUJMRT4KCjxBIE5BTUU9ImRlc3Ryb3koKSI+PCEtLSAtLT48L0E+PEgzPgpkZXN0cm95PC9IMz4KPFBSRT4KcHVibGljIHZvaWQgPEI+ZGVzdHJveTwvQj4oKTwvUFJFPgo8REw+CjxERD5DbGVhbiB1cCBpbiBwcmVwYXJhdGlvbiBmb3IgYSBzaHV0ZG93biBvZiB0aGlzIGFwcGxpY2F0aW9uLgo8UD4KPEREPjxETD4KPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iaW5pdChvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uU2VydmxldCwgb3JnLmFwYWNoZS5zdHJ1dHMuY29uZmlnLk1vZHVsZUNvbmZpZykiPjwhLS0gLS0+PC9BPjxIMz4KaW5pdDwvSDM+CjxQUkU+CnB1YmxpYyB2b2lkIDxCPmluaXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25TZXJ2bGV0Lmh0bWwiPkFjdGlvblNlcnZsZXQ8L0E+Jm5ic3A7c2VydmxldCwKICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9jb25maWcvTW9kdWxlQ29uZmlnLmh0bWwiPk1vZHVsZUNvbmZpZzwvQT4mbmJzcDttb2R1bGVDb25maWcpCiAgICAgICAgICB0aHJvd3MgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9QUkU+CjxETD4KPEREPkluaXRpYWxpemUgdGhpcyByZXF1ZXN0IHByb2Nlc3NvciBpbnN0YW5jZS4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c2VydmxldDwvQ09ERT4gLSBUaGUgQWN0aW9uU2VydmxldCB3ZSBhcmUgYXNzb2NpYXRlZCB3aXRoPEREPjxDT0RFPm1vZHVsZUNvbmZpZzwvQ09ERT4gLSBUaGUgTW9kdWxlQ29uZmlnIHdlIGFyZSBhc3NvY2lhdGVkIHdpdGguCjxEVD48Qj5UaHJvd3M6PC9CPgo8REQ+PENPREU+amF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9DT0RFPiAtIElmIGFuIGVycm9yIG9jY29yIGR1cmluZyBpbml0aWFsaXphdGlvbjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InByb2Nlc3MoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj48IS0tIC0tPjwvQT48SDM+CnByb2Nlc3M8L0gzPgo8UFJFPgpwdWJsaWMgdm9pZCA8Qj5wcm9jZXNzPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKQogICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9QUkU+CjxETD4KPEREPjxwPlByb2Nlc3MgYW4gPGNvZGU+SHR0cFNlcnZsZXRSZXF1ZXN0PC9jb2RlPiBhbmQgY3JlYXRlIHRoZQogY29ycmVzcG9uZGluZyA8Y29kZT5IdHRwU2VydmxldFJlc3BvbnNlPC9jb2RlPi48L3A+CjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVxdWVzdCB3ZSBhcmUgcHJvY2Vzc2luZzxERD48Q09ERT5yZXNwb25zZTwvQ09ERT4gLSBUaGUgc2VydmxldCByZXNwb25zZSB3ZSBhcmUgY3JlYXRpbmcKPERUPjxCPlRocm93czo8L0I+CjxERD48Q09ERT5qYXZhLmlvLklPRXhjZXB0aW9uPC9DT0RFPiAtIGlmIGFuIGlucHV0L291dHB1dCBlcnJvciBvY2N1cnMKPEREPjxDT0RFPmphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvQ09ERT4gLSBpZiBhIHByb2Nlc3NpbmcgZXhjZXB0aW9uIG9jY3VyczwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InByb2Nlc3NBY3Rpb25DcmVhdGUoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25NYXBwaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpwcm9jZXNzQWN0aW9uQ3JlYXRlPC9IMz4KPFBSRT4KcHJvdGVjdGVkIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb24uaHRtbCI+QWN0aW9uPC9BPiA8Qj5wcm9jZXNzQWN0aW9uQ3JlYXRlPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uTWFwcGluZy5odG1sIj5BY3Rpb25NYXBwaW5nPC9BPiZuYnNwO21hcHBpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uPC9QUkU+CjxETD4KPEREPlJldHVybiBhbiA8Y29kZT5BY3Rpb248L2NvZGU+IGluc3RhbmNlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHByb2Nlc3MKIHRoZSBjdXJyZW50IHJlcXVlc3QsIGNyZWF0aW5nIGEgbmV3IG9uZSBpZiBuZWNlc3NhcnkuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVxdWVzdCB3ZSBhcmUgcHJvY2Vzc2luZzxERD48Q09ERT5yZXNwb25zZTwvQ09ERT4gLSBUaGUgc2VydmxldCByZXNwb25zZSB3ZSBhcmUgY3JlYXRpbmc8REQ+PENPREU+bWFwcGluZzwvQ09ERT4gLSBUaGUgbWFwcGluZyB3ZSBhcmUgdXNpbmcKPERUPjxCPlRocm93czo8L0I+CjxERD48Q09ERT5qYXZhLmlvLklPRXhjZXB0aW9uPC9DT0RFPiAtIGlmIGFuIGlucHV0L291dHB1dCBlcnJvciBvY2N1cnM8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJwcm9jZXNzQWN0aW9uRm9ybShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbk1hcHBpbmcpIj48IS0tIC0tPjwvQT48SDM+CnByb2Nlc3NBY3Rpb25Gb3JtPC9IMz4KPFBSRT4KcHJvdGVjdGVkIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25Gb3JtLmh0bWwiPkFjdGlvbkZvcm08L0E+IDxCPnByb2Nlc3NBY3Rpb25Gb3JtPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbk1hcHBpbmcuaHRtbCI+QWN0aW9uTWFwcGluZzwvQT4mbmJzcDttYXBwaW5nKTwvUFJFPgo8REw+CjxERD5SZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSA8Y29kZT5BY3Rpb25Gb3JtPC9jb2RlPiBiZWFuIGFzc29jaWF0ZWQgd2l0aAogdGhpcyBtYXBwaW5nLCBjcmVhdGluZyBhbmQgc3Rhc2hpbmcgb25lIGlmIG5lY2Vzc2FyeS4gIElmIHRoZXJlIGlzIG5vCiBmb3JtIGJlYW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFwcGluZywgcmV0dXJuIDxjb2RlPm51bGw8L2NvZGU+Lgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlcXVlc3Qgd2UgYXJlIHByb2Nlc3Npbmc8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVzcG9uc2Ugd2UgYXJlIGNyZWF0aW5nPEREPjxDT0RFPm1hcHBpbmc8L0NPREU+IC0gVGhlIG1hcHBpbmcgd2UgYXJlIHVzaW5nPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0icHJvY2Vzc0FjdGlvbkZvcndhcmQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25Gb3J3YXJkKSI+PCEtLSAtLT48L0E+PEgzPgpwcm9jZXNzQWN0aW9uRm9yd2FyZDwvSDM+CjxQUkU+CnByb3RlY3RlZCB2b2lkIDxCPnByb2Nlc3NBY3Rpb25Gb3J3YXJkPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbkZvcndhcmQuaHRtbCI+QWN0aW9uRm9yd2FyZDwvQT4mbmJzcDtmb3J3YXJkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb248L1BSRT4KPERMPgo8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VXNlIHByb2Nlc3NGb3J3YXJkQ29uZmlnKCkgaW5zdGVhZC48L0k+CjxQPgo8REQ+Rm9yd2FyZCBvciByZWRpcmVjdCB0byB0aGUgc3BlY2lmaWVkIGRlc3RpbmF0aW9uLCBieSB0aGUgc3BlY2lmaWVkCiBtZWNoYW5pc20uCgogVGhpcyBtZXRob2QgdGFrZXMgdGhlIG9sZCBBY3Rpb25Gb3J3YXJkIG9iamVjdCBhcyBwYXJhbWV0ZXIuIFVzZXIgc2hvdWxkCiB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL1JlcXVlc3RQcm9jZXNzb3IuaHRtbCNwcm9jZXNzRm9yd2FyZENvbmZpZyhqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS5zdHJ1dHMuY29uZmlnLkZvcndhcmRDb25maWcpIj48Q09ERT5wcm9jZXNzRm9yd2FyZENvbmZpZyhIdHRwU2VydmxldFJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UsRm9yd2FyZENvbmZpZyk8L0NPREU+PC9BPiB3aGVuIHBvc3NpYmxlLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlcXVlc3Qgd2UgYXJlIHByb2Nlc3Npbmc8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVzcG9uc2Ugd2UgYXJlIGNyZWF0aW5nPEREPjxDT0RFPmZvcndhcmQ8L0NPREU+IC0gVGhlIEFjdGlvbkZvcndhcmQgY29udHJvbGxpbmcgd2hlcmUgd2UgZ28gbmV4dAo8RFQ+PEI+VGhyb3dzOjwvQj4KPEREPjxDT0RFPmphdmEuaW8uSU9FeGNlcHRpb248L0NPREU+IC0gaWYgYW4gaW5wdXQvb3V0cHV0IGVycm9yIG9jY3Vycwo8REQ+PENPREU+amF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9DT0RFPiAtIGlmIGEgc2VydmxldCBleGNlcHRpb24gb2NjdXJzPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0icHJvY2Vzc0ZvcndhcmRDb25maWcoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIG9yZy5hcGFjaGUuc3RydXRzLmNvbmZpZy5Gb3J3YXJkQ29uZmlnKSI+PCEtLSAtLT48L0E+PEgzPgpwcm9jZXNzRm9yd2FyZENvbmZpZzwvSDM+CjxQUkU+CnByb3RlY3RlZCB2b2lkIDxCPnByb2Nlc3NGb3J3YXJkQ29uZmlnPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvY29uZmlnL0ZvcndhcmRDb25maWcuaHRtbCI+Rm9yd2FyZENvbmZpZzwvQT4mbmJzcDtmb3J3YXJkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb248L1BSRT4KPERMPgo8REQ+Rm9yd2FyZCBvciByZWRpcmVjdCB0byB0aGUgc3BlY2lmaWVkIGRlc3RpbmF0aW9uLCBieSB0aGUgc3BlY2lmaWVkCiBtZWNoYW5pc20uICBUaGlzIG1ldGhvZCB1c2VzIGEgRm9yd2FyZENvbmZpZyBvYmplY3QgaW5zdGVhZCBhbiBBY3Rpb25Gb3J3YXJkLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlcXVlc3Qgd2UgYXJlIHByb2Nlc3Npbmc8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVzcG9uc2Ugd2UgYXJlIGNyZWF0aW5nPEREPjxDT0RFPmZvcndhcmQ8L0NPREU+IC0gVGhlIEZvcndhcmRDb25maWcgY29udHJvbGxpbmcgd2hlcmUgd2UgZ28gbmV4dAo8RFQ+PEI+VGhyb3dzOjwvQj4KPEREPjxDT0RFPmphdmEuaW8uSU9FeGNlcHRpb248L0NPREU+IC0gaWYgYW4gaW5wdXQvb3V0cHV0IGVycm9yIG9jY3Vycwo8REQ+PENPREU+amF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9DT0RFPiAtIGlmIGEgc2VydmxldCBleGNlcHRpb24gb2NjdXJzPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0icHJvY2Vzc0FjdGlvblBlcmZvcm0oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb24sIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25Gb3JtLCBvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uTWFwcGluZykiPjwhLS0gLS0+PC9BPjxIMz4KcHJvY2Vzc0FjdGlvblBlcmZvcm08L0gzPgo8UFJFPgpwcm90ZWN0ZWQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbkZvcndhcmQuaHRtbCI+QWN0aW9uRm9yd2FyZDwvQT4gPEI+cHJvY2Vzc0FjdGlvblBlcmZvcm08L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uLmh0bWwiPkFjdGlvbjwvQT4mbmJzcDthY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25Gb3JtLmh0bWwiPkFjdGlvbkZvcm08L0E+Jm5ic3A7Zm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbk1hcHBpbmcuaHRtbCI+QWN0aW9uTWFwcGluZzwvQT4mbmJzcDttYXBwaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb248L1BSRT4KPERMPgo8REQ+QXNrIHRoZSBzcGVjaWZpZWQgPGNvZGU+QWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB0byBoYW5kbGUgdGhpcwogcmVxdWVzdC4gIFJldHVybiB0aGUgPGNvZGU+QWN0aW9uRm9yd2FyZDwvY29kZT4gaW5zdGFuY2UgKGlmIGFueSkKIHJldHVybmVkIGJ5IHRoZSBjYWxsZWQgPGNvZGU+QWN0aW9uPC9jb2RlPiBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlcXVlc3Qgd2UgYXJlIHByb2Nlc3Npbmc8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVzcG9uc2Ugd2UgYXJlIGNyZWF0aW5nPEREPjxDT0RFPmFjdGlvbjwvQ09ERT4gLSBUaGUgQWN0aW9uIGluc3RhbmNlIHRvIGJlIHVzZWQ8REQ+PENPREU+Zm9ybTwvQ09ERT4gLSBUaGUgQWN0aW9uRm9ybSBpbnN0YW5jZSB0byBwYXNzIHRvIHRoaXMgQWN0aW9uPEREPjxDT0RFPm1hcHBpbmc8L0NPREU+IC0gVGhlIEFjdGlvbk1hcHBpbmcgaW5zdGFuY2UgdG8gcGFzcyB0byB0aGlzIEFjdGlvbgo8RFQ+PEI+VGhyb3dzOjwvQj4KPEREPjxDT0RFPmphdmEuaW8uSU9FeGNlcHRpb248L0NPREU+IC0gaWYgYW4gaW5wdXQvb3V0cHV0IGVycm9yIG9jY3Vycwo8REQ+PENPREU+amF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9DT0RFPiAtIGlmIGEgc2VydmxldCBleGNlcHRpb24gb2NjdXJzPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0icHJvY2Vzc0NvbnRlbnQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj48IS0tIC0tPjwvQT48SDM+CnByb2Nlc3NDb250ZW50PC9IMz4KPFBSRT4KcHJvdGVjdGVkIHZvaWQgPEI+cHJvY2Vzc0NvbnRlbnQ8L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKTwvUFJFPgo8REw+CjxERD5TZXQgdGhlIGRlZmF1bHQgY29udGVudCB0eXBlICh3aXRoIG9wdGlvbmFsIGNoYXJhY3RlciBlbmNvZGluZykgZm9yCiBhbGwgcmVzcG9uc2VzIGlmIHJlcXVlc3RlZC4gIDxzdHJvbmc+Tk9URTwvc3Ryb25nPiAtIFRoaXMgaGVhZGVyIHdpbGwKIGJlIG92ZXJyaWRkZW4gYXV0b21hdGljYWxseSBpZiBhCiA8Y29kZT5SZXF1ZXN0RGlzcGF0Y2hlci5mb3J3YXJkKCk8L2NvZGU+IGNhbGwgaXMKIHVsdGltYXRlbHkgaW52b2tlZC4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBUaGUgc2VydmxldCByZXF1ZXN0IHdlIGFyZSBwcm9jZXNzaW5nPEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlc3BvbnNlIHdlIGFyZSBjcmVhdGluZzwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InByb2Nlc3NFeGNlcHRpb24oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIGphdmEubGFuZy5FeGNlcHRpb24sIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25Gb3JtLCBvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uTWFwcGluZykiPjwhLS0gLS0+PC9BPjxIMz4KcHJvY2Vzc0V4Y2VwdGlvbjwvSDM+CjxQUkU+CnByb3RlY3RlZCA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uRm9yd2FyZC5odG1sIj5BY3Rpb25Gb3J3YXJkPC9BPiA8Qj5wcm9jZXNzRXhjZXB0aW9uPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5FeGNlcHRpb24mbmJzcDtleGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbkZvcm0uaHRtbCI+QWN0aW9uRm9ybTwvQT4mbmJzcDtmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25NYXBwaW5nLmh0bWwiPkFjdGlvbk1hcHBpbmc8L0E+Jm5ic3A7bWFwcGluZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD5Bc2sgb3VyIGV4Y2VwdGlvbiBoYW5kbGVyIHRvIGhhbmRsZSB0aGUgZXhjZXB0aW9uLiAgUmV0dXJuIHRoZQogPGNvZGU+QWN0aW9uRm9yd2FyZDwvY29kZT4gaW5zdGFuY2UgKGlmIGFueSkgcmV0dXJuZWQgYnkgdGhlCiBjYWxsZWQgPGNvZGU+RXhjZXB0aW9uSGFuZGxlcjwvY29kZT4uCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVxdWVzdCB3ZSBhcmUgcHJvY2Vzc2luZzxERD48Q09ERT5yZXNwb25zZTwvQ09ERT4gLSBUaGUgc2VydmxldCByZXNwb25zZSB3ZSBhcmUgcHJvY2Vzc2luZzxERD48Q09ERT5leGNlcHRpb248L0NPREU+IC0gVGhlIGV4Y2VwdGlvbiBiZWluZyBoYW5kbGVkPEREPjxDT0RFPmZvcm08L0NPREU+IC0gVGhlIEFjdGlvbkZvcm0gd2UgYXJlIHByb2Nlc3Npbmc8REQ+PENPREU+bWFwcGluZzwvQ09ERT4gLSBUaGUgQWN0aW9uTWFwcGluZyB3ZSBhcmUgdXNpbmcKPERUPjxCPlRocm93czo8L0I+CjxERD48Q09ERT5qYXZhLmlvLklPRXhjZXB0aW9uPC9DT0RFPiAtIGlmIGFuIGlucHV0L291dHB1dCBlcnJvciBvY2N1cnMKPEREPjxDT0RFPmphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvQ09ERT4gLSBpZiBhIHNlcnZsZXQgZXhjZXB0aW9uIG9jY3VyczwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InByb2Nlc3NGb3J3YXJkKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLCBvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uTWFwcGluZykiPjwhLS0gLS0+PC9BPjxIMz4KcHJvY2Vzc0ZvcndhcmQ8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgYm9vbGVhbiA8Qj5wcm9jZXNzRm9yd2FyZDwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25NYXBwaW5nLmh0bWwiPkFjdGlvbk1hcHBpbmc8L0E+Jm5ic3A7bWFwcGluZykKICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9QUkU+CjxETD4KPEREPlByb2Nlc3MgYSBmb3J3YXJkIHJlcXVlc3RlZCBieSB0aGlzIG1hcHBpbmcgKGlmIGFueSkuICBSZXR1cm4KIDxjb2RlPnRydWU8L2NvZGU+IGlmIHN0YW5kYXJkIHByb2Nlc3Npbmcgc2hvdWxkIGNvbnRpbnVlLCBvcgogPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIHRoaXMgcmVxdWVzdC4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBUaGUgc2VydmxldCByZXF1ZXN0IHdlIGFyZSBwcm9jZXNzaW5nPEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlc3BvbnNlIHdlIGFyZSBjcmVhdGluZzxERD48Q09ERT5tYXBwaW5nPC9DT0RFPiAtIFRoZSBBY3Rpb25NYXBwaW5nIHdlIGFyZSB1c2luZwo8REQ+PENPREU+amF2YS5pby5JT0V4Y2VwdGlvbjwvQ09ERT4KPEREPjxDT0RFPmphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvQ09ERT48L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJwcm9jZXNzSW5jbHVkZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbk1hcHBpbmcpIj48IS0tIC0tPjwvQT48SDM+CnByb2Nlc3NJbmNsdWRlPC9IMz4KPFBSRT4KcHJvdGVjdGVkIGJvb2xlYW4gPEI+cHJvY2Vzc0luY2x1ZGU8L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uTWFwcGluZy5odG1sIj5BY3Rpb25NYXBwaW5nPC9BPiZuYnNwO21hcHBpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD5Qcm9jZXNzIGFuIGluY2x1ZGUgcmVxdWVzdGVkIGJ5IHRoaXMgbWFwcGluZyAoaWYgYW55KS4gIFJldHVybgogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgc3RhbmRhcmQgcHJvY2Vzc2luZyBzaG91bGQgY29udGludWUsIG9yCiA8Y29kZT5mYWxzZTwvY29kZT4gaWYgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgdGhpcyByZXF1ZXN0Lgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlcXVlc3Qgd2UgYXJlIHByb2Nlc3Npbmc8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVzcG9uc2Ugd2UgYXJlIGNyZWF0aW5nPEREPjxDT0RFPm1hcHBpbmc8L0NPREU+IC0gVGhlIEFjdGlvbk1hcHBpbmcgd2UgYXJlIHVzaW5nCjxERD48Q09ERT5qYXZhLmlvLklPRXhjZXB0aW9uPC9DT0RFPgo8REQ+PENPREU+amF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9DT0RFPjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InByb2Nlc3NMb2NhbGUoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj48IS0tIC0tPjwvQT48SDM+CnByb2Nlc3NMb2NhbGU8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgdm9pZCA8Qj5wcm9jZXNzTG9jYWxlPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKTwvUFJFPgo8REw+CjxERD5BdXRvbWF0aWNhbGx5IHNlbGVjdCBhIExvY2FsZSBmb3IgdGhlIGN1cnJlbnQgdXNlciwgaWYgcmVxdWVzdGVkLgogPHN0cm9uZz5OT1RFPC9zdHJvbmc+IC0gY29uZmlndXJpbmcgTG9jYWxlIHNlbGVjdGlvbiB3aWxsIHRyaWdnZXIKIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyA8Y29kZT5IdHRwU2Vzc2lvbjwvY29kZT4gaWYgbmVjZXNzYXJ5Lgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlcXVlc3Qgd2UgYXJlIHByb2Nlc3Npbmc8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVzcG9uc2Ugd2UgYXJlIGNyZWF0aW5nPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0icHJvY2Vzc01hcHBpbmcoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CnByb2Nlc3NNYXBwaW5nPC9IMz4KPFBSRT4KcHJvdGVjdGVkIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25NYXBwaW5nLmh0bWwiPkFjdGlvbk1hcHBpbmc8L0E+IDxCPnByb2Nlc3NNYXBwaW5nPC9CPihqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Jm5ic3A7cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO3BhdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb248L1BSRT4KPERMPgo8REQ+U2VsZWN0IHRoZSBtYXBwaW5nIHVzZWQgdG8gcHJvY2VzcyB0aGUgc2VsZWN0aW9uIHBhdGggZm9yIHRoaXMgcmVxdWVzdC4KIElmIG5vIG1hcHBpbmcgY2FuIGJlIGlkZW50aWZpZWQsIGNyZWF0ZSBhbiBlcnJvciByZXNwb25zZSBhbmQgcmV0dXJuCiA8Y29kZT5udWxsPC9jb2RlPi4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBUaGUgc2VydmxldCByZXF1ZXN0IHdlIGFyZSBwcm9jZXNzaW5nPEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlc3BvbnNlIHdlIGFyZSBjcmVhdGluZzxERD48Q09ERT5wYXRoPC9DT0RFPiAtIFRoZSBwb3J0aW9uIG9mIHRoZSByZXF1ZXN0IFVSSSBmb3Igc2VsZWN0aW5nIGEgbWFwcGluZwo8RFQ+PEI+VGhyb3dzOjwvQj4KPEREPjxDT0RFPmphdmEuaW8uSU9FeGNlcHRpb248L0NPREU+IC0gaWYgYW4gaW5wdXQvb3V0cHV0IGVycm9yIG9jY3VyczwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InByb2Nlc3NNdWx0aXBhcnQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCkiPjwhLS0gLS0+PC9BPjxIMz4KcHJvY2Vzc011bHRpcGFydDwvSDM+CjxQUkU+CnByb3RlY3RlZCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0IDxCPnByb2Nlc3NNdWx0aXBhcnQ8L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0KTwvUFJFPgo8REw+CjxERD5JZiB0aGlzIGlzIGEgbXVsdGlwYXJ0IHJlcXVlc3QsIHdyYXAgaXQgd2l0aCBhIHNwZWNpYWwgd3JhcHBlci4KIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXF1ZXN0IHVuY2hhbmdlZC4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBUaGUgSHR0cFNlcnZsZXRSZXF1ZXN0IHdlIGFyZSBwcm9jZXNzaW5nPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0icHJvY2Vzc05vQ2FjaGUoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj48IS0tIC0tPjwvQT48SDM+CnByb2Nlc3NOb0NhY2hlPC9IMz4KPFBSRT4KcHJvdGVjdGVkIHZvaWQgPEI+cHJvY2Vzc05vQ2FjaGU8L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKTwvUFJFPgo8REw+CjxERD5TZXQgdGhlIG5vLWNhY2hlIGhlYWRlcnMgZm9yIGFsbCByZXNwb25zZXMsIGlmIHJlcXVlc3RlZC4KIDxzdHJvbmc+Tk9URTwvc3Ryb25nPiAtIFRoaXMgaGVhZGVyIHdpbGwgYmUgb3ZlcnJpZGRlbgogYXV0b21hdGljYWxseSBpZiBhIDxjb2RlPlJlcXVlc3REaXNwYXRjaGVyLmZvcndhcmQoKTwvY29kZT4gY2FsbCBpcwogdWx0aW1hdGVseSBpbnZva2VkLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlcXVlc3Qgd2UgYXJlIHByb2Nlc3Npbmc8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVzcG9uc2Ugd2UgYXJlIGNyZWF0aW5nPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0icHJvY2Vzc1BhdGgoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj48IS0tIC0tPjwvQT48SDM+CnByb2Nlc3NQYXRoPC9IMz4KPFBSRT4KcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPEI+cHJvY2Vzc1BhdGg8L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uPC9QUkU+CjxETD4KPEREPklkZW50aWZ5IGFuZCByZXR1cm4gdGhlIHBhdGggY29tcG9uZW50IChmcm9tIHRoZSByZXF1ZXN0IFVSSSkgdGhhdAogd2Ugd2lsbCB1c2UgdG8gc2VsZWN0IGFuIEFjdGlvbk1hcHBpbmcgdG8gZGlzcGF0Y2ggd2l0aC4gIElmIG5vIHN1Y2gKIHBhdGggY2FuIGJlIGlkZW50aWZpZWQsIGNyZWF0ZSBhbiBlcnJvciByZXNwb25zZSBhbmQgcmV0dXJuCiA8Y29kZT5udWxsPC9jb2RlPi4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBUaGUgc2VydmxldCByZXF1ZXN0IHdlIGFyZSBwcm9jZXNzaW5nPEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlc3BvbnNlIHdlIGFyZSBjcmVhdGluZwo8RFQ+PEI+VGhyb3dzOjwvQj4KPEREPjxDT0RFPmphdmEuaW8uSU9FeGNlcHRpb248L0NPREU+IC0gaWYgYW4gaW5wdXQvb3V0cHV0IGVycm9yIG9jY3VyczwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InByb2Nlc3NQb3B1bGF0ZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbkZvcm0sIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25NYXBwaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpwcm9jZXNzUG9wdWxhdGU8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgdm9pZCA8Qj5wcm9jZXNzUG9wdWxhdGU8L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25Gb3JtLmh0bWwiPkFjdGlvbkZvcm08L0E+Jm5ic3A7Zm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25NYXBwaW5nLmh0bWwiPkFjdGlvbk1hcHBpbmc8L0E+Jm5ic3A7bWFwcGluZykKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD5Qb3B1bGF0ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgc3BlY2lmaWVkIEFjdGlvbkZvcm0gaW5zdGFuY2UgZnJvbQogdGhlIHJlcXVlc3QgcGFyYW1ldGVycyBpbmNsdWRlZCB3aXRoIHRoaXMgcmVxdWVzdC4gIEluIGFkZGl0aW9uLAogcmVxdWVzdCBhdHRyaWJ1dGUgPGNvZGU+R2xvYmFscy5DQU5DRUxfS0VZPC9jb2RlPiB3aWxsIGJlIHNldCBpZgogdGhlIHJlcXVlc3Qgd2FzIHN1Ym1pdHRlZCB3aXRoIGEgYnV0dG9uIGNyZWF0ZWQgYnkKIDxjb2RlPkNhbmNlbFRhZzwvY29kZT4uCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVxdWVzdCB3ZSBhcmUgcHJvY2Vzc2luZzxERD48Q09ERT5yZXNwb25zZTwvQ09ERT4gLSBUaGUgc2VydmxldCByZXNwb25zZSB3ZSBhcmUgY3JlYXRpbmc8REQ+PENPREU+Zm9ybTwvQ09ERT4gLSBUaGUgQWN0aW9uRm9ybSBpbnN0YW5jZSB3ZSBhcmUgcG9wdWxhdGluZzxERD48Q09ERT5tYXBwaW5nPC9DT0RFPiAtIFRoZSBBY3Rpb25NYXBwaW5nIHdlIGFyZSB1c2luZwo8RFQ+PEI+VGhyb3dzOjwvQj4KPEREPjxDT0RFPmphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvQ09ERT4gLSBpZiB0aHJvd24gYnkgUmVxdWVzdFV0aWxzLnBvcHVsYXRlKCk8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJwcm9jZXNzUHJlcHJvY2VzcyhqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPjwhLS0gLS0+PC9BPjxIMz4KcHJvY2Vzc1ByZXByb2Nlc3M8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgYm9vbGVhbiA8Qj5wcm9jZXNzUHJlcHJvY2VzczwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpPC9QUkU+CjxETD4KPEREPkdlbmVyYWwtcHVycG9zZSBwcmVwcm9jZXNzaW5nIGhvb2sgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiBhcyByZXF1aXJlZAogYnkgc3ViY2xhc3Nlcy4gIFJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB5b3Ugd2FudCBzdGFuZGFyZCBwcm9jZXNzaW5nCiB0byBjb250aW51ZSwgb3IgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIHRoZSByZXNwb25zZSBoYXMgYWxyZWFkeSBiZWVuCiBjb21wbGV0ZWQuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gVGhlIHNlcnZsZXQgcmVxdWVzdCB3ZSBhcmUgcHJvY2Vzc2luZzxERD48Q09ERT5yZXNwb25zZTwvQ09ERT4gLSBUaGUgc2VydmxldCByZXNwb25zZSB3ZSBhcmUgY3JlYXRpbmc8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJwcm9jZXNzUm9sZXMoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UsIG9yZy5hcGFjaGUuc3RydXRzLmFjdGlvbi5BY3Rpb25NYXBwaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpwcm9jZXNzUm9sZXM8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgYm9vbGVhbiA8Qj5wcm9jZXNzUm9sZXM8L0I+KGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UmbmJzcDtyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9BY3Rpb25NYXBwaW5nLmh0bWwiPkFjdGlvbk1hcHBpbmc8L0E+Jm5ic3A7bWFwcGluZykKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb248L1BSRT4KPERMPgo8REQ+SWYgdGhpcyBhY3Rpb24gaXMgcHJvdGVjdGVkIGJ5IHNlY3VyaXR5IHJvbGVzLCBtYWtlIHN1cmUgdGhhdCB0aGUKIGN1cnJlbnQgdXNlciBwb3NzZXNzZXMgYXQgbGVhc3Qgb25lIG9mIHRoZW0uICBSZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4KIHRvIGNvbnRpbnVlIG5vcm1hbCBwcm9jZXNzaW5nLCBvciA8Y29kZT5mYWxzZTwvY29kZT4gaWYgYW4gYXBwcm9wcmlhdGUKIHJlc3BvbnNlIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHByb2Nlc3Npbmcgc2hvdWxkIHRlcm1pbmF0ZS4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBUaGUgc2VydmxldCByZXF1ZXN0IHdlIGFyZSBwcm9jZXNzaW5nPEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlc3BvbnNlIHdlIGFyZSBjcmVhdGluZzxERD48Q09ERT5tYXBwaW5nPC9DT0RFPiAtIFRoZSBtYXBwaW5nIHdlIGFyZSB1c2luZwo8RFQ+PEI+VGhyb3dzOjwvQj4KPEREPjxDT0RFPmphdmEuaW8uSU9FeGNlcHRpb248L0NPREU+IC0gaWYgYW4gaW5wdXQvb3V0cHV0IGVycm9yIG9jY3Vycwo8REQ+PENPREU+amF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9DT0RFPiAtIGlmIGEgc2VydmxldCBleGNlcHRpb24gb2NjdXJzPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0icHJvY2Vzc1ZhbGlkYXRlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLCBvcmcuYXBhY2hlLnN0cnV0cy5hY3Rpb24uQWN0aW9uRm9ybSwgb3JnLmFwYWNoZS5zdHJ1dHMuYWN0aW9uLkFjdGlvbk1hcHBpbmcpIj48IS0tIC0tPjwvQT48SDM+CnByb2Nlc3NWYWxpZGF0ZTwvSDM+CjxQUkU+CnByb3RlY3RlZCBib29sZWFuIDxCPnByb2Nlc3NWYWxpZGF0ZTwvQj4oamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbkZvcm0uaHRtbCI+QWN0aW9uRm9ybTwvQT4mbmJzcDtmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbk1hcHBpbmcuaHRtbCI+QWN0aW9uTWFwcGluZzwvQT4mbmJzcDttYXBwaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD48cD5JZiB0aGlzIHJlcXVlc3Qgd2FzIG5vdCBjYW5jZWxsZWQsIGFuZCB0aGUgcmVxdWVzdCdzCiA8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vQWN0aW9uTWFwcGluZy5odG1sIj48Q09ERT5BY3Rpb25NYXBwaW5nPC9DT0RFPjwvQT4gaGFzIG5vdCBkaXNhYmxlZCB2YWxpZGF0aW9uLCBjYWxsIHRoZQogPGNvZGU+dmFsaWRhdGUoKTwvY29kZT4gbWV0aG9kIG9mIHRoZSBzcGVjaWZpZWQgPEEgSFJFRj0iLi4vLi4vLi4vLi4vb3JnL2FwYWNoZS9zdHJ1dHMvYWN0aW9uL0FjdGlvbkZvcm0uaHRtbCI+PENPREU+QWN0aW9uRm9ybTwvQ09ERT48L0E+LAogYW5kIGZvcndhcmQgYmFjayB0byB0aGUgaW5wdXQgZm9ybSBpZiB0aGVyZSB3ZXJlIGFueSBlcnJvcnMuCiBSZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgd2Ugc2hvdWxkIGNvbnRpbnVlIHByb2Nlc3NpbmcsCiBvciA8Y29kZT5mYWxzZTwvY29kZT4gaWYgd2UgaGF2ZSBhbHJlYWR5IGZvcndhcmRlZCBjb250cm9sIGJhY2sKIHRvIHRoZSBpbnB1dCBmb3JtLjwvcD4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBUaGUgc2VydmxldCByZXF1ZXN0IHdlIGFyZSBwcm9jZXNzaW5nPEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIFRoZSBzZXJ2bGV0IHJlc3BvbnNlIHdlIGFyZSBjcmVhdGluZzxERD48Q09ERT5mb3JtPC9DT0RFPiAtIFRoZSBBY3Rpb25Gb3JtIGluc3RhbmNlIHdlIGFyZSBwb3B1bGF0aW5nPEREPjxDT0RFPm1hcHBpbmc8L0NPREU+IC0gVGhlIEFjdGlvbk1hcHBpbmcgd2UgYXJlIHVzaW5nCjxEVD48Qj5UaHJvd3M6PC9CPgo8REQ+PENPREU+amF2YS5pby5JT0V4Y2VwdGlvbjwvQ09ERT4gLSBpZiBhbiBpbnB1dC9vdXRwdXQgZXJyb3Igb2NjdXJzCjxERD48Q09ERT5qYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb248L0NPREU+IC0gaWYgYSBzZXJ2bGV0IGV4Y2VwdGlvbiBvY2N1cnM8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJpbnRlcm5hbE1vZHVsZVJlbGF0aXZlRm9yd2FyZChqYXZhLmxhbmcuU3RyaW5nLCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPjwhLS0gLS0+PC9BPjxIMz4KaW50ZXJuYWxNb2R1bGVSZWxhdGl2ZUZvcndhcmQ8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgdm9pZCA8Qj5pbnRlcm5hbE1vZHVsZVJlbGF0aXZlRm9yd2FyZDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlJm5ic3A7cmVzcG9uc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD5EbyBhIG1vZHVsZSByZWxhdGl2ZSBmb3J3YXJkIHRvIHNwZWNpZmllZCB1cmkgdXNpbmcgcmVxdWVzdCBkaXNwYXRjaGVyLgogVXJpIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG1vZHVsZS4gVGhlIHJlYWwgdXJpIGlzIGNvbXB1dGUgYnkgcHJlZml4aW5nCiB0aGUgbW9kdWxlIG5hbWUuCiBUaGlzIG1ldGhvZCBpcyB1c2VkIGludGVybmFsbHkgYW5kIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLiBJdCBpcwogYWR2aXNlZCB0byBub3QgdXNlIGl0IGluIHN1YmNsYXNzZXMuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnVyaTwvQ09ERT4gLSBNb2R1bGUtcmVsYXRpdmUgVVJJIHRvIGZvcndhcmQgdG88REQ+PENPREU+cmVxdWVzdDwvQ09ERT4gLSBDdXJyZW50IHBhZ2UgcmVxdWVzdDxERD48Q09ERT5yZXNwb25zZTwvQ09ERT4gLSBDdXJyZW50IHBhZ2UgcmVzcG9uc2UKPEREPjxDT0RFPmphdmEuaW8uSU9FeGNlcHRpb248L0NPREU+CjxERD48Q09ERT5qYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb248L0NPREU+PERUPjxCPlNpbmNlOjwvQj48L0RUPgogIDxERD5TdHJ1dHMgMS4xPC9ERD4KPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iaW50ZXJuYWxNb2R1bGVSZWxhdGl2ZUluY2x1ZGUoamF2YS5sYW5nLlN0cmluZywgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpIj48IS0tIC0tPjwvQT48SDM+CmludGVybmFsTW9kdWxlUmVsYXRpdmVJbmNsdWRlPC9IMz4KPFBSRT4KcHJvdGVjdGVkIHZvaWQgPEI+aW50ZXJuYWxNb2R1bGVSZWxhdGl2ZUluY2x1ZGU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDt1cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QmbmJzcDtyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb248L1BSRT4KPERMPgo8REQ+RG8gYSBtb2R1bGUgcmVsYXRpdmUgaW5jbHVkZSB0byBzcGVjaWZpZWQgdXJpIHVzaW5nIHJlcXVlc3QgZGlzcGF0Y2hlci4KIFVyaSBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBtb2R1bGUuIFRoZSByZWFsIHVyaSBpcyBjb21wdXRlIGJ5IHByZWZpeGluZwogdGhlIG1vZHVsZSBuYW1lLgogVGhpcyBtZXRob2QgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSS4gSXQgaXMKIGFkdmlzZWQgdG8gbm90IHVzZSBpdCBpbiBzdWJjbGFzc2VzLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT51cmk8L0NPREU+IC0gTW9kdWxlLXJlbGF0aXZlIFVSSSB0byBpbmNsdWRlPEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gQ3VycmVudCBwYWdlIHJlcXVlc3Q8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gQ3VycmVudCBwYWdlIHJlc3BvbnNlCjxERD48Q09ERT5qYXZhLmlvLklPRXhjZXB0aW9uPC9DT0RFPgo8REQ+PENPREU+amF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9DT0RFPjxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KICA8REQ+U3RydXRzIDEuMTwvREQ+CjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImRvRm9yd2FyZChqYXZhLmxhbmcuU3RyaW5nLCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPjwhLS0gLS0+PC9BPjxIMz4KZG9Gb3J3YXJkPC9IMz4KPFBSRT4KcHJvdGVjdGVkIHZvaWQgPEI+ZG9Gb3J3YXJkPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKQogICAgICAgICAgICAgICAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD5EbyBhIGZvcndhcmQgdG8gc3BlY2lmaWVkIHVyaSB1c2luZyByZXF1ZXN0IGRpc3BhdGNoZXIuCiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGFsbCBpbnRlcm5hbCBtZXRob2QgbmVlZGluZyB0byBkbyBhIGZvcndhcmQuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnVyaTwvQ09ERT4gLSBDb250ZXh0LXJlbGF0aXZlIFVSSSB0byBmb3J3YXJkIHRvPEREPjxDT0RFPnJlcXVlc3Q8L0NPREU+IC0gQ3VycmVudCBwYWdlIHJlcXVlc3Q8REQ+PENPREU+cmVzcG9uc2U8L0NPREU+IC0gQ3VycmVudCBwYWdlIHJlc3BvbnNlCjxERD48Q09ERT5qYXZhLmlvLklPRXhjZXB0aW9uPC9DT0RFPgo8REQ+PENPREU+amF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uPC9DT0RFPjxEVD48Qj5TaW5jZTo8L0I+PC9EVD4KICA8REQ+U3RydXRzIDEuMTwvREQ+CjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImRvSW5jbHVkZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkiPjwhLS0gLS0+PC9BPjxIMz4KZG9JbmNsdWRlPC9IMz4KPFBSRT4KcHJvdGVjdGVkIHZvaWQgPEI+ZG9JbmNsdWRlPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7dXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCZuYnNwO3JlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSZuYnNwO3Jlc3BvbnNlKQogICAgICAgICAgICAgICAgICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvUFJFPgo8REw+CjxERD5EbyBhbiBpbmNsdWRlIG9mIHNwZWNpZmllZCB1cmkgdXNpbmcgcmVxdWVzdCBkaXNwYXRjaGVyLgogVGhpcyBtZXRob2QgaXMgdXNlZCBieSBhbGwgaW50ZXJuYWwgbWV0aG9kIG5lZWRpbmcgdG8gZG8gYW4gaW5jbHVkZQo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT51cmk8L0NPREU+IC0gQ29udGV4dC1yZWxhdGl2ZSBVUkkgdG8gaW5jbHVkZTxERD48Q09ERT5yZXF1ZXN0PC9DT0RFPiAtIEN1cnJlbnQgcGFnZSByZXF1ZXN0PEREPjxDT0RFPnJlc3BvbnNlPC9DT0RFPiAtIEN1cnJlbnQgcGFnZSByZXNwb25zZQo8REQ+PENPREU+amF2YS5pby5JT0V4Y2VwdGlvbjwvQ09ERT4KPEREPjxDT0RFPmphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjwvQ09ERT48RFQ+PEI+U2luY2U6PC9CPjwvRFQ+CiAgPEREPlN0cnV0cyAxLjE8L0REPgo8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXREZWJ1ZygpIj48IS0tIC0tPjwvQT48SDM+CmdldERlYnVnPC9IMz4KPFBSRT4KcHVibGljIGludCA8Qj5nZXREZWJ1ZzwvQj4oKTwvUFJFPgo8REw+CjxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5Db25maWd1cmUgdGhlIGxvZ2dpbmcgZGV0YWlsIGxldmVsIGluIHlvdXIKICB1bmRlcmx5aW5nIGxvZ2dpbmcgaW1wbGVtZW50YXRpb248L0k+CjxQPgo8REQ+UmV0dXJuIHRoZSBkZWJ1Z2dpbmcgZGV0YWlsIGxldmVsIHRoYXQgaGFzIGJlZW4gY29uZmlndXJlZCBmb3Igb3VyCiBjb250cm9sbGVyIHNlcnZsZXQuCjxQPgo8REQ+PERMPgo8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRJbnRlcm5hbCgpIj48IS0tIC0tPjwvQT48SDM+CmdldEludGVybmFsPC9IMz4KPFBSRT4KcHJvdGVjdGVkIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL3V0aWwvTWVzc2FnZVJlc291cmNlcy5odG1sIj5NZXNzYWdlUmVzb3VyY2VzPC9BPiA8Qj5nZXRJbnRlcm5hbDwvQj4oKTwvUFJFPgo8REw+CjxERD5SZXR1cm4gdGhlIDxjb2RlPk1lc3NhZ2VSZXNvdXJjZXM8L2NvZGU+IGluc3RhbmNlIGNvbnRhaW5pbmcgb3VyCiBpbnRlcm5hbCBtZXNzYWdlIHN0cmluZ3MuCjxQPgo8REQ+PERMPgo8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRTZXJ2bGV0Q29udGV4dCgpIj48IS0tIC0tPjwvQT48SDM+CmdldFNlcnZsZXRDb250ZXh0PC9IMz4KPFBSRT4KcHJvdGVjdGVkIGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgPEI+Z2V0U2VydmxldENvbnRleHQ8L0I+KCk8L1BSRT4KPERMPgo8REQ+UmV0dXJuIHRoZSBTZXJ2bGV0Q29udGV4dCBmb3IgdGhlIHdlYiBhcHBsaWNhdGlvbiB3ZSBhcmUgcnVubmluZyBpbi4KPFA+CjxERD48REw+CjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImxvZyhqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpsb2c8L0gzPgo8UFJFPgpwcm90ZWN0ZWQgdm9pZCA8Qj5sb2c8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDttZXNzYWdlKTwvUFJFPgo8REw+CjxERD5Mb2cgdGhlIHNwZWNpZmllZCBtZXNzYWdlIHRvIHRoZSBzZXJ2bGV0IGNvbnRleHQgbG9nIGZvciB0aGlzCiB3ZWIgYXBwbGljYXRpb24uCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1lc3NhZ2U8L0NPREU+IC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0ibG9nKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUpIj48IS0tIC0tPjwvQT48SDM+CmxvZzwvSDM+CjxQUkU+CnByb3RlY3RlZCB2b2lkIDxCPmxvZzwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO21lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlJm5ic3A7ZXhjZXB0aW9uKTwvUFJFPgo8REw+CjxERD5Mb2cgdGhlIHNwZWNpZmllZCBtZXNzYWdlIGFuZCBleGNlcHRpb24gdG8gdGhlIHNlcnZsZXQgY29udGV4dCBsb2cKIGZvciB0aGlzIHdlYiBhcHBsaWNhdGlvbi4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bWVzc2FnZTwvQ09ERT4gLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQ8REQ+PENPREU+ZXhjZXB0aW9uPC9DT0RFPiAtIFRoZSBleGNlcHRpb24gdG8gYmUgbG9nZ2VkPC9ETD4KPC9ERD4KPC9ETD4KPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgo8SFI+Cgo8IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+CjxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KPFRSPgo8VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+CjxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgogIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvUmVxdWVzdFByb2Nlc3Nvci5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDwvVFI+CjwvVEFCTEU+CjwvVEQ+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgo8L0VNPgo8L1REPgo8L1RSPgoKPFRSPgo8VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgombmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi9vcmcvYXBhY2hlL3N0cnV0cy9hY3Rpb24vUmVxdWVzdEFjdGlvbk1hcHBpbmcuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7CiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uLy4uL29yZy9hcGFjaGUvc3RydXRzL2FjdGlvbi9TZXNzaW9uQWN0aW9uTWFwcGluZy5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KICA8QSBIUkVGPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKJm5ic3A7PEEgSFJFRj0iUmVxdWVzdFByb2Nlc3Nvci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKJm5ic3A7CjxTQ1JJUFQ+CiAgPCEtLQogIGlmKHdpbmRvdz09dG9wKSB7CiAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKICB9CiAgLy8tLT4KPC9TQ1JJUFQ+CjxOT1NDUklQVD4KPEEgSFJFRj0iLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+CjwvTk9TQ1JJUFQ+CjwvRk9OVD48L1REPgo8L1RSPgo8VFI+CjxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+CiAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+CjwvVFI+CjwvVEFCTEU+CjwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KCjxIUj4KQ29weXJpZ2h0IKkgMjAwMC0yMDAzIC0gQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24KPC9CT0RZPgo8L0hUTUw+Cg==