LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAogKgogKiBDb250cmlidXRvcnM6CiAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICAgIEFuZHJlIFNvZXJlbmcgPGFuZHJlaXNAZmFzdC5ubz4gLSBbc3ludGF4IGhpZ2hsaWdodGluZ10gaGlnaGxpZ2h0IG51bWJlcnMgLSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NzMKICogICAgIEJq9nJuIE1pY2hhZWwgPGIubWljaGFlbEBnbXguZGU+IC0gW3N5bnRheCBoaWdobGlnaHRpbmddIFN5bnRheCBjb2xvcmluZyBmb3IgYWJzdHJhY3QgY2xhc3NlcyAtIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy8zMzEzMTEKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnBhY2thZ2Ugb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLmphdmFlZGl0b3I7CgppbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwoKaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7CgovKioKICogSGVscGVyIGNsYXNzIHRvIGdldCBOTFNlZCBtZXNzYWdlcy4KICovCmZpbmFsIGNsYXNzIEphdmFFZGl0b3JNZXNzYWdlcyBleHRlbmRzIE5MUyB7CgoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9GT1JfQ09OU1RSVUNURURfS0VZUz0gIm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5qYXZhZWRpdG9yLkNvbnN0cnVjdGVkSmF2YUVkaXRvck1lc3NhZ2VzIjsvLyROT04tTkxTLTEkCglwcml2YXRlIHN0YXRpYyBSZXNvdXJjZUJ1bmRsZSBmZ0J1bmRsZUZvckNvbnN0cnVjdGVkS2V5cz0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9GT1JfQ09OU1RSVUNURURfS0VZUyk7CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIGJ1bmRsZSB3aGljaCBjb250YWlucyBjb25zdHJ1Y3RlZCBrZXlzLgoJICoKCSAqIEBzaW5jZSAzLjEKCSAqIEByZXR1cm4gdGhlIG1lc3NhZ2UgYnVuZGxlCgkgKi8KCXB1YmxpYyBzdGF0aWMgUmVzb3VyY2VCdW5kbGUgZ2V0QnVuZGxlRm9yQ29uc3RydWN0ZWRLZXlzKCkgewoJCXJldHVybiBmZ0J1bmRsZUZvckNvbnN0cnVjdGVkS2V5czsKCX0KCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUU9IEphdmFFZGl0b3JNZXNzYWdlcy5jbGFzcy5nZXROYW1lKCk7CgoKCXByaXZhdGUgSmF2YUVkaXRvck1lc3NhZ2VzKCkgewoJCS8vIERvIG5vdCBpbnN0YW50aWF0ZQoJfQoKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZEltcG9ydE9uU2VsZWN0aW9uX2xhYmVsOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkSW1wb3J0T25TZWxlY3Rpb25fdG9vbHRpcDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZEltcG9ydE9uU2VsZWN0aW9uX2Rlc2NyaXB0aW9uOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkSW1wb3J0T25TZWxlY3Rpb25fZXJyb3JfdGl0bGU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRJbXBvcnRPblNlbGVjdGlvbl9kaWFsb2dfdGl0bGU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRJbXBvcnRPblNlbGVjdGlvbl9kaWFsb2dfbWVzc2FnZTsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENsYXNzRmlsZUVkaXRvcl9lcnJvcl9jbGFzc2ZpbGVfbm90X29uX2NsYXNzcGF0aDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENsYXNzRmlsZUVkaXRvcl9lcnJvcl9pbnZhbGlkX2lucHV0X21lc3NhZ2U7CglwdWJsaWMgc3RhdGljIFN0cmluZyBDbGFzc0ZpbGVFZGl0b3JfZXJyb3JfdGl0bGU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBDbGFzc0ZpbGVFZGl0b3JfZXJyb3JfbWVzc2FnZTsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENsYXNzRmlsZUVkaXRvcl9Tb3VyY2VBdHRhY2htZW50Rm9ybV9jYW5ub3Rjb25maWd1cmU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBDbGFzc0ZpbGVFZGl0b3JfU291cmNlQXR0YWNobWVudEZvcm1fbm90c3VwcG9ydGVkOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ2xhc3NGaWxlRWRpdG9yX1NvdXJjZUF0dGFjaG1lbnRGb3JtX3JlYWRvbmx5OwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ2xhc3NGaWxlTWFya2VyQW5ub3RhdGlvbk1vZGVsX2Vycm9yX2lzQWNjZXB0YWJsZTsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENsYXNzRmlsZU1hcmtlckFubm90YXRpb25Nb2RlbF9lcnJvcl9pc0FmZmVjdGVkOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ2xhc3NGaWxlTWFya2VyQW5ub3RhdGlvbk1vZGVsX2Vycm9yX3Jlc291cmNlQ2hhbmdlZDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENvbXBpbGF0aW9uVW5pdERvY3VtZW50UHJvdmlkZXJfcHJvZ3Jlc3NOb3RpZnlpbmdTYXZlUGFydGljaXBhbnRzOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29tcGlsYXRpb25Vbml0RG9jdW1lbnRQcm92aWRlcl9lcnJvcl9zYXZlUGFydGljaXBhbnRQcm9ibGVtOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29tcGlsYXRpb25Vbml0RG9jdW1lbnRQcm92aWRlcl9jYWxjdWxhdGluZ0NoYW5nZWRSZWdpb25zX21lc3NhZ2U7CglwdWJsaWMgc3RhdGljIFN0cmluZyBDb21waWxhdGlvblVuaXREb2N1bWVudFByb3ZpZGVyX2Vycm9yX2NhbGN1bGF0aW5nQ2hhbmdlZFJlZ2lvbnM7CglwdWJsaWMgc3RhdGljIFN0cmluZyBDb21waWxhdGlvblVuaXREb2N1bWVudFByb3ZpZGVyX2Vycm9yX3NhdmVQYXJ0aWNpcGFudFNhdmVkRmlsZTsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENvbXBpbGF0aW9uVW5pdERvY3VtZW50UHJvdmlkZXJfZXJyb3Jfc2F2ZVBhcnRpY2lwYW50RmFpbGVkOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29tcGlsYXRpb25Vbml0RWRpdG9yX2Vycm9yX3NhdmluZ19tZXNzYWdlMTsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENvbXBpbGF0aW9uVW5pdEVkaXRvcl9lcnJvcl9zYXZpbmdfdGl0bGUxOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29tcGlsYXRpb25Vbml0RWRpdG9yX2Vycm9yX3NhdmluZ19lZGl0ZWRMaW5lc19jYWxjdWxhdGlvbl9tZXNzYWdlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29tcGlsYXRpb25Vbml0RWRpdG9yX2Vycm9yX3NhdmluZ19lZGl0ZWRMaW5lc19jYWxjdWxhdGlvbl9saW5rOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29tcGlsYXRpb25Vbml0RWRpdG9yX2Vycm9yX3NhdmluZ19lZGl0ZWRMaW5lc19jYWxjdWxhdGlvbl9wcm9wZXJ0eV9saW5rOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29tcGlsYXRpb25Vbml0RWRpdG9yX2Vycm9yX3NhdmluZ19wYXJ0aWNpcGFudF9tZXNzYWdlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29tcGlsYXRpb25Vbml0RWRpdG9yX2Vycm9yX3NhdmluZ19wYXJ0aWNpcGFudF9saW5rOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29tcGlsYXRpb25Vbml0RWRpdG9yX2Vycm9yX3NhdmluZ19wYXJ0aWNpcGFudF9wcm9wZXJ0eV9saW5rOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgRWRpdG9yVXRpbGl0eV9maWxlX211c3Rfbm90X2JlX251bGw7CglwdWJsaWMgc3RhdGljIFN0cmluZyBFZGl0b3JVdGlsaXR5X25vX2FjdGl2ZV9Xb3JrYmVuY2hQYWdlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgRWRpdG9yVXRpbGl0eV9ub19lZGl0b3JJbnB1dDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEphdmFPdXRsaW5lUGFnZV9Tb3J0X2xhYmVsOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YU91dGxpbmVQYWdlX1NvcnRfdG9vbHRpcDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEphdmFPdXRsaW5lUGFnZV9Tb3J0X2Rlc2NyaXB0aW9uOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YU91dGxpbmVQYWdlX0dvSW50b1RvcExldmVsVHlwZV9sYWJlbDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEphdmFPdXRsaW5lUGFnZV9Hb0ludG9Ub3BMZXZlbFR5cGVfdG9vbHRpcDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEphdmFPdXRsaW5lUGFnZV9Hb0ludG9Ub3BMZXZlbFR5cGVfZGVzY3JpcHRpb247CglwdWJsaWMgc3RhdGljIFN0cmluZyBKYXZhT3V0bGluZVBhZ2VfZXJyb3JfTm9Ub3BMZXZlbFR5cGU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBUb2dnbGVDb21tZW50X2Vycm9yX3RpdGxlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgVG9nZ2xlQ29tbWVudF9lcnJvcl9tZXNzYWdlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgQ29udGVudEFzc2lzdFByb3Bvc2FsX2xhYmVsOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgRWRpdG9yX0ZvbGRpbmdNZW51X25hbWU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBDb21waWxhdGlvblVuaXREb2N1bWVudFByb3ZpZGVyX3NhdmVBc1RhcmdldE9wZW5JbkVkaXRvcjsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENsYXNzRmlsZURvY3VtZW50UHJvdmlkZXJfZXJyb3JfY3JlYXRlRWxlbWVudEluZm87CglwdWJsaWMgc3RhdGljIFN0cmluZyBFeHBhbmRTZWxlY3Rpb25NZW51X2xhYmVsOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgR290b01hdGNoaW5nQnJhY2tldF9sYWJlbDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEdvdG9NYXRjaGluZ0JyYWNrZXRfZXJyb3JfaW52YWxpZFNlbGVjdGlvbjsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEdvdG9NYXRjaGluZ0JyYWNrZXRfZXJyb3Jfbm9NYXRjaGluZ0JyYWNrZXQ7CglwdWJsaWMgc3RhdGljIFN0cmluZyBHb3RvTWF0Y2hpbmdCcmFja2V0X2Vycm9yX2JyYWNrZXRPdXRzaWRlU2VsZWN0ZWRFbGVtZW50OwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2hvd0luQnJlYWRjcnVtYkFjdGlvbl9sYWJlbDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNvdXJjZUF0dGFjaG1lbnRGb3JtX3RpdGxlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU291cmNlQXR0YWNobWVudEZvcm1faGVhZGluZzsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNvdXJjZUF0dGFjaG1lbnRGb3JtX21lc3NhZ2Vfbm9Tb3VyY2U7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTb3VyY2VBdHRhY2htZW50Rm9ybV9tZXNzYWdlX25vU291cmNlQXR0YWNobWVudDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNvdXJjZUF0dGFjaG1lbnRGb3JtX21lc3NhZ2VfcHJlc3NCdXR0b25Ub0F0dGFjaDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNvdXJjZUF0dGFjaG1lbnRGb3JtX21lc3NhZ2Vfbm9Tb3VyY2VJbkF0dGFjaG1lbnQ7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTb3VyY2VBdHRhY2htZW50Rm9ybV9tZXNzYWdlX3ByZXNzQnV0dG9uVG9DaGFuZ2U7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTb3VyY2VBdHRhY2htZW50Rm9ybV9idXR0b25fYXR0YWNoU291cmNlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU291cmNlQXR0YWNobWVudEZvcm1fYnV0dG9uX2NoYW5nZUF0dGFjaGVkU291cmNlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU291cmNlQXR0YWNobWVudEZvcm1fZXJyb3JfdGl0bGU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTb3VyY2VBdHRhY2htZW50Rm9ybV9lcnJvcl9tZXNzYWdlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU291cmNlQXR0YWNobWVudEZvcm1fYXR0YWNoX2Vycm9yX3RpdGxlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU291cmNlQXR0YWNobWVudEZvcm1fYXR0YWNoX2Vycm9yX21lc3NhZ2U7CglwdWJsaWMgc3RhdGljIFN0cmluZyBFZGl0b3JVdGlsaXR5X2NvbmNhdE1vZGlmaWVyU3RyaW5nczsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcl9pbXBsZW1lbnRzOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyX2ludGFsbEpvYjsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcl9vdmVycmlkZXM7CglwdWJsaWMgc3RhdGljIFN0cmluZyBPdmVycmlkZUluZGljYXRvck1hbmFnZXJfb3Blbl9lcnJvcl90aXRsZTsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcl9vcGVuX2Vycm9yX21lc3NhZ2U7CglwdWJsaWMgc3RhdGljIFN0cmluZyBPdmVycmlkZUluZGljYXRvck1hbmFnZXJfb3Blbl9lcnJvcl9tZXNzYWdlSGFzTG9nRW50cnk7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTZW1hbnRpY0hpZ2hsaWdodGluZ19qb2I7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTZW1hbnRpY0hpZ2hsaWdodGluZ19maWVsZDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlbWFudGljSGlnaGxpZ2h0aW5nX3N0YXRpY0ZpZWxkOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2VtYW50aWNIaWdobGlnaHRpbmdfc3RhdGljRmluYWxGaWVsZDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlbWFudGljSGlnaGxpZ2h0aW5nX21ldGhvZERlY2xhcmF0aW9uOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2VtYW50aWNIaWdobGlnaHRpbmdfc3RhdGljTWV0aG9kSW52b2NhdGlvbjsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlbWFudGljSGlnaGxpZ2h0aW5nX2Fubm90YXRpb25FbGVtZW50UmVmZXJlbmNlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2VtYW50aWNIaWdobGlnaHRpbmdfYWJzdHJhY3RDbGFzc2VzOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2VtYW50aWNIaWdobGlnaHRpbmdfYWJzdHJhY3RNZXRob2RJbnZvY2F0aW9uOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2VtYW50aWNIaWdobGlnaHRpbmdfaW5oZXJpdGVkTWV0aG9kSW52b2NhdGlvbjsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlbWFudGljSGlnaGxpZ2h0aW5nX2xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbjsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlbWFudGljSGlnaGxpZ2h0aW5nX2xvY2FsVmFyaWFibGU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTZW1hbnRpY0hpZ2hsaWdodGluZ19wYXJhbWV0ZXJWYXJpYWJsZTsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlbWFudGljSGlnaGxpZ2h0aW5nX2RlcHJlY2F0ZWRNZW1iZXI7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTZW1hbnRpY0hpZ2hsaWdodGluZ190eXBlVmFyaWFibGVzOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2VtYW50aWNIaWdobGlnaHRpbmdfbWV0aG9kOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2VtYW50aWNIaWdobGlnaHRpbmdfYXV0b2JveGluZzsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNlbWFudGljSGlnaGxpZ2h0aW5nX251bWJlcnM7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTZW1hbnRpY0hpZ2hsaWdodGluZ19jbGFzc2VzOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2VtYW50aWNIaWdobGlnaHRpbmdfZW51bXM7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTZW1hbnRpY0hpZ2hsaWdodGluZ19pbnRlcmZhY2VzOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgU2VtYW50aWNIaWdobGlnaHRpbmdfYW5ub3RhdGlvbnM7CglwdWJsaWMgc3RhdGljIFN0cmluZyBTZW1hbnRpY0hpZ2hsaWdodGluZ190eXBlQXJndW1lbnRzOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVkaXRvcl9Gb3JtYXRFbGVtZW50QWN0aW9uX2Rlc2NyaXB0aW9uOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVkaXRvcl9Gb3JtYXRFbGVtZW50QWN0aW9uX2xhYmVsOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVkaXRvcl9Gb3JtYXRFbGVtZW50RGlhbG9nX2xhYmVsOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVkaXRvcl9tYXJrT2NjdXJyZW5jZXNfam9iX25hbWU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBKYXZhRWRpdG9yQnJlYWRjcnVtYkFjdGlvbkdyb3VwX2dvX3RvX2VkaXRvcl9hY3Rpb25fbGFiZWw7CglwdWJsaWMgc3RhdGljIFN0cmluZyBKYXZhRWxlbWVudEh5cGVybGlua19oeXBlcmxpbmtUZXh0OwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVsZW1lbnRIeXBlcmxpbmtfaHlwZXJsaW5rVGV4dF9xdWFsaWZpZWQ7CglwdWJsaWMgc3RhdGljIFN0cmluZyBFZGl0b3JfT3BlblByb3BlcnRpZXNGaWxlX2Vycm9yX2tleU5vdEZvdW5kOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgRWRpdG9yX09wZW5Qcm9wZXJ0aWVzRmlsZV9lcnJvcl9maWxlTm90Rm91bmRfZGlhbG9nTWVzc2FnZTsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEVkaXRvcl9PcGVuUHJvcGVydGllc0ZpbGVfZXJyb3Jfb3BlbkVkaXRvcl9kaWFsb2dNZXNzYWdlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgRWRpdG9yX09wZW5Qcm9wZXJ0aWVzRmlsZV9oeXBlcmxpbmtUZXh0OwoJcHVibGljIHN0YXRpYyBTdHJpbmcgRWRpdG9yX01vdmVMaW5lc19JbGxlZ2FsTW92ZV9zdGF0dXM7CglwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNpY0VkaXRvckFjdGlvbkNvbnRyaWJ1dG9yX3NwZWNpZmljX2NvbnRlbnRfYXNzaXN0X21lbnU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBKYXZhRWxlbWVudEltcGxlbWVudGF0aW9uSHlwZXJsaW5rX2Vycm9yX25vX2ltcGxlbWVudGF0aW9uc19mb3VuZF9tZXNzYWdlOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVsZW1lbnRJbXBsZW1lbnRhdGlvbkh5cGVybGlua19lcnJvcl9zdGF0dXNfbWVzc2FnZTsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEphdmFFbGVtZW50SW1wbGVtZW50YXRpb25IeXBlcmxpbmtfaHlwZXJsaW5rVGV4dDsKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEphdmFFbGVtZW50SW1wbGVtZW50YXRpb25IeXBlcmxpbmtfaHlwZXJsaW5rVGV4dF9xdWFsaWZpZWQ7CglwdWJsaWMgc3RhdGljIFN0cmluZyBKYXZhRWxlbWVudEltcGxlbWVudGF0aW9uSHlwZXJsaW5rX3NlYXJjaF9tZXRob2RfaW1wbGVtZW50b3JzOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVsZW1lbnREZWNsYXJlZFR5cGVIeXBlcmxpbmtfaHlwZXJsaW5rVGV4dF9xdWFsaWZpZWQ7CglwdWJsaWMgc3RhdGljIFN0cmluZyBKYXZhRWxlbWVudERlY2xhcmVkVHlwZUh5cGVybGlua19oeXBlcmxpbmtUZXh0X3F1YWxpZmllZF9zaWduYXR1cmU7CglwdWJsaWMgc3RhdGljIFN0cmluZyBKYXZhRWxlbWVudERlY2xhcmVkVHlwZUh5cGVybGlua19oeXBlcmxpbmtUZXh0OwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVsZW1lbnREZWNsYXJlZFR5cGVIeXBlcmxpbmtfZXJyb3JfbXNnOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVsZW1lbnRSZXR1cm5UeXBlSHlwZXJsaW5rX2h5cGVybGlua1RleHRfcXVhbGlmaWVkOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVsZW1lbnRSZXR1cm5UeXBlSHlwZXJsaW5rX2h5cGVybGlua1RleHQ7CglwdWJsaWMgc3RhdGljIFN0cmluZyBKYXZhRWxlbWVudFJldHVyblR5cGVIeXBlcmxpbmtfZXJyb3JfbXNnOwoJcHVibGljIHN0YXRpYyBTdHJpbmcgSmF2YUVsZW1lbnRTdXBlckltcGxlbWVudGF0aW9uSHlwZXJsaW5rX2h5cGVybGlua1RleHQ7CglwdWJsaWMgc3RhdGljIFN0cmluZyBKYXZhRWxlbWVudFN1cGVySW1wbGVtZW50YXRpb25IeXBlcmxpbmtfaHlwZXJsaW5rVGV4dF9xdWFsaWZpZWQ7CQoKCXN0YXRpYyB7CgkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgSmF2YUVkaXRvck1lc3NhZ2VzLmNsYXNzKTsKCX0KCn0=