ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTBjNzAKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTUgQEAKKy5naXQKKy5pZGVhLyoqLyoueG1sCisuc2V0dGluZ3MKKy5jbGFzc3BhdGgKK3RhcmdldAorLy5pZGVhL2NvbXBpbGVyLnhtbAorLy5pZGVhLyoueG1sCisvLmlkZWEvbW9kdWxlcy54bWwKKy8uaWRlYS92Y3MueG1sCisvYmluLworLmltbAorLnByb2plY3QKKy5jbGFzc3BhdGgKKy5pZGVhCisvcG9ydGFsLmltbApkaWZmIC0tZ2l0IGEvTElDRU5TRS5tZCBiL0xJQ0VOU0UubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlY2I3OQotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOU0UubWQKQEAgLTAsMCArMSwxOTggQEAKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMKK0xJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTQorQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKK2EpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CisgICAgaSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCisgICBpaSkgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOworCisgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlCisgICBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tCisgICBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvcgorICAgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlCisgICBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZQorICAgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKyJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworIkxpY2Vuc2VkIFBhdGVudHMiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlCituZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbgorY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBDb250cmlidXRpb25zIGRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC4KKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwKK2luY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisyLiBHUkFOVCBPRiBSSUdIVFMKKyAgYSkgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworICAgICBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bworICAgICByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwKKyAgICAgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kCisgICAgIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCisgIGIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKKyAgICAgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIKKyAgICAgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlCisgICAgIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQKKyAgICAgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlCisgICAgIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkKKyAgICAgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KKyAgICAgdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseQorICAgICB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyCisgICAgIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKyAgYykgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvCisgICAgIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueQorICAgICBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIKKyAgICAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yCisgICAgIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eQorICAgICBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEKKyAgICAgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2gKKyAgICAgUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlcgorICAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eQorICAgICBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQKKyAgICAgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZworICAgICB0aGUgUHJvZ3JhbS4KKyAgZCkgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudAorICAgICBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodAorICAgICBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworMy4gUkVRVUlSRU1FTlRTCisKK0EgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzCitvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKKyAgYSkgaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorICBiKSBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CisgICAgICBpKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCisgICAgICAgICBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mCisgICAgICAgICB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mCisgICAgICAgICBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworICAgICBpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IKKyAgICAgICAgIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZAorICAgICAgICAgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKKyAgICBpaWkpIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkCisgICAgICAgICBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKKyAgICAgaXYpIHN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoCisgICAgICAgICBDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlCisgICAgICAgICBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KKworV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCisgIGEpIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorICBiKSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KKyAgICAgQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluCisgICAgIHRoZSBQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmCithbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZQorb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoCityZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMKK2ludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvCitpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIKK3doaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYKK2EgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2gKK0NvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkKK2V2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMKK2FuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwKK2FjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZQorZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8KK2NvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueQorcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbgorYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0CitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcworcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaAorQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIKK0NvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQKK3JlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUgorSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaAorUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZgorcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzCitvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKK3Byb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWQorQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUCitQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUworR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUKK2xhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUKK3Rlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaAorcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYKKyhleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpCitpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlcgorU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvCitjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMKK25vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2YKK3N1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsCitSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMKK3JlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50CithbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZAorc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4KK29yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcyBjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUKK21vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvCitwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuCitObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuCitUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsIEFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uCittYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZQorc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhCitkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzCitiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzCityZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsCitDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKQordW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpCithYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mCithbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwKK2VzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIKK3RoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMKK0FncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhcgorYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4KK2FueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KZGlmZiAtLWdpdCBhL2FwaS9zd2FnZ2VyL3N3YWdnZXIueWFtbCBiL2FwaS9zd2FnZ2VyL3N3YWdnZXIueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTA2ZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpL3N3YWdnZXIvc3dhZ2dlci55YW1sCkBAIC0wLDAgKzEsMTMgQEAKK3N3YWdnZXI6ICIyLjAiCitpbmZvOgorCXZlcnNpb246ICIxLjAuMCIKKwl0aXRsZTogZUxvZ2Jvb2sgQVBJCitob3N0OiBsb2NhbGhvc3Q6MzAwMAorYmFzZVBhdGg6IC8KK3NjaGVtZXM6CisJLSBodHRwCitjb25zdW1lczoKKwktIGFwcGxpY2F0aW9uL2pzb24KK3Byb2R1Y2VzOgorCS0gYXBwbGljYXRpb24vanNvbgorcGF0aHM6ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZGVwbG95L2NvbmYvY29udGV4dC54bWwgYi9kZXBsb3kvY29uZi9jb250ZXh0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmYxMmVkCi0tLSAvZGV2L251bGwKKysrIGIvZGVwbG95L2NvbmYvY29udGV4dC54bWwKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzwhLS0gVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSB3aWxsIGJlIGxvYWRlZCBmb3IgZWFjaCB3ZWIgYXBwbGljYXRpb24gLS0+CisKKworPCEtLSBqZGJjOm9yYWNsZTp0aGluOkBlbnRid29yYTE6MTUyMTpkYm9ldG5nNCAgLS0+Cis8Q29udGV4dD4KKworICAgIDwhLS0gRGVmYXVsdCBzZXQgb2YgbW9uaXRvcmVkIHJlc291cmNlcyAtLT4KKyAgICA8V2F0Y2hlZFJlc291cmNlPldFQi1JTkYvd2ViLnhtbDwvV2F0Y2hlZFJlc291cmNlPgorCisgICAgPCEtLSBVbmNvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHNlc3Npb24gcGVyc2lzdGVuY2UgYWNyb3NzIFRvbWNhdCByZXN0YXJ0cyAtLT4KKworICAgIDwhLS1NYW5hZ2VyIHBhdGhuYW1lPSIiLz4KKworCisgICAgPFBhcmFtZXRlciBuYW1lPSJlbnZpcm9ubWVudCIgb3ZlcnJpZGU9ImZhbHNlIiB2YWx1ZT0iRGV2ZWxvcG1lbnQiLy0tPgorCisgICAgPFBhcmFtZXRlciBuYW1lPSJPS19QT1JUQUxfRU5WSVJPTk1FTlQiIG92ZXJyaWRlPSJmYWxzZSIgdmFsdWU9IkRldkxvY2FsIi8+CisKKworICAgIDwhLS0gVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIENvbWV0IGNvbm5lY3Rpb24gdGFja2luZyAocHJvdmlkZXMgZXZlbnRzCisgICAgICAgICBvbiBzZXNzaW9uIGV4cGlyYXRpb24gYXMgd2VsbCBhcyB3ZWJhcHAgbGlmZWN5Y2xlKSAtLT4KKyAgICA8IS0tCisgICAgPFZhbHZlIGNsYXNzTmFtZT0ib3JnLmFwYWNoZS5jYXRhbGluYS52YWx2ZXMuQ29tZXRDb25uZWN0aW9uTWFuYWdlclZhbHZlIiAvPgorICAgIC0tPgorCis8L0NvbnRleHQ+CmRpZmYgLS1naXQgYS9kZXBsb3kvZ2V0X3N0YXJ0ZWQudHh0IGIvZGVwbG95L2dldF9zdGFydGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWZmODFmCi0tLSAvZGV2L251bGwKKysrIGIvZGVwbG95L2dldF9zdGFydGVkLnR4dApAQCAtMCwwICsxLDkyIEBACis+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4KK0dFVCBTVEFSVEVECis+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4KKworCistLS0tLS0tLS0tLS0tLS0tIFJFUVVJUkVNRU5UUyAtLS0tLS0tLS0tLS0tCitKYXZhIDEuOAorQXBhY2hlIE1hdmVuIDMuNS4wCisKK0lGIHlvdSBoYXZlIHRoaXMgdmVyc2lvbnMsIGNoZWNrIGlmIHlvdSBoYXZlIHNldCBKQVZBX0hPTUUgYW5kIE0yX0hPTUUuCisgICAgLSBJZiB5ZXMgaWdub3JlIHN0ZXAgMSBhbmQgMgorICAgIC0gSWYgbm8gZm9sbG93IHRoZSBjb3JyZXNwb25kaW5nIHN0ZXBzIGJlbG93CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbnN0YWxsIGphdmEgOAorCistIE9wZW4gYSBjbWQgYW5kIGNoZWNrIHlvdXIgamF2YSB2ZXJzaW9uCisgICAgJCBqYXZhIC12ZXJzaW9uCistIElmIHlvdSBkb250IGhhdmUgamF2YSB2ZXJzaW9uIDEuOCB0aGVuIGRvd25sb2FkIGFuZCBpbnN0YWxsIGl0IGZyb206CisgICAgICAgIGh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9qYXZhL2phdmFzZS9kb3dubG9hZHMvamRrOC1kb3dubG9hZHMtMjEzMzE1MS5odG1sCistIFNldCBKQVZBX0hPTUUgKFdpbmRvd3MgT1MpOgorICAgIFJpZ2h0IGNsaWNrIG9uIFRoaXMgQ29tcHV0ZXIgYW5kIHNlbGVjdCBQcm9wZXJ0aWVzLgorICAgIE9uIHRoZSBBZHZhbmNlZCB0YWIsIHNlbGVjdCBFbnZpcm9ubWVudCBWYXJpYWJsZXMsIGFuZCB0aGVuIGVkaXQgSkFWQV9IT01FIHRvIHBvaW50IHRvIHdoZXJlIHRoZSBKREsgc29mdHdhcmUgaXMgbG9jYXRlZCwgZm9yIGV4YW1wbGUsIEM6XFByb2dyYW0gRmlsZXNcSmF2YVxqZGsxLjgueHh4LgorICAgIEFsc28sIGVkaXQgVGhlIFBhdGggdmFyaWFibGUgaW4gU3lzdGVtIHZhcmlhYmxlcyBhbmQgYWRkIHRoZSBiaW4gcGF0aCAoQzpcUHJvZ3JhbSBGaWxlc1xKYXZhXGpkazEuOC54eHhcYmluKQorLSBSZXN0YXJ0IHlvdXIgUEMKKy0gQ29uZmlybSBieSBjaGVja2luZyB0aGUgdmVyc2lvbgorICAgICQgamF2YSAtdmVyc2lvbgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tIDIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbnN0YWxsIEFwYWNoZSBNYXZlbiB0byB5b3VyIHBjCisKK01hdmVuIGlzIGEgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIGZvciBidWlsZGluZyBhbmQgbWFuYWdpbmcgYW55IEphdmEtYmFzZWQgcHJvamVjdC4KKworLSBEb3dubG9hZCBtYXZlbiAzLjUuMCBmcm9tCisgICAgICAgIGh0dHBzOi8vcmVwby5tYXZlbi5hcGFjaGUub3JnL21hdmVuMi9vcmcvYXBhY2hlL21hdmVuL2FwYWNoZS1tYXZlbi8zLjUuMC8KKy0gRXh0cmFjdCB0aGUgZm9sZGVyIGFuZCBwbGFjZSBpdCBvbiB5b3VyIEMgZHJpdmUKKy0gU2V0IE0yX0hPTUUgKFdpbmRvd3MgT1MpOgorICAgIC0gUmlnaHQgY2xpY2sgb24gVGhpcyBDb21wdXRlciBhbmQgc2VsZWN0IFByb3BlcnRpZXMuCisgICAgLSBPbiB0aGUgQWR2YW5jZWQgdGFiLCBzZWxlY3QgRW52aXJvbm1lbnQgVmFyaWFibGVzLCBhbmQgdGhlbiBjcmVhdGUgTTJfSE9NRSB0byBwb2ludCB0byB3aGVyZSB0aGUgTWF2ZW4gc29mdHdhcmUgaXMgbG9jYXRlZCwgZm9yIGV4YW1wbGUsIEM6XGFwYWNoZS1tYXZlbi0zLjUuMC4KKyAgICAtIEFsc28gZWRpdCBUaGUgUGF0aCB2YXJpYWJsZSBpbiBTeXN0ZW0gdmFyaWFibGVzIGFuZCBhZGQgdGhlIGJpbiBwYXRoIChDOlxhcGFjaGUtbWF2ZW4tMy41LjBcYmluKQorLSBSZXN0YXJ0IHlvdXIgUEMKKy0gQ29uZmlybSB3aXRoCisgICAgJCBtdm4gLXYKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0gMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGdldCBzdGFydGVkIHdpdGggdGhlIHByb2plY3QgeW91IGhhdmUgdG8gY2xvbmUgYWxsIGZvdXIoZWxvZ2Jvb2sgYW5kIHBvcnRhbCBiYWNrZW5kLWZyb250ZW5kICkgcHJvamVjdHMuCisKKy0gQ3JlYXRlIGEgZm9sZGVyIGFuZCBkbyBmb2xsb3dpbmcgZm9yIGVhY2ggb2YgdGhlbQorLSBPcGVuIGEgY21kIGFuZCBuYXZpZ2F0ZSB0byB0aGUgZm9sZGVyCistIFVzZSB0aGUgY29tbWFuZCB0byBjcmVhdGUgYSBjbG9uZSBvZiBlYWNoIHByb2plY3QKKyAgICDCpyBnaXQgY2xvbmUgPHByb2plY3RfdXJsPgorLSBJZiB5b3UgYXJlIGdvaW5nIHRvIGRldmVsb3AsIGltcG9ydGFudCBpcyBhIHN3aXRjaCB0byB0aGUgZGV2ZWxvcCBicmFuY2gKKyAgICAtIG5hdmlnYXRlIGluIHRoZSBmb2xkZXIgd2l0aCB0aGUgY2xvbmUgYW5kIHN3aXRjaCB0byBkZXZlbG9wIGJyYW5jaAorICAgICAgICAkIGdpdCBjaGVja291dCA8YnJhbmNoPgorLSBBdCB0aGUgZW5kIGp1c3QgcHVsbCB0aGUgYWN0dWFsIHZlcnNpb24gb2YgdGhlIGNvZGUKKyAgICAkIGdpdCBwdWxsIG9yaWdpbiA8YnJhbmNoPgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBY3RpdmUgRGV2ZWxvcCBCcmFuY2hlczogfAorQmFja2VuZCAtPiBERVZFTE9QX0JFICAgIHwKK0Zyb250ZW5kIC0+IERFVkVMT1BfRkUgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorU3RhYmxlIEJyYW5jaGVzOiBtYXN0ZXIgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0gNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0J1aWxkIHRoZSBtYXZlbiBwcm9qZWN0CisKK0J1aWxkaW5nIHRoZSBtYXZlbiBwcm9qZWN0LCB3aWxsIHByb2R1Y2UgYSA8cHJvamVjdF9uYW1lPi53YXIgZmlsZShXZWIgQXBwbGljYXRpb24gQXJjaGl2ZSksIHdoaWNoIGlzIG5lZWRlZCB0byBydW4gdGhlIHByb2plY3QuCistIE9wZW4gYSBjb21tYW5kIGxpbmUgYW5kIG5hdmlnYXRlIHRvIHRoZSByb290IGZvbGRlciBvZiB0aGUgYmFja2VuZCBwcm9qZWN0CistIFVzZSB0aGUgZm9sbG93aW5nIGNhbGwgdG8gY2xlYW5seSBidWlsZCBhbmQgaW5zdGFsbCBhcnRpZmFjdHMgaW50byB0aGUgbG9jYWwgcmVwb3NpdG9yeToKKyAgICAkIG12biBjbGVhbiBpbnN0YWxsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tIDUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitPcGVuIGFuZCBmYW1pbGlhcml6ZSB5b3Vyc2VsZiB3aXRoIHRoZSBwcm9qZWN0CisKKy0gSWYgeW91IHN1Y2Nlc3NmdWxseSBidWlsZCB0aGUgbWF2ZW4gcHJvamVjdCB5b3UgY2FuIGZpbmQgaW4gL3RhcmdldC9nZW5lcmF0ZWQtZG9jcyBhbGwgdGhlIGRvY3VtZW50YXRpb25zIG9mIHRoaXMgcHJvamVjdHMKKyAgICAtIGF1dGhfbl9hdXRoX2hvd3RvQnVpbGQgLT4gaGVyZSB5b3UgY2FuIHJlYWQgaG93IHRvIGJ1aWxkIHRoZSB3aG9sZSAoYmFja2VuZCBhbmQgZnJvbnRlbmQpIHByb2plY3QKKyAgICAtIGF1dGhfbl9hdXRoX2hvd3RvUnVuIC0+IGhlcmUgeW91IGNhbiByZWFkIGhvdyB0byBydW4gdGhlIEFwcGxpY2F0aW9uCisgICAgLSBhdXRoX25fYXV0aF9hcmNoaXRlY3R1cmVEb2N1bWVudGF0aW9uIC0+IGhlcmUgeW91IGNhbiByZWFkIGFib3V0IHRoZSBhcmNoaXRlY3R1cmUgZG9jdW1ldGF0aW9uIHRoaXMgbW9kdWxlCisgICAgLSBhdXRoX25fYXV0aF9pbnRlcmZhY2VEb2N1bWVudGF0aW9uIC0+IGhlcmUgeW91IGNhbiByZWFkIGFib3V0IHRoZSBiYWNrZW5kIFJFU1QgU2VydmljZXMgd2hpY2ggYXJlIHVzZWQKKworLSBPdGhlciB1c2VmdWwgZmlsZXM6CisgICAgLSAvdGFyZ2V0L3NpdGUvamFjb2NvL2luZGV4Lmh0bWwgLT4gamFjb2NvIGNvZGUgY292ZXJhZ2UgcmV2aWV3CisgICAgLSAvdGFyZ2V0L3N1cmVmaXJlLXJlcG9ydHMgLT4gdGVzdCByZXBvcnRzCisKKyEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorTkVYVCBTVEVQIC0+IFJFQUQgVEhFIGF1dGhfbl9hdXRoX2hvd3RvQnVpbGQgRklMRSAhCishISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kZXBsb3kvbGliL3Bvc3RncmVzcWwtNDIuMC4wLmphciBiL2RlcGxveS9saWIvcG9zdGdyZXNxbC00Mi4wLjAuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTUwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kZXBsb3kvbGliL3Bvc3RncmVzcWwtNDIuMC4wLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvYnVpbGQudHh0IGIvZG9jL2J1aWxkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzdlOGEzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2J1aWxkLnR4dApAQCAtMCwwICsxLDIzIEBACis+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PgorQmFja2VuZDoKKz4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+CisKK1ZvcmF1c3NldHp1bmdlbjoKKy0tLS0tLS0tLS0tLS0tLS0KK0phdmEgMS44IEpESworTWF2ZW4KKworQmF1ZW46CistLS0tLS0KK0ltIFJvb3RwYXRoIGRlcyBCYWNrZW5kLVByb2pla3RlczoKKz5tdm4gY2xlYW4gaW5zdGFsbAorCisoRXJ6ZXVndCBpbiBUYXJnZXQgZGFzIFdBUiwgZGllIHN1cmVmaXJlLXJlcG9ydHMgdW5kIGRhcyBqYWNvY28uZXhlYyBm/HIgZGllIENvZGVjb3ZlcmFnZS1BbmFseXNlKQorSW0gU29uYXJxdWJlIHNjaGxpZd9lbiB3aXIgZm9sZ2VuZGUgRmlsZXMgdm9uIGRlciBDb2RlQ292ZXJhZ2VBbmFseXNlIGF1czoKKworCisqKi9kZS9wdGEvb3BlbmtvbnNlcXVlbnovYmV0cmllYnN0YWdlYnVjaC9jb21tb24vR2xvYmFscy5qYXZhCisqKi9yZXN0LyouamF2YQorKiovTG9nZ2VyVXRpbC5qYXZhCisqKi9kYW8vKi5qYXZhCisqKi9kYW8vaW50ZXJmYWNlcy8qLmphdmEKZGlmZiAtLWdpdCBhL2RvYy9kb2NfZUxvZ2Jvb2tfUmVzdC5kb2N4IGIvZG9jL2RvY19lTG9nYm9va19SZXN0LmRvY3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyMDFjOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9kb2NfZUxvZ2Jvb2tfUmVzdC5kb2N4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvbS54bWwgYi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMjdmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9wb20ueG1sCkBAIC0wLDAgKzEsMjk4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8Z3JvdXBJZD5vcGVuay5wdGEuZGU8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+cG9ydGFsPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjEuMS4yPC92ZXJzaW9uPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8cHJvcGVydGllcz4KKyAgICAgICAgPHNraXAuYXNjaWlkb2M+ZmFsc2U8L3NraXAuYXNjaWlkb2M+CisgICAgICAgIDxodHRwY2xpZW50LnZlcnNpb24+NC41LjEzPC9odHRwY2xpZW50LnZlcnNpb24+CisgICAgICAgIDxnc29uLnZlcnNpb24+Mi44LjA8L2dzb24udmVyc2lvbj4KKyAgICAgICAgPGxvZzRqLnZlcnNpb24+MS4yLjE3PC9sb2c0ai52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy1pby52ZXJzaW9uPjIuNTwvY29tbW9ucy1pby52ZXJzaW9uPgorICAgICAgICA8anVuaXQudmVyc2lvbj40LjEyPC9qdW5pdC52ZXJzaW9uPgorICAgICAgICA8ZWFzeW1vY2sudmVyc2lvbj4zLjQ8L2Vhc3ltb2NrLnZlcnNpb24+CisgICAgICAgIDxwb3dlcm1vY2stYXBpLWVhc3ltb2NrLnZlcnNpb24+Mi4wLjk8L3Bvd2VybW9jay1hcGktZWFzeW1vY2sudmVyc2lvbj4KKyAgICAgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+CisgICAgICAgIDxzZXJ2bGV0LWFwaT4yLjU8L3NlcnZsZXQtYXBpPgorICAgICAgICA8bWF2ZW4udGVzdC5za2lwPmZhbHNlPC9tYXZlbi50ZXN0LnNraXA+CisgICAgICAgIDxqYWNvY28tbWF2ZW4tcGx1Z2luLnZlcnNpb24+MC44LjY8L2phY29jby1tYXZlbi1wbHVnaW4udmVyc2lvbj4KKyAgICAgICAgPHNvbmFyLW1hdmVuLXBsdWdpbi52ZXJzaW9uPjMuMC4yPC9zb25hci1tYXZlbi1wbHVnaW4udmVyc2lvbj4KKyAgICAgICAgPGRlcGVuZGVuY3ktY2hlY2stbWF2ZW4udmVyc2lvbj42LjEuNTwvZGVwZW5kZW5jeS1jaGVjay1tYXZlbi52ZXJzaW9uPgorICAgICAgICA8a2V5Y2xvYWsudmVyc2lvbj4xMi4wLjQ8L2tleWNsb2FrLnZlcnNpb24+CisgICAgPC9wcm9wZXJ0aWVzPgorCisgICAgPHByb2ZpbGVzPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5sb2NhbC1mYXN0LWJ1aWxkPC9pZD4KKyAgICAgICAgICAgIDxwcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgIDxza2lwLmFzY2lpZG9jPnRydWU8L3NraXAuYXNjaWlkb2M+CisgICAgICAgICAgICAgICAgPG1hdmVuLnRlc3Quc2tpcD5mYWxzZTwvbWF2ZW4udGVzdC5za2lwPgorICAgICAgICAgICAgPC9wcm9wZXJ0aWVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPnNlY3VyaXR5Y2hlY2s8L2lkPgorICAgICAgICAgICAgPGJ1aWxkPgorICAgICAgICAgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm93YXNwPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZGVwZW5kZW5jeS1jaGVjay1tYXZlbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7ZGVwZW5kZW5jeS1jaGVjay1tYXZlbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwUHJvdmlkZWRTY29wZT50cnVlPC9za2lwUHJvdmlkZWRTY29wZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcFJ1bnRpbWVTY29wZT50cnVlPC9za2lwUnVudGltZVNjb3BlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmYWlsQnVpbGRPbkNWU1M+NzwvZmFpbEJ1aWxkT25DVlNTPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc3NlbWJseUFuYWx5emVyRW5hYmxlZD5mYWxzZTwvYXNzZW1ibHlBbmFseXplckVuYWJsZWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1cHByZXNzaW9uRmlsZXM+JHtiYXNlZGlyfS9zZWN1cml0eWNoZWNrL3N1cHByZXNzZWQueG1sPC9zdXBwcmVzc2lvbkZpbGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Y2hlY2s8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgICAgIDwvYnVpbGQ+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3dhc3A8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5kZXBlbmRlbmN5LWNoZWNrLW1hdmVuPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtkZXBlbmRlbmN5LWNoZWNrLW1hdmVuLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPHR5cGU+bWF2ZW4tcGx1Z2luPC90eXBlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5odHRwY29tcG9uZW50czwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0dHBjbGllbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke2h0dHBjbGllbnQudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLmplcnNleS5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4cnMtcmk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjIyLjE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXZheC5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8dmVyc2lvbj4zLjAuMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8IS0tPGRlcGVuZGVuY3k+CisgICAgICAgICAgPGdyb3VwSWQ+Y29tLmF1dGgwPC9ncm91cElkPgorICAgICAgICAgIDxhcnRpZmFjdElkPmphdmEtand0PC9hcnRpZmFjdElkPgorICAgICAgICAgIDx2ZXJzaW9uPjMuMTUuMDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5Pi0tPgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5jb2RlLmdzb248L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nc29uPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtnc29uLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+bG9nNGo8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5sb2c0ajwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7bG9nNGoudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uc3VuLmpteDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+am14cmk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisKKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uc3VuLmpkbWs8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpteHRvb2xzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorCisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguam1zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qbXM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWlvPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1pbzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y29tbW9ucy1pby52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke2p1bml0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVhc3ltb2NrPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZWFzeW1vY2s8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke2Vhc3ltb2NrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnBvd2VybW9jazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnBvd2VybW9jay1tb2R1bGUtanVuaXQ0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwb3dlcm1vY2stYXBpLWVhc3ltb2NrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnBvd2VybW9jazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnBvd2VybW9jay1hcGktZWFzeW1vY2s8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3Bvd2VybW9jay1hcGktZWFzeW1vY2sudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuamFjb2NvPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amFjb2NvLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7amFjb2NvLW1hdmVuLXBsdWdpbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8ZmluYWxOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvZmluYWxOYW1lPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+MS44PC9zb3VyY2U+CisgICAgICAgICAgICAgICAgICAgIDx0YXJnZXQ+MS44PC90YXJnZXQ+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisKKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+My4wLjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxhcmNoaXZlPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1hbmlmZXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGREZWZhdWx0SW1wbGVtZW50YXRpb25FbnRyaWVzPnRydWU8L2FkZERlZmF1bHRJbXBsZW1lbnRhdGlvbkVudHJpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZERlZmF1bHRTcGVjaWZpY2F0aW9uRW50cmllcz50cnVlPC9hZGREZWZhdWx0U3BlY2lmaWNhdGlvbkVudHJpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L21hbmlmZXN0PgorICAgICAgICAgICAgICAgICAgICA8L2FyY2hpdmU+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisKKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4td2FyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjMuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGFyY2hpdmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZERlZmF1bHRJbXBsZW1lbnRhdGlvbkVudHJpZXM+dHJ1ZTwvYWRkRGVmYXVsdEltcGxlbWVudGF0aW9uRW50cmllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRkRGVmYXVsdFNwZWNpZmljYXRpb25FbnRyaWVzPnRydWU8L2FkZERlZmF1bHRTcGVjaWZpY2F0aW9uRW50cmllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbWFuaWZlc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvYXJjaGl2ZT4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcHJvamVjdC1pbmZvLXJlcG9ydHMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNzwvdmVyc2lvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNvbmFyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NvbmFyLW1hdmVuLXBsdWdpbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5qYWNvY288L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amFjb2NvLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2phY29jby1tYXZlbi1wbHVnaW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxza2lwPiR7bWF2ZW4udGVzdC5za2lwfTwvc2tpcD4KKyAgICAgICAgICAgICAgICAgICAgPG91dHB1dD5maWxlPC9vdXRwdXQ+CisgICAgICAgICAgICAgICAgICAgIDxhcHBlbmQ+dHJ1ZTwvYXBwZW5kPgorICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9HbG9iYWxzLio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9kYW8vKiovKkRhbyouamF2YTwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL2NvbnRyb2xsZXIvQmFja2VuZENvbnRyb2xsZXIuamF2YTwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+amFjb2NvLWluaXRpYWxpemU8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnByZXBhcmUtYWdlbnQ8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5qYWNvY28tc2l0ZTwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dmVyaWZ5PC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5yZXBvcnQ8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXNjaWlkb2N0b3I8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXNjaWlkb2N0b3ItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuNS4zPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFzY2lpZG9jdG9yPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXNjaWlkb2N0b3JqLXBkZjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuNS4wLWFscGhhLjExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpydWJ5PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+anJ1YnktY29tcGxldGU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjcuMjE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXNjaWlkb2N0b3I8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hc2NpaWRvY3Rvcmo8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjUuNDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hc2NpaWRvY3RvcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFzY2lpZG9jdG9yai1kaWFncmFtPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS41LjQuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c291cmNlRGlyZWN0b3J5PnNyYy9tYWluL2FzY2lpZG9jPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgIDxyZXF1aXJlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyZXF1aXJlPmFzY2lpZG9jdG9yLWRpYWdyYW08L3JlcXVpcmU+CisgICAgICAgICAgICAgICAgICAgIDwvcmVxdWlyZXM+CisgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGltYWdlc291dGRpcj4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9nZW5lcmF0ZWQtZG9jcy9pbWFnZXM8L2ltYWdlc291dGRpcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbWFnZXNEaXI+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vZ2VuZXJhdGVkLWRvY3MvaW1hZ2VzPC9pbWFnZXNEaXI+CisgICAgICAgICAgICAgICAgICAgIDwvYXR0cmlidXRlcz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+b3V0cHV0LWh0bWw8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cHJvY2Vzcy1hc2NpaWRvYzwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD4ke3NraXAuYXNjaWlkb2N9PC9za2lwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWFnZXNEaXI+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vZ2VuZXJhdGVkLWRvY3MvaW1hZ2VzPC9pbWFnZXNEaXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcXVpcmVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVxdWlyZT5hc2NpaWRvY3Rvci1kaWFncmFtPC9yZXF1aXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVxdWlyZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZUhpZ2hsaWdodGVyPmNvZGVyYXk8L3NvdXJjZUhpZ2hsaWdodGVyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiYWNrZW5kPmh0bWw8L2JhY2tlbmQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRvY3R5cGU+Ym9vazwvZG9jdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1hZ2VzRGlyPi4vaW1hZ2VzPC9pbWFnZXNEaXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5Y2hlY2svc3VwcHJlc3NlZC54bWwgYi9zZWN1cml0eWNoZWNrL3N1cHByZXNzZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGMwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eWNoZWNrL3N1cHByZXNzZWQueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c3VwcHJlc3Npb25zIHhtbG5zPSJodHRwczovL2plcmVteWxvbmcuZ2l0aHViLmlvL0RlcGVuZGVuY3lDaGVjay9kZXBlbmRlbmN5LXN1cHByZXNzaW9uLjEuMy54c2QiPgorCisgICAgPCEtLSBsb2c0aiB3aXJkIGJlaSB1bnMgbnVyIGxva2FsIGdlbnV0enQgb2huZSBOZXR6d2Vya2tvbW11bmlrYXRpb24uIC0tPgorICAgIDxzdXBwcmVzcz4KKyAgICAgICAgPG5vdGVzPjwhW0NEQVRBWworICAgICAgZmlsZSBuYW1lOiBsb2c0ai0xLjIuMTYuamFyCisgICAgICBdXT48L25vdGVzPgorICAgICAgICA8cGFja2FnZVVybCByZWdleD0idHJ1ZSI+XnBrZzptYXZlbi9sb2c0ai9sb2c0akAuKiQ8L3BhY2thZ2VVcmw+CisgICAgICAgIDx2dWxuZXJhYmlsaXR5TmFtZT5DVkUtMjAxOS0xNzU3MTwvdnVsbmVyYWJpbGl0eU5hbWU+CisgICAgPC9zdXBwcmVzcz4KKworICAgIDwhLS0gbG9nNGogd2lyZCBiZWkgdW5zIG51ciBsb2thbCBnZW51dHp0IG9obmUgTmV0endlcmtrb21tdW5pa2F0aW9uLiAtLT4KKyAgICA8c3VwcHJlc3M+CisgICAgICAgIDxub3Rlcz48IVtDREFUQVsKKyAgIGZpbGUgbmFtZTogbG9nNGotMS4yLjE2LmphcgorICAgXV0+PC9ub3Rlcz4KKyAgICAgICAgPHBhY2thZ2VVcmwgcmVnZXg9InRydWUiPl5wa2c6bWF2ZW4vbG9nNGovbG9nNGpALiokPC9wYWNrYWdlVXJsPgorICAgICAgICA8dnVsbmVyYWJpbGl0eU5hbWU+Q1ZFLTIwMjAtOTQ4ODwvdnVsbmVyYWJpbGl0eU5hbWU+CisgICAgPC9zdXBwcmVzcz4KKzwvc3VwcHJlc3Npb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2FyY2hpdGVjdHVyZURvY3VtZW50YXRpb24vYXV0aF9uX2F1dGhfYXJjaGl0ZWN0dXJlRG9jdW1lbnRhdGlvbi5hZG9jIGIvc3JjL21haW4vYXNjaWlkb2MvYXJjaGl0ZWN0dXJlRG9jdW1lbnRhdGlvbi9hdXRoX25fYXV0aF9hcmNoaXRlY3R1cmVEb2N1bWVudGF0aW9uLmFkb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4MTgxMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2FyY2hpdGVjdHVyZURvY3VtZW50YXRpb24vYXV0aF9uX2F1dGhfYXJjaGl0ZWN0dXJlRG9jdW1lbnRhdGlvbi5hZG9jCkBAIC0wLDAgKzEsOTU4IEBACivvu78vLy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLy8vCitvcGVuS29uc2VxdWVueiAtIEFyY2hpdGVjdHVyZSBvZiB0aGUgbW9kdWxlICJwb3J0YWxAb3BlbksiCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6QXV0aG9yOiBGcmFuayBEaWV0cmljaAorOkVtYWlsOiBmcmFuay5kaWV0cmljaEBwdGEuZGUKKzpEYXRlOiAyMDE3LTA5LTE4Cis6UmV2aXNpb246IDEKKzppY29uczoKKzpzb3VyY2UtaGlnaGxpZ2h0ZXI6IGhpZ2hsaWdodGpzCis6aGlnaGxpZ2h0anMtdGhlbWU6IHNvbGFyaXplZF9kYXJrCisKK1RoaXMgZG9jdW1lbnRhdGlvbiBiYXNlcyBvbiBBUkM0Mi1UZW1wbGF0ZSAodjcuMCk6CisKKypBYm91dCBhcmM0MioKKworYXJjNDIsIHRoZSBUZW1wbGF0ZSBmb3IgZG9jdW1lbnRhdGlvbiBvZiBzb2Z0d2FyZSBhbmQgc3lzdGVtIGFyY2hpdGVjdHVyZS4KKworQnkgRHIuIEdlcm5vdCBTdGFya2UsIERyLiBQZXRlciBIcnVzY2hrYSBhbmQgY29udHJpYnV0b3JzLgorCitUZW1wbGF0ZSBSZXZpc2lvbjogNy4wIEVOIChiYXNlZCBvbiBhc2NpaWRvYyksIEphbnVhcnkgMjAxNworCivCqSBXZSBhY2tub3dsZWRnZSB0aGF0IHRoaXMgZG9jdW1lbnQgdXNlcyBtYXRlcmlhbCBmcm9tIHRoZSBhcmMgNDIgYXJjaGl0ZWN0dXJlIHRlbXBsYXRlLCBodHRwOi8vd3d3LmFyYzQyLmRlLgorQ3JlYXRlZCBieSBEci4gUGV0ZXIgSHJ1c2Noa2EgJiBEci4gR2Vybm90IFN0YXJrZS4KKworPDw8CisKKz09IEludHJvZHVjdGlvbiBhbmQgR29hbHMKKworPT09IFJlcXVpcmVtZW50cyBPdmVydmlldworCisgICBbLi4uXQorCisKKz09PSBRdWFsaXR5IEdvYWxzCisKKyAgIFsuLi5dCisKKz09PSBTdGFrZWhvbGRlcnMKKworLlN0YWtlaG9sZGVycworW29wdGlvbnM9ImhlYWRlcixmb290ZXIiXQorfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfFJvbGUvTmFtZXxDb250YWN0fEV4cGVjdGF0aW9ucworfFByb2R1Y3QgT3duZXIgKHJlcHJlc2VudHMgdGhlIERpc3RyaWJ1dGlvbiBTeXN0ZW0gT3BlcmF0b3JzKXxHb3Jkb24gUGlja2ZvcmQsIE9saXZlciBUYW50dXxUaGUgc29mdHdhcmUgbXVzdCBmdWxmaWwgdGhlaXIgZnVuY3Rpb25hbCBhbmQgbm9uZnVuY3Rpb25hbCBSZXF1aXJlbWVudHMuCit8TW9kdWxlIERldmVsb3BlcnxNaWNoZWwgQWxsZXNzYW5kcmluaSwgSm9uYXMgVGV3b2xkZSwgRnJhbmsgRGlldHJpY2h8QWxsIHJlbGV2YW50IGJ1c2luZXNzIGFuZCB0ZWNobmljYWwgaW5mb3JtYXRpb24gbXVzdCBiZSBhdmFpbGFibGUgZm9yIGltcGxlbWVudGluZyB0aGUgc29mdHdhcmUuCit8RXh0ZXJuYWwgUmV2aWV3ZXIgKHJlcHJlc2VudHMgdGhlIEFDL1FDKXxNYXJ0aW4gSnVuZywgQW5qYSBCZXJzY2huZWlkZXJ8VGhlIHNvZnR3YXJlIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiBpcyByZWFsaXplZCBhY2NvcmRpbmcgdGhlIFF1YWxpdHkgYW5kIEFyY2hpdGVjdHVyZSBIYW5kYm9vayBvZiBvcGVuS09OU0VRVUVOWi4KK3xTeXN0ZW0gSW50ZWdyYXRvcnx8QSBkb2N1bWVudGF0aW9uIGZvciB0aGUgaW50ZWdyYXRpb24gb2YgdGhlIG1vZHVsZSBpbiB0aGUgRFNPIHNwZWNpZmljIGVudmlyb25tZW50cyBtdXN0IGJlIGF2YWlsYWJsZS4KK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworPT0gQXJjaGl0ZWN0dXJlIENvbnN0cmFpbnRzCisKK1RoZSBtYWluIGFyY2hpdGVjdHVyZSBjb25zdHJhaW50cyBhcmU6CisKKyAgIFsuLi5dCisKKz09PSBUZWNobmljYWwgQ29uc3RyYWludHMKKworVGhlIGZvbGxvd2luZyB0ZWNobmljYWwgY29uc3RyYWludHMgYXJlIGdpdmVuOgorCisuVGVjaG5pY2FsIENvbnRyYWludHMKK1tvcHRpb25zPSJoZWFkZXIsZm9vdGVyIl0KK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfENvbXBvbmVudHxDb25zdHJhaW50cworfEJhc2lzIGNvbXBvbmVudHMgb2YgdGhlIHJlZmVyZW5jZSBwbGF0Zm9ybXwKKy0gQXBwbGljYXRpb24gU2VydmVyIFRvbWNhdAorLSBKUEEgRWNsaXBzZUxpbmsKKy0gRGF0YWJhc2UgUG9zdGdyZVNRTAorCit8RW50ZXJwcmlzZSBTZXJ2aWNlIEJ1c3wKKyogRVNCIFRhbGVuZAorKiBDb21tdW5pY2F0aW9uIHZpYSBSRVNUZnVsIFdlYnNlcnZpY2VzCisKK3xQcm9ncmFtbWluZyBMYW5ndWFnZSBGcm9udGVuZAorYXwqIEFuZ3VsYXIKKyogQm9vdHN0cmFwCisqIGpRdWVyeQorKiBSRVNUL0pTT04gSW50ZXJmYWNlcworCit8R1VJIGRlc2lnbgorYXwqIEFjY29yZGluZyB0byBvSy1HVUktU3R5bGVndWlkZQorCit8SmF2YSBRQSBlbnZpcm9ubWVudHxTb25hcnF1YmUgNS42LjYKKworfFByb2dyYW1taW5nIExhbmd1YWdlCithfCogQmFja2VuZDogSmF2YSAxLjgKKyogRnJvbnRlbmQ6IEFuZ3VsYXIgNC4wLjAgKEphdmFzY3JpcHQsIFR5cGVzY3JpcHQsIEhUTUw1LCBDU1MzKQorCit8SURFCithfCogTm90IHJlc3RyaWN0ZWQgKEVjbGlwc2UsIEludGVsbGlKLCBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbywgTWljcm9zb2Z0IFZpc3VhbCBDb2RlIC4uLikKKworfEJ1aWxkIHN5c3RlbQorYXwqIEJhY2tlbmQ6IE1hdmVuCisqIEZyb250ZW5kOiBOb2RlSlMgKyBBbmd1bGFyL2NsaQorCit8TGlicmFyaWVzLCBGcmFtZXdvcmtzLENvbXBvbmVudHMKK2F8KiBVc2VkIExpYnJhcmllcy9GcmFtZXdvcmtzIGhhdmUgdG8gYmUgY29tcGF0aWJsZSB0byB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZQorfEFyY2hpdGVjdHVyZSBEb2N1bWVudGF0aW9ufCogQWNjb3JkaW5nIEFSQzQyLVRlbXBsYXRlCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCis9PT0gVGVjaG5pY2FsIERlcGVuZGVuY2llcworCitUaGUgZm9sbG93aW5nIGxpYnJhcmllcyBhcmUgdXNlZDoKKworLkxpYnJhcmllcworW29wdGlvbnM9ImhlYWRlcixmb290ZXIiXQorfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfE5hbWUgb2YgdGhlIGxpYnJhcnl8VmVyc2lvbnxBcnRlZmFjdC1pZHxVc2FnZXxMaWNlbnNlfFRpZXIKK3xvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnR8NC41LjMKK2F8Citbc291cmNlLHhtbF0KKy0tLS0KKzxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPm9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+aHR0cGNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj40LjUuMzwvdmVyc2lvbj4KKzwvZGVwZW5kZW5jeT4KKy0tLS0KK3xCYWNrZW5kLCBIdHRwLUNsaWVudHxBcGFjaGUgMi4wfEJhY2tlbmQKKworfG9yZy5qc29uLmpzb258MjAxNjA4MTAKKworYXwKK1tzb3VyY2UseG1sXQorLS0tLQorPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+b3JnLmpzb248L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+anNvbjwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4yMDE2MDgxMDwvdmVyc2lvbj4KKzwvZGVwZW5kZW5jeT4KKy0tLS0KK3xCYWNrZW5kIC0gSnNvbiBmdW5jdGlvbmFsaXR5fEpzb258QmFja2VuZAorCit8b3JnLmpib3NzLnJlc3RlYXN5LnJlc3RlYXN5LWpheHJzfDMuMC4yMV9GaW5hbAorYXwKK1tzb3VyY2UseG1sXQorLS0tLQorPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+b3JnLmpib3NzLnJlc3RlYXN5PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPnJlc3RlYXN5LWpheHJzPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjMuMC4yMS5GaW5hbDwvdmVyc2lvbj4KKzwvZGVwZW5kZW5jeT4KKy0tLS0KK3xCYWNrZW5kIC0gUmVzdFNlcnZlcnxBcGFjaGUgMi4wIC8gQ0MwLjEuMC8gUHVibGljfEJhY2tlbmQKKworfG9yZy5qYm9zcy5yZXN0ZWFzeS5qYXhycy1hcGl8My4wLjEyLkZpbmFsCithfAorW3NvdXJjZSx4bWxdCistLS0tCis8ZGVwZW5kZW5jeT4KKyAgICA8Z3JvdXBJZD5vcmcuamJvc3MucmVzdGVhc3k8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amF4cnMtYXBpPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjMuMC4xMi5GaW5hbDwvdmVyc2lvbj4KKzwvZGVwZW5kZW5jeT4KKy0tLS0KK3xSZXN0LVNlcnZlcnxBcGFjaGUgMi4wfEJhY2tlbmQKKworfGphdmF4LnNlcnZsZXQuc2VydmxldC1hcGl8My4wLjEKK2F8Citbc291cmNlLHhtbF0KKy0tLS0KKzxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+My4wLjE8L3ZlcnNpb24+Cis8L2RlcGVuZGVuY3k+CistLS0tCit8QmFja2VuZCAtIExvZ2dpbmcgU2VydmxldCB8Q0RETCBHTFAgMi4wfEJhY2tlbmQKKworfGNvbS5nb29nbGUuY29kZS5nc29uLmdzb258Mi44LjAKK2F8Citbc291cmNlLHhtbF0KKy0tLS0KKzxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmNvbS5nb29nbGUuY29kZS5nc29uPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmdzb248L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+Mi44LjA8L3ZlcnNpb24+Cis8L2RlcGVuZGVuY3k+CistLS0tCit8QmFja2VuZCBKc29uIGRlLXNlcmlhbGl6YXRpb258QXBhY2hlIDIuMHxCYWNrZW5kCisKK3xsb2c0ai5sb2c0anwxLjIuMTcKK2F8Citbc291cmNlLHhtbF0KKy0tLS0KKzxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmxvZzRqPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmxvZzRqPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjEuMi4xNzwvdmVyc2lvbj4KKzwvZGVwZW5kZW5jeT4KKy0tLS0KK3xCYWNrZW5kIGxvZ2dpbmd8QXBhY2hlIDIuMHxCYWNrZW5kCisKK3xjb21tb25zLWlvfDIuNQorYXwKK1tzb3VyY2UseG1sXQorLS0tLQorPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+Y29tbW9ucy1pbzwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWlvPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KKzwvZGVwZW5kZW5jeT4KKy0tLS0KK3xJTyB1dGlsc3xBcGFjaGUgMi4wfCBCYWNrZW5kCisKK3xqdW5pdC5qdW5pdHw0LjEyCisKK2F8Citbc291cmNlLHhtbF0KKy0tLS0KKzxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjQuMTI8L3ZlcnNpb24+Cis8L2RlcGVuZGVuY3k+CistLS0tCit8VW5pdCB0ZXN0aW5nfEVQTCAxLjB8QmFja2VuZAorCit8b3JnLmVhc3ltb2NrLmVhc3ltb2NrfDMuNAorYXwKK1tzb3VyY2UseG1sXQorLS0tLQorPGRlcGVuZGVuY3k+CisgICAgPGdyb3VwSWQ+b3JnLmVhc3ltb2NrPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmVhc3ltb2NrPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjMuNDwvdmVyc2lvbj4KKzwvZGVwZW5kZW5jeT4KKy0tLS0KK3xVbml0IHRlc3Rpbmd8QXBhY2hlIDIuMHxCYWNrZW5kCisKK3xvcmcucG93ZXJtb2NrLnBvd2VybW9jay1hcGktZWFzeW1vY2t8MS42LjYKK2F8Citbc291cmNlLHhtbF0KKy0tLS0KKzxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPm9yZy5wb3dlcm1vY2s8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+cG93ZXJtb2NrLWFwaS1lYXN5bW9jazwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4xLjYuNjwvdmVyc2lvbj4KKzwvZGVwZW5kZW5jeT4KKy0tLS0KK3xVbml0IHRlc3Rpbmd8QXBhY2hlIDIuMHxCYWNrZW5kCisKK3xvcmcuamFjb2NvLmphY29jby1tYXZlbi1wbHVnaW58MC43LjkKK2F8Citbc291cmNlLHhtbF0KKy0tLS0KKzxkZXBlbmRlbmN5PgorICAgIDxncm91cElkPm9yZy5qYWNvY288L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFjb2NvLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj4wLjcuOTwvdmVyc2lvbj4KKzwvZGVwZW5kZW5jeT4KKy0tLS0KK3xUZXN0IGNvdmVyYWdlfEVQTCAxLjB8QmFja2VuZAorCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09IFN5c3RlbSBTY29wZSBhbmQgQ29udGV4dAorCis9PT0gQnVzaW5lc3MgQ29udGV4dAorCisgWy4uLl0KKworPT09IFRlY2huaWNhbCBDb250ZXh0CisKKyBbLi4uXQorCis9PT0gU29sdXRpb24gU3RyYXRlZ3kKKworPFRPRE8+CisKKz09IEJ1aWxkaW5nIEJsb2NrIFZpZXcKKworPT09IFdoaXRlYm94IE92ZXJhbGwgU3lzdGVtCisKK1RoZSBtb2R1bGUgQXV0aCZBdXRoIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czoKKworLk1vZHVsZSBjb21wb25lbnRzCitbcGxhbnR1bWxdCisuLi4uCitpbnRlcmZhY2UgYXV0aEFuZEF1dGhBUEkKKworbm9kZSBBdXRoQW5kQXV0aEVudmlyb25tZW50IHsKKworICAgIGNvbXBvbmVudCBwb3J0YWxCRSBbCisgICAgICAgIHBvcnRhbEJhY2tlbmQKKyAgICBdCisKKyAgICBjb21wb25lbnQgcG9ydGFsRkUgWworICAgICAgICBwb3J0YWxGcm9udGVuZAorICAgIF0KKworICAgIGNvbXBvbmVudCBrZXljbG9hayBbCisgICAgICAgIEtleUNsb2FrCisgICAgXQorCisgICAgcG9ydGFsRkUtKDAtcG9ydGFsQkUKKyAgICBwb3J0YWxCRS0oMC1rZXljbG9haworfQorCitub2RlIG9wZW5LTW9kdWxlIFsKKyAgICBvcGVuS29uc2VxdWVueiBtb2R1bGUKK10KKworCitwb3J0YWxCRSAjLS1hdXRoQW5kQXV0aEFQSQorb3BlbktNb2R1bGUtPmF1dGhBbmRBdXRoQVBJCisKKy4uLi4KKworCisuICpwb3J0YWxGcm9udGVuZCogLSBUaGUgdXNlciBpbnRlcmZhY2Ugb2YgdGhlIHBvcnRhbC4gQ29uc2lzdHMgb2YgdGhlIGxvZ2luIHBhZ2UgYW5kIHRoZSBtb2R1bGUgb3ZlcnZpZXcgZ3JpZAorLiAqcG9ydGFsQmFja2VuZCogLSBQcm92aWRlcyB0aGUgc2VydmljZXMgZm9yIGl0cyBmcm9udGVuZC4KKy4gKmF1dGhBbmRBdXRoQVBJKiAtIEFkZGl0aW9uYWxseSB0aGUgcG9ydGFsQmFja2VuZCBwcm92aWRlcyBnZW5lcmFsIHVzZXIgYW5kIHNlY3VyaXR5IHNlcnZpY2VzIGZvcgorZm9yIGFsbCBvcGVuS29uc2VxdWVuei1Nb2R1bGVzLgorLiAqS2V5Q2xvYWsqIC0gS2V5Q2xvYWsgaW1wbGVtZW50cyBtb3N0IG9mIHRoZSBzZWN1cml0eSBhc3BlY3RzIGZvciB0aGUgcG9ydGFsIGFwcGxpY2F0aW9uIGFuZCB0aGUgbW9kdWxlcy4KK0l0IHByb3ZpZGVzIGFuIHVzZXJpbnRlcmZhY2UgZm9yIHVzZXIgYW5kIHJvbGUgbWFuYWdlbWVudCBvZiB0aGUgbW9kdWxlcyBhbmQgZ2VuZXJhdGVzIHRoZSBKU09OIFdlYiBUb2tlbiAoSldUKQorZm9yIHRoZSBzZXNzaW9uIGFuZCBhY2Nlc3MgY29udHJvbC4KKworCisKKz09PT0gQXV0aCZBdXRoLUFQSQorCitUaGUgQXV0aCZBdXRoIG5lZWRzIGluZm9ybWF0aW9uIGZyb20gdGhlIHN5c3RlbSBLZXljbG9hay4gVGhlcmVmb3JlLCBpdCBtdXN0IHByb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciByZWNlaXZpbmcgdGhlIGFjY29yZGluZyBkYXRhLCBzZWUgZmlndXJlIDEuCisKKz09PSBMZXZlbCAyCisKKz09PT0gcG9ydGFsRkUg4oCTIFNQQSAoRnJvbnRlbmQgdGllcikKKworCitUaGUgZnJvbnRlbmQgY29tcG9uZW50IGltcGxlbWVudHMgdGhlIGNvbmNlcHQgb2YgYSBzaW5nbGUtcGFnZSBhcHBsaWNhdGlvbiAoU1BBKS4gVGhlIGZyYW1ld29yayB1c2VkIGlzIEFuZ3VsYXIyLiBJdCBkaXZpZGVzIHRoZSBwb3J0YWxGRSBpbnRvIHRocmVlIGxheWVyczoKKworCisxLkNvbXBvbmVudHMgLSBUaGUgY29tcG9uZW50cyAoUGFnZXMsIExpc3RzLCBEaWFsb2dzLCBDb21tb24gQ29tcC4pIHJlcHJlc2VudCB0aGUgcHJlc2VudGF0aW9uIGxheWVyIGFuZCB0aGUgY29udHJvbCBsYXllci4gQSBjb21wb25lbnQgY29udGFpbnMgdGhlIGNvbnRyb2wgbG9naWMgKC50cy1maWxlKSwgYW4gSFRNTC1mcmFnbWVudCBhcyBwcmVzZW50YXRpb24gZGVzY3JpcHRpb24gKC5odG1sLWZpbGUpIGFuZCBhIHN0eWxlIGRlZmluaXRpb24gKC5jc3MtZmlsZSkuCisKKworMi5TZXJ2aWNlcyAtIFRoZSBzZXJ2aWNlIGNvbXBvbmVudCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgaW50ZXJmYWNlcyBvZiB0aGUgYmFja2VuZCB2aWEgSFRUUCByZXF1ZXN0cyBieSB1c2luZyB0aGUgbW9kZWwgY29tcG9uZW50LgorCisKKzMuTW9kZWwgLSBUaGUgbW9kZWwgY29ycmVzcG9uZHMgdG8gdGhlIFZpZXctTW9kZWwgb2YgdGhlIGJhY2tlbmQgdGllci4KKworLkZyb250ZW5kIHRpZXIKK1twbGFudHVtbF0KKy4uLi4KKworbm9kZSBCYWNrZW5kLXBvcnRhbEJFIHsKKworICAgIGNvbXBvbmVudCBSRVNUU2VydmljZXMKKyAgICBjb21wb25lbnQgVmlld01vZGVsCit9CisKK1JFU1RTZXJ2aWNlcy4+Vmlld01vZGVsCisKK25vZGUgRnJvbnRlbmQtcG9ydGFsRkUgeworCisgICAgY29tcG9uZW50IHNlcnZpY2VzCisKKyAgICBub2RlIENvbXBvbmVudHMgeworICAgICAgICBjb21wb25lbnQgcGFnZXMKKyAgICAgICAgY29tcG9uZW50IGNvbW1vbkNvbXAKKyAgICAgICAgY29tcG9uZW50IGRpYWxvZ3MKKworICAgIH0KKyAgICBjb21wb25lbnQgbW9kZWwKKworCit9CisKK3NlcnZpY2VzLSgwLVJFU1RTZXJ2aWNlcworbW9kZWw8LT5WaWV3TW9kZWwKK3NlcnZpY2VzLj5tb2RlbAorQ29tcG9uZW50cy4+c2VydmljZXMKKworLi4uLgorCisKKworPT09PSBwb3J0YWwud2FyIChCYWNrZW5kIHRpZXIpCisKK1RoZSBiYWNrZW5kIHRpZXIgY29udGFpbnMgZml2ZSBjb21wb25lbnRzIHdoaWNoIGNhbiBiZSBzdW1tYXJpemVkIGluIHRocmVlIGxheWVyczoKKworLiAqUHJlc2VudGF0aW9uIGxheWVyKiAtIFJlcHJlc2VudGVkIGJ5CisgLi4gUkVTVC1TcnYKKyAuLiBWaWV3IE1vZGVsCisuICpDb250cm9sbGVyIGxheWVyKiAtIFJlcHJlc2VudGVkIGJ5CisgLi4JQ29udHJvbGxlcgorLgkqTW9kZWwgbGF5ZXIqIC0gUmVwcmVzZW50ZWQgYnkKKyAuLglhdXRoMiAoQ29ubmVjdGlvbiB0byAiS2V5Q2xvYWsiKQorCisKKy5CYWNrZW5kIHRpZXIKK1twbGFudHVtbF0KKy4uLi4KKworbm9kZSBQb3J0YWxGcm9udGVuZCBbCisgICAgUG9ydGFsRnJvbnRlbmQKK10KKworbm9kZSBFU0IgeworICAgIGludGVyZmFjZSBBdXRoX25fYXV0aAorfQorCisKK25vZGUgQmFja2VuZExBTiB7CisgICAgbGVmdCB0byByaWdodCBkaXJlY3Rpb24KKworICAgIG5vZGUgS2V5Q2xvYWsgeworICAgICAgICBjb21wb25lbnQgS2V5Q2xvYWtJbXBsZW1lbnRhdGlvbgorICAgIH0KKworICAgIG5vZGUgQmFja2VuZC1Qb3J0YWwgeworCisgICAgICAgIHNraW5wYXJhbSByZWN0YW5nbGUgeworICAgICAgICAgICAgcm91bmRDb3JuZXIgMjUKKyAgICAgICAgfQorICAgICAgICByZWN0YW5nbGUgIlByZXNlbnRhdGlvbiBsYXllciIgeworICAgICAgICAgICAgY29tcG9uZW50IFJFU1RTZXJ2aWNlcworICAgICAgICAgICAgY29tcG9uZW50IFZpZXdNb2RlbAorICAgICAgICB9CisgICAgICAgIHJlY3RhbmdsZSAiQ29udHJvbGxlciBsYXllciIgeworICAgICAgICAgICAgY29tcG9uZW50IENvbnRyb2xsZXIKKyAgICAgICAgfQorICAgICAgICByZWN0YW5nbGUgIk1vZGVsIGxheWVyIiB7CisgICAgICAgICAgICBjb21wb25lbnQgYXV0aDIKKyAgICAgICAgfQorCisgICAgICAgIFJFU1RTZXJ2aWNlcy4+Q29udHJvbGxlcgorICAgICAgICBSRVNUU2VydmljZXMuPlZpZXdNb2RlbAorICAgICAgICBDb250cm9sbGVyLj5hdXRoMgorCisgICAgfQorCisgICAgUkVTVFNlcnZpY2VzIC0tIEF1dGhfbl9hdXRoCisKKworCisgICAgaW50ZXJmYWNlIE9BdXRoMgorICAgIGludGVyZmFjZSBLZXlDbG9ha0FkbWluCisKKyAgICBLZXlDbG9hayAtLSBLZXlDbG9ha0FkbWluCisgICAgS2V5Q2xvYWsgLS0gT0F1dGgyCisKKworICAgIGF1dGgyIC0+IE9BdXRoMgorICAgIGF1dGgyIC0+IEtleUNsb2FrQWRtaW4KKworfQorCisKKworCitQb3J0YWxGcm9udGVuZC0tPkF1dGhfbl9hdXRoCisKKworbm9kZSBvcGVuS01vZHVsZSBbCisgICAgb3BlbktNb2R1bGUKK10KKworCitvcGVuS01vZHVsZSAtLT4gQXV0aF9uX2F1dGgKKworLi4uLgorCitLZXlDbG9hayBwcm92aWRlcyBkaWZmZXJlbnQgaW50ZXJmYWNlcy4gVGhlIGJhY2tlbmQgdXNlcyB0aGUgKk9BdXRoMiotSW50ZXJmYWNlIGZvciBhdXRoZW50aWNhdGlvbgorYW5kIHRoZSAqS2V5Q2xvYWstYWRtaW4qIGludGVyZmFjZSBmb3Igb3RoZXIgdGFza3MgKGZvciBleGFtcGxlIGZvciBnZXR0aW5nIHVzZXJzKS4gVGhlIGNvbXBvbmVudCAqYXV0aDIqIHByb3ZpZGVzCitmdW5jdGlvbmFsaXR5IGZvciB0aGUgYWNjZXNzIHRvIEtleUNsb2FrLiBUaGUgUHJlc2VudGF0aW9uIGxheWVyIGNvbnNpc3RzIG9mIHRoZSAqUkVTVFNlcnZpY2VzKiBhbmQgdGhlCisqVmlld01vZGVsKi4gVGhlICpSRVNUU2VydmljZXMqIGFjY2VzcyB0aGUgKkNvbnRyb2xsZXIgbGF5ZXIqIGluIG9yZGVyIHRvIHBlcmZvcm0gdGhlaXIgdGFza3MuCisKK1RoZSB3aG9sZSBiYWNrZW5kIHByb3ZpZGVzIHRoZSAqQXV0aCZBdXRoKiBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCBieSB0aGUgKnBvcnRhbEZyb250ZW5kKiBhbmQKK290aGVyICpvcGVuS29uc2VxdWVuei1Nb2R1bGVzKiBmb3IgYXV0aGVudGljYXRpb24gYW5kIG90aGVyIHJlbGF0ZWQgdGFza3MuIFRoZSAqQXV0aCZBdXRoKiBpbnRlcmZhY2UgaXMKK3RvIGJlIGV4cG9ydGVkIHZpYSBFU0IuCisKKworCis9PSBSdW50aW1lIFZpZXcKKz09PSBMb2dpbiAvIEF1dGhlbnRpY2F0aW9uCisKKy5Mb2dpbiBzZXF1ZW5jZQorW3BsYW50dW1sXQorLi4uLgorYWN0b3IgVXNlcgorcGFydGljaXBhbnQgUG9ydGFsRnJvbnRlbmQKK3BhcnRpY2lwYW50IFBvcnRhbEJhY2tlbmQKK3BhcnRpY2lwYW50IEtleUNsb2FrCisKK1VzZXItPlBvcnRhbEZyb250ZW5kOiBMb2dpbiBwYWdlCitQb3J0YWxGcm9udGVuZC0+UG9ydGFsQmFja2VuZDogL2xvZ2luKGxvZ2luQ3JlZGVudGlhbHMpCitQb3J0YWxCYWNrZW5kLT5LZXlDbG9hazogLy4uLi9yZWFsbXMvLi4uL3Byb3RvY29sL29wZW5pZC1jb25uZWN0L3Rva2VuKD9sb2dpbkluZm8pCitLZXlDbG9hayAtLT4gUG9ydGFsQmFja2VuZDogcmV0dXJuIEpXVAorUG9ydGFsQmFja2VuZCAtPiBQb3J0YWxCYWNrZW5kOiBDcmVhdGUgU2Vzc2lvbiB3aXRoIEpXVAorUG9ydGFsQmFja2VuZCAtLT4gUG9ydGFsRnJvbnRlbmQ6IHJldHVybiBKV1QKK1BvcnRhbEZyb250ZW5kIC0+IFBvcnRhbEZyb250ZW5kOiBzdG9yZSBKV1QKK1BvcnRhbEZyb250ZW5kIC0tPiBVc2VyOiBOYXZpZ2F0ZSB0byBNb2R1bGVHcmlkCisKKy4uLi4KKworPT09IExvZ291dAorCisuTG9nb3V0IHNlcXVlbmNlCitbcGxhbnR1bWxdCisuLi4uCithY3RvciBVc2VyCitwYXJ0aWNpcGFudCBvS19Nb2R1bGUKK3BhcnRpY2lwYW50IFBvcnRhbEJhY2tlbmQKKworCitVc2VyLT5vS19Nb2R1bGU6IGxvZ291dAorb0tfTW9kdWxlLT5Qb3J0YWxCYWNrZW5kOiAvbG9nb3V0IHdpdGggSldUCitQb3J0YWxCYWNrZW5kLT5Qb3J0YWxCYWNrZW5kOiBSZW1vdmUgU2Vzc2lvbiB3aXRoIEpXVAorUG9ydGFsQmFja2VuZC0tPm9LX01vZHVsZToKK29LX01vZHVsZS0+b0tfTW9kdWxlOiBOYXZpZ2F0ZSB0byBMb2dvdXQvY2xvc2luZyBwYWdlCitvS19Nb2R1bGUtLT5Vc2VyCisKKy4uLi4KKworPT09IENoZWNrIGF1dGhvcml6YXRpb24KKworLkNoZWNrQXV0aCBzZXF1ZW5jZQorW3BsYW50dW1sXQorLi4uLgorYWN0b3IgVXNlcgorcGFydGljaXBhbnQgb0tfTW9kdWxlCitwYXJ0aWNpcGFudCBQb3J0YWxCYWNrZW5kCisKKworVXNlci0+b0tfTW9kdWxlOiBBbnkgYWN0aW9uIHRoYXQgcmVxdWlyZXMgYW4gYXV0aCBjaGVjaworb0tfTW9kdWxlLT5Qb3J0YWxCYWNrZW5kOiAvY2hlY2tBdXRoIHdpdGggSldUCisKK2dyb3VwIGF1dGhvcml6ZQorICAgIFBvcnRhbEJhY2tlbmQtPlBvcnRhbEJhY2tlbmQ6IENoZWNrIGlmIHZhbGlkIHNlc3Npb24gd2l0aCBKV1QgZXhpc3RzCisKKyAgICBncm91cCBjaGVjayBmYWlsZWQKKyAgICAgICAgUG9ydGFsQmFja2VuZC0tPm9LX01vZHVsZTogcmFpc2UgSHR0cENvZGUgIlVuYXV0aG9yaXplZCA0MDEiCisgICAgZW5kCisKKyAgICBncm91cCBjaGVjayBzdWNjZWVkZWQKKyAgICAgICAgUG9ydGFsQmFja2VuZC0tPm9LX01vZHVsZTogcmV0dXJuIEh0dHBDb2RlICJTdWNjZXNzIDIwMCIKKyAgICBlbmQKK2VuZAorCitvS19Nb2R1bGUtPm9LX01vZHVsZTogcmVhY3Qgb24gSHR0cENvZGUKK29LX01vZHVsZS0tPlVzZXI6CisKKy4uLi4KKworPT09IEdldCB1c2VycyBmb3Igcm9sZQorLkdldFVzZXJzRm9yUm9sZSBzZXF1ZW5jZQorW3BsYW50dW1sXQorLi4uLgorYWN0b3IgVXNlcgorCitwYXJ0aWNpcGFudCBvS19Nb2R1bGUKK3BhcnRpY2lwYW50IEtleUNsb2FrCitwYXJ0aWNpcGFudCBQb3J0YWxCYWNrZW5kCisKK2FjdG9yIFRpbWVyX2N5Y2wKKworZ3JvdXAgcmVmcmVzaCB1c2Vyc1dpdGhSb2xlcyBjYWNoZQorICAgIFRpbWVyX2N5Y2wtPlBvcnRhbEJhY2tlbmQ6IEdldCB1c2VyV2l0aFJvbGVzCisKKyAgICBQb3J0YWxCYWNrZW5kLT5LZXlDbG9hazogTG9naW4gd2l0aCBhZG1pbiB1c2VyCisgICAgS2V5Q2xvYWstLT5Qb3J0YWxCYWNrZW5kCisgICAgUG9ydGFsQmFja2VuZC0+S2V5Q2xvYWs6IEdldCByZWFsbSB1c2VycworICAgIEtleUNsb2FrLS0+UG9ydGFsQmFja2VuZAorCisgICAgZ3JvdXAgcmVwZWF0IGZvciBlYWNoIHVzZXIKKyAgICAgICAgUG9ydGFsQmFja2VuZC0+S2V5Q2xvYWs6R2V0IHJvbGUtbWFwcGluZyBmb3IgdXNlcgorICAgIEtleUNsb2FrLS0+UG9ydGFsQmFja2VuZAorICAgIGVuZAorICAgIFBvcnRhbEJhY2tlbmQtPlBvcnRhbEJhY2tlbmQ6IHVwZGF0ZSBjYWNoZQorICAgIFBvcnRhbEJhY2tlbmQtLT5UaW1lcl9jeWNsCitlbmQKKy4uLgorCisKK1VzZXItPm9LX01vZHVsZTogQW55IGFjdGlvbiB0aGF0IG5lZWRzIGFsbCB1c2VycyBoYXZpbmcgYSByb2xlCitvS19Nb2R1bGUtPlBvcnRhbEJhY2tlbmQ6IC91c2Vyc0ZvclJvbGUve3VzZXJSb2xlfQorUG9ydGFsQmFja2VuZC0+UG9ydGFsQmFja2VuZDogZXZhbHVhdGUgZnJvbSB1c2Vyc1dpdGhSb2xlcyBjYWNoZQorUG9ydGFsQmFja2VuZC0tPm9LX01vZHVsZTogcmV0dXJuIHJlc3VsdAorb0tfTW9kdWxlLS0+VXNlcgorCisuLi4uCisKKworCis9PT0gT3BlbiBtb2R1bGUgaW4gcG9ydGFsIGZyb250ZW5kCisuU3RhcnQgbW9kdWxlIHNlcXVlbmNlCitbcGxhbnR1bWxdCisuLi4uCithY3RvciBVc2VyCisKK3BhcnRpY2lwYW50IFBvcnRhbEZFCitwYXJ0aWNpcGFudCBvcGVuS01vZHVsZQorCitVc2VyLT5Qb3J0YWxGRTogVXNlciAobG9nZ2VkIGluKSBvcGVucyBtb2R1bGUKK1BvcnRhbEZFLT5vcGVuS01vZHVsZTogT3BlbiBjb25maWd1cmVkIFVSTCBpbiBuZXcgYnJvd3NlciB0YWIsIHByb3ZpZGluZyB0aGUgSldUCisuLi4uCisKKworCis9PSBEZXBsb3ltZW50IFZpZXcKKworVGhlIEF1dGgmQXV0aCBhcHBsaWNhdGlvbiBjb25zaXN0cyBvZiAzIHBhcnRzIHJlZ2FyZGluZyB0aGUgZGVwbG95bWVudC4KKworLiBGcm9udGVuZDogInBvcnRhbEZFIi1EaXJlY3RvcnkKKy4gQmFja2VuZDogInBvcnRhbC53YXIiCisuIEtleWNsb2FrOiBPQXV0aDIgYW5kIEpXVCBTZXJ2aWNlIGltcGxlbWVudGF0aW9uCisKKz09PSBEZXBsb3ltZW50IG9mIHRoZSBhcHBsaWNhdGlvbiBjb21wb25lbnRzCisKKz09PT0gRGVwbG95bWVudCBvZiB0aGUgZnJvbnRlbmQKKworVGhlIEZyb250ZW5kIFNQQSBpcyBidWlsdCBhcyBhIGZvbGRlciwgdGhhdCBjb250YWlucyBhbGwgdGhlIHJlcXVpcmVkIGZpbGVzIGZvcgordGhlIGFwcGxpY2F0aW9uLiBXaGVuIGRlcGxveWluZyB0aGUgZnJvbnRlbmQgYXBwbGljYXRpb24sIHRoZSBjb250ZW50IG9mIHRoZSAiZGlzdCItZm9sZGVyCit3aXRoaW4gdGhlIEZyb250ZW5kIGRldmVsb3BtZW50LWRpcmVjdG9yeSBoYXMgdG8gYmUgY29waWVkIGludG8gdGhlCit0YXJnZXQtZGlyZWN0b3J5IG9mIHRoZSBhcGFjaGUtdG9tY2F0OgorCisgPEFwYWNoZS1Ub21jYXQ+L3dlYmFwcHMvcG9ydGFsRkUKKworSWYgdGhlIHRhcmdldCBmb2xkZXIgZG9lcyBub3QgZXhpc3QsIGl0IGhhcyB0byBiZSBjcmVhdGVkIG1hbnVhbGx5LgorCis9PT09IERlcGxveW1lbnQgb2YgdGhlIGJhY2tlbmQKK1RoZSBiYWNrZW5kIFJFU1Qtc2VydmljZXMgYXJlIGJ1aWx0IGluIGZvcm0gb2YgYSAiV0FSIi1maWxlICh0byBiZSBmb3VuZAoraW4gdGhlICJ0YXJnZXQiLWRpcmVjdG9yeSBvZiB0aGUgTUFWRU4tZGlyZWN0b3J5IHN0cnVjdHVyZSkuCitGb3IgZGVwbG95bWVudCwgdGhpcyBmaWxlIGhhcyB0byBiZSBjb3BpZWQgdG8gdGhlIGRpcmVjdG9yeQorCisgPEFwYWNoZS1Ub21jYXQ+L3dlYmFwcHMKKworPT09PSBEZXBsb3ltZW50IG9mIEtleWNsb2FrCisKKworLiBHZXQgIktleWNsb2FrIDMuMi4xIEZpbmFsIiAoImtleWNsb2FrLTMuMi4xLkZpbmFsLnppcCIpIGZyb20gdGhlIEtleWNsb2FrIGRvd25sb2FkIHBhZ2UuICsKK0Rvd25sb2FkICJTZXJ2ZXIgU3RhbmRhbG9uZSBzZXJ2ZXIgZGlzdHJpYnV0aW9uIjogaHR0cDovL3d3dy5rZXljbG9hay5vcmcvYXJjaGl2ZS9kb3dubG9hZHMtMy4yLjEuaHRtbAorCisuIEV4dHJhY3QgdGhlIGNvbnRlbnQuCisuIFRvIGNyZWF0ZSBhbiBpbml0aWFsIGFkbWluIGFjY291bnQgZm9yIEtleWNsb2FrIHJ1biB0aGUgc2NyaXB0IGBhZGQtdXNlci1rZXljbG9hay5zaGAgd2l0aCB1c2VybmFtZSAnYWRtaW4nCithbmQgYSBzdHJvbmcgcGFzc3dvcmQuCisKKyA8S2V5Y2xvYWstRGlyZWN0b3J5Pi9iaW4vYWRkLXVzZXIta2V5Y2xvYWsuc2ggLXIgbWFzdGVyIC11IDx1c2VybmFtZT4gLXAgPHBhc3N3b3JkPgorCisuIFRvIHN0YXJ0IEtleWNsb2FrIGNyZWF0ZSBhICpMaW51eC1TZXJ2aWNlIHdoaWNoIGV4ZWN1dGVzKiB0aGUgYHN0YW5kYWxvbmUuc2hgIHNjcmlwdCB0byBiZSBmb3VuZCBpbiB0aGUgS2V5Y2xvYWsgYGJpbmAKK2RpcmVjdG9yeS4KKworIDxLZXljbG9hay1EaXJlY3Rvcnk+L2Jpbi9zdGFuZGFsb25lLnNoCisKKworVElQOiBLZXljbG9ha3MgZGVmYXVsdCBwb3J0IGlzIDgwODAgeW91IGNhbiBjaGFuZ2UgaXQgdG8gZm9yIGV4YW1wbGUgdG8gcG9ydCAxMjM0IHdpdGggdGhlIGZvbGxvd2luZworZXhlY3V0aW9uIHBhcmFtZXRlcjogLURqYm9zcy5odHRwLnBvcnQ9MTIzNAorCisgPEtleWNsb2FrLURpcmVjdG9yeT4vYmluL3N0YW5kYWxvbmUuc2ggLURqYm9zcy5odHRwLnBvcnQ9MTIzNAorCis9PT09IENvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbQorCis9PT09PSBDb25maWd1cmF0aW9uIG9mIHRoZSB3ZWJzZXJ2ZXIKKworVGhlcmUgZXhpc3RzIHRoZSBmaWxlICpjb250ZXh0LnhtbCogaW4gdGhlICJjb25mIiBzdWJkaXJlY3RvcnkgKCo8VE9NQ0FUPi9jb25mKikgb2YgdGhlIHRhcmdldCBhcGFjaGUgdG9tY2F0IGluc3RhbGxhdGlvbi4KK0FkZCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBhbmQgcmVzb3VyY2UgaW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBjb3JyZWN0IGJhY2tlbmQgY29uZmlndXJhdGlvbnMgYW5kIHRvCitnYWluIGFjY2VzcyB0byB0aGUgZGF0YWJhc2UgKHNlZSAiQ29uZmlndXJhdGlvbiBvZiB0aGUgYmFja2VuZCIgYmVsb3cpOgorCisuY29udGV4dC54bWwKK1tzb3VyY2UseG1sXQorLS0tLQorWy4uLl0KKyAgICA8IS0tIFVuY29tbWVudCB0aGlzIHRvIGRpc2FibGUgc2Vzc2lvbiBwZXJzaXN0ZW5jZSBhY3Jvc3MgVG9tY2F0IHJlc3RhcnRzIC0tPgorCisgICAgPCEtLU1hbmFnZXIgcGF0aG5hbWU9IiIvPgorCisKKyAgICA8UGFyYW1ldGVyIG5hbWU9ImVudmlyb25tZW50IiBvdmVycmlkZT0iZmFsc2UiIHZhbHVlPSJEZXZlbG9wbWVudCIvLS0+CisKKyAgIDxQYXJhbWV0ZXIgbmFtZT0iT0tfUE9SVEFMX0VOVklST05NRU5UIiBvdmVycmlkZT0iZmFsc2UiIHZhbHVlPSJQcm9kdWN0aW9uIi8+CisKKyAgICA8IS0tIFVuY29tbWVudCB0aGlzIHRvIGVuYWJsZSBDb21ldCBjb25uZWN0aW9uIHRhY2tpbmcgKHByb3ZpZGVzIGV2ZW50cworICAgICAgICAgb24gc2Vzc2lvbiBleHBpcmF0aW9uIGFzIHdlbGwgYXMgd2ViYXBwIGxpZmVjeWNsZSkgLS0+CitbLi4uXQorLS0tLQorCisKKz09PT09IENvbmZpZ3VyYXRpb24gb2YgdGhlIGJhY2tlbmQKKworQWZ0ZXIgdGhlIGJhY2tlbmQgd2FyIGZpbGUgaGFzIGJlZW4gZGVwbG95ZWQgYW5kIHVucGFja2VkIGluc2lkZSBvZiB0aGUgKjxUT01DQVQ+L3dlYmFwcHMqIGZvbGRlciB0aGVyZSBhcmUgZGlmZmVyZW50CisgYmFja2VuZCBjb25maWcgZmlsZXMgdG8gYmUgZm91bmQgaW4gdGhlIGZvbGRlciAqPFRPTUNBVD4vd2ViYXBwcy9lbG9nYm9vay9XRUItSU5GL2NsYXNzZXMqCisKKyogYmFja2VuZENvbmZpZyouanNvbgorKiBtb2R1bGVDb25maWcqLmpzb24KKworVGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uIGlzIGNob3NlbiBieSBwYXJhbWV0ZXIgKk9LX1BPUlRBTF9FTlZJUk9OTUVOVCogKHNlZSBjb250ZXh0LnhtbCBhYm92ZSkuCitQb3NzaWJsZSB2YWx1ZXMgYXJlOgorCisqICpDdXN0b20qIChmb3IgYmFja2VuZENvbmZpZ0N1c3RvbS5qc29uIGFuZCBtb2R1bGVDb25maWdDdXN0b20uanNvbikKKyogKkRldkxvY2FsKiAoZm9yIGJhY2tlbmRDb25maWdEZXZMb2NhbC5qc29uIGFuZCBtb2R1bGVDb25maWdEZXZMb2NhbC5qc29uKQorKiAqRGV2U2VydmVyKiAoZm9yIGJhY2tlbmRDb25maWdEZXZTZXJ2ZXIuanNvbiBhbmQgbW9kdWxlQ29uZmlnRGV2U2VydmVyLmpzb24pCisqICpQcm9kdWN0aW9uKiAoZm9yIGJhY2tlbmRDb25maWdQcm9kdWN0aW9uLmpzb24gYW5kIG1vZHVsZUNvbmZpZ1Byb2R1Y3Rpb24uanNvbikKKworQWZ0ZXIgY2hvb3NpbmcgYW4gZW52aXJvbm1lbnQgdGhlIGNvcnJlc3BvbmRpbmcganNvbiBmaWxlcyBoYXZlIHRvIGJlIGNvbmZpZ3VyZWQ6CisKKy5iYWNrZW5kQ29uZmlnWFhYLmpzb24KK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgImludGVybmFsU2Vzc2lvbkxlbmd0aE1pbGxpcyI6IDQ2ODAwMDAwLAorICAicmVsb2FkVXNlcnNJblNlYyI6IDMwMCwKKyAgImF1dGhTZXJ2ZXJVcmwiOiAiaHR0cDovL2xvY2FsaG9zdDo4MDgwLyIsCisgICJrZXljbG9ha1JlYWxtIjogIk9wZW5LUmVhbG0iLAorICAia2V5Y2xvYWtDbGllbnQiOiAiT3BlbktDbGllbnQiLAorICAia2V5Y2xvYWtBZG1pbiI6ICJhZG1pbiIsCisgICJrZXljbG9ha1BXIjogImFkbWlucHdkIiwKKyAgIm1heExvYWRVc2VycyI6IDEwMDAKK30KKy0tLS0KKyogKmludGVybmFsU2Vzc2lvbkxlbmd0aE1pbGxpcyogLSBNYXhpbXVtIGFsbG93ZWQgZHVyYXRpb24gb2YgaW5hY3Rpdml0eSwgYmVmb3JlIGEgc2Vzc2lvbiBlbmRzCisqICpyZWxvYWRVc2Vyc0luU2VjKiAtIFBvbGxpbmcgaW50ZXJ2YWwgZm9yIGdldHRpbmcgYWxsIHVzZXJzIGZyb20ga2V5Y2xvYWsKKyogKmF1dGhTZXJ2ZXJVcmwqIC0gQmFzZSB1cmwgb2YgdGhlIGtleWNsb2FrIGluc3RhbmNlCisqICprZXljbG9ha1JlYWxtKiAtIENvbmZpZ3VyZWQgcmVhbG0gb24ga2V5Y2xvYWsKKyogKmtleWNsb2FrQ2xpZW50KiAtIENvbmZpZ3VyZWQgY2xpZW50IG9uIGtleWNsb2FrCisqICprZXljbG9ha0FkbWluKiAtIHVzZXIgZm9yIGFkbWluIGFjY2VzcyBvbiBrZXljbG9haworKiAqa2V5Y2xvYWtQVyogLSBwYXNzd29yZCBvZiB0aGUgYWRtaW4gdXNlcgorKiAqbWF4TG9hZFVzZXJzKiAtIFNldHMgdGhlIG1heGltdW0gb2YgdXNlcnMgdGhhdCBhcmUgbG9hZGVkIGZyb20ga2V5Y2xvYWsuIEtDIGl0c2VsZiBpcyBsaW1pdGVkIGhlcmUuIFRoZSB2YWx1ZQorc2hvdWxkIGJlIHNldCB0byB0aGUgYW1vdW50IG9mICphbGwqIHVzZXJzIGluIHRoZSB0YXJnZXQgImtleWNsb2FrUmVhbG0iLgorCisKKy5tb2R1bGVDb25maWdYWFguanNvbgorW3NvdXJjZSxqc29uXQorLS0tLQorWworICB7CisgICAgIm5hbWUiOiAiQmV0cmllYnN0YWdlYnVjaCIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cDovLzE3Mi4xOC4yMi4xNjA6ODg4MC9lbG9nYm9va0ZFIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvLi4uL21fbG9nYnVjaF8yNDQzNjM2LmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJlbG9nYm9vay1hY2Nlc3MiCisKKyAgfSwKKyAgeworICAgICJuYW1lIjogIkJlcmVpdHNjaGFmdHNwbGFudW5nIiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS8uLi4uLzk0LWJlcmVpdHNjaGFmdHNwbGFuIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvbWVkaWVuLy4uLi9sX2JlcmVpdHNjaGFmdHNwbGFuXzU3ODgyMDQ3LmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJwbGFubmluZy1hY2Nlc3MiCisgIH0sCisKKyAgLi4uCisKK10KKworLS0tLQorCisqICpuYW1lKiAtIE5hbWUvZGVzY3JpcHRpb24gb2YgdGhlIG1vZHVsZQorKiAqY29scyogLSBhbHdheXMgIjEiCisqICpyb3dzKiAtIGFsd2F5cyAiMSIKKyogKmNvbG9yKiAtIGFsd2F5cyAiI2ZmZmZmZiIKKyogKmxpbmsqIC0gVVJMIGZvciB0aGUgbW9kdWxlCisqICpwaWN0dXJlTGluayogLSBVUkwgZm9yIHBpY3R1cmUgYmVsb25naW5nIHRvIHRoZSBtb2R1bGUKKyogKnJlcXVpcmVkUm9sZSogLSBOYW1lIG9mIHRoZSByb2xlIChvbiBrZXljbG9haykgdGhlIHVzZXIgbXVzdCBoYXZlIHRvIGFjY2VzcyB0aGUgbW9kdWxlCisKKworPT09PT0gQ29uZmlndXJhdGlvbiBvZiBLZXljbG9haworCisuIExvZ2luIGluIEtleWNsb2FrCisKKy4uIEdvIHRvIGh0dHA6Ly88S0VZQ0xPQUstU0VSVkVSLUlQPjo8Q09ORklHVVJFRC1LRVlDTE9BSy1QT1JUPi8gKworSGl0IHRoZSBgQWRtaW5pc3RyYXRpb24gQ29uc29sZWAgLUxpbmsgYW5kIGxvZ2luIHdpdGggYWRtaW4gYWNjb3VudCBjcmVhdGVkIGR1cmluZyB0aGUgS2V5Y2xvYWstZGVwbG95bWVudAorKHNlZSBhYm92ZSkuCisKKy4gQWRkIGEgbmV3IHJlYWxtOiBgTWFpbkRvbmF1TmV0emAKKworLkFkZCBhIG5ldyByZWFsbSBvdmVydmlldworW29wdGlvbnM9ImhlYWRlcixmb290ZXIiXQoraW1hZ2U6Om5ld1JlYWxtMS5wbmdbbmV3IFJlYWxtXQorCisuQWRkIGEgbmV3IHJlYWxtCitbb3B0aW9ucz0iaGVhZGVyLGZvb3RlciJdCitpbWFnZTo6bmV3UmVhbG0yLnBuZ1tuZXcgUmVhbG1dCisKK1tzdGFydD0zXQorLiBDcmVhdGUgYSBjbGllbnQgd2l0aCBjbGllbnQgSUQgYGVsb2dib29rLWJhY2tlbmRgLgorCisuQ3JlYXRlIGEgY2xpZW50IG92ZXJ2aWV3Citbb3B0aW9ucz0iaGVhZGVyLGZvb3RlciJdCitpbWFnZTo6Y3JlYXRlQ2xpZW50LnBuZ1tjcmVhdGUgQ2xpZW50XQorCisuQWRkIGEgY2xpZW50Citbb3B0aW9ucz0iaGVhZGVyLGZvb3RlciJdCitpbWFnZTo6YWRkQ2xpZW50LnBuZ1thZGQgQ2xpZW50XQorCitbc3RhcnQ9NF0KKy4gU2V0IHRoZSBjbGllbnQgc2V0dGluZ3MgYWNjb3JkaW5nbHk6CisKKy5DbGllbnQgc2V0dGluZ3Mgb2YgZWxvZ2Jvb2stYmFja2VuZAorW29wdGlvbnM9ImhlYWRlcixmb290ZXIiXQoraW1hZ2U6OmNsaWVudFNldHRpbmdzLnBuZ1tDbGllbnQgc2V0dGluZ3NdCisKK0dvIHRvIHRhYiBgTWFwcGVyc2AuIFByZXNzIGBDcmVhdGVgLi4uCisKKy5NYXBwZXJzIG9mIGVsb2dib29rLWJhY2tlbmQKK1tvcHRpb249ImhlYWRlcixmb290ZXIiXQoraW1hZ2U6OkNyZWF0ZU1hcHBlci5wbmdbTWFwcGVyIHNldHRpbmdzXQorCithbmQgYWRkIHRoZSBgcm9sZWAgbWFwcGluZyBhY2NvcmRpbmdseToKKworLlJvbGUgbWFwcGVyCitbb3B0aW9uPSJoZWFkZXIsZm9vdGVyIl0KK2ltYWdlOjpDcmVhdGVSb2xlTWFwcGVyLnBuZ1tSb2xlIG1hcHBlciBzZXR0aW5nc10KKworCitbc3RhcnQ9NV0KKy4gQWRkIHRoZSByb2xlcyB1bmRlciBgUm9sZXNgIHByZXNzIGBBZGQgUm9sZWAuIEFkZCB0aGUgZm9sbG93aW5nIFJvbGVzOgorLSBlbG9nYm9vay1ub3JtYWx1c2VyCistIGVsb2dib29rLXN1cGVydXNlcgorLSBlbG9nYm9vay1hY2Nlc3MKKy0gcGxhbm5pbmctYWNjZXNzCistIGZlZWRpbi1tYW5hZ2VtZW50LWFjY2VzcworLSBwbGFubmVkLXBvbGljaWVzLWFjY2VzcworLSBwbGFubmVkLXBvbGljaWVzLW5vcm1hbHVzZXIKKy0gcGxhbm5lZC1wb2xpY2llcy1zdXBlcnVzZXIKKworLiBDb25maWd1cmluZyBhIHN1cGVydXNlciByb2xlLiBVbmRlciBSb2xlcywgaGl0IG9uIGEgc3VwZXJ1c2VyKGVsb2dib29rLXN1cGVydXNlciBvciBwbGFubmVkLXBvbGljaWVzLXN1cGVydXNlcikgb3IgcHJlc3MgYEVkaXRgCisuLiBTd2l0Y2ggYENvbXBvc2l0ZSBSb2xlc2AgdG8gb24uCisuLiBBZGQgdGhlIFJlYWxtIFJvbGUgJ2Vsb2dib29rLW5vcm1hbHVzZXInIG9yICdwbGFubmVkLXBvbGljaWVzLW5vcm1hbHVzZXInIGNvcnJlc3BvbmRpbmdseSBmcm9tIHRoZSBgQXZhaWxhYmxlIFJvbGVzYAorLi4gU2VsZWN0IGZyb20gdGhlIGBDbGllbnQgUm9sZXNgIERyb3Bkb3duLUxpc3QgJ3JlYWxtLW1hbmFnZW1lbnQnIGFuZCBhZGQgdGhlIHJvbGUgJ3ZpZXctdXNlcnMnLgorCisuRWxvZ2Jvb2sgc3VwZXJ1c2VyIGNvbXBvc2l0ZSByb2xlCitbb3B0aW9ucz0iaGVhZGVyLGZvb3RlciJdCitpbWFnZTo6cm9sZXNTdXBlclVzZXIucG5nW0Vsb2dib29rIHN1cGVydXNlciBjb21wb3NpdGUgcm9sZV0KKworW3N0YXJ0PTddCisuIEFkZGluZyB1c2VycyB1bmRlciBgVXNlcnNgIHByZXNzIGBBZGQgVXNlcmAuCisKKy5BZGQgYSB1c2VyCitbb3B0aW9ucz0iaGVhZGVyLGZvb3RlciJdCitpbWFnZTo6YWRkaW5nVXNlcnMucG5nW0FkZCBhIFVzZXJdCisKKy4uIEZpbGwgaW4gdXNlcm5hbWUsIEZpcnN0IE5hbWUsIExhc3QgTmFtZSwgZWxzZSBpcyBkZWZhdWx0IGFuZCBzYXZlIGl0LgorLi4gR28gdG8gdGhlIGBDcmVkZW50aWFsc2AgdGFiIGFuZCB0eXBlIGluIGEgbmV3IHBhc3N3b3JkIGFuZCB0aGUgY29uZmlybWF0aW9uIGFzIHdlbGwsIGRpc2FibGUgYFRlbXBvcmFyeWAuIFByZXNzIGBSZXNldCBQYXNzd29yZGAuCitQcmVzcyBgQ2hhbmdlIFBhc3N3b3JkYC4KKworLkNyZWRlbnRpYWxzIHRhYgorW29wdGlvbnM9ImhlYWRlcixmb290ZXIiXQoraW1hZ2U6OmNyZWRlbnRpYWxzLnBuZ1tDcmVkZW50aWFscyB0YWJdCisKK1tzdGFydD0zXQorLi4gR28gdG8gdGhlIGBSb2xlIE1hcHBpbmdzYCB0YWIuICsKK0hlcmUgeW91IGdyYW50IHJpZ2h0cy9yb2xlcyB0byB0aGUgdXNlcnM6CitTZWxlY3QgdGhlIGZyb20gdGhlIHByZXZpb3VzbHkgY3JlYXRlZCByb2xlcyBpbiBgQXZhaWxhYmxlIFJvbGVzYCBhbmQgaGl0IGBBZGQgc2VsZWN0ZWRgLiArCisuLi4gVXNlciByaWdodCBpbiB0aGUgZGlzdGluY3QgbW9kdWwgZWxvZ2Jvb2sgKGBlbG9nYm9vay1hY2Nlc3NgIHJlcXVpcmVkIG9mIGNvdXJzZSk6CistIGVsb2dib29rLW5vcm1hbHVzZXIgPSBzdGFuZGFyZCB1c2VyIGluIHRoZSBlbG9nYm9vay1hcHAKKy0gZWxvZ2Jvb2stc3VwZXJ1c2VyID0gYWRtaW4gdXNlciBpbiB0aGUgZWxvZ2Jvb2stYXBwCisKKy4uLiBVc2VyIHJpZ2h0IGluIHRoZSBkaXN0aW5jdCBtb2R1bCBQbGFubmVkIEdyaWQgTWVhc3VyZXMgKGBwbGFubmVkLXBvbGljaWVzLWFjY2Vzc2AgcmVxdWlyZWQgb2YgY291cnNlKToKKy0gcGxhbm5lZC1wb2xpY2llcy1ub3JtYWx1c2VyID0gc3RhbmRhcmQgdXNlciBpbiB0aGUgcGxhbm5lZEdyaWRNZWFzdXJlcy1hcHAKKy0gcGxhbm5lZC1wb2xpY2llcy1zdXBlcnVzZXIgPSBhZG1pbiB1c2VyIGluIHRoZSBwbGFubmVkR3JpZE1lYXN1cmVzLWFwcAorCisuLi4gQWNjZXNzIHJpZ2h0cyB0byB0aGUgc3BlY2lmaWMgbW9kdWw6CistIGVsb2dib29rLWFjY2VzcworLSBwbGFubmluZy1hY2Nlc3MKKy0gZmVlZGluLW1hbmFnZW1lbnQtYWNjZXNzCistIHBsYW5uZWQtcG9saWNpZXMtYWNjZXNzCisKKy5Sb2xlIE1hcHBpbmdzIHRhYgorW29wdGlvbnM9ImhlYWRlcixmb290ZXIiXQoraW1hZ2U6OnJvbGVNYXBwaW5ncy5wbmdbUm9sZSBNYXBwaW5nXQorCisKK1tzdGFydD00XQorLi4gR28gYmFjayB0byB0aGUgYERldGFpbHNgIHRhYiBhbmQgbWFrZSBzdXJlIGBSZWNxdWlyZWQgVXNlciBBY3Rpb25zYCBpcyBlbXB0eS4gRGVsZXRlIGFueXRoaW5nIHdoaWNoIGlzIGluIHRoZXJlIHdpdGggYSBwcmVzcyBvbiB0aGUgbGl0dGxlIGNyb3NzLgorCitbc3RhcnQ9OF0KKy4gQWRkIGFuIGFkbWluIHVzZXIuIChNYW5kYXRvcnkpICsKK1NhbWUgcHJvY2VkdXJlIGxpa2UgYWRkaW5nIGEgVXNlciAoc2VlIDcuKSBidXQgd2l0aCB0aGUgcm9sZSAnZWxvZ2Jvb2stc3VwZXJ1c2VyJyBvciAncGxhbm5lZC1wb2xpY2llcy1zdXBlcnVzZXInIGluc3RlYWQgb2YKKydlbG9nYm9vay1ub3JtYWx1c2VyJyBvciAncGxhbm5lZC1wb2xpY2llcy1ub3JtYWx1c2VyJyBjb3JyZXNwb25kaW5nbHkuCisKK0lNUE9SVEFOVDogV2UgdXNlIHRoaXMgYWRtaW4gYWNjb3VudCAodXNlcm5hbWUgJiBwYXNzd29yZCkgYWxzbyB0byBjb25maWd1cmUgdGhlIGJhY2tlbmQuICsKK1NlZSAiQ29uZmlndXJhdGlvbiBvZiB0aGUgYmFja2VuZCIsCit1c2VybmFtZSAmIHBhc3N3b3JkIGZyb20gaGVyZSBpcyBrZXljbG9ha0FkbWluICYga2V5Y2xvYWtQVyB0aGVyZS4KKworCisKKz09PSBDSS0gYW5kIENELUNvbXBvbmVudHMKKworPT09PSBHSVQtUmVwb3NpdG9yeQorCis8VE9ETz4KKworPT09PSBIdWRzb24KKworPFRPRE8+CisKKz09PT0gU29uYXIKKworPFRPRE8+CisKKz09PT0gQ29kZS1Db3ZlcmFnZSBvZiB0aGUgRnJvbnRlbmQgLSBLYXJtYS1Jc3RhbmJ1bC1PdXRwdXQKKworPFRPRE8+CisKKz09PSBDb250aW51b3VzIERlcGxveW1lbnQKKworCisKKz09IERlc2lnbiBEZWNpc2lvbnMKKworQWxsIGFyY2hpdGVjdHVyZSBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIEFyY2hpdGVjdHVyZSBDb21taXR0ZWUgSGFuZGJvb2suIFRoZXJlIGFyZSBubyBkZXZpYXRpb25zLgor4oCDCisKKz09IFF1YWxpdHkgUmVxdWlyZW1lbnRzCisKK1RPRE86IE11c3Mgbm9jaCBiZXNjaHJpZWJlbiB3ZXJkZW4KKworPT09IFF1YWxpdHkgVHJlZQorCitUT0RPOiBNdXNzIG5vY2ggYmVzY2hyaWViZW4gd2VyZGVuCisKKz09PSBRdWFsaXR5IFNjZW5hcmlvcworCitUT0RPOiBNdXNzIG5vY2ggYmVzY2hyaWViZW4gd2VyZGVuCisKKworCis9PSBSaXNrcyBhbmQgVGVjaG5pY2FsIERlYnRzCisKKyhNdXNzIG5vY2ggYmVzY2hyaWViZW4gd2VyZGVuKQorCis8PDwKKworPT0gR2xvc3NhcnkKKworPT09IFRlY2huaWNhbCBDb25zdHJhaW50cworCisuVGVjaG5pY2FsIENvbnRyYWludHMKK1tvcHRpb25zPSJoZWFkZXIsZm9vdGVyIl0KK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfFNob3J0fExvbmd8R2VybWFufERlc2NyaXB0aW9uCit8QUN8QXJjaGl0ZWN0dXJlIENvbW1pdHRlZXxBcmNoaXRla3R1ci1Lb21pdHRlZXxHaXZlcyBGcmFtZXdvcmsgYW5kIENvbnN0cmFpbnRzIGFjY29yZGluZyB0byBhcmNoaXRlY3R1cmUgZm9yIG9LIHByb2plY3RzLgorfENOQ1V8Q2VudHJhbCBOZXR3b3JrIENvbnRyb2wgVW5pdHx8Cit8REFPfERhdGEgQWNjZXNzIE9iamVjdHN8fAorfERTT3xEaXN0cmlidXRpb24gU3lzdGVtIE9wZXJhdG9yfFZlcnRlaWxuZXR6LWJldHJlaWJlciAoVk5CKXxNYW5hZ2VzIHRoZSBkaXN0cmlidXRpb24gbmV0d29yayBmb3IgZW5lcmd5LCBnYXMgb3Igd2F0ZXIuCit8RVBMfEVjbGlwc2UgUHVibGljIExpY2Vuc2V8fFVuZGVybHlpbmcgbGljZW5zZSBtb2RlbCBmb3IgRWNsaXBzZSBwcm9qZWN0cyBsaWtlIGVsb2dib29rQG9wZW5LCit8RVNCfEVudGVycHJpc2UgU2VydmljZSBCdXN8fENlbnRyYWwgaW5zdGFuY2UgZm9yIGV4Y2hhbmdlIG9mIGRhdGEgdG8gb3ZlcmNvbWUgcG9pbnQtdG8tcG9pbnQgY29ubmVjdGlvbnMuCit8b0t8b3BlbktPTlNFUVVFTlp8b3BlbktPTlNFUVVFTlp8TmFtZSBvZiB0aGUgY29uc29ydGl1bSBvZiBEU09zCit8UUN8UXVhbGl0eSBDb21taXR0ZWV8UXVhbGl0w6R0c2tvbWl0ZWV8R2l2ZXMgZnJhbWV3b3JrIGFuZCBjb25zdHJhaW50cyBhY2NvcmRpbmcgdG8gcXVhbGl0eSBmb3Igb0sgcHJvamVjdHMuCit8U0NBREF8U3VwZXJ2aXNvcnkgQ29udHJvbCBhbmQgRGF0YSBBY3F1aXNpdGlvbnxOZXR6bGVpdHN5c3RlbXxTeXN0ZW0sIHRoYXQgYWxsb3dzIERTT3Mgdmlldy9jb250cm9sIGFjdHVhbCBwYXJhbWV0ZXJzIG9mIHRoZWlyIHBvd2VyIGdyaWQuCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2hvd3RvL2F1dGhfbl9hdXRoX2hvd3RvQnVpbGQuYWRvYyBiL3NyYy9tYWluL2FzY2lpZG9jL2hvd3RvL2F1dGhfbl9hdXRoX2hvd3RvQnVpbGQuYWRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFhNDczCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vYXNjaWlkb2MvaG93dG8vYXV0aF9uX2F1dGhfaG93dG9CdWlsZC5hZG9jCkBAIC0wLDAgKzEsOTcgQEAKKy8vLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyoKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vLy8KKz0gb3BlbktvbnNlcXVlbnogLSBIb3cgdG8gYnVpbGQgdGhlIG1vZHVsZSAicG9ydGFsQG9wZW5LIgorOkRhdGU6IDIwMTctMTEtMTcKKzpSZXZpc2lvbjogMQorOmljb25zOgorOnNvdXJjZS1oaWdobGlnaHRlcjogaGlnaGxpZ2h0anMKKzpoaWdobGlnaHRqcy10aGVtZTogc29sYXJpemVkX2RhcmsKKworPDw8CisKKz09IFJlcXVpcmVtZW50cworKiBBcGFjaGUgVG9tY2F0IDguMC4zMAorKiBOb2RlLmpzIDYuMTAuMAorKiBBbmd1bGFyLUNMSQorKiBHcmFwaHZpegorCis9PSBIb3cgdG8gYnVpbGQgdGhlIEJhY2tlbmQKK1RvIGJ1aWxkIHRoZSBiYWNrZW5kIHlvdSBuZWVkIHRvIGhhdmUgaW5zdGFsbGVkIEFwYWNoZSBNYXZlbiBhbmQgSmF2YSAobG9vayBhdCBgL2RlcGxveS9gKmdldF9zdGFydGVkLnR4dCopLgorCis9PT0gSW5zdGFsbCBhbmQgQ29uZmlndXJlIEFwYWNoZSBUb21jYXQKK1RvbWNhdCBpcyBhbiBvcGVuLXNvdXJjZSBKYXZhIFNlcnZsZXQgQ29udGFpbmVyIGFuZCBwcm92aWRlcyBhICJwdXJlIEphdmEiIEhUVFAgd2ViIHNlcnZlciBlbnZpcm9ubWVudCBpbiB3aGljaCBKYXZhIGNvZGUgY2FuIHJ1bi4KKworKiBEb3dubG9hZCBUb21jYXQgdmVyc2lvbiA4LjAuMzAgZnJvbSBodHRwczovL2FyY2hpdmUuYXBhY2hlLm9yZy9kaXN0L3RvbWNhdC90b21jYXQtOC92OC4wLjMwL2Jpbi8KK2FuZCBleHRyYWN0IGl0IChhcGFjaGUtdG9tY2F0LTgtMC0zMC56aXApLgorKiBQbGFjZSB0aGUgZXh0cmFjdGVkIGZvbGRlciBvbiB5b3VyIEMgZHJpdmUuCisqIENvbmZpZ3VyZSBUb21jYXQ6CisqKiBDb25maWd1cmUgdGhlICpjb250ZXh0LnhtbCogZmlsZS4gQ29weSB0aGUgKjxQYXJhbWV0ZXIg4oCmID4qIGJsb2NrIGZyb20gdGhlIHByb2plY3QgZmlsZSBgZGVwbG95L2NvbmYvYCpjb250ZXh0LnhtbCoKK2FuZCBwYXN0ZSBpdCBpbiB0aGUgYDx0b21jYXQ+L2NvbmYvYCpjb250ZXh0LnhtbCogaW4gdGhlICo8Q29udGV4dD4qIGJsb2NrLgorKiogT3IganVzdCBwYXN0ZSB0aGlzIGxpbmUgdGhlcmU6CisKKyA8UGFyYW1ldGVyIG5hbWU9Ik9LX1BPUlRBTF9FTlZJUk9OTUVOVCIgb3ZlcnJpZGU9ImZhbHNlIiB2YWx1ZT0iRGV2TG9jYWwiLz4KKworKiogRG9udCBmb3JnZXQgdG8gc2F2ZSBpdC4KKworVElQOiBGb3IgbW9yZSBpbmZvcm1hdGlvbnMgY2hlY2sgKkRlcGxveW1lbnQgVmlldyogaW4gQ2hhcHRlciAqaHR0cDovLzg3LjEyOC4yMTIuMjU0Ojg4ODAvcG9ydGFsRkVfQURvYy9hdXRoX25fYXV0aF9hcmNoaXRlY3R1cmVEb2N1bWVudGF0aW9uLmh0bWxbYXV0aF9uX2F1dGhfYXJjaGl0ZWN0dXJlRG9jdW1lbnRhdGlvbl0qLgorCisKKz09PSBJbnN0YWxsIEdyYXBodml6CitHcmFwaHZpeiBpcyBvcGVuIHNvdXJjZSBncmFwaCB2aXN1YWxpemF0aW9uIHNvZnR3YXJlLiBZb3UgbmVlZCB0aGlzIHNvZnR3YXJlIGJlY2F1c2Ugb2YgYXV0by1nZW5lcmF0ZWQgZ3JhcGhpY3MgaW4gdGhlIGRvY3VtZW50YXRpb25zLgorCisqIERvd25sb2FkIGFuZCBpbnN0YWxsIEdyYXBodml6IGZyb20gaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvRG93bmxvYWRfd2luZG93cy5waHAKKyogSWYgbm90LCBzZXQgdGhlIFBBVEggdmFyaWFibGUKKworIE5hbWUgb2YgdmFyaWFibGU6IEdSQVBIVklaX0RPVAorIFZhbHVlIG9mIHZhcmlhYmxlOiA8R1JBUEhWSVpfRElSPlxiaW5cZG90LmV4ZQorCisKKz09IEhvdyB0byBidWlsZCB0aGUgRnJvbnRlbmQKKworPT09IEluc3RhbGwgTm9kZS5qcworCitOb2RlLmpzIGlzIGFuIG9wZW4tc291cmNlLCBjcm9zcy1wbGF0Zm9ybSBKYXZhU2NyaXB0IHJ1bi10aW1lIGVudmlyb25tZW50IGZvciBleGVjdXRpbmcgSmF2YVNjcmlwdCAoYWxzbyBUeXBlc2NyaXB0IHdoaWNoIGlzIGEgc3Ryb25nbHkgdHlwZWQgZm9ybSBvZiBKYXZhU2NyaXB0KSBjb2RlIHNlcnZlci1zaWRlLgorCisqIERvd25sb2FkIE5vZGUuanMgNi4xMC4wIGZyb20gaHR0cHM6Ly9ub2RlanMub3JnL2Rvd25sb2FkL3JlbGVhc2UvdjYuMTAuMC8gYnkgY2xpY2tpbmcgb24gYSB4eHgubXNpIGltYWdlIGZvciB3aW5kb3dzLgorKiBSdW4gdGhlIGRvd25sb2FkZWQgTm9kZS5qcyAubXNpIEluc3RhbGxlciAtIGluY2x1ZGluZyBhY2NlcHRpbmcgdGhlIGxpY2Vuc2UsIHNlbGVjdGluZyB0aGUgZGVzdGluYXRpb24sIGFuZCBhdXRoZW50aWNhdGluZyBmb3IgdGhlIGluc3RhbGwuCitUaGlzIHJlcXVpcmVzIEFkbWluaXN0cmF0b3IgcHJpdmlsZWdlcywgYW5kIHlvdSBtYXkgbmVlZCB0byBhdXRoZW50aWNhdGUKKyogVG8gZW5zdXJlIE5vZGUuanMgaGFzIGJlZW4gaW5zdGFsbGVkLCBydW4gdGhlIGZvbGxvd2luZyBpbiB5b3VyIHRlcm1pbmFsIC0geW91IHNob3VsZCBnZXQgc29tZXRoaW5nIGxpa2UgdjYuMTAuMAorCitbc291cmNlLGNvbW1hbmRdCistLS0tCisgICAgJCBub2RlIC12CistLS0tCit7Ymxhbmt9CisKKz09PSBVcGRhdGUgdGhlIG5wbSBBbmd1bGFyLUNMSSBjbGllbnQKK1RoaXMgcGFja2FnZSBtYW5hZ2VyIGNvbWVzIGJ1bmRsZWQgd2l0aCBOb2RlLmpzIGFuZCBpdHMgZ29vZCB0byBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbi4KKworKiBPcGVuIGEgY29tbWFuZCBsaW5lIGFuZCBuYXZpZ2F0ZSB0byB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIGZyb250ZW5kIHByb2plY3QKKyogUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKHRoZSB2ZXJzaW9uIGlzIGRlZmluZWQgaW4gdGhlIHBhY2thZ2UuanNvbiBmaWxlKToKKworW3NvdXJjZSxjb21tYW5kXQorLS0tLQorICAgICQgbnBtIGluc3RhbGwgLS1zYXZlLWRldiBAYW5ndWxhci9jbGkKKy0tLS0KK3tibGFua30KKworW3NvdXJjZSxjb21tYW5kXQorLS0tLQorICAgICQgbnBtIGluc3RhbGwKKy0tLS0KK3tibGFua30KKworVElQOiBOZXh0IFN0ZXAgLT4gUmVhZCB0aGUgKmF1dGhfbl9hdXRoX2hvd3RvUnVuKiBmaWxlIQorCisKKworCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9hc2NpaWRvYy9ob3d0by9hdXRoX25fYXV0aF9ob3d0b1J1bi5hZG9jIGIvc3JjL21haW4vYXNjaWlkb2MvaG93dG8vYXV0aF9uX2F1dGhfaG93dG9SdW4uYWRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGRlYmZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vYXNjaWlkb2MvaG93dG8vYXV0aF9uX2F1dGhfaG93dG9SdW4uYWRvYwpAQCAtMCwwICsxLDgxIEBACisvLy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLy8vCis9IG9wZW5Lb25zZXF1ZW56IC0gSG93IHRvIHJ1biB0aGUgbW9kdWxlICJwb3J0YWxAb3BlbksiCis6RGF0ZTogMjAxNy0xMS0xNworOlJldmlzaW9uOiAxCis6aWNvbnM6Cis6c291cmNlLWhpZ2hsaWdodGVyOiBoaWdobGlnaHRqcworOmhpZ2hsaWdodGpzLXRoZW1lOiBzb2xhcml6ZWRfZGFyaworCis8PDwKKworPT0gUmVxdWlyZW1lbnRzCisqIEJyb3dzZXIgKENocm9tZSBvciBJRTExIHN1Z2dlc3RlZCkKKworPT0gUHJlcmVxdWlzaXRlcworCisqIEtleUNsb2FrIDMuMi4xIEZpbmFsIChsb29rIGF0IHRoZSAqaHR0cDovLzg3LjEyOC4yMTIuMjU0Ojg4ODAvcG9ydGFsRkVfQURvYy9hdXRoX25fYXV0aF9hcmNoaXRlY3R1cmVEb2N1bWVudGF0aW9uLmh0bWxbYXV0aF9uX2F1dGhfYXJjaGl0ZWN0dXJlRG9jdW1lbnRhdGlvbl0qIGluICpEZXBsb3ltZW50IFZpZXcqIENoYXB0ZXIgZm9yIGluc3RhbGwgaW5zdHJ1Y3Rpb25zKQorCitJTVBPUlRBTlQ6IEtleUNsb2FrIG11c3QgYmUgaW5zdGFsbGVkIGZvciBhIHN1Y2Nlc3NmdWwgbG9naW4gYXQgdGhlIGFwcGxpY2F0aW9uIQorCis9PSBIb3cgdG8gcnVuIHRoZSBCYWNrZW5kCitUbyBydW4gdGhlIGJhY2tlbmQgeW91IG5lZWQgdG8gaGF2ZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgQXBhY2hlIFRvbWNhdCAobG9vayBhdCAqYXV0aF9uX2F1dGhfaG93dG9CdWlsZCopLgorCis9PT0gU2V0IHVwIGFuZCBzdGFydCBBcGFjaGUgVG9tY2F0CitUb21jYXQgbmVlZHMgdGhlIFdlYiBBcHBsaWNhdGlvbiBBcmNoaXZlICh3YXIpIGZpbGUsIHdoaWNoIGlzIHByb2R1Y2VkIGJ5IGJ1aWxkaW5nIHRoZSBtYXZlbiBwcm9qZWN0LCB0byBydW4gdGhlIGFwcGxpY2F0aW9uLgorCisqIENvcHkgdGhlICpwb3J0YWwud2FyKiBmaWxlIGZyb20gdGhlIHByb2plY3QgZmlsZSBgL3RhcmdldGAgaW4gdGhlIGA8dG9tY2F0Pi93ZWJhcHBzYCBmaWxlLiBJZiB0aGVyZSBpcyBhIGZvbGRlciBuYW1lZCAqcG9ydGFsKiwgZGVsZXRlIGl0IGJlZm9yZS4KKyogTmF2aWdhdGUgdG8gYEM6XGFwYWNoZS10b21jYXQtOC4wLjMwXGJpbmAgYW5kIHN0YXJ0IFRvbWNhdCBieSBjbGlja2luZyBvbiAqc3RhcnR1cC5iYXQqLgorKiBUb21jYXQncyBkZWZhdWx0IHBvcnQgaXMgKjgwODAqLgorCitbc291cmNlLHRleHRdCistLS0tCitJZiA4MDgwIHBvcnQgaXMgYWxyZWFkeSBpbiB1c2UsIHlvdSBoYXZlIHRvIGNoYW5nZSB0b21jYXQncyBwb3J0IGFzIGZvbGxvd3M6CistIEdvIHRvIDx0b21jYXQ+L2NvbmYgZm9sZGVyCistIE9wZW4gc2VydmVyLnhtbCBmaWxlIGFuZCBzZWFyY2ggZm9yICJDb25uZWN0b3IgcG9ydCIKKy0gUmVwbGFjZSAiODA4MCIgYnkgeW91ciBwb3J0IG51bWJlciAoZm9yIGV4YW1wbGUgODE4MSkKKy0gUmVzdGFydCB0b21jYXQgc2VydmVyIChpbiB0aGUgc2FtZSBmb2xkZXIgd2hpY2ggc3RhcnR1cC5iYXQgaXMgbG9jYXRlZCwgeW91IGNhbiBhbHNvIGZpbmQgYSBzaHV0ZG93bi5iYXQgZmlsZSkuCistLS0tCit7Ymxhbmt9CisKK0lNUE9SVEFOVDogSWYgeW91IGNoYW5nZSB0aGUgcG9ydCBudW1iZXIgeW91IGhhdmUgYWxzbyBhZGFwdCB0aGUgcG9ydCBpbiB0aGUKK2Zyb250ZW5kIHByb2plY3Q6IEZpbGUgIjxQUkpfcG9ydGFsRkU+L3Byb3h5LmNvbmYuanNvbiIuIFRoZXJlIG1pZ2h0IGJlIG90aGVyIGNvbmZpZyBmaWxlcwordGhhdCBuZWVkIHRvIGJlIGFkZXB0ZWQgYXMgd2VsbCEKKworVElQOiBMb29rIGF0IHRoZSAqaHR0cDovLzg3LjEyOC4yMTIuMjU0Ojg4ODAvcG9ydGFsRkVfQURvYy9hdXRoX25fYXV0aF9pbnRlcmZhY2VEb2N1bWVudGF0aW9uLmh0bWxbYXV0aF9uX2F1dGhfaW50ZXJmYWNlRG9jdW1lbnRhdGlvbl0qIGZvciBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIHNlcnZpY2VzLgorCis9PSBIb3cgdG8gcnVuIHRoZSBGcm9udGVuZAorVG8gcnVuIHRoZSBmcm9udGVuZCBwcm9qZWN0IHlvdSBuZWVkIHRvIGhhdmUgaW5zdGFsbGVkIGFuZCB1cGRhdGVkIE5vZGUuanMgYW5kIG5wbSBBbmd1bGFyLUNMSS4KKworPT09IENvbXBpbGUgdGhlIEZyb250ZW5kCisKK1RvIGNvbXBpbGUgc2F5IEFuZ3VsYXItQ0xJIHRvIHN0YXJ0LgorCisqIE9wZW4gYSBjb21tYW5kIGxpbmUgYW5kIG5hdmlnYXRlIHRvIHRoZSByb290IGZvbGRlciBvZiB0aGUgZnJvbnRlbmQgcHJvamVjdAorKiBSdW4gdGhlIGNvbW1hbmQKKworW3NvdXJjZSxjb21tYW5kXQorLS0tLQorICAgJCAgbnBtIHN0YXJ0CistLS0tCit7Ymxhbmt9CisKKyogT3BlbiBhIGJyb3dzZXIgYW5kIHR5cGU6CisKK1tzb3VyY2UsaHR0cF0KKy0tLS0KKyAgICBodHRwOi8vbG9jYWxob3N0OjQyMDEKKy0tLS0KK3tibGFua30KKworSU1QT1JUQU5UOiBUbyBvcGVuIHRoZSAqQmV0cmllYnN0YWdlYnVjaCogbW9kdWxlIHlvdSBoYXZlIHRvIHJ1biB0aGUgKmVsb2dib29rKiBhcHBsaWNhdGlvbiB0b28uCisKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9DcmVhdGVNYXBwZXIucG5nIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL0NyZWF0ZU1hcHBlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4MzVjYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9DcmVhdGVNYXBwZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9DcmVhdGVSb2xlTWFwcGVyLnBuZyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9DcmVhdGVSb2xlTWFwcGVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWU2ZWEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL0NyZWF0ZVJvbGVNYXBwZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9Gcm9udGVuZFRpZXIucG5nIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL0Zyb250ZW5kVGllci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyMGNjNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9Gcm9udGVuZFRpZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9hZGRDbGllbnQucG5nIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL2FkZENsaWVudC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5NDE0YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9hZGRDbGllbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9hZGRpbmdVc2Vycy5wbmcgYi9zcmMvbWFpbi9hc2NpaWRvYy9pbWFnZXMvYWRkaW5nVXNlcnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzUxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9hc2NpaWRvYy9pbWFnZXMvYWRkaW5nVXNlcnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9jbGllbnRTZXR0aW5ncy5wbmcgYi9zcmMvbWFpbi9hc2NpaWRvYy9pbWFnZXMvY2xpZW50U2V0dGluZ3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZjgwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9hc2NpaWRvYy9pbWFnZXMvY2xpZW50U2V0dGluZ3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9jcmVhdGVDbGllbnQucG5nIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL2NyZWF0ZUNsaWVudC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4NmM2ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9jcmVhdGVDbGllbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9jcmVkZW50aWFscy5wbmcgYi9zcmMvbWFpbi9hc2NpaWRvYy9pbWFnZXMvY3JlZGVudGlhbHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNWMyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9hc2NpaWRvYy9pbWFnZXMvY3JlZGVudGlhbHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy9jYXV0aW9uLnBuZyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy9jYXV0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YThjNTE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL2ljb25zL2NhdXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy9pbXBvcnRhbnQucG5nIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL2ljb25zL2ltcG9ydGFudC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2ODVjYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy9pbXBvcnRhbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy9ub3RlLnBuZyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy9ub3RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzFmM2UyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL2ljb25zL25vdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy90aXAucG5nIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL2ljb25zL3RpcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4N2M3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy90aXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy93YXJuaW5nLnBuZyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9pY29ucy93YXJuaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFlZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL2ljb25zL3dhcm5pbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9uZXdSZWFsbTEucG5nIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL25ld1JlYWxtMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyOGE1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9uZXdSZWFsbTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9uZXdSZWFsbTIucG5nIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL25ld1JlYWxtMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzOWUxYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9uZXdSZWFsbTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9yb2xlTWFwcGluZ3MucG5nIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL3JvbGVNYXBwaW5ncy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyOGIyOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9yb2xlTWFwcGluZ3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9yb2xlU3VwZXJVc2VyLnBuZyBiL3NyYy9tYWluL2FzY2lpZG9jL2ltYWdlcy9yb2xlU3VwZXJVc2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTNkMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vYXNjaWlkb2MvaW1hZ2VzL3JvbGVTdXBlclVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2FzY2lpZG9jL2ludGVyZmFjZURvY3VtZW50YXRpb24vYXV0aF9uX2F1dGhfaW50ZXJmYWNlRG9jdW1lbnRhdGlvbi5hZG9jIGIvc3JjL21haW4vYXNjaWlkb2MvaW50ZXJmYWNlRG9jdW1lbnRhdGlvbi9hdXRoX25fYXV0aF9pbnRlcmZhY2VEb2N1bWVudGF0aW9uLmFkb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhZWQ2NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2FzY2lpZG9jL2ludGVyZmFjZURvY3VtZW50YXRpb24vYXV0aF9uX2F1dGhfaW50ZXJmYWNlRG9jdW1lbnRhdGlvbi5hZG9jCkBAIC0wLDAgKzEsNDAyIEBACivvu78vLy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLy8vCithdXRoQW5kQXV0aEBvcGVuSyAtIEJhY2tlbmQgUkVTVC1TZXJ2aWNlIGRvY3VtZW50YXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOkF1dGhvcjogRnJhbmsgRGlldHJpY2gKKzpFbWFpbDogZnJhbmsuZGlldHJpY2hAcHRhLmRlCis6RGF0ZTogMjAxNy0wNy0xMgorOlJldmlzaW9uOiAxCis6aWNvbnM6Cis6c291cmNlLWhpZ2hsaWdodGVyOiBoaWdobGlnaHRqcworOmhpZ2hsaWdodGpzLXRoZW1lOiBzb2xhcml6ZWRfZGFyaworCisKKz09IEJhc2UtVVJMCisKKy0tLS0KK2h0dHA6Ly88aG9zdD46PHBvcnQ+LzxuYW1lLW9mLXdhcj4vcmVzdC9iZXNlcnZpY2UKKy0tLS0KKworPT0gQ29tbW9uIEZlYXR1cmVzCitBbGwgc2VydmljZXMgbWF5IHJldHVybiB0aGUgZm9sbG93aW5nIGh0dHAgc3RhdHVzIGNvZGVzOgorCisuSHR0cC1TdGF0dXMtQ29kZXMKK1tvcHRpb25zPSJoZWFkZXIsZm9vdGVyIl0KK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3xDb2RlfERlc2NyaXB0aW9ufFVzYWdlIHdpdGhpbiB0aGUgYXBwbGljYXRpb24KK3wyMDB8T0t8LQorfDQwMHxCYWQgUmVxdWVzdHxUaGUgc3RydWN0dXJlIG9mIHRoZSByZXF1ZXN0IChmb3IgZXhhbXBsZSBhIEpTT04gd2l0aGluIGEgcG9zdCByZXF1ZXN0KSBpcyBub3QgY29ycmVjdAorfDQwMXxVbmF1dGhvcml6ZWR8TG9naW4tY3JlZGVudGlhbHMgYXJlIHdyb25nIG9yIHRoZXJlIGlzIGFuIGludmFsaWQgc2Vzc2lvbiB0b2tlbgorfDUwMHxJbnRlcm5hbCBTZXJ2ZXIgRXJyb3J8QW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZAorfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB0aGVyZSBpcyBhIHNwZWNpYWwgc2VydmljZSBiZWhhdmlvciByZWdhcmRpbmcgdGhlIHJldHVybmVkIGh0dHAgc3RhdHVzIGNvZGUsIHRoZW4gaXQgd2lsbCBiZSBleHBsYWluZWQgd2l0aGluIHRoZSBzZXJ2aWNlIGRlc2NyaXB0aW9uLgorCis9PSBQcm90ZWN0aW9uCisKK1RoZSBwcm90ZWN0aW9uIG9mIHNlcnZpY2VzIGlzIGltcGxlbWVudGVkIGJ5IGEgc2VjdXJpdHkgdG9rZW4gZm9sbG93aW5nIHRoZSBKV1QgKEpTT04gV2ViIFRva2VuKSBzcGVjaWZpY2F0aW9uOgoraHR0cHM6Ly9qd3QuaW8vCisKK1RoZSAq4oCcbG9naW7igJ0qLXNlcnZpY2UgcHJvdmlkZXMgYSBKV1QsIHdoZW4gY2FsbGVkIHdpdGggdmFsaWQgdXNlci1jcmVkZW50aWFscy4KK1RoZSBzZWN1cml0eSB0b2tlbiAoYWNjZXNzIHRva2VuKSAod2hpY2ggaXMgcGFydCBvZiB0aGUgSldUKSBoYXMgYWx3YXlzIHRvIGJlIHByb3ZpZGVkIHdpdGggdGhlCitIVFRQLUhlYWRlci1QYXJhbWV0ZXIgIkF1dGhvcml6YXRpb24iLCBpbiBvcmRlciB0byBhY2Nlc3MgYSBzZWN1cmVkIHNlcnZpY2VzIGxhdGVyIG9uLgorCisKKz09PSBKU09OIFdlYiBUb2tlbgorCitUaGUgdG9rZW4gaGFzIHNldmVyYWwgcHVycG9zZXMuIEEgdHlwaWNhbCBjbGllbnQgb2YgdGhlIEF1dGgmQXV0aC1TZXJ2aWNlIG5lZWRzIHRvIHVzZQordGhlIGZvbGxvd2luZyBmZWF0dXJlczoKKworLiAqYWNjZXNzIHRva2VuKiB0byBhY2Nlc3MgZnVuY3Rpb25zIG9mIGEgc2VjdXJlZCBzZXJ2aWNlCisuICp1c2VyLWluZm9ybWF0aW9uKiB0byBnZXQgZXh0ZW5kZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG93biB1c2VyCisuICp1c2VyLXJvbGVzKiBvZiB0aGUgb3duIHVzZXIuCisKK0V2ZW4gdGhvdWdoIEpXVCBpcyBhIGRlZmluZWQgc3RhbmRhcmQsIHdlIG9ubHkgd2lsbCBkZXNjcmliZSB0aG9zZSBmZWF0dXJlcyBpbnNpZGUgdGhpcyBkb2N1bWVudCwKK3doaWNoIGFyZSBkaXJlY3RseSB1c2VkIGJ5IHRoZSBBdXRoJkF1dGgtU2VydmljZS4KKworR2VuZXJhbGx5IEpXVCB1c2VzICpiYXNlNjQtZW5jb2RpbmcqLiBUaGUgZGF0YSwgdGhhdCBpcyBzdG9yZWQgaW4gYSB0b2tlbiBpcyBhbHdheXMKK2VuY29kZWQgd2l0aCAqYmFzZTY0Ki4KKworW0lNUE9SVEFOVF0KKz09PT0KK1RoZSBkYXRhIGluIHRoZSBleGFtcGxlcyBoYXMgYmVlbiBzaG9ydGVuZWQuIFJlYWwgZXhhbXBsZXMgd291bGQgYmUgdmVyeSBsb25nIGFuZCBoYXJkIHRvIHJlYWQuCis9PT09CisKKz09PT0gQWNjZXNzIHRva2VuCitUaGUgKmFjY2VzcyB0b2tlbiogY2FuIGJlIGRpcmVjdGx5IGZvdW5kIGluIHRoZSBmaWVsZCAiYWNjZXNzX3Rva2VuIiB3aXRoaW4gdGhlIEpXVC4KKworCisKK0V4YW1wbGU6Citbc291cmNlLGpzb25dCistLS0tCit7CisgICAgImFjY2Vzc190b2tlbiI6ImV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSWdPaUFpeHh4SW4wLmV5QkJCLmV5ZGtrIiwKKyAgICAiZXhwaXJlc19pbiI6MzAwLAorICAgICJyZWZyZXNoX2V4cGlyZXNfaW4iOjE4MDAsCisgICAgInJlZnJlc2hfdG9rZW4iOiJleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaXh4eEluMC5leUpxZEd3TFRReU1UWXRPRC5leWRrayIsCisgICAgInRva2VuX3R5cGUiOiJiZWFyZXIiLAorICAgICJpZF90b2tlbiI6ImV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSWdPaUFpU2xkVUlpd2lhMmwuZXlKcWRHa0xUUmpaVEl0WVQub1Vra2UiLAorICAgICJub3QtYmVmb3JlLXBvbGljeSI6MTUwMjQ1Mzc1MSwKKyAgICAic2Vzc2lvbl9zdGF0ZSI6IjhiNGU2OTc5LTFkNTEtNDA4Ni05ZGI1LWQyOTZmNzBiNGI2NSIKK30KKworLS0tLQorCisKKz09PT0gVXNlci1JbmZvcm1hdGlvbi9Vc2VyUm9sZXMKKworVGhlIDJuZCBwYXJ0IChiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIHNlY29uZCBwZXJpb2QgKiIuIiogLSBpbiB0aGlzIGV4YW1wbGUgIidleUJCQiciKSBvZiB0aGUgYWNjZXNzLXRva2VuIGlzIGNhbGxlZCB0aGUgKiJhY2Nlc3MtdG9rZW4tcGF5bG9hZCIqLiBXaGVuIGRlY29kZWQgZnJvbSBCYXNlNjQgaXQgY291bGQKK2xvb2sgbGlrZSB0aGlzOgorCitbc291cmNlLGpzb25dCistLS0tCit7CisgICAgImp0aSI6ImEzZDE1Y2NmLWMwZTMtNDUzNC1hMDVhLWYxOGIzYTdjNzc4YiIsCisgICAgImV4cCI6MTUwNTczNjI1NywKKyAgICAibmJmIjowLAorICAgICJpYXQiOjE1MDU3MzU5NTcsCisgICAgImlzcyI6Imh0dHA6Ly9hdXRoc2VydmVyOjgwODAvYXV0aC9yZWFsbXMvZWxvZ2Jvb2siLAorICAgICJhdWQiOiJlbG9nYm9vay1iYWNrZW5kIiwKKyAgICAic3ViIjoiYzRiNzhhYTctOTFkMi00NWQ3LThjYTMtMTYzMTU2ZDllZTQwIiwKKyAgICAidHlwIjoiQmVhcmVyIiwKKyAgICAiYXpwIjoiZWxvZ2Jvb2stYmFja2VuZCIsCisgICAgImF1dGhfdGltZSI6MCwKKyAgICAic2Vzc2lvbl9zdGF0ZSI6IjU5YWU0YTY4LTU5NWItNDM0NS04NzNkLWFhZGYwYTNlZmM5NCIsCisgICAgImFjciI6IjEiLAorICAgICJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLAorICAgICJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZWxvZ2Jvb2stbm9ybWFsdXNlciIsInVtYV9hdXRob3JpemF0aW9uIl19LAorICAgICJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwKKyAgICAibmFtZSI6Ikh1Z28gQm9zcyIsCisgICAgInByZWZlcnJlZF91c2VybmFtZSI6Imh1Z28iLAorICAgICJnaXZlbl9uYW1lIjoiSHVnbyIsCisgICAgImZhbWlseV9uYW1lIjoiQm9zcyIKK30KKy0tLS0KKworVGhlIGNvbmZpZ3VyZWQgcm9sZXMgb2YgdGhlIHVzZXIgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUganNvbiBhcnJheToKKworICogKnJlYWxtX2FjY2VzcyIqCisKK0V4dGVuZGVkCit1c2VyIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmllbGRzOgorCisgKiAqIm5hbWUiKgorICogKiJwZXJmZXJyZWRfdXNlcm5hbWUiKgorICogKiJnaXZlbl9uYW1lIioKKyAqICoiZmFtaWx5X25hbWUiKi4KKworCis9PSBTZXJ2aWNlcworPT09IFJlY2VpdmUgVmVyc2lvbiBJbmZvcm1hdGlvbgorVGhpcyBzZXJ2aWNlIHJldHVybnMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYmFja2VuZCBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIHN0cnVjdHVyZS4KKworKlVSTDoqIC92ZXJzaW9uSW5mbworCisqTWV0aG9kOiogR0VUCisKKypSZXF1ZXN0LUhlYWRlcnMqOgorCisqUHJvZHVjZXMqOiBhcHBsaWNhdGlvbi9qc29uCisKKypSZXNwb25zZSo6Citbc291cmNlLGpzb25dCistLS0tCit7CisgICAgImJhY2tlbmRWZXJzaW9uIjogIjAuMS4xLVNuYXBzaG90IgorfQorLS0tLQorCisqUHJvdGVjdGlvbio6IG5vbmUKKworKlJlbWFya3MqOgorCis9PT0gTG9naW4KK1RoaXMgc2VydmljZSByZWNlaXZlcyBsb2dpbiBjcmVkZW50aWFscyBpbiBvcmRlciB0byBwZXJmb3JtIHRoZSBhdXRoZW50aWNhdGlvbi4gSWYgdGhlIGxvZ2luIHN1Y2NlZWRzLAoraXQgcHJvdmlkZXMgYSB2YWxpZCBKV1QsIHVzZWQgZm9yIGFjY2Vzc2luZyBvdGhlciBzZXJ2aWNlcyBsYXRlciBvbi4KKworKlVSTDoqIC9sb2dpbgorCisqTWV0aG9kOiogUE9TVAorCisqUmVxdWVzdC1Cb2R5KjoKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgInVzZXJOYW1lIjogIk11c3Rlcm1hbm4iLAorICAicGFzc3dvcmQiOiAiY2xlYXJwYXNzd29yZCIKK30KKy0tLS0KKworKlByb2R1Y2VzKjogYXBwbGljYXRpb24vanNvbgorCisqUmVzcG9uc2UqOgorCitKV1QgKEpTT04gV2ViIFRva2VuKQorCisqUmVtYXJrcyo6IFNlZSBjaGFwdGVyICIqSldUKiIgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgZmVhdHVyZXMgb2YgdGhlIHJldHVybmVkIHRva2VuLgorCisKKz09PSBMb2dvdXQKK1RoaXMgc2VydmljZXMga2lsbHMgdGhlIHNlcnZlciBzZXNzaW9uIGJlbG9uZ2luZyB0byB0aGUgdGhlIGdpdmVuIHNlc3Npb24gdG9rZW4uCisKKypVUkw6KiAvbG9nb3V0CisKKypNZXRob2Q6KiBQT1NUCisKKypSZXF1ZXN0LUhlYWRlcnMqOgorCisqIEF1dGhvcml6YXRpb24g4oCTIEV4aXN0aW5nIGFjY2VzcyB0b2tlbgorCisKKypQcm9kdWNlcyo6IGFwcGxpY2F0aW9uL2pzb24KKworKlJlc3BvbnNlKjoKKworKlJlbWFya3MqOgorCis9PT0gQ2hlY2tBdXRob3JpemF0aW9uCitUaGlzIHNlcnZpY2VzIHJlY2VpdmVzIGEgSldUIGluIHRoZSAiQXV0aG9yaXphdGlvbiIgSHR0cCBoZWFkZXIgYW5kIGNoZWNrcywgaWYgaXRzIHN0aWxsIHZhbGlkLgorSWYgaXQgaXMgdmFsaWQsIGl0IHJlc2V0cyB0aGUgaW5hY3Rpdml0eSB0aW1lIGZvciB0aGF0IHRva2VuLgorCisqVVJMOiogL2NoZWNrQXV0aAorCisqTWV0aG9kOiogR0VUCisKKypSZXF1ZXN0LUhlYWRlcnMqOgorCisqIEF1dGhvcml6YXRpb24g4oCTIEV4aXN0aW5nIGFjY2VzcyB0b2tlbgorCisKKypQcm9kdWNlcyo6IGFwcGxpY2F0aW9uL2pzb24KKworKlJlc3BvbnNlKjoKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgInJldCI6ICJPSyIKK30KKy0tLS0KKworKlJlbWFya3MqOiBUaGlzIHNlcnZpY2UgcmV0dXJuIE9LIHdoZW4gdGhlIHByb3ZpZGVkIHRva2VuIGlzIHN0aWxsIHZhbGlkLiBPdGhlcndpc2UgaXQgcmV0dXJucyBhIDQwMSAtICJVbmF1dGhvcml6ZWQiIEh0dHAgQ29kZS4KKworPT09IEdldCB1c2VyIG1vZHVsZXMgZm9yIHRoZSBjdXJyZW50IHVzZXIKK1RoaXMgc2VydmljZSByZXR1cm5zIHRoZSBtb2R1bGVzIGZvciB3aGljaCB0aGUgdXNlciBpcyBhdXRob3JpemVkLgorCisqVVJMOiogL3VzZXJNb2R1bGVzRm9yVXNlcgorCisqTWV0aG9kOiogR0VUCisKKypSZXF1ZXN0LUhlYWRlcnMqOgorCisqIEF1dGhvcml6YXRpb24g4oCTIEV4aXN0aW5nIGFjY2VzcyB0b2tlbgorCisKKypQcm9kdWNlcyo6IGFwcGxpY2F0aW9uL2pzb24KKworKlJlc3BvbnNlKjoKK1tzb3VyY2UsanNvbl0KKy0tLS0KK1sKKyAgICB7CisgICAgICAgICJuYW1lIjoiQmV0cmllYnN0YWdlYnVjaCIsCisgICAgICAgICJjb2xzIjoxLAorICAgICAgICAicm93cyI6MSwKKyAgICAgICAgImNvbG9yIjoiI2ZmZmZmZiIsCisgICAgICAgICJsaW5rIjoiaHR0cDovLzE3Mi4xOC4yMi4xNjA6ODg4MC9lbG9nYm9va0ZFIiwKKyAgICAgICAgInBpY3R1cmVMaW5rIjoiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUveHh4ZWxvZ2J1Y2hfMjQ0MzYzNi5qcGciLAorICAgICAgICAicmVxdWlyZWRSb2xlIjoiZWxvZ2Jvb2tfYWNjZXNzIgorICAgIH0KKyAgICAsCisgICAgeworICAgICAgICAibmFtZSI6IkJlcmVpdHNjaGFmdHNwbGFudW5nIiwKKyAgICAgICAgImNvbHMiOjEsCisgICAgICAgICJyb3dzIjoxLAorICAgICAgICAiY29sb3IiOiIjZmZmZmZmIiwKKyAgICAgICAgImxpbmsiOiJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9hbndlbmRlci94eHh4Lzk0LWJlcmVpdHNjaGFmdHNwbGFuIiwKKyAgICAgICAgInBpY3R1cmVMaW5rIjoiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvbWVkaWVuL3h4eC9sX2JlcmVpdHNjaGFmdHNwbGFuXzU3ODgyMDQ3LmpwZyIsCisgICAgICAgICJyZXF1aXJlZFJvbGUiOiJwbGFubmluZ19hY2Nlc3MiCisgICAgfQorICAgICwKKyAgICB7CisgICAgLi4uCisgICAgfQorXQorLS0tLQorCisqUmVtYXJrcyo6IFRoaXMgc2VydmljZSBjaGVja3MgaWYgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlciBoYXMgdGhlIHJvbGUgInJlcXVpcmVkUm9sZSIgaW4gaXRzIEpXVCBhbmQKK3JldHVybnMgdGhlIG1vZHVsZXMgaGUgaXMgYXV0aG9yaXplZCBmb3IuCisKKworPT09IEdldCBhbGwgdXNlcnMgZm9yIGEgc3BlY2lmaWMgcm9sZQorVGhpcyBzZXJ2aWNlIHJldHVybnMgYWxsIHVzZXJzIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkIHJvbGUuCisKKypVUkw6KiAvdXNlcnNGb3JSb2xlL3t1c2VyUm9sZX0KKworKk1ldGhvZDoqIEdFVAorCisqUGF0aC1QYXJhbWV0ZXIqOiB1c2VyUm9sZQorCisqIFRoZSByb2xlIG5hbWUgbGlrZSBpdCBpcyBkZWZpbmVkIGluIEtleWNsb2FrCisKKypSZXF1ZXN0LUhlYWRlcnMqOgorCisqIEF1dGhvcml6YXRpb24g4oCTIEV4aXN0aW5nIGFjY2VzcyB0b2tlbgorCisKKypQcm9kdWNlcyo6IGFwcGxpY2F0aW9uL2pzb24KKworKlJlc3BvbnNlKjoKK1tzb3VyY2UsanNvbl0KKy0tLS0KK1sKKyAgICB7CisgICAgICAgICJpZCI6ICIzNTllZjljOS03N2RmLTRhM2QtYTljOS1mOTZkODM3ZDJkNTciLAorICAgICAgICAiY3JlYXRlZFRpbWVzdGFtcCI6IDE1MDE1OTQxNzM3ODQsCisgICAgICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCisgICAgICAgICJlbmFibGVkIjogdHJ1ZSwKKyAgICAgICAgInRvdHAiOiBmYWxzZSwKKyAgICAgICAgImVtYWlsVmVyaWZpZWQiOiBmYWxzZSwKKyAgICAgICAgImZpcnN0TmFtZSI6ICJBZG1pbmlzdHJhdG9yIiwKKyAgICAgICAgImxhc3ROYW1lIjogIkFkbWluaXN0cmF0b3dpY2giLAorICAgICAgICAicmVhbG1Sb2xlcyI6IFsKKyAgICAgICAgICAgICJlbG9nYm9vay1zdXBlcnVzZXIiLAorICAgICAgICAgICAgImVsb2dib29rX2FjY2VzcyIsCisgICAgICAgICAgICAidW1hX2F1dGhvcml6YXRpb24iLAorICAgICAgICAgICAgImVsb2dib29rLW5vcm1hbHVzZXIiCisgICAgICAgIF0sCisgICAgICAgICJkaXNhYmxlYWJsZUNyZWRlbnRpYWxUeXBlcyI6IFsKKyAgICAgICAgICAgICJwYXNzd29yZCIKKyAgICAgICAgXSwKKyAgICAgICAgInJlcXVpcmVkQWN0aW9ucyI6IFtdLAorICAgICAgICAiYWNjZXNzIjogeworICAgICAgICAgICAgIm1hbmFnZUdyb3VwTWVtYmVyc2hpcCI6IGZhbHNlLAorICAgICAgICAgICAgInZpZXciOiB0cnVlLAorICAgICAgICAgICAgIm1hcFJvbGVzIjogZmFsc2UsCisgICAgICAgICAgICAiaW1wZXJzb25hdGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJtYW5hZ2UiOiBmYWxzZQorICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAgICJpZCI6ICJjNGI3OGFhNy05MWQyLTQ1ZDctOGNhMy0xNjMxNTZkOWVlNDAiLAorICAgICAgICAiY3JlYXRlZFRpbWVzdGFtcCI6IDE1MDE1OTQyMzkwNjYsCisgICAgICAgICJ1c2VybmFtZSI6ICJodWdvIiwKKyAgICAgICAgImVuYWJsZWQiOiB0cnVlLAorICAgICAgICAidG90cCI6IGZhbHNlLAorICAgICAgICAiZW1haWxWZXJpZmllZCI6IGZhbHNlLAorICAgICAgICAiZmlyc3ROYW1lIjogIkh1Z28iLAorICAgICAgICAibGFzdE5hbWUiOiAiQm9zcyIsCisgICAgICAgICJyZWFsbVJvbGVzIjogWworICAgICAgICAgICAgImVsb2dib29rX2FjY2VzcyIsCisgICAgICAgICAgICAiZWxvZ2Jvb2stbm9ybWFsdXNlciIKKyAgICAgICAgXSwKKyAgICAgICAgImRpc2FibGVhYmxlQ3JlZGVudGlhbFR5cGVzIjogWworICAgICAgICAgICAgInBhc3N3b3JkIgorICAgICAgICBdLAorICAgICAgICAicmVxdWlyZWRBY3Rpb25zIjogW10sCisgICAgICAgICJhY2Nlc3MiOiB7CisgICAgICAgICAgICAibWFuYWdlR3JvdXBNZW1iZXJzaGlwIjogZmFsc2UsCisgICAgICAgICAgICAidmlldyI6IHRydWUsCisgICAgICAgICAgICAibWFwUm9sZXMiOiBmYWxzZSwKKyAgICAgICAgICAgICJpbXBlcnNvbmF0ZSI6IGZhbHNlLAorICAgICAgICAgICAgIm1hbmFnZSI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgIC4uLgorICAgIH0KK10KKy0tLS0KKworKlJlbWFya3MqOgorCis9PT0gR2V0IGhlYWx0aCBzdGF0ZQorVGhpcyBzZXJ2aWNlIHJldHVybnMgdGhlIGhlYWx0aCBzdGF0ZSBvZiB0aGlzIG1vZHVsZS4KKworKlVSTDoqIC9oZWFsdGhjaGVjay9wcmV0dHk9dHJ1ZQorCisqTWV0aG9kOiogR0VUCisKKworCisqUmVxdWVzdC1IZWFkZXJzKjoKKworKiBBdXRob3JpemF0aW9uIOKAkyBub25lCisKKworKlByb2R1Y2VzKjogYXBwbGljYXRpb24vanNvbgorCisqUmVzcG9uc2UqOgorCitJZiB0aGUgbW9kdWxlIGlzIGhlYWx0aHkgdGhlbi4uLgorW3NvdXJjZSxqc29uXQorLS0tLQoreyJLZXljbG9hayBwcmVzZW50Ijp7ImhlYWx0aHkiOnRydWV9fQorLS0tLQorCitJZiB0aGUgbW9kdWxlIGlzICpub3QqIGhlYWx0aHkuLi4KK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgICAiS2V5Y2xvYWsgcHJlc2VudCI6CisgICAgeworICAgICAgICAiaGVhbHRoeSI6ZmFsc2UsCisgICAgICAgICJtZXNzYWdlIjoiPEVycm9yIG1lc3NhZ2U+IgorICAgIH0KK30KKy0tLS0KKworCisqUmVtYXJrcyo6CisKKworCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9Kd3RBY2NvdW50LmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9Kd3RBY2NvdW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlZjdmZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2F1dGgyL21vZGVsL0p3dEFjY291bnQuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEp3dEFjY291bnQgeworICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHJvbGVzOworCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRSb2xlcygpIHsKKyAgICAgICAgcmV0dXJuIHJvbGVzOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRSb2xlcyhMaXN0PFN0cmluZz4gcm9sZXMpIHsgdGhpcy5yb2xlcyA9IHJvbGVzOyB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9Kd3RIZWFkZXIuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2F1dGgyL21vZGVsL0p3dEhlYWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MThiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9Kd3RIZWFkZXIuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWw7CisKK3B1YmxpYyBjbGFzcyBKd3RIZWFkZXIgeworICAgIHByaXZhdGUgU3RyaW5nIGFsZzsKKyAgICBwcml2YXRlIFN0cmluZyB0eXA7CisgICAgcHJpdmF0ZSBTdHJpbmcga2lkOworCisgICAgcHVibGljIFN0cmluZyBnZXRBbGcoKSB7IHJldHVybiBhbGc7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRBbGcoU3RyaW5nIGFsZykgeyB0aGlzLmFsZyA9IGFsZzsgfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwKCkgeyByZXR1cm4gdHlwOyB9CisgICAgcHVibGljIHZvaWQgc2V0VHlwKFN0cmluZyB0eXApIHsgdGhpcy50eXAgPSB0eXA7IH0KKyAgICBwdWJsaWMgU3RyaW5nIGdldEtpZCgpIHsgcmV0dXJuIGtpZDsgfQorICAgIHB1YmxpYyB2b2lkIHNldEtpZChTdHJpbmcga2lkKSB7IHRoaXMua2lkID0ga2lkOyB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9Kd3RQYXlsb2FkLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9Kd3RQYXlsb2FkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2ZmZlMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2F1dGgyL21vZGVsL0p3dFBheWxvYWQuamF2YQpAQCAtMCwwICsxLDExMyBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsOworCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisKK3B1YmxpYyBjbGFzcyBKd3RQYXlsb2FkIHsKKworICAgIC8vTm8gU29uYXIgYmVjYXVzZSB2YXJpYWJsZXMgYXJlIHdyb25nIGR1ZSB0byBqd3QgZGVmaW5pdGlvbgorCisgICAgcHJpdmF0ZSBTdHJpbmcganRpOworICAgIHByaXZhdGUgbG9uZyBleHA7CisgICAgcHJpdmF0ZSBsb25nIG5iZjsKKyAgICBwcml2YXRlIGxvbmcgaWF0OworICAgIHByaXZhdGUgU3RyaW5nIGlzczsKKworICAgIC8vU2luY2UgS2V5Y2xvYWsgNC44LjMgImF1ZCIgUGFyYW1ldGVyIGlzIGFuIGFycmF5IG5vdworICAgIC8vUHJlIDQuOC4zICJhdWQiIHdhcyBhIHNpbmdsZSBTdHJpbmcKKyAgICAvL1dlIGtlZXAgaXQgZm9yIGRvY3VtZW50YXRpb24gcmVhc29ucworICAgIC8vcHJpdmF0ZSBTdHJpbmdbXSBhdWQ7IC8vTk9TT05BUgorICAgIC8vcHJpdmF0ZSBTdHJpbmcgYXVkOyAvL05PU09OQVIKKyAgICBwcml2YXRlIFN0cmluZyBzdWI7CisgICAgcHJpdmF0ZSBTdHJpbmcgdHlwOworICAgIHByaXZhdGUgU3RyaW5nIGF6cDsKKyAgICBwcml2YXRlIFN0cmluZyBub25jZTsKKyAgICBwcml2YXRlIEludGVnZXIgYXV0aF90aW1lOyAvL05PU09OQVIKKyAgICBwcml2YXRlIFN0cmluZyBzZXNzaW9uX3N0YXRlOyAvL05PU09OQVIKKyAgICBwcml2YXRlIFN0cmluZyBhY3I7CisKKyAgICBASnNvblByb3BlcnR5KCJhbGxvd2VkLW9yaWdpbnMiKQorICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGFsbG93ZWRPcmlnaW5zOworICAgIHByaXZhdGUgSnd0UmVhbG1BY2Nlc3MgcmVhbG1fYWNjZXNzOyAvL05PU09OQVIKKyAgICBwcml2YXRlIEp3dFJlc291cmNlQWNjZXNzIHJlc291cmNlX2FjY2VzczsgLy9OT1NPTkFSCisKKyAgICBwcml2YXRlIFN0cmluZyBuYW1lOworICAgIHByaXZhdGUgU3RyaW5nIHByZWZlcnJlZF91c2VybmFtZTsgLy9OT1NPTkFSCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2l2ZW5fbmFtZTsgLy9OT1NPTkFSCisgICAgcHJpdmF0ZSBTdHJpbmcgZmFtaWx5X25hbWU7IC8vTk9TT05BUgorCisgICAgcHVibGljIFN0cmluZyBnZXRKdGkoKSB7IHJldHVybiBqdGk7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRKdGkoU3RyaW5nIGp0aSkgeyB0aGlzLmp0aSA9IGp0aTsgfQorCisgICAgcHVibGljIGxvbmcgZ2V0RXhwKCkgeyByZXR1cm4gZXhwOyB9CisgICAgcHVibGljIHZvaWQgc2V0RXhwKGxvbmcgZXhwKSB7IHRoaXMuZXhwID0gZXhwOyB9CisKKyAgICBwdWJsaWMgbG9uZyBnZXROYmYoKSB7IHJldHVybiBuYmY7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXROYmYobG9uZyBuYmYpIHsgdGhpcy5uYmYgPSBuYmY7IH0KKworICAgIHB1YmxpYyBsb25nIGdldElhdCgpIHsgcmV0dXJuIGlhdDsgfQorICAgIHB1YmxpYyB2b2lkIHNldElhdChsb25nIGlhdCkgeyB0aGlzLmlhdCA9IGlhdDsgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRpc3MoKSB7IHJldHVybiBpc3M7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRpc3MoU3RyaW5nIGlzcykgeyB0aGlzLmlzcyA9IGlzczsgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRzdWIoKSB7IHJldHVybiBzdWI7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRzdWIoU3RyaW5nIHN1YikgeyB0aGlzLnN1YiA9IHN1YjsgfQorCisgICAgcHVibGljIFN0cmluZyBnZXR0eXAoKSB7IHJldHVybiB0eXA7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXR0eXAoU3RyaW5nIHR5cCkgeyB0aGlzLnR5cCA9IHR5cDsgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRBenAoKSB7IHJldHVybiBhenA7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRBenAoU3RyaW5nIGF6cCkgeyB0aGlzLmF6cCA9IGF6cDsgfQorCisgICAgcHVibGljIFN0cmluZyBnZXROb25jZSgpIHsgcmV0dXJuIG5vbmNlOyB9CisgICAgcHVibGljIHZvaWQgc2V0Tm9uY2UoU3RyaW5nIG5vbmNlKSB7IHRoaXMubm9uY2UgPSBub25jZTsgfQorCisgICAgcHVibGljIEludGVnZXIgZ2V0QXV0aFRpbWUoKSB7IHJldHVybiBhdXRoX3RpbWU7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRBdXRoVGltZShJbnRlZ2VyIGF1dGhfdGltZSkgeyB0aGlzLmF1dGhfdGltZSA9IGF1dGhfdGltZTsgfSAvL05PU09OQVIKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2Vzc2lvblN0YXRlKCkgeyByZXR1cm4gc2Vzc2lvbl9zdGF0ZTsgfQorICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25TdGF0ZShTdHJpbmcgc2Vzc2lvbl9zdGF0ZSkgeyB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlOyB9IC8vTk9TT05BUgorCisgICAgcHVibGljIFN0cmluZyBnZXRBY3IoKSB7IHJldHVybiBhY3I7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRBY3IoU3RyaW5nIGFjcikgeyB0aGlzLmFjciA9IGFjcjsgfQorCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRBbGxvd2VkT3JpZ2lucygpIHsKKyAgICAgICAgcmV0dXJuIGFsbG93ZWRPcmlnaW5zOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRBbGxvd2VkT3JpZ2lucyhMaXN0PFN0cmluZz4gYWxsb3dlZE9yaWdpbnMpIHsgdGhpcy5hbGxvd2VkT3JpZ2lucyA9IGFsbG93ZWRPcmlnaW5zOyB9CisKKyAgICBwdWJsaWMgSnd0UmVhbG1BY2Nlc3MgZ2V0UmVhbG1BY2Nlc3MoKSB7IHJldHVybiByZWFsbV9hY2Nlc3M7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRSZWFsbUFjY2VzcyhKd3RSZWFsbUFjY2VzcyByZWFsbV9hY2Nlc3MpIHsgdGhpcy5yZWFsbV9hY2Nlc3MgPSByZWFsbV9hY2Nlc3M7IH0gLy9OT1NPTkFSCisKKyAgICBwdWJsaWMgSnd0UmVzb3VyY2VBY2Nlc3MgZ2V0UmVzb3VyY2VBY2Nlc3MoKSB7IHJldHVybiByZXNvdXJjZV9hY2Nlc3M7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUFjY2VzcyhKd3RSZXNvdXJjZUFjY2VzcyByZXNvdXJjZV9hY2Nlc3MpIHsgdGhpcy5yZXNvdXJjZV9hY2Nlc3MgPSByZXNvdXJjZV9hY2Nlc3M7IH0gLy9OT1NPTkFSCisKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7IHJldHVybiBuYW1lOyB9CisgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgeyB0aGlzLm5hbWUgPSBuYW1lOyB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFByZWZlcnJlZFVzZXJuYW1lKCkgeyByZXR1cm4gcHJlZmVycmVkX3VzZXJuYW1lOyB9CisgICAgcHVibGljIHZvaWQgc2V0UHJlZmVycmVkVXNlcm5hbWUoU3RyaW5nIHByZWZlcnJlZF91c2VybmFtZSkgeyB0aGlzLnByZWZlcnJlZF91c2VybmFtZSA9IHByZWZlcnJlZF91c2VybmFtZTsgfSAvL05PU09OQVIKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0R2l2ZW5OYW1lKCkgeyByZXR1cm4gZ2l2ZW5fbmFtZTsgfQorICAgIHB1YmxpYyB2b2lkIHNldEdpdmVuTmFtZShTdHJpbmcgZ2l2ZW5fbmFtZSkgeyB0aGlzLmdpdmVuX25hbWUgPSBnaXZlbl9uYW1lOyB9IC8vTk9TT05BUgorCisgICAgcHVibGljIFN0cmluZyBnZXRGYW1pbHlOYW1lKCkgeyByZXR1cm4gZmFtaWx5X25hbWU7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRGYW1pbHlOYW1lKFN0cmluZyBmYW1pbHlfbmFtZSkgeyB0aGlzLmZhbWlseV9uYW1lID0gZmFtaWx5X25hbWU7IH0gLy9OT1NPTkFSCisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0luUm9sZShTdHJpbmcgcm9sZSkgeworICAgICAgICByZXR1cm4gdGhpcy5yZWFsbV9hY2Nlc3MgIT0gbnVsbCAmJiB0aGlzLnJlYWxtX2FjY2Vzcy5pc0luUm9sZShyb2xlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9Kd3RSZWFsbUFjY2Vzcy5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvbW9kZWwvSnd0UmVhbG1BY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWRmNTM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvbW9kZWwvSnd0UmVhbG1BY2Nlc3MuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEp3dFJlYWxtQWNjZXNzIHsKKyAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiByb2xlczsKKworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0Um9sZXMoKSB7CisgICAgICAgIHJldHVybiByb2xlczsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0Um9sZXMoTGlzdDxTdHJpbmc+IHJvbGVzKSB7IHRoaXMucm9sZXMgPSByb2xlczsgfQorCisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0luUm9sZShTdHJpbmcgcm9sZSkgeworICAgICAgICByZXR1cm4gdGhpcy5yb2xlcyAhPSBudWxsICYmIHRoaXMucm9sZXMuY29udGFpbnMocm9sZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvbW9kZWwvSnd0UmVzb3VyY2VBY2Nlc3MuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2F1dGgyL21vZGVsL0p3dFJlc291cmNlQWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlN2Y5NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2F1dGgyL21vZGVsL0p3dFJlc291cmNlQWNjZXNzLmphdmEKQEAgLTAsMCArMSwxOSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsOworCitwdWJsaWMgY2xhc3MgSnd0UmVzb3VyY2VBY2Nlc3MgeworICAgIHByaXZhdGUgSnd0QWNjb3VudCBhY2NvdW50OworCisgICAgcHVibGljIEp3dEFjY291bnQgZ2V0QWNjb3VudCgpIHsgcmV0dXJuIGFjY291bnQ7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRBY2NvdW50KEp3dEFjY291bnQgYWNjb3VudCkgeyB0aGlzLmFjY291bnQgPSBhY2NvdW50OyB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9Kd3RUb2tlbi5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvbW9kZWwvSnd0VG9rZW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI4NDY2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvbW9kZWwvSnd0VG9rZW4uamF2YQpAQCAtMCwwICsxLDQzIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWw7CisKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uUHJvcGVydHk7CisKK3B1YmxpYyBjbGFzcyBKd3RUb2tlbiB7CisKKyAgICAvL05vIFNvbmFyIGJlY2F1c2UgdmFyaWFibGVzIGFyZSB3cm9uZyBkdWUgdG8gand0IGRlZmluaXRpb24KKworICAgIHByaXZhdGUgU3RyaW5nIGFjY2Vzc190b2tlbjsgLy9OT1NPTkFSCisgICAgcHJpdmF0ZSBTdHJpbmcgcmVmcmVzaF90b2tlbjsgLy9OT1NPTkFSCisgICAgcHJpdmF0ZSBTdHJpbmcgdG9rZW5fdHlwZTsgLy9OT1NPTkFSCisgICAgcHJpdmF0ZSBTdHJpbmcgc2Vzc2lvbl9zdGF0ZTsgLy9OT1NPTkFSCisgICAgcHJpdmF0ZSBJbnRlZ2VyIGV4cGlyZXNfaW47IC8vTk9TT05BUgorICAgIHByaXZhdGUgSW50ZWdlciByZWZyZXNoX2V4cGlyZXNfaW47IC8vTk9TT05BUgorICAgIEBKc29uUHJvcGVydHkoIm5vdC1iZWZvcmUtcG9saWN5IikKKyAgICBwcml2YXRlIEludGVnZXIgbm90X2JlZm9yZV9wb2xpY3k7IC8vTk9TT05BUgorCisgICAgcHVibGljIFN0cmluZyBnZXRBY2Nlc3NUb2tlbigpIHsgcmV0dXJuIGFjY2Vzc190b2tlbjsgfQorICAgIHB1YmxpYyB2b2lkIHNldEFjY2Vzc1Rva2VuKFN0cmluZyBhY2Nlc3NfdG9rZW4pIHsgdGhpcy5hY2Nlc3NfdG9rZW4gPSBhY2Nlc3NfdG9rZW47IH0gLy9OT1NPTkFSCisgICAgcHVibGljIFN0cmluZyBnZXRSZWZyZXNoVG9rZW4oKSB7IHJldHVybiByZWZyZXNoX3Rva2VuOyB9CisgICAgcHVibGljIHZvaWQgc2V0UmVmcmVzaFRva2VuKFN0cmluZyByZWZyZXNoX3Rva2VuKSB7IHRoaXMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW47IH0gLy9OT1NPTkFSCisgICAgcHVibGljIFN0cmluZyBnZXRUb2tlblR5cGUoKSB7IHJldHVybiB0b2tlbl90eXBlOyB9CisgICAgcHVibGljIHZvaWQgc2V0VG9rZW5UeXBlKFN0cmluZyB0b2tlbl90eXBlKSB7IHRoaXMudG9rZW5fdHlwZSA9IHRva2VuX3R5cGU7IH0gLy9OT1NPTkFSCisgICAgcHVibGljIFN0cmluZyBnZXRTZXNzaW9uU3RhdGUoKSB7IHJldHVybiBzZXNzaW9uX3N0YXRlOyB9CisgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvblN0YXRlKFN0cmluZyBzZXNzaW9uX3N0YXRlKSB7IHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7IH0gLy9OT1NPTkFSCisgICAgcHVibGljIEludGVnZXIgZ2V0RXhwaXJlc0luKCkgeyByZXR1cm4gZXhwaXJlc19pbjsgfQorICAgIHB1YmxpYyB2b2lkIHNldEV4cGlyZXNJbihJbnRlZ2VyIGV4cGlyZXNfaW4pIHsgdGhpcy5leHBpcmVzX2luID0gZXhwaXJlc19pbjsgfSAvL05PU09OQVIKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRSZWZyZXNoRXhwaXJlc0luKCkgeyByZXR1cm4gcmVmcmVzaF9leHBpcmVzX2luOyB9CisgICAgcHVibGljIHZvaWQgc2V0UmVmcmVzaEV4cGlyZXNJbihJbnRlZ2VyIHJlZnJlc2hfZXhwaXJlc19pbikgeyB0aGlzLnJlZnJlc2hfZXhwaXJlc19pbiA9IHJlZnJlc2hfZXhwaXJlc19pbjsgfSAvL05PU09OQVIKKyAgICBwdWJsaWMgSW50ZWdlciBnZXROb3RCZWZvcmVQb2xpY3koKSB7IHJldHVybiBub3RfYmVmb3JlX3BvbGljeTsgfQorICAgIHB1YmxpYyB2b2lkIHNldE5vdEJlZm9yZVBvbGljeShJbnRlZ2VyIG5vdF9iZWZvcmVfcG9saWN5KSB7IHRoaXMubm90X2JlZm9yZV9wb2xpY3kgPSBub3RfYmVmb3JlX3BvbGljeTsgfSAvL05PU09OQVIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9LZXlDbG9ha0NsaWVudFJvbGVzLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9LZXlDbG9ha0NsaWVudFJvbGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzNmEyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2F1dGgyL21vZGVsL0tleUNsb2FrQ2xpZW50Um9sZXMuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEtleUNsb2FrQ2xpZW50Um9sZXMgeworCisgIHByaXZhdGUgU3RyaW5nIGlkOworICBwcml2YXRlIFN0cmluZyBjbGllbnQ7CisgIHByaXZhdGUgTGlzdDxLZXlDbG9ha1JvbGU+IG1hcHBpbmdzOworCisgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisgICAgcmV0dXJuIGlkOworICB9CisKKyAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKSB7CisgICAgdGhpcy5pZCA9IGlkOworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXRDbGllbnQoKSB7CisgICAgcmV0dXJuIGNsaWVudDsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldENsaWVudChTdHJpbmcgY2xpZW50KSB7CisgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7CisgIH0KKworICBwdWJsaWMgTGlzdDxLZXlDbG9ha1JvbGU+IGdldE1hcHBpbmdzKCkgeworICAgIHJldHVybiBtYXBwaW5nczsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldE1hcHBpbmdzKExpc3Q8S2V5Q2xvYWtSb2xlPiBtYXBwaW5ncykgeworICAgIHRoaXMubWFwcGluZ3MgPSBtYXBwaW5nczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvbW9kZWwvS2V5Q2xvYWtSb2xlLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9LZXlDbG9ha1JvbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGVhM2UxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvbW9kZWwvS2V5Q2xvYWtSb2xlLmphdmEKQEAgLTAsMCArMSw3OSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsOworCitwdWJsaWMgY2xhc3MgS2V5Q2xvYWtSb2xlIHsKKworICBwcml2YXRlIFN0cmluZyBpZDsKKyAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgcHJpdmF0ZSBCb29sZWFuIHNjb3BlUGFyYW1SZXF1aXJlZDsKKyAgcHJpdmF0ZSBCb29sZWFuIGNvbXBvc2l0ZTsKKyAgcHJpdmF0ZSBCb29sZWFuIGNsaWVudFJvbGU7CisgIHByaXZhdGUgU3RyaW5nIGNvbnRhaW5lcklkOworCisgIHB1YmxpYyBLZXlDbG9ha1JvbGUoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgQm9vbGVhbiBzY29wZVBhcmFtUmVxdWlyZWQsIEJvb2xlYW4gY29tcG9zaXRlLCBCb29sZWFuIGNsaWVudFJvbGUsIFN0cmluZyBjb250YWluZXJJZCkgeworICAgIHRoaXMuaWQgPSBpZDsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHRoaXMuc2NvcGVQYXJhbVJlcXVpcmVkID0gc2NvcGVQYXJhbVJlcXVpcmVkOworICAgIHRoaXMuY29tcG9zaXRlID0gY29tcG9zaXRlOworICAgIHRoaXMuY2xpZW50Um9sZSA9IGNsaWVudFJvbGU7CisgICAgdGhpcy5jb250YWluZXJJZCA9IGNvbnRhaW5lcklkOworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXRJZCgpIHsKKyAgICByZXR1cm4gaWQ7CisgIH0KKworICBwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpIHsKKyAgICB0aGlzLmlkID0gaWQ7CisgIH0KKworICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgcmV0dXJuIG5hbWU7CisgIH0KKworICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgfQorCisgIHB1YmxpYyBCb29sZWFuIGdldFNjb3BlUGFyYW1SZXF1aXJlZCgpIHsKKyAgICByZXR1cm4gc2NvcGVQYXJhbVJlcXVpcmVkOworICB9CisKKyAgcHVibGljIHZvaWQgc2V0U2NvcGVQYXJhbVJlcXVpcmVkKEJvb2xlYW4gc2NvcGVQYXJhbVJlcXVpcmVkKSB7CisgICAgdGhpcy5zY29wZVBhcmFtUmVxdWlyZWQgPSBzY29wZVBhcmFtUmVxdWlyZWQ7CisgIH0KKworICBwdWJsaWMgQm9vbGVhbiBnZXRDb21wb3NpdGUoKSB7CisgICAgcmV0dXJuIGNvbXBvc2l0ZTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldENvbXBvc2l0ZShCb29sZWFuIGNvbXBvc2l0ZSkgeworICAgIHRoaXMuY29tcG9zaXRlID0gY29tcG9zaXRlOworICB9CisKKyAgcHVibGljIEJvb2xlYW4gZ2V0Q2xpZW50Um9sZSgpIHsKKyAgICByZXR1cm4gY2xpZW50Um9sZTsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldENsaWVudFJvbGUoQm9vbGVhbiBjbGllbnRSb2xlKSB7CisgICAgdGhpcy5jbGllbnRSb2xlID0gY2xpZW50Um9sZTsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGFpbmVySWQoKSB7CisgICAgcmV0dXJuIGNvbnRhaW5lcklkOworICB9CisKKyAgcHVibGljIHZvaWQgc2V0Q29udGFpbmVySWQoU3RyaW5nIGNvbnRhaW5lcklkKSB7CisgICAgdGhpcy5jb250YWluZXJJZCA9IGNvbnRhaW5lcklkOworICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9LZXlDbG9ha1JvbGVzLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9LZXlDbG9ha1JvbGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzYjEwNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2F1dGgyL21vZGVsL0tleUNsb2FrUm9sZXMuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgS2V5Q2xvYWtSb2xlcyB7CisKKyAgTGlzdDxLZXlDbG9ha1JvbGU+IHJlYWxtTWFwcGluZ3M7CisKKyAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBLZXlDbG9ha0NsaWVudFJvbGVzPiBjbGllbnRNYXBwaW5nczsKKworICBwdWJsaWMgTGlzdDxLZXlDbG9ha1JvbGU+IGdldFJlYWxtTWFwcGluZ3MoKSB7CisgICAgcmV0dXJuIHJlYWxtTWFwcGluZ3M7CisgIH0KKworICBwdWJsaWMgdm9pZCBzZXRSZWFsbU1hcHBpbmdzKExpc3Q8S2V5Q2xvYWtSb2xlPiByZWFsbU1hcHBpbmdzKSB7CisgICAgdGhpcy5yZWFsbU1hcHBpbmdzID0gcmVhbG1NYXBwaW5nczsKKyAgfQorCisgIHB1YmxpYyBNYXA8U3RyaW5nLCBLZXlDbG9ha0NsaWVudFJvbGVzPiBnZXRDbGllbnRNYXBwaW5ncygpIHsKKyAgICByZXR1cm4gY2xpZW50TWFwcGluZ3M7CisgIH0KKworICBwdWJsaWMgdm9pZCBzZXRDbGllbnRNYXBwaW5ncyhNYXA8U3RyaW5nLCBLZXlDbG9ha0NsaWVudFJvbGVzPiBjbGllbnRNYXBwaW5ncykgeworICAgIHRoaXMuY2xpZW50TWFwcGluZ3MgPSBjbGllbnRNYXBwaW5nczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvbW9kZWwvS2V5Q2xvYWtVc2VyLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9LZXlDbG9ha1VzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGFlYjkwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvbW9kZWwvS2V5Q2xvYWtVc2VyLmphdmEKQEAgLTAsMCArMSwxMTAgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi5tb2RlbDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBLZXlDbG9ha1VzZXIgeworICAgIHByaXZhdGUgU3RyaW5nIGlkOworICAgIHByaXZhdGUgbG9uZyBjcmVhdGVkVGltZXN0YW1wOworICAgIHByaXZhdGUgU3RyaW5nIHVzZXJuYW1lOworICAgIHByaXZhdGUgYm9vbGVhbiBlbmFibGVkOworICAgIHByaXZhdGUgYm9vbGVhbiB0b3RwOworICAgIHByaXZhdGUgYm9vbGVhbiBlbWFpbFZlcmlmaWVkOworICAgIHByaXZhdGUgU3RyaW5nIGZpcnN0TmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBsYXN0TmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBuYW1lOworICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGFsbFJvbGVzOworICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHJlYWxtUm9sZXM7CisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGNsaWVudFJvbGVzOworCisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZGlzYWJsZWFibGVDcmVkZW50aWFsVHlwZXM7CisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gcmVxdWlyZWRBY3Rpb25zOworICAgIHByaXZhdGUgS2V5Q2xvYWtVc2VyQWNjZXNzIGFjY2VzczsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7IHJldHVybiBpZDsgfQorICAgIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkgeyB0aGlzLmlkID0gaWQ7IH0KKworICAgIHB1YmxpYyBsb25nIGdldENyZWF0ZWRUaW1lc3RhbXAoKSB7IHJldHVybiBjcmVhdGVkVGltZXN0YW1wOyB9CisgICAgcHVibGljIHZvaWQgc2V0Q3JlYXRlZFRpbWVzdGFtcChsb25nIGNyZWF0ZWRUaW1lc3RhbXApIHsgdGhpcy5jcmVhdGVkVGltZXN0YW1wID0gY3JlYXRlZFRpbWVzdGFtcDsgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRVc2VybmFtZSgpIHsgcmV0dXJuIHVzZXJuYW1lOyB9CisgICAgcHVibGljIHZvaWQgc2V0VXNlcm5hbWUoU3RyaW5nIHVzZXJuYW1lKSB7IHRoaXMudXNlcm5hbWUgPSB1c2VybmFtZTsgfQorCisgICAgcHVibGljIHZvaWQgc2V0VG90cChib29sZWFuIHRvdHApIHsgdGhpcy50b3RwID0gdG90cDsgfQorCisgICAgcHVibGljIHZvaWQgc2V0RW1haWxWZXJpZmllZChib29sZWFuIGVtYWlsVmVyaWZpZWQpIHsgdGhpcy5lbWFpbFZlcmlmaWVkID0gZW1haWxWZXJpZmllZDsgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKSB7IHJldHVybiBmaXJzdE5hbWU7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRGaXJzdE5hbWUoU3RyaW5nIGZpcnN0TmFtZSkgeyB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpIHsgcmV0dXJuIGxhc3ROYW1lOyB9CisgICAgcHVibGljIHZvaWQgc2V0TGFzdE5hbWUoU3RyaW5nIGxhc3ROYW1lKSB7IHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsgfQorCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXREaXNhYmxlYWJsZUNyZWRlbnRpYWxUeXBlcygpIHsKKyAgICAgICAgcmV0dXJuIGRpc2FibGVhYmxlQ3JlZGVudGlhbFR5cGVzOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXREaXNhYmxlYWJsZUNyZWRlbnRpYWxUeXBlcyhMaXN0PFN0cmluZz4gZGlzYWJsZWFibGVDcmVkZW50aWFsVHlwZXMpIHsgdGhpcy5kaXNhYmxlYWJsZUNyZWRlbnRpYWxUeXBlcyA9IGRpc2FibGVhYmxlQ3JlZGVudGlhbFR5cGVzOyB9CisKKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFJlcXVpcmVkQWN0aW9ucygpIHsKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVkQWN0aW9uczsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRBY3Rpb25zKExpc3Q8U3RyaW5nPiByZXF1aXJlZEFjdGlvbnMpIHsgdGhpcy5yZXF1aXJlZEFjdGlvbnMgPSByZXF1aXJlZEFjdGlvbnM7IH0KKworICAgIHB1YmxpYyBLZXlDbG9ha1VzZXJBY2Nlc3MgZ2V0QWNjZXNzKCkgeyByZXR1cm4gYWNjZXNzOyB9CisgICAgcHVibGljIHZvaWQgc2V0QWNjZXNzKEtleUNsb2FrVXNlckFjY2VzcyBhY2Nlc3MpIHsgdGhpcy5hY2Nlc3MgPSBhY2Nlc3M7IH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKyAgICAgICAgcmV0dXJuIGVuYWJsZWQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNUb3RwKCkgeworICAgICAgICByZXR1cm4gdG90cDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0VtYWlsVmVyaWZpZWQoKSB7CisgICAgICAgIHJldHVybiBlbWFpbFZlcmlmaWVkOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0QWxsUm9sZXMoKSB7CisgICAgICAgIHJldHVybiBhbGxSb2xlczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRBbGxSb2xlcyhMaXN0PFN0cmluZz4gYWxsUm9sZXMpIHsKKyAgICAgICAgdGhpcy5hbGxSb2xlcyA9IGFsbFJvbGVzOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0UmVhbG1Sb2xlcygpIHsKKyAgICAgICAgcmV0dXJuIHJlYWxtUm9sZXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UmVhbG1Sb2xlcyhMaXN0PFN0cmluZz4gcmVhbG1Sb2xlcykgeworICAgICAgICB0aGlzLnJlYWxtUm9sZXMgPSByZWFsbVJvbGVzOworICAgIH0KKworICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGdldENsaWVudFJvbGVzKCkgeworICAgICAgICByZXR1cm4gY2xpZW50Um9sZXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q2xpZW50Um9sZXMoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBjbGllbnRSb2xlcykgeworICAgICAgICB0aGlzLmNsaWVudFJvbGVzID0gY2xpZW50Um9sZXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TmFtZSgpIHsKKyAgICAgICAgaWYgKGxhc3ROYW1lIT0gbnVsbCAmJiAhbGFzdE5hbWUuaXNFbXB0eSgpKXsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IGZpcnN0TmFtZSsgIiAiICsgbGFzdE5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBmaXJzdE5hbWU7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9LZXlDbG9ha1VzZXJBY2Nlc3MuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2F1dGgyL21vZGVsL0tleUNsb2FrVXNlckFjY2Vzcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YjE1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi9tb2RlbC9LZXlDbG9ha1VzZXJBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWw7CisKK3B1YmxpYyBjbGFzcyBLZXlDbG9ha1VzZXJBY2Nlc3MgeworICAgIHByaXZhdGUgYm9vbGVhbiBtYW5hZ2VHcm91cE1lbWJlcnNoaXA7CisgICAgcHJpdmF0ZSBib29sZWFuIHZpZXc7CisgICAgcHJpdmF0ZSBib29sZWFuIG1hcFJvbGVzOworICAgIHByaXZhdGUgYm9vbGVhbiBpbXBlcnNvbmF0ZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbWFuYWdlOworCisgICAgcHVibGljIGJvb2xlYW4gZ2V0TWFuYWdlR3JvdXBNZW1iZXJzaGlwKCkgeyByZXR1cm4gbWFuYWdlR3JvdXBNZW1iZXJzaGlwOyB9CisgICAgcHVibGljIHZvaWQgc2V0TWFuYWdlR3JvdXBNZW1iZXJzaGlwKGJvb2xlYW4gbWFuYWdlR3JvdXBNZW1iZXJzaGlwKSB7IHRoaXMubWFuYWdlR3JvdXBNZW1iZXJzaGlwID0gbWFuYWdlR3JvdXBNZW1iZXJzaGlwOyB9CisgICAgcHVibGljIGJvb2xlYW4gZ2V0VmlldygpIHsgcmV0dXJuIHZpZXc7IH0KKyAgICBwdWJsaWMgdm9pZCBzZXRWaWV3KGJvb2xlYW4gdmlldykgeyB0aGlzLnZpZXcgPSB2aWV3OyB9CisgICAgcHVibGljIGJvb2xlYW4gZ2V0TWFwUm9sZXMoKSB7IHJldHVybiBtYXBSb2xlczsgfQorICAgIHB1YmxpYyB2b2lkIHNldE1hcFJvbGVzKGJvb2xlYW4gbWFwUm9sZXMpIHsgdGhpcy5tYXBSb2xlcyA9IG1hcFJvbGVzOyB9CisgICAgcHVibGljIGJvb2xlYW4gZ2V0SW1wZXJzb25hdGUoKSB7IHJldHVybiBpbXBlcnNvbmF0ZTsgfQorICAgIHB1YmxpYyB2b2lkIHNldEltcGVyc29uYXRlKGJvb2xlYW4gaW1wZXJzb25hdGUpIHsgdGhpcy5pbXBlcnNvbmF0ZSA9IGltcGVyc29uYXRlOyB9CisgICAgcHVibGljIGJvb2xlYW4gZ2V0TWFuYWdlKCkgeyByZXR1cm4gbWFuYWdlOyB9CisgICAgcHVibGljIHZvaWQgc2V0TWFuYWdlKGJvb2xlYW4gbWFuYWdlKSB7IHRoaXMubWFuYWdlID0gbWFuYWdlOyB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9hdXRoMi91dGlsL0p3dEhlbHBlci5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvdXRpbC9Kd3RIZWxwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDNjZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvYXV0aDIvdXRpbC9Kd3RIZWxwZXIuamF2YQpAQCAtMCwwICsxLDIyOCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLnV0aWw7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLkp3dEhlYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuSnd0UGF5bG9hZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuSnd0VG9rZW47CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLktleUNsb2FrQ2xpZW50Um9sZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLktleUNsb2FrUm9sZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuS2V5Q2xvYWtSb2xlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuS2V5Q2xvYWtVc2VyOworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Kc29uU3ludGF4RXhjZXB0aW9uOworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5yZWZsZWN0LlR5cGVUb2tlbjsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlR5cGU7CitpbXBvcnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkJhc2U2NDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5CYWNrZW5kQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uSnNvbkdlbmVyYXRvckJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvcjsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkpzb25HZW5lcmF0b3JCYXNlLmdldEdzb247CisKK3B1YmxpYyBjbGFzcyBKd3RIZWxwZXIgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKEp3dEhlbHBlci5jbGFzcy5nZXROYW1lKCkpOworCisgIHByaXZhdGUgSnd0SGVscGVyKCkgeworICB9CisKKyAgcHVibGljIHN0YXRpYyBKd3RUb2tlbiBsb2dpbihTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgU3RyaW5nIHRva2VuID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgdG9rZW4gPSBzZW5kUG9zdChCYWNrZW5kQ29uZmlnLmdldEluc3RhbmNlKCkuZ2V0QXV0aFNlcnZlclVybCgpICsgImF1dGgvcmVhbG1zLyIgKworICAgICAgICAgICAgICAgICAgICAgIEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRLZXljbG9ha1JlYWxtKCkgKyAiL3Byb3RvY29sL29wZW5pZC1jb25uZWN0L3Rva2VuIiwKKyAgICAgICAgICAgICAgInVzZXJuYW1lPSIgKyB1c2VyICsgIiZwYXNzd29yZD0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFzc3dvcmQsICJVVEYtOCIpICsgIiZjbGllbnRfaWQ9IgorICAgICAgICAgICAgICAgICAgICAgICsgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEtleWNsb2FrQ2xpZW50KCkgKyAiJmdyYW50X3R5cGU9cGFzc3dvcmQiKTsKKyAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgIGxvZ2dlci5lcnJvciggIlVuc3VwcG9ydGVkIEVuY29kaW5nIEV4Y2VwdGlvbjogIiwgZSk7CisgICAgICB0aHJvdyBuZXcgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvcihlLmdldE1lc3NhZ2UoKSk7CisgICAgfQorICAgIHJldHVybiBnZXRKd3RUb2tlbkZyb21Kc29uKHRva2VuKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzZXJ2aWNlQXZhaWxhYmxlKCkgdGhyb3dzIFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IgeworICAgIFN0cmluZyBqc29uUmV0ID0gc2VuZEdldChCYWNrZW5kQ29uZmlnLmdldEluc3RhbmNlKCkuZ2V0QXV0aFNlcnZlclVybCgpICsgImF1dGgvcmVhbG1zLyIgKworICAgICAgICAgICAgICAgICAgICBCYWNrZW5kQ29uZmlnLmdldEluc3RhbmNlKCkuZ2V0S2V5Y2xvYWtSZWFsbSgpLCAiIiwgbnVsbCk7CisKKyAgICByZXR1cm4ganNvblJldCAhPSBudWxsID8ganNvblJldC5jb250YWlucygicmVhbG0iKSAmJiBqc29uUmV0LmNvbnRhaW5zKEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRLZXljbG9ha1JlYWxtKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlOworICB9CisKKyAgcHVibGljIHN0YXRpYyBMaXN0PEtleUNsb2FrVXNlcj4gZ2V0VXNlcnMoSnd0VG9rZW4gand0VG9rZW4sIGludCBtYXhVc2VycykgdGhyb3dzIFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IgeworICAgIFN0cmluZyB1c2VycyA9IHNlbmRHZXQoQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEF1dGhTZXJ2ZXJVcmwoKSArICJhdXRoL2FkbWluL3JlYWxtcy8iICsgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEtleWNsb2FrUmVhbG0oKSArICIvdXNlcnM/bWF4PSIrbWF4VXNlcnMsCisgICAgICAgIE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OLCBqd3RUb2tlbi5nZXRBY2Nlc3NUb2tlbigpKTsKKyAgICByZXR1cm4gZ2V0VXNlckxpc3RGcm9tSnNvbih1c2Vycyk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIExpc3Q8S2V5Q2xvYWtSb2xlPiBnZXRSb2xlc0ZvclVzZXIoSnd0VG9rZW4gand0VG9rZW4sIFN0cmluZyBpZCkgdGhyb3dzIFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IgeworICAgIFN0cmluZyByb2xlcyA9IHNlbmRHZXQoQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEF1dGhTZXJ2ZXJVcmwoKSArICJhdXRoL2FkbWluL3JlYWxtcy8iICsgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEtleWNsb2FrUmVhbG0oKSArICIvdXNlcnMvIiArIGlkICsgIi9yb2xlLW1hcHBpbmdzLyIsCisgICAgICAgIE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OLCBqd3RUb2tlbi5nZXRBY2Nlc3NUb2tlbigpKTsKKyAgICByZXR1cm4gZ2V0Um9sZXNMaXN0RnJvbUpzb24ocm9sZXMpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBKd3RIZWFkZXIgZ2V0Snd0SGVhZGVyRnJvbUpzb24oU3RyaW5nIGpzb24pIHsKKyAgICByZXR1cm4gSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLmZyb21Kc29uKGpzb24sIEp3dEhlYWRlci5jbGFzcyk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIEp3dFBheWxvYWQgZ2V0Snd0UGF5bG9hZEZyb21Kc29uKFN0cmluZyBqc29uKSB7CisgICAgcmV0dXJuIEpzb25HZW5lcmF0b3JCYXNlLmdldEdzb24oKS5mcm9tSnNvbihqc29uLCBKd3RQYXlsb2FkLmNsYXNzKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgSnd0VG9rZW4gZ2V0Snd0VG9rZW5Gcm9tSnNvbihTdHJpbmcganNvbikgeworICAgIHJldHVybiBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oanNvbiwgSnd0VG9rZW4uY2xhc3MpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBMaXN0PEtleUNsb2FrVXNlcj4gZ2V0VXNlckxpc3RGcm9tSnNvbihTdHJpbmcganNvbikgdGhyb3dzIFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IgeworICAgIHRyeSB7CisgICAgICBUeXBlIGxpc3RUeXBlID0gbmV3IFR5cGVUb2tlbjxMaXN0PEtleUNsb2FrVXNlcj4+KCkgeworICAgICAgfS5nZXRUeXBlKCk7CisgICAgICByZXR1cm4gSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLmZyb21Kc29uKGpzb24sIGxpc3RUeXBlKTsKKyAgICB9IGNhdGNoIChKc29uU3ludGF4RXhjZXB0aW9uIGV4KSB7CisgICAgICBsb2dnZXIuZXJyb3IoIkVycm9yIGluIGdldFVzZXJMaXN0RnJvbUpzb24iLCBleCk7CisgICAgICB0aHJvdyBuZXcgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvcigiSnNvblN5bnRheEV4Y2VwdGlvbiIpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgTGlzdDxLZXlDbG9ha1JvbGU+IGdldFJvbGVzTGlzdEZyb21Kc29uKFN0cmluZyBqc29uKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgdHJ5IHsKKyAgICAgIExpc3Q8S2V5Q2xvYWtSb2xlPiBhbGxSb2xlcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgS2V5Q2xvYWtSb2xlcyBrZXlDbG9ha1JvbGVzID0gZ2V0R3NvbigpLmZyb21Kc29uKGpzb24sIEtleUNsb2FrUm9sZXMuY2xhc3MpOworICAgICAgTGlzdDxLZXlDbG9ha1JvbGU+IHJlYWxtUm9sZXMgPSBrZXlDbG9ha1JvbGVzLmdldFJlYWxtTWFwcGluZ3MoKTsKKworICAgICAgaWYgKHJlYWxtUm9sZXMgIT0gbnVsbCkgeworICAgICAgICBhbGxSb2xlcy5hZGRBbGwocmVhbG1Sb2xlcyk7CisgICAgICB9CisKKyAgICAgIE1hcDxTdHJpbmcsIEtleUNsb2FrQ2xpZW50Um9sZXM+IGNsaWVudE1hcHBpbmdzID0ga2V5Q2xvYWtSb2xlcy5nZXRDbGllbnRNYXBwaW5ncygpOworICAgICAgaWYgKGNsaWVudE1hcHBpbmdzICE9IG51bGwpIHsKKyAgICAgICAgS2V5Q2xvYWtDbGllbnRSb2xlcyBrZXlDbG9ha0NsaWVudFJvbGVzID0gY2xpZW50TWFwcGluZ3MuZ2V0KEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRLZXljbG9ha0NsaWVudCgpKTsKKyAgICAgICAgaWYgKGtleUNsb2FrQ2xpZW50Um9sZXMgIT0gbnVsbCl7CisgICAgICAgICAgTGlzdDxLZXlDbG9ha1JvbGU+IGNsaWVudFJvbGVzID0ga2V5Q2xvYWtDbGllbnRSb2xlcy5nZXRNYXBwaW5ncygpOworICAgICAgICAgIGFsbFJvbGVzLmFkZEFsbChjbGllbnRSb2xlcyk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIGFsbFJvbGVzOworICAgIH0gY2F0Y2ggKEpzb25TeW50YXhFeGNlcHRpb24gZXgpIHsKKyAgICAgIGxvZ2dlci5lcnJvcigiRXJyb3IgaW4gZ2V0Um9sZXNMaXN0RnJvbUpzb24iLCBleCk7CisgICAgICB0aHJvdyBuZXcgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvcigiSnNvblN5bnRheEV4Y2VwdGlvbiIpOworICAgIH0KKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgSnd0UGF5bG9hZCBnZXRQYXlMb2FkKEp3dFRva2VuIHRva2VuKSB7CisgICAgU3RyaW5nW10gcGFydHMgPSB0b2tlbi5nZXRBY2Nlc3NUb2tlbigpLnNwbGl0KCJbLl0iKTsKKworICAgIC8vcGFydHNbMF0gaXMgdGhlIGp3dEhlYWRlcgorICAgIFN0cmluZyBqd3RQYXlsb2FkID0gcGFydHNbMV07CisgICAgLy9wYXJ0c1syXSBpcyB0aGUgand0VmVyaWZ5U2lnbmF0dXJlCisKKyAgICAvLyBkZWNvZGUKKyAgICBCYXNlNjQuRGVjb2RlciBkZWNvZGVyID0gQmFzZTY0LmdldERlY29kZXIoKTsKKyAgICBieXRlW10gZGVjb2RlZCA9IGRlY29kZXIuZGVjb2RlKGp3dFBheWxvYWQpOworICAgIGp3dFBheWxvYWQgPSBuZXcgU3RyaW5nKGRlY29kZWQsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpOworICAgIGxvZ2dlci5kZWJ1Zyhqd3RQYXlsb2FkKTsKKyAgICByZXR1cm4gZ2V0Snd0UGF5bG9hZEZyb21Kc29uKGp3dFBheWxvYWQpOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgSHR0cFVSTENvbm5lY3Rpb24gZ2V0SHR0cENvbm5lY3Rpb24oU3RyaW5nIHRhcmdldFVybCkgdGhyb3dzIFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IgeworICAgIHRyeSB7CisgICAgICBVUkwgdXJsID0gbmV3IFVSTCh0YXJnZXRVcmwpOworICAgICAgcmV0dXJuIChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgbG9nZ2VyLmVycm9yKGUpOworICAgICAgdGhyb3cgbmV3IFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IoIkh0dHBVUkxDb25uZWN0aW9uIElPRXhjZXB0aW9uIik7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlbmRHZXQoU3RyaW5nIHRhcmdldFVybCwgU3RyaW5nIGFjY2VwdCwgU3RyaW5nIHRva2VuKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgbG9nZ2VyLnRyYWNlKCJzZW5kR2V0Iik7CisKKyAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb24gPSBnZXRIdHRwQ29ubmVjdGlvbih0YXJnZXRVcmwpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2UgPSBuZXcgU3RyaW5nQnVpbGRlcigpOyAvLyBvciBTdHJpbmdCdWZmZXIgaWYgSmF2YSB2ZXJzaW9uIDUrCisKKyAgICB0cnkgKEF1dG9DbG9zZWFibGUgY29uYyA9IGNvbjo6ZGlzY29ubmVjdCkgeworICAgICAgY29uLnNldFJlcXVlc3RNZXRob2QoIkdFVCIpOworICAgICAgY29uLnNldFJlcXVlc3RQcm9wZXJ0eSgiQWNjZXB0IiwgYWNjZXB0KTsKKyAgICAgIGNvbi5zZXRJbnN0YW5jZUZvbGxvd1JlZGlyZWN0cyhmYWxzZSk7CisgICAgICBpZiAodG9rZW4gIT0gbnVsbCkgLy8gaXMgYXV0aGVudGljYXRlZAorICAgICAgeworICAgICAgICBjb24uc2V0UmVxdWVzdFByb3BlcnR5KCJBdXRob3JpemF0aW9uIiwgIkJlYXJlciAiICsgdG9rZW4pOworICAgICAgfQorICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb24uZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgIHRyeSAoQnVmZmVyZWRSZWFkZXIgcmQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzLCBTdGFuZGFyZENoYXJzZXRzLlVURl84KSkpIHsKKyAgICAgICAgU3RyaW5nIGxpbmU7CisgICAgICAgIHdoaWxlICgobGluZSA9IHJkLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICByZXNwb25zZS5hcHBlbmQobGluZSk7CisgICAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCdccicpOworICAgICAgICAgIGxvZ2dlci50cmFjZSgiR290IGxpbmUgLT4gIiArIGxpbmUpOworICAgICAgICB9CisgICAgICB9CisgICAgICBsb2dnZXIudHJhY2UoInNlbmRHZXQgd2FzIHN1Y2Nlc3NmdWwiKTsKKyAgICAgIHJldHVybiByZXNwb25zZS50b1N0cmluZygpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICBsb2dnZXIuZXJyb3IoIkVycm9yIG9jY3VyZWQgaW4gc2VuZEdldDogIiArIGUpOworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNlbmRQb3N0KFN0cmluZyB0YXJnZXRVcmwsIFN0cmluZyB1cmxQYXJhbWV0ZXJzKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgbG9nZ2VyLmRlYnVnKCJzZW5kUG9zdCIpOworCisgICBIdHRwVVJMQ29ubmVjdGlvbiBjb24gPSBnZXRIdHRwQ29ubmVjdGlvbih0YXJnZXRVcmwpOworICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2UgPSBuZXcgU3RyaW5nQnVpbGRlcigpOyAvLyBvciBTdHJpbmdCdWZmZXIgaWYgSmF2YSB2ZXJzaW9uIDUrCisKKyAgICB0cnkgKEF1dG9DbG9zZWFibGUgY29uYyA9IGNvbjo6ZGlzY29ubmVjdCkgeworICAgICAgY29uLnNldFJlcXVlc3RNZXRob2QoIlBPU1QiKTsKKyAgICAgIGNvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9dXRmLTgiKTsKKyAgICAgIGNvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIkFjY2VwdCIsIE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKTsKKyAgICAgIGNvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtTGVuZ3RoIiwgSW50ZWdlci50b1N0cmluZyh1cmxQYXJhbWV0ZXJzLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgubmFtZSgpKS5sZW5ndGgpKTsKKworICAgICAgY29uLnNldEluc3RhbmNlRm9sbG93UmVkaXJlY3RzKGZhbHNlKTsKKyAgICAgIGNvbi5zZXREb091dHB1dCh0cnVlKTsKKyAgICAgIC8vIFNlbmQgcmVxdWVzdAorICAgICAgdHJ5IChEYXRhT3V0cHV0U3RyZWFtIHdyID0gbmV3IERhdGFPdXRwdXRTdHJlYW0oY29uLmdldE91dHB1dFN0cmVhbSgpKSkgeworICAgICAgICB3ci53cml0ZSh1cmxQYXJhbWV0ZXJzLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgubmFtZSgpKSk7CisgICAgICB9CisgICAgICAvLyBHZXQgUmVzcG9uc2UKKyAgICAgIElucHV0U3RyZWFtIGlzID0gY29uLmdldElucHV0U3RyZWFtKCk7CisKKyAgICAgIHRyeSAoQnVmZmVyZWRSZWFkZXIgcmQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzLCBTdGFuZGFyZENoYXJzZXRzLlVURl84Lm5hbWUoKSkpKSB7CisgICAgICAgIFN0cmluZyBsaW5lOworICAgICAgICB3aGlsZSAoKGxpbmUgPSByZC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGxpbmUpOworICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnXHInKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gcmVzcG9uc2UudG9TdHJpbmcoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgbG9nZ2VyLmVycm9yKCJFcnJvciBvY2N1cmVkIGluIHNlbmRQb3N0OiAiICsgZSk7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0KKworICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRUb2tlbihTdHJpbmcgYWNjZXNzVG9rZW4pIHsKKyAgICByZXR1cm4gYWNjZXNzVG9rZW4gIT0gbnVsbCA/IGFjY2Vzc1Rva2VuLnJlcGxhY2UoIkJlYXJlciIsICIiKS50cmltKCkgOiAiIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL0JhY2tlbmRDb25maWcuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9CYWNrZW5kQ29uZmlnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjOGExMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9CYWNrZW5kQ29uZmlnLmphdmEKQEAgLTAsMCArMSw4MCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24udXRpbC5SZXNvdXJjZUxvYWRlckJhc2U7CisKK3B1YmxpYyBjbGFzcyBCYWNrZW5kQ29uZmlnIHsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29uZmlnRmlsZU5hbWUgPSAiYmFja2VuZENvbmZpZ0RldkxvY2FsLmpzb24iOworICAgIHByaXZhdGUgSW50ZWdlciBpbnRlcm5hbFNlc3Npb25MZW5ndGhNaWxsaXM7CisgICAgcHJpdmF0ZSBJbnRlZ2VyIHJlbG9hZFVzZXJzSW5TZWM7CisgICAgcHJpdmF0ZSBTdHJpbmcgYXV0aFNlcnZlclVybDsKKyAgICBwcml2YXRlIFN0cmluZyBrZXljbG9ha1JlYWxtOworICAgIHByaXZhdGUgU3RyaW5nIGtleWNsb2FrQ2xpZW50OworICAgIHByaXZhdGUgU3RyaW5nIGtleWNsb2FrQWRtaW47CisgICAgcHJpdmF0ZSBTdHJpbmcga2V5Y2xvYWtQVzsKKyAgICBwcml2YXRlIEludGVnZXIgbWF4TG9hZFVzZXJzOworCisgICAgcHJpdmF0ZSBzdGF0aWMgQmFja2VuZENvbmZpZyBpbnN0YW5jZTsKKworICAgIHByaXZhdGUgQmFja2VuZENvbmZpZygpIHt9CisKKyAgICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBCYWNrZW5kQ29uZmlnIGdldEluc3RhbmNlKCkgeworICAgICAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgU3RyaW5nIGpzb25Db25maWcgPSBsb2FkSnNvbkNvbmZpZygpOworICAgICAgICAgICAgaW5zdGFuY2UgPSBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oanNvbkNvbmZpZywgQmFja2VuZENvbmZpZy5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGxvYWRKc29uQ29uZmlnKCkgeworICAgICAgICBSZXNvdXJjZUxvYWRlckJhc2UgcmVzb3VyY2VMb2FkZXJCYXNlID0gbmV3IFJlc291cmNlTG9hZGVyQmFzZSgpOworICAgICAgICByZXR1cm4gcmVzb3VyY2VMb2FkZXJCYXNlLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoY29uZmlnRmlsZU5hbWUpOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldEludGVybmFsU2Vzc2lvbkxlbmd0aE1pbGxpcygpIHsgcmV0dXJuIGludGVybmFsU2Vzc2lvbkxlbmd0aE1pbGxpczsgfQorCisgICAgcHVibGljIEludGVnZXIgZ2V0UmVsb2FkVXNlcnNJblNlYygpIHsgcmV0dXJuIHJlbG9hZFVzZXJzSW5TZWM7IH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXV0aFNlcnZlclVybCgpIHsKKyAgICAgICAgcmV0dXJuIGF1dGhTZXJ2ZXJVcmw7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRLZXljbG9ha0NsaWVudCgpIHsKKyAgICAgICAgcmV0dXJuIGtleWNsb2FrQ2xpZW50OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0S2V5Y2xvYWtBZG1pbigpIHsKKyAgICAgICAgcmV0dXJuIGtleWNsb2FrQWRtaW47CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRLZXljbG9ha1BXKCkgeworICAgICAgICByZXR1cm4ga2V5Y2xvYWtQVzsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldEtleWNsb2FrUmVhbG0oKSB7CisgICAgICAgIHJldHVybiBrZXljbG9ha1JlYWxtOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldE1heExvYWRVc2VycygpIHsKKyAgICAgICAgcmV0dXJuIG1heExvYWRVc2VyczsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb25maWdGaWxlTmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIGNvbmZpZ0ZpbGVOYW1lOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDb25maWdGaWxlTmFtZShTdHJpbmcgY29uZmlnRmlsZU5hbWUpIHsKKyAgICAgICAgQmFja2VuZENvbmZpZy5jb25maWdGaWxlTmFtZSA9IGNvbmZpZ0ZpbGVOYW1lOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9HbG9iYWxzLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vR2xvYmFscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTEwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vR2xvYmFscy5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb247CisKKworcHVibGljIGZpbmFsIGNsYXNzIEdsb2JhbHMgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9LX1NUUklORyA9ICJPSyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VTU0lPTl9UT0tFTl9UQUcgPSAiWC1YU1JGLVRPS0VOIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVNTSU9OX0NPT0tJRV9UT0tFTl9UQUcgPSAiQ09PS0lFU0VTU0lPTi1UT0tFTiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0NSRURFTlRJQUxTX0xFTkdUSCA9IDUwMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhfTk9USUZJQ0FUSU9OX0xFTkdUSCA9IDE2Mzg0OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSFRUUFNUQVRVU19PSyA9IDIwMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIVFRQU1RBVFVTX0JBRF9SRVFVRVNUID0gNDAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhUVFBTVEFUVVNfVU5BVVRIT1JJWkVEID0gNDAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhUVFBTVEFUVVNfRk9SQklEREVOID0gNDAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhUVFBTVEFUVVNfTk9UX0ZPVU5EID0gNDA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhUVFBTVEFUVVNfR09ORSA9IDQxMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIVFRQU1RBVFVTX0xPQ0tFRCA9IDQyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIVFRQU1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9FUlJPUiA9IDUwMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIVFRQU1RBVFVTX05PVF9BVkFJTEFCTEUgPSA1MDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSFRUUFNUQVRVU19QT0xJQ1lfTk9UX0ZVTEZJTExFRCA9IDQyMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBIVFRQU1RBVFVTX0NPTkZMSUNUID0gNDA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhUVFBTVEFUVVNfREVDSVNJT04gPSA5MDA7CisKKyAgICAvL0ZvciBCcmFuY2hlczogZm9yIGxhdGVyIHVzZSBpbiBhIGNvbmZpZ3VyYWJsZSBqc29uCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxFQ1RSSUNJVFlfTUFSSyA9ICJTIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHQVNfTUFSSyA9ICJHIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNUUklDVF9IRUFUX01BUksgPSAiRiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0FURVJfTUFSSyA9ICJXIjsKKworICAgIC8vRXJyb3JtZXNzYWdlCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9PVVREQVRFRCA9ICJEYXRhIGlzIG91dGRhdGVkISI7CisKKyAgICAvL1N1Z2dlc3Rpb246IEFuIGlucHV0IGZpZWxkIG9uIHNlYXJjaCBtYXNrIGFzIGJldHRlciBzb2x1dGlvbj8gQ2FuIG9ubHkgYmUgYWRhcHRlZCBieSBjb2RlIGNoYW5nZXMuCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkFTVF9TRUFSQ0hfTlVNQkVSX09GX0RBWVNfQkFDSyA9IC0yMDA7CisKKyAgICAvL0tleUNsb2FrIGNvbmZpZ3VyYXRpb24KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlDTE9BS19BVVRIX1RBRyA9ICJBdXRob3JpemF0aW9uIjsKKworICAgIHByaXZhdGUgR2xvYmFscygpIHt9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Hc29uVVRDRGF0ZUFkYXB0ZXIuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Hc29uVVRDRGF0ZUFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDM2NGI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL0dzb25VVENEYXRlQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb247CisKK2ltcG9ydCBjb20uZ29vZ2xlLmdzb24uSnNvbkRlc2VyaWFsaXphdGlvbkNvbnRleHQ7CitpbXBvcnQgY29tLmdvb2dsZS5nc29uLkpzb25EZXNlcmlhbGl6ZXI7CitpbXBvcnQgY29tLmdvb2dsZS5nc29uLkpzb25FbGVtZW50OworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Kc29uUGFyc2VFeGNlcHRpb247CitpbXBvcnQgY29tLmdvb2dsZS5nc29uLkpzb25QcmltaXRpdmU7CitpbXBvcnQgY29tLmdvb2dsZS5nc29uLkpzb25TZXJpYWxpemF0aW9uQ29udGV4dDsKK2ltcG9ydCBjb20uZ29vZ2xlLmdzb24uSnNvblNlcmlhbGl6ZXI7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKK2ltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CisKK3B1YmxpYyBjbGFzcyBHc29uVVRDRGF0ZUFkYXB0ZXIgaW1wbGVtZW50cyBKc29uU2VyaWFsaXplcjxEYXRlPiwgSnNvbkRlc2VyaWFsaXplcjxEYXRlPiB7CisKKyAgICBwcml2YXRlIGZpbmFsIERhdGVGb3JtYXQgZGF0ZUZvcm1hdDsKKworICAgIHB1YmxpYyBHc29uVVRDRGF0ZUFkYXB0ZXIoKSB7CisgICAgICAgIGRhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eS1NTS1kZCdUJ0hIOm1tOnNzLlNTUydaJyIsIExvY2FsZS5VUyk7ICAgICAgLy9UaGlzIGlzIHRoZSBmb3JtYXQgSSBuZWVkCisgICAgICAgIGRhdGVGb3JtYXQuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0VGltZVpvbmUoIlVUQyIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UaGlzIGlzIHRoZSBrZXkgbGluZSB3aGljaCBjb252ZXJ0cyB0aGUgZGF0ZSB0byBVVEMgd2hpY2ggY2Fubm90IGJlIGFjY2Vzc2VkIHdpdGggdGhlIGRlZmF1bHQgc2VyaWFsaXplcgorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgSnNvbkVsZW1lbnQgc2VyaWFsaXplKERhdGUgZGF0ZSwgVHlwZSB0eXBlLCBKc29uU2VyaWFsaXphdGlvbkNvbnRleHQganNvblNlcmlhbGl6YXRpb25Db250ZXh0KSB7CisgICAgICAgIHJldHVybiBuZXcgSnNvblByaW1pdGl2ZShkYXRlRm9ybWF0LmZvcm1hdChkYXRlKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHN5bmNocm9uaXplZCBEYXRlIGRlc2VyaWFsaXplKEpzb25FbGVtZW50IGpzb25FbGVtZW50LCBUeXBlIHR5cGUsIEpzb25EZXNlcmlhbGl6YXRpb25Db250ZXh0IGpzb25EZXNlcmlhbGl6YXRpb25Db250ZXh0KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gZGF0ZUZvcm1hdC5wYXJzZShqc29uRWxlbWVudC5nZXRBc1N0cmluZygpKTsKKyAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEpzb25QYXJzZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vSW5pdEJhY2tlbmRDb25maWcuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Jbml0QmFja2VuZENvbmZpZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZDdlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vSW5pdEJhY2tlbmRDb25maWcuamF2YQpAQCAtMCwwICsxLDY1IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uOworCitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbC5Vc2VyTW9kdWxlOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKKworcHVibGljIGNsYXNzIEluaXRCYWNrZW5kQ29uZmlnIGV4dGVuZHMgSHR0cFNlcnZsZXQgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTc4ODIxMTcxNzkzMTI0NzE1MzNMOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPR0dFUiA9IExvZ2dlci5nZXRMb2dnZXIoSW5pdEJhY2tlbmRDb25maWcuY2xhc3MuZ2V0TmFtZSgpKTsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGluaXQoKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBlbnZpcm9ubWVudCA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0SW5pdFBhcmFtZXRlcigiT0tfUE9SVEFMX0VOVklST05NRU5UIik7CisgICAgICAgIHNldENvbmZpZ0ZpbGVzKGVudmlyb25tZW50KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0Q29uZmlnRmlsZXMoU3RyaW5nIGVudmlyb25tZW50ICkgeworICAgICAgICBTdHJpbmcgZW52ID0gKGVudmlyb25tZW50ID09IG51bGwgPyAiUHJvZHVjdGlvbiI6IGVudmlyb25tZW50KTsKKworICAgICAgICBTdHJpbmcgYmFja2VuZENvbmZpZ0ZpbGU7CisgICAgICAgIFN0cmluZyBtb2R1bGVDb25maWdGaWxlOworICAgICAgICBzd2l0Y2ggKGVudil7CisgICAgICAgICAgICBjYXNlICJEZXZMb2NhbCI6CisgICAgICAgICAgICAgICAgYmFja2VuZENvbmZpZ0ZpbGU9ImJhY2tlbmRDb25maWdEZXZMb2NhbC5qc29uIjsKKyAgICAgICAgICAgICAgICBtb2R1bGVDb25maWdGaWxlPSJtb2R1bGVDb25maWdEZXZMb2NhbC5qc29uIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIkRldlNlcnZlciI6CisgICAgICAgICAgICAgICAgYmFja2VuZENvbmZpZ0ZpbGU9ImJhY2tlbmRDb25maWdEZXZTZXJ2ZXIuanNvbiI7CisgICAgICAgICAgICAgICAgbW9kdWxlQ29uZmlnRmlsZT0ibW9kdWxlQ29uZmlnRGV2U2VydmVyLmpzb24iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiQ3VzdG9tIjoKKyAgICAgICAgICAgICAgICBiYWNrZW5kQ29uZmlnRmlsZT0iYmFja2VuZENvbmZpZ0N1c3RvbS5qc29uIjsKKyAgICAgICAgICAgICAgICBtb2R1bGVDb25maWdGaWxlPSJtb2R1bGVDb25maWdDdXN0b20uanNvbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJEb2NrZXIiOgorICAgICAgICAgICAgICAgIGJhY2tlbmRDb25maWdGaWxlPSJiYWNrZW5kQ29uZmlnRG9ja2VyLmpzb24iOworICAgICAgICAgICAgICAgIG1vZHVsZUNvbmZpZ0ZpbGU9Im1vZHVsZUNvbmZpZ0RvY2tlci5qc29uIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYmFja2VuZENvbmZpZ0ZpbGU9ImJhY2tlbmRDb25maWdQcm9kdWN0aW9uLmpzb24iOworICAgICAgICAgICAgICAgIG1vZHVsZUNvbmZpZ0ZpbGU9Im1vZHVsZUNvbmZpZ1Byb2R1Y3Rpb24uanNvbiI7CisgICAgICAgIH0KKworICAgICAgICBCYWNrZW5kQ29uZmlnLnNldENvbmZpZ0ZpbGVOYW1lKGJhY2tlbmRDb25maWdGaWxlKTsKKyAgICAgICAgVXNlck1vZHVsZS5zZXRDb25maWdGaWxlTmFtZShtb2R1bGVDb25maWdGaWxlKTsKKyAgICAgICAgTE9HR0VSLmluZm8oIlBvcnRhbCBiYWNrZW5kZW5kZW52aXJvbWVudCBpczogIiArZW52aXJvbm1lbnQrICIuIFNldHRpbmcgYmFja2VuZENvbmZpZyBhY2NvcmRpbmdseSB0bzogIisgYmFja2VuZENvbmZpZ0ZpbGUpOworICAgICAgICBMT0dHRVIuaW5mbygiUG9ydGFsIGJhY2tlbmRlbmRlbnZpcm9tZW50IGlzOiAiICtlbnZpcm9ubWVudCsgIi4gU2V0dGluZyBtb2R1bGVDb25maWcgYWNjb3JkaW5nbHkgdG86ICIrIG1vZHVsZUNvbmZpZ0ZpbGUpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL0luaXRVc2VyQ2FjaGVKb2IuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Jbml0VXNlckNhY2hlSm9iLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5YmU4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Jbml0VXNlckNhY2hlSm9iLmphdmEKQEAgLTAsMCArMSwzNCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbjsKKworaW1wb3J0IGphdmEudXRpbC5UaW1lcjsKK2ltcG9ydCBqYXZhLnV0aWwuVGltZXJUYXNrOworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CisKK3B1YmxpYyBjbGFzcyBJbml0VXNlckNhY2hlSm9iIGV4dGVuZHMgSHR0cFNlcnZsZXQgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gODY3MTMyNjE1NzM3Njk4NzAyM0w7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HR0VSID0gTG9nZ2VyLmdldExvZ2dlcihJbml0VXNlckNhY2hlSm9iLmNsYXNzLmdldE5hbWUoKSk7CisKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGluaXQoKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgIExPR0dFUi5kZWJ1ZygiSW5pdFVzZXJDYWNoZUpvYiBjYWxsZWQiKTsKKyAgICAgICAgVGltZXJUYXNrIHRpbWVyVGFzayA9IG5ldyBVc2VyQ2FjaGVUaW1lclRhc2soKTsKKyAgICAgICAgVGltZXIgdGltZXIgPSBuZXcgVGltZXIoKTsKKyAgICAgICAgdGltZXIuc2NoZWR1bGVBdEZpeGVkUmF0ZSh0aW1lclRhc2ssIDUwMCwgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldFJlbG9hZFVzZXJzSW5TZWMoKSoxMDAwTCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL0pzb25HZW5lcmF0b3JCYXNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vSnNvbkdlbmVyYXRvckJhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2UwY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL0pzb25HZW5lcmF0b3JCYXNlLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbjsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uOworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uQnVpbGRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworcHVibGljIGNsYXNzIEpzb25HZW5lcmF0b3JCYXNlIHsKKyAgICBwcml2YXRlIEpzb25HZW5lcmF0b3JCYXNlKCkge30KKyAgICBwdWJsaWMgc3RhdGljIEdzb24gZ2V0R3NvbigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHc29uQnVpbGRlcigpCisgICAgICAgICAgICAgICAgLnJlZ2lzdGVyVHlwZUFkYXB0ZXIoRGF0ZS5jbGFzcywgbmV3IEdzb25VVENEYXRlQWRhcHRlcigpKQorICAgICAgICAgICAgICAgIC5kaXNhYmxlSHRtbEVzY2FwaW5nKCkKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL1VzZXJDYWNoZVRpbWVyVGFzay5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL1VzZXJDYWNoZVRpbWVyVGFzay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTkyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vVXNlckNhY2hlVGltZXJUYXNrLmphdmEKQEAgLTAsMCArMSw3MSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlRpbWVyVGFzazsKK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuSnd0VG9rZW47CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLktleUNsb2FrUm9sZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuS2V5Q2xvYWtVc2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi51dGlsLkp3dEhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29udHJvbGxlci5Ub2tlbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsLlVzZXJDYWNoZTsKKworcHVibGljIGNsYXNzIFVzZXJDYWNoZVRpbWVyVGFzayBleHRlbmRzIFRpbWVyVGFzayB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPR0dFUiA9IExvZ2dlci5nZXRMb2dnZXIoVG9rZW5NYW5hZ2VyLmNsYXNzLmdldE5hbWUoKSk7CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICBMT0dHRVIuZGVidWcoIlVzZXJDYWNoZVRpbWVyVGFzayBzdGFydGVkIik7CisgICAgdHJ5IHsKKyAgICAgIEp3dFRva2VuIHRva2VuID0gSnd0SGVscGVyLmxvZ2luKEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRLZXljbG9ha0FkbWluKCksIEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRLZXljbG9ha1BXKCkpOworICAgICAgaWYoIHRva2VuID09IG51bGwgKSB7CisgICAgICAgIExPR0dFUi5lcnJvcigiTG9naW4gZm9yIGdldEtleUNsb2FrVXNlcnNGcm9tVG9rZW4oKSBmYWlsZWQgZm9yIFVzZXI6IisgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEtleWNsb2FrQWRtaW4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgTGlzdDxLZXlDbG9ha1VzZXI+IGFsbFVzZXJzV2l0aFJvbGVzID0gZ2V0S2V5Q2xvYWtVc2Vyc0Zyb21Ub2tlbih0b2tlbik7CisKKyAgICAgIGlmKCBhbGxVc2Vyc1dpdGhSb2xlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HR0VSLndhcm4oImdldEtleUNsb2FrVXNlcnNGcm9tVG9rZW4gcHJvdmlkZWQgZW1wdHkgbGlzdCEiKTsKKyAgICAgIH0KKworICAgICAgVXNlckNhY2hlLmdldEluc3RhbmNlKCkuc2V0S2V5Q2xvYWtVc2VycyhhbGxVc2Vyc1dpdGhSb2xlcyk7CisKKyAgICB9IGNhdGNoIChQb3J0YWxJbnRlcm5hbFNlcnZlckVycm9yIHBvcnRhbEludGVybmFsU2VydmVyRXJyb3IpIHsKKyAgICAgIExPR0dFUi5lcnJvcihwb3J0YWxJbnRlcm5hbFNlcnZlckVycm9yKTsKKyAgICB9CisKKyAgICBMT0dHRVIuZGVidWcoIlVzZXJDYWNoZVRpbWVyVGFzayBmaW5pc2hlZCIpOworICB9CisKKyAgcHJpdmF0ZSBMaXN0PEtleUNsb2FrVXNlcj4gZ2V0S2V5Q2xvYWtVc2Vyc0Zyb21Ub2tlbihKd3RUb2tlbiB0b2tlbikgdGhyb3dzIFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IgeworICAgIExpc3Q8S2V5Q2xvYWtVc2VyPiBhbGxVc2VycyA9IEp3dEhlbHBlci5nZXRVc2Vycyh0b2tlbiwgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldE1heExvYWRVc2VycygpKTsKKyAgICBMaXN0PEtleUNsb2FrVXNlcj4gYWxsVXNlcnNXaXRoUm9sZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgIGZvciAoS2V5Q2xvYWtVc2VyIHVzZXIgOiBhbGxVc2VycykgeworICAgICAgTGlzdDxTdHJpbmc+IHJvbGVzTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgTGlzdDxLZXlDbG9ha1JvbGU+IHJvbGVzRm9yVXNlciA9IEp3dEhlbHBlci5nZXRSb2xlc0ZvclVzZXIodG9rZW4sIHVzZXIuZ2V0SWQoKSk7CisgICAgICB1c2VyLnNldE5hbWUoKTsKKyAgICAgIGZvciAoS2V5Q2xvYWtSb2xlIGtleUNsb2FrUm9sZSA6IHJvbGVzRm9yVXNlcikgeworICAgICAgICByb2xlc0xpc3QuYWRkKGtleUNsb2FrUm9sZS5nZXROYW1lKCkpOworICAgICAgfQorICAgICAgdXNlci5zZXRBbGxSb2xlcyhyb2xlc0xpc3QpOworICAgICAgYWxsVXNlcnNXaXRoUm9sZXMuYWRkKHVzZXIpOworICAgIH0KKyAgICByZXR1cm4gYWxsVXNlcnNXaXRoUm9sZXM7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi91dGlsL0hhc2hpbmdBbGdvLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vdXRpbC9IYXNoaW5nQWxnby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMTNjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vdXRpbC9IYXNoaW5nQWxnby5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24udXRpbDsKKworaW1wb3J0IGphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuYmluYXJ5LkhleDsKKworcHVibGljIGZpbmFsIGNsYXNzIEhhc2hpbmdBbGdvIHsKKyAgICBwcml2YXRlIEhhc2hpbmdBbGdvKCkge30KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGhhc2hJdChTdHJpbmcgcHdkQ2xlYXIpIHsKKyAgICAgICAgTWVzc2FnZURpZ2VzdCBjcmlwdDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNyaXB0ID0gTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZSgiU0hBLTEiKTsKKyAgICAgICAgICAgIGNyaXB0LnJlc2V0KCk7CisgICAgICAgICAgICBjcmlwdC51cGRhdGUocHdkQ2xlYXIuZ2V0Qnl0ZXMoInV0ZjgiKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhIZXguZW5jb2RlSGV4KGNyaXB0LmRpZ2VzdCgpKSk7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy9OT1NPTkFSCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi91dGlsL0xvZ2dlclV0aWwuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi91dGlsL0xvZ2dlclV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjYyZjVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL3V0aWwvTG9nZ2VyVXRpbC5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24udXRpbDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5BcHBlbmRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkJhc2ljQ29uZmlndXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTGF5b3V0OworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTGV2ZWw7CitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0OworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGoubmV0LlN5c2xvZ0FwcGVuZGVyOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouc3BpLlJvb3RMb2dnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai54bWwuRE9NQ29uZmlndXJhdG9yOworCisvKioKKyAqIDxiPkxvZ2dlckNvbmZpZzwvYj48YnI+CisgKiBMb2dnaW5nIEltcGxlbWVudGllcnVuZworICovCitwdWJsaWMgZmluYWwgY2xhc3MgTG9nZ2VyVXRpbCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKKyAgICAvKioKKyAgICAgKiBzZXJpYWxWZXJzaW9uVUlELgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisgICAgLyoKKyAgICAgKiAobm9uLUphdmFkb2MpCisgICAgICogQHNlZSBqYXZheC5zZXJ2bGV0LkdlbmVyaWNTZXJ2bGV0I2luaXQoKQorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CisgICAgICAgIGZpbmFsIFNlcnZsZXRDb250ZXh0IGNvbnRleHQgPSBnZXRTZXJ2bGV0Q29udGV4dCgpOworCisgICAgICAgIGlmIChCb29sZWFuLnZhbHVlT2YoY29udGV4dC5nZXRJbml0UGFyYW1ldGVyKCJwYXJhbS5zeXNsb2cudXNlIikpKSB7CisgICAgICAgICAgICAvLyBjb25maWd1cmUgZm9yIHN5c2xvZyB1c2luZyBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IKKyAgICAgICAgICAgIEJhc2ljQ29uZmlndXJhdG9yLnJlc2V0Q29uZmlndXJhdGlvbigpOworCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbGV2ZWwgPSBjb250ZXh0LmdldEluaXRQYXJhbWV0ZXIoInBhcmFtLnN5c2xvZy5sZXZlbCIpOworICAgICAgICAgICAgUm9vdExvZ2dlci5nZXRSb290TG9nZ2VyKCkuc2V0TGV2ZWwoTGV2ZWwudG9MZXZlbChsZXZlbCkpOworCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaG9zdCA9IGNvbnRleHQuZ2V0SW5pdFBhcmFtZXRlcigicGFyYW0uc3lzbG9nLmhvc3QiKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBmYWNpbGl0eSA9IGNvbnRleHQuZ2V0SW5pdFBhcmFtZXRlcigicGFyYW0uc3lzbG9nLmZhY2lsaXR5Iik7CisgICAgICAgICAgICBmaW5hbCBMYXlvdXQgbGF5b3V0ID0gbmV3IFBhdHRlcm5MYXlvdXQoIlslZHt5eXl5Lk1NLmRkIEhIOm1tOnNzfV0gWyVwXSBbJWNdICVtJW4iKTsKKyAgICAgICAgICAgIGZpbmFsIEFwcGVuZGVyIHN5c2xvZ0FwcGVuZGVyID0gbmV3IFN5c2xvZ0FwcGVuZGVyKGxheW91dCwgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgU3lzbG9nQXBwZW5kZXIuZ2V0RmFjaWxpdHkoZmFjaWxpdHkpKTsKKyAgICAgICAgICAgIEJhc2ljQ29uZmlndXJhdG9yLmNvbmZpZ3VyZShzeXNsb2dBcHBlbmRlcik7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGNvbmZpZ3VyZSB1c2luZyBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB4bWwgZmlsZQorICAgICAgICAgICAgZmluYWwgU3RyaW5nIHByZWZpeCA9IGNvbnRleHQuZ2V0UmVhbFBhdGgoIi8iKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBmaWxlID0gZ2V0SW5pdFBhcmFtZXRlcigibG9nNGotaW5pdC1maWxlIik7CisKKyAgICAgICAgICAgIGlmIChwcmVmaXggIT0gbnVsbCAmJiBmaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBET01Db25maWd1cmF0b3IuY29uZmlndXJlKHByZWZpeCArIGZpbGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiAobm9uLUphdmFkb2MpCisgICAgICogQHNlZSBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQjZG9HZXQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwKKyAgICAgKiBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChmaW5hbCBIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICAvLyBOb3RoaW5nIGRvbmUgb24gcHVycG9zZS4KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vdXRpbC9SZXNvdXJjZUxvYWRlckJhc2UuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi91dGlsL1Jlc291cmNlTG9hZGVyQmFzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNWQ5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vdXRpbC9SZXNvdXJjZUxvYWRlckJhc2UuamF2YQpAQCAtMCwwICsxLDM2IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLnV0aWw7CisKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5JT1V0aWxzOworCitwdWJsaWMgY2xhc3MgUmVzb3VyY2VMb2FkZXJCYXNlIHsKKyAgICBwcml2YXRlIFN0cmluZyBzdHJlYW0yU3RyaW5nKElucHV0U3RyZWFtIGlzKSB7CisgICAgICAgIFN0cmluZ1dyaXRlciB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBJT1V0aWxzLmNvcHkoaXMsIHdyaXRlciwgIlVURi04Iik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IC8vIE5PU09OQVIKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gd3JpdGVyLnRvU3RyaW5nKCk7CisKKworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgbG9hZFN0cmluZ0Zyb21SZXNvdXJjZShTdHJpbmcgZmlsZW5hbWUpIHsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOworICAgICAgICBJbnB1dFN0cmVhbSBqc29uc3RyZWFtID0gY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7CisgICAgICAgIHJldHVybiBzdHJlYW0yU3RyaW5nKGpzb25zdHJlYW0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbnRyb2xsZXIvQmFja2VuZENvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbnRyb2xsZXIvQmFja2VuZENvbnRyb2xsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQ3MTQzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9CYWNrZW5kQ29udHJvbGxlci5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb250cm9sbGVyOworCitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLkp3dFRva2VuOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi5tb2RlbC5LZXlDbG9ha1VzZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLnV0aWwuSnd0SGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uSnNvbkdlbmVyYXRvckJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbFVuYXV0aG9yaXplZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsLkxvZ2luQ3JlZGVudGlhbHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbC5Vc2VyQ2FjaGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbC5Vc2VyTW9kdWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWwuVmVyc2lvbkluZm87CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgQmFja2VuZENvbnRyb2xsZXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0dHRVIgPSBMb2dnZXIuZ2V0TG9nZ2VyKEJhY2tlbmRDb250cm9sbGVyLmNsYXNzLmdldE5hbWUoKSk7CisgICAgcHJpdmF0ZSBmaW5hbCBJbnB1dERhdGFWYWx1YXRvciBpbnB1dERhdGFWYWx1YXRvciA9IG5ldyBJbnB1dERhdGFWYWx1YXRvcigpOworCisgICAgcHVibGljIExpc3Q8S2V5Q2xvYWtVc2VyPiBnZXRVc2Vyc0ZvclJvbGUoU3RyaW5nIHJvbGVUb0NoZWNrKSB7CisgICAgICAgIExpc3Q8S2V5Q2xvYWtVc2VyPiB1c2Vyc1dpdGhSb2xlID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIExpc3Q8S2V5Q2xvYWtVc2VyPiBrZXlDbG9ha1VzZXJzID0gVXNlckNhY2hlLmdldEluc3RhbmNlKCkuZ2V0S2V5Q2xvYWtVc2VycygpOworCisgICAgICAgIGZvciAoS2V5Q2xvYWtVc2VyIHVzZXIgOiBrZXlDbG9ha1VzZXJzKSB7CisgICAgICAgICAgICBMaXN0PFN0cmluZz4gYWxsUm9sZXMgPSB1c2VyLmdldEFsbFJvbGVzKCk7CisgICAgICAgICAgICBpZiAoYWxsUm9sZXMgPT0gIG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChTdHJpbmcgcm9sZSA6IGFsbFJvbGVzKSB7CisgICAgICAgICAgICAgICAgaWYocm9sZS5lcXVhbHMocm9sZVRvQ2hlY2spKXsKKyAgICAgICAgICAgICAgICAgICAgdXNlcnNXaXRoUm9sZS5hZGQodXNlcik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB1c2Vyc1dpdGhSb2xlOworICAgIH0KKworCisgICAgcHVibGljIEp3dFRva2VuIGF1dGhlbnRpY2F0ZShTdHJpbmcgY3JlZGVudGlhbHMpIHRocm93cyBQb3J0YWxFeGNlcHRpb24geworICAgICAgICBMT0dHRVIuZGVidWcoImF1dGhlbnRpY2F0ZSgpIGlzIGNhbGxlZCIpOworCisgICAgICAgIC8vIHZhbHVhdG9yIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIG5vdCB2YWxpZAorICAgICAgICBpbnB1dERhdGFWYWx1YXRvci5jaGVja0NyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKTsKKworICAgICAgICBMb2dpbkNyZWRlbnRpYWxzIGxvZ2luQ3JlZGVudGlhbHMgPSBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oY3JlZGVudGlhbHMsIExvZ2luQ3JlZGVudGlhbHMuY2xhc3MpOworCisgICAgICAgIEp3dFRva2VuIHRva2VuID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIGlucHV0VXNlcm5hbWUgPSBsb2dpbkNyZWRlbnRpYWxzLmdldFVzZXJOYW1lKCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgU3RyaW5nIGlucHV0UGFzc3dvcmQgPSBsb2dpbkNyZWRlbnRpYWxzLmdldFBhc3N3b3JkKCk7CisKKyAgICAgICAgLy8gb2J0YWluIGEgdG9rZW4gZnJvbSBrZXljbG9haworICAgICAgICB0b2tlbiA9IEp3dEhlbHBlci5sb2dpbihpbnB1dFVzZXJuYW1lLCBpbnB1dFBhc3N3b3JkKTsKKworICAgICAgICBpZiggdG9rZW4gPT0gbnVsbCApIHsKKyAgICAgICAgICAgIExPR0dFUi5kZWJ1ZyhjcmVkZW50aWFscyk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUG9ydGFsVW5hdXRob3JpemVkKCJVbmtub3duIFVzZXIvUGFzc3dvcmQiKTsKKyAgICAgICAgfQorCisgICAgICAgIExPR0dFUi5kZWJ1ZygiYXV0aGVudGljYXRlKCkgc3VjY2VlZGVkLiIpOworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorCisgICAgcHVibGljIFZlcnNpb25JbmZvIGdldFZlcnNpb25JbmZvKCkgeworICAgICAgICBMT0dHRVIuZGVidWcoImdldFZlcnNpb25JbmZvKCkgaXMgY2FsbGVkIik7CisKKyAgICAgICAgU3RyaW5nIHZlcnNpb24gPSBnZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXRJbXBsZW1lbnRhdGlvblZlcnNpb24oKTsKKyAgICAgICAgVmVyc2lvbkluZm8gdmkgPSBuZXcgVmVyc2lvbkluZm8oKTsKKyAgICAgICAgdmkuc2V0QmFja2VuZFZlcnNpb24odmVyc2lvbik7CisKKyAgICAgICAgTE9HR0VSLmRlYnVnKCJnZXRWZXJzaW9uSW5mbygpIGlzIGZpbmlzaGVkIik7CisgICAgICAgIHJldHVybiB2aTsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxVc2VyTW9kdWxlPiBnZXRVc2VyTW9kdWxlTGlzdCgpIHsKKyAgICAgICAgTE9HR0VSLmRlYnVnKCJnZXRVc2VyTW9kdWxlTGlzdCgpIGlzIGNhbGxlZCIpOworICAgICAgICBMaXN0PFVzZXJNb2R1bGU+IHVtTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgICAgICAgIGZvciAoaW50IGk9MDsgaTxVc2VyTW9kdWxlLmdldEluc3RhbmNlKCkubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFVzZXJNb2R1bGUgdW0gPSBuZXcgVXNlck1vZHVsZSgpOworICAgICAgICAgICAgdW0uc2V0TW9kdWxlTmFtZShVc2VyTW9kdWxlLmdldEluc3RhbmNlKClbaV0uZ2V0TW9kdWxlTmFtZSgpKTsKKyAgICAgICAgICAgIHVtLnNldENvbHMoVXNlck1vZHVsZS5nZXRJbnN0YW5jZSgpW2ldLmdldENvbHMoKSk7CisgICAgICAgICAgICB1bS5zZXRSb3dzKFVzZXJNb2R1bGUuZ2V0SW5zdGFuY2UoKVtpXS5nZXRSb3dzKCkpOworICAgICAgICAgICAgdW0uc2V0Q29sb3IoVXNlck1vZHVsZS5nZXRJbnN0YW5jZSgpW2ldLmdldENvbG9yKCkpOworICAgICAgICAgICAgdW0uc2V0TGluayhVc2VyTW9kdWxlLmdldEluc3RhbmNlKClbaV0uZ2V0TGluaygpKTsKKyAgICAgICAgICAgIHVtLnNldFBpY3R1cmVMaW5rKFVzZXJNb2R1bGUuZ2V0SW5zdGFuY2UoKVtpXS5nZXRQaWN0dXJlTGluaygpKTsKKyAgICAgICAgICAgIHVtLnNldFJlcXVpcmVkUm9sZShVc2VyTW9kdWxlLmdldEluc3RhbmNlKClbaV0uZ2V0UmVxdWlyZWRSb2xlKCkpOworCisgICAgICAgICAgICB1bUxpc3QuYWRkKHVtKTsKKyAgICAgICAgfQorCisgICAgICAgIExPR0dFUi5kZWJ1ZygiZ2V0VXNlck1vZHVsZUxpc3QoKSBpcyBmaW5pc2hlZCIpOworICAgICAgICByZXR1cm4gdW1MaXN0OworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9CYWNrZW5kSW52b2thYmxlLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0JhY2tlbmRJbnZva2FibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjRiNTBjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9CYWNrZW5kSW52b2thYmxlLmphdmEKQEAgLTAsMCArMSwzOSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbnRyb2xsZXI7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuZXhjZXB0aW9ucy5Qb3J0YWxFeGNlcHRpb247CisKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEJhY2tlbmRJbnZva2FibGUgeworCisgIHByaXZhdGUgU3RyaW5nIG1vZFVzZXI7CisgIHByaXZhdGUgaW50IHVzZXJJZDsKKworICBwdWJsaWMgaW50IGdldFVzZXJJZCgpIHsKKyAgICByZXR1cm4gdXNlcklkOworICB9CisKKyAgcHVibGljIHZvaWQgc2V0VXNlcklkKGludCB1c2VySWQpIHsKKyAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0TW9kVXNlcigpIHsKKyAgICByZXR1cm4gbW9kVXNlcjsKKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldE1vZFVzZXIoU3RyaW5nIG1vZFVzZXIpIHsKKyAgICB0aGlzLm1vZFVzZXIgPSBtb2RVc2VyOworICB9CisKKyAgcHVibGljIGFic3RyYWN0IFJlc3BvbnNlIGludm9rZSgpIHRocm93cyBQb3J0YWxFeGNlcHRpb247Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0Jhc2VXZWJTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0Jhc2VXZWJTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwNGRjNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbnRyb2xsZXIvQmFzZVdlYlNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDc4IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29udHJvbGxlcjsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkdsb2JhbHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEV4Y2VwdGlvbk1hcHBlcjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VXZWJTZXJ2aWNlIHsKKyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIExvbmc+IGN1cnJlbnRUaW1lTWVhc3VyZXMgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBMb2dnZXIgbG9nZ2VyOworCisgICAgcHVibGljIEJhc2VXZWJTZXJ2aWNlKExvZ2dlciBsb2dnZXIpIHsKKyAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7CisgICAgfQorCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgYXNzZXJ0QW5kUmVmcmVzaFRva2VuKFN0cmluZyB0b2tlbiwgYm9vbGVhbiByZWZyZXNoKSB0aHJvd3MgUG9ydGFsRXhjZXB0aW9uOworCisgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0UHJvY2Vzc2luZyhTdHJpbmcgbWV0aG9kTmFtZSkgeworICAgICAgICBMb25nIGxTdGFydGluZ1RpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgU3RyaW5nIGxvb2t1cE5hbWUgPSBidWlsZExvb2t1cElkKG1ldGhvZE5hbWUpOworICAgICAgICBjdXJyZW50VGltZU1lYXN1cmVzLnB1dChsb29rdXBOYW1lLCBsU3RhcnRpbmdUaW1lKTsKKworICAgICAgICBsb2dnZXIudHJhY2UodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSArICIuIiArIGxvb2t1cE5hbWUgKyAiOiBTdGFydCBwcm9jZXNzaW5nLi4uIik7CisgICAgfQorCisgICAgcHJvdGVjdGVkIEF1dG9DbG9zZWFibGUgcGVyZm9ybShmaW5hbCBTdHJpbmcgbWV0aG9kTmFtZSkgeworICAgICAgICBzdGFydFByb2Nlc3NpbmcobWV0aG9kTmFtZSk7CisgICAgICAgIHJldHVybiAoKSAtPiBlbmRQcm9jZXNzaW5nKG1ldGhvZE5hbWUpOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGJ1aWxkTG9va3VwSWQoU3RyaW5nIGZ1bmMpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmMgKyAiQEAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBlbmRQcm9jZXNzaW5nKFN0cmluZyBtZXRob2ROYW1lKSB7CisgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gYnVpbGRMb29rdXBJZChtZXRob2ROYW1lKTsKKyAgICAgICAgaWYgKGN1cnJlbnRUaW1lTWVhc3VyZXMuY29udGFpbnNLZXkobG9va3VwTmFtZSkpIHsKKyAgICAgICAgICAgIExvbmcgbFN0YXJ0aW5nVGltZSA9IGN1cnJlbnRUaW1lTWVhc3VyZXMuZ2V0KGxvb2t1cE5hbWUpOworICAgICAgICAgICAgY3VycmVudFRpbWVNZWFzdXJlcy5yZW1vdmUobG9va3VwTmFtZSk7CisKKyAgICAgICAgICAgIGxvZ2dlci50cmFjZSh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi4iICsgbG9va3VwTmFtZSArICI6IEZpbmlzaGVkIHByb2Nlc3NpbmcgaW4gIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGxTdGFydGluZ1RpbWUpICsgIiBtcyIpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgUmVzcG9uc2UgaW52b2tlKFN0cmluZyBzZXNzaW9uSWQsIGJvb2xlYW4gcmVmcmVzaCwgQmFja2VuZEludm9rYWJsZSBpbnZva2FibGUpCisgICAgeworICAgICAgICB0cnkgKEF1dG9DbG9zZWFibGUgaWdub3JlZCA9IHBlcmZvcm0oaW52b2thYmxlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5JbnZva2UoKSIpKSB7IC8vIE5PU09OQVIKKworICAgICAgICAgICAgYXNzZXJ0QW5kUmVmcmVzaFRva2VuKHNlc3Npb25JZCwgcmVmcmVzaCk7CisKKyAgICAgICAgICAgIHJldHVybiBpbnZva2FibGUuaW52b2tlKCk7CisgICAgICAgIH0gY2F0Y2ggKFBvcnRhbEV4Y2VwdGlvbiBiZWUpIHsKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ2F1Z2h0IEJhY2tlbmRFeGNlcHRpb246ICIgKyBiZWUuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpOworICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhiZWUuZ2V0SHR0cFN0YXR1cygpKS5lbnRpdHkoUG9ydGFsRXhjZXB0aW9uTWFwcGVyLnRvSnNvbihiZWUpKQorICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmV4cGVjdGVkIGV4Y2VwdGlvbiIsIGUpOworICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhHbG9iYWxzLkhUVFBTVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKS5idWlsZCgpOworICAgICAgICB9CisKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0NvbnRyb2xsZXJJbXBsZW1lbnRhdGlvbnMuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbnRyb2xsZXIvQ29udHJvbGxlckltcGxlbWVudGF0aW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkM2ZiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0NvbnRyb2xsZXJJbXBsZW1lbnRhdGlvbnMuamF2YQpAQCAtMCwwICsxLDExMSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbnRyb2xsZXI7CisKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi5tb2RlbC5LZXlDbG9ha1VzZXI7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkpzb25HZW5lcmF0b3JCYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuZXhjZXB0aW9ucy5Qb3J0YWxFeGNlcHRpb25NYXBwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbC5Vc2VyQ2FjaGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbC5Vc2VyTW9kdWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWwuVmVyc2lvbkluZm87CisKKworcHVibGljIGNsYXNzIENvbnRyb2xsZXJJbXBsZW1lbnRhdGlvbnMKK3sKKyAgICBwcml2YXRlIENvbnRyb2xsZXJJbXBsZW1lbnRhdGlvbnMoKSB7fQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBHZXRVc2VycyBleHRlbmRzIEJhY2tlbmRJbnZva2FibGUgeworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgUmVzcG9uc2UgaW52b2tlKCkgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisgICAgICAgICAgICBMaXN0PEtleUNsb2FrVXNlcj4ga2V5Q2xvYWtVc2VyTGlzdCA9IFVzZXJDYWNoZS5nZXRJbnN0YW5jZSgpLmdldEtleUNsb2FrVXNlcnMoKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUJ1aWxkZXJXcmFwcGVyLklOU1RBTkNFLmJ1aWxkT0tSZXNwb25zZShKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkudG9Kc29uKGtleUNsb2FrVXNlckxpc3QpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgR2V0VmVyc2lvbkluZm8gZXh0ZW5kcyBCYWNrZW5kSW52b2thYmxlIHsKKyAgICAgICAgcHJpdmF0ZSBCYWNrZW5kQ29udHJvbGxlciBiYWNrZW5kQ29udHJvbGxlcjsKKyAgICAgICAgCisgICAgICAgIHB1YmxpYyBHZXRWZXJzaW9uSW5mbyhCYWNrZW5kQ29udHJvbGxlciBiYWNrZW5kQ29udHJvbGxlcikgeworICAgICAgICAgICAgdGhpcy5iYWNrZW5kQ29udHJvbGxlciA9IGJhY2tlbmRDb250cm9sbGVyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFJlc3BvbnNlIGludm9rZSgpIHRocm93cyBQb3J0YWxFeGNlcHRpb24geworICAgICAgICAgICAgVmVyc2lvbkluZm8gdmkgPSBiYWNrZW5kQ29udHJvbGxlci5nZXRWZXJzaW9uSW5mbygpOworICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlQnVpbGRlcldyYXBwZXIuSU5TVEFOQ0UuYnVpbGRPS1Jlc3BvbnNlKEpzb25HZW5lcmF0b3JCYXNlLmdldEdzb24oKS50b0pzb24odmkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTG9nb3V0IGV4dGVuZHMgQmFja2VuZEludm9rYWJsZSB7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGFjY2Vzc1Rva2VuOworCisgICAgICAgIHB1YmxpYyBMb2dvdXQoU3RyaW5nIGFjY2Vzc1Rva2VuKSB7CisgICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gYWNjZXNzVG9rZW47CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFJlc3BvbnNlIGludm9rZSgpIHRocm93cyBQb3J0YWxFeGNlcHRpb24geworICAgICAgICAgICAgVG9rZW5NYW5hZ2VyLmdldEluc3RhbmNlKCkubG9nb3V0KGFjY2Vzc1Rva2VuKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUJ1aWxkZXJXcmFwcGVyLklOU1RBTkNFLmJ1aWxkT0tSZXNwb25zZShQb3J0YWxFeGNlcHRpb25NYXBwZXIuZ2V0R2VuZXJhbE9LSnNvbigpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2hlY2tBdXRoIGV4dGVuZHMgQmFja2VuZEludm9rYWJsZSB7CisKKyAgICAgICAgcHVibGljIENoZWNrQXV0aCgpIHsKKyAgICAgICAgICAgIC8qIHRoZSBpbXBsZW1lbnRlZCBpbnZva2UgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICBwYXNzIG9mIGFzc2VydEFuZFJlZnJlc2hUb2tlbiBtZXRob2Qgb2YgdGhlIEJhc2VXZWJTZXJ2aWNlIGNsYXNzIHdoaWNoIGNoZWNrcworICAgICAgICAgICAgaWYgdGhlIFRva2VuIGlzIGFjdGl2ZSBhbmQgdmFsaWQgKi8KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgUmVzcG9uc2UgaW52b2tlKCkgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisJCSAgICAgICAgLy9zZWUgY29uc3RydWN0b3IgYWJvdmUKKwkJICAgICAgICByZXR1cm4gUmVzcG9uc2VCdWlsZGVyV3JhcHBlci5JTlNUQU5DRS5idWlsZE9LUmVzcG9uc2UoUG9ydGFsRXhjZXB0aW9uTWFwcGVyLmdldEdlbmVyYWxPS0pzb24oKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEdldFVzZXJNb2R1bGVzRm9yVXNlciBleHRlbmRzIEJhY2tlbmRJbnZva2FibGUgeworICAgICAgICBwcml2YXRlIEJhY2tlbmRDb250cm9sbGVyIGJhY2tlbmRDb250cm9sbGVyOworCisgICAgICAgIHB1YmxpYyBHZXRVc2VyTW9kdWxlc0ZvclVzZXIoQmFja2VuZENvbnRyb2xsZXIgYmFja2VuZENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIHRoaXMuYmFja2VuZENvbnRyb2xsZXIgPSBiYWNrZW5kQ29udHJvbGxlcjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgUmVzcG9uc2UgaW52b2tlKCkgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisgICAgICAgICAgICBMaXN0PFVzZXJNb2R1bGU+IHVtID0gYmFja2VuZENvbnRyb2xsZXIuZ2V0VXNlck1vZHVsZUxpc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUJ1aWxkZXJXcmFwcGVyLklOU1RBTkNFLmJ1aWxkT0tSZXNwb25zZShKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkudG9Kc29uKHVtKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEdldFVzZXJzRm9yUm9sZSBleHRlbmRzIEJhY2tlbmRJbnZva2FibGUgeworICAgICAgICBwcml2YXRlIEJhY2tlbmRDb250cm9sbGVyIGJhY2tlbmRDb250cm9sbGVyOworICAgICAgICBwcml2YXRlIFN0cmluZyB1c2VyUm9sZTsKKworICAgICAgICBwdWJsaWMgR2V0VXNlcnNGb3JSb2xlKEJhY2tlbmRDb250cm9sbGVyIGJhY2tlbmRDb250cm9sbGVyLCBTdHJpbmcgdXNlclJvbGUpIHsKKyAgICAgICAgICAgIHRoaXMuYmFja2VuZENvbnRyb2xsZXIgPSBiYWNrZW5kQ29udHJvbGxlcjsKKyAgICAgICAgICAgIHRoaXMudXNlclJvbGUgPSB1c2VyUm9sZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgUmVzcG9uc2UgaW52b2tlKCkgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisgICAgICAgICAgICBMaXN0PEtleUNsb2FrVXNlcj4ga2V5Q2xvYWtVc2VyTGlzdCA9IGJhY2tlbmRDb250cm9sbGVyLmdldFVzZXJzRm9yUm9sZSh1c2VyUm9sZSk7CisgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VCdWlsZGVyV3JhcHBlci5JTlNUQU5DRS5idWlsZE9LUmVzcG9uc2UoSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLnRvSnNvbihrZXlDbG9ha1VzZXJMaXN0KSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0lucHV0RGF0YVZhbHVhdG9yLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0lucHV0RGF0YVZhbHVhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwOTRhNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbnRyb2xsZXIvSW5wdXREYXRhVmFsdWF0b3IuamF2YQpAQCAtMCwwICsxLDY3IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29udHJvbGxlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uR2xvYmFsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkpzb25HZW5lcmF0b3JCYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEJhZFJlcXVlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsVW5hdXRob3JpemVkOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWwuTG9naW5DcmVkZW50aWFsczsKKworcHVibGljIGNsYXNzIElucHV0RGF0YVZhbHVhdG9yIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HR0VSID0gTG9nZ2VyLmdldExvZ2dlcihJbnB1dERhdGFWYWx1YXRvci5jbGFzcy5nZXROYW1lKCkpOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdISVRFTElTVCA9ICJbXmEtekEtWsOkw4TDtsOWw7zDnMOfPzAtOSgpLiwtOjtfKz0hJcKnJi8nIzw+XCIgXSI7CisKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tDcmVkZW50aWFsc1JhdyhTdHJpbmcgY3JlZGVudGlhbHMpIHRocm93cyBQb3J0YWxVbmF1dGhvcml6ZWQgeworICAgICAgICBpZiAoY3JlZGVudGlhbHMgPT0gbnVsbCB8fCBjcmVkZW50aWFscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBQb3J0YWxVbmF1dGhvcml6ZWQoIk5vIGNyZWRlbnRpYWxzIHByb3ZpZGVkIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNyZWRlbnRpYWxzLmxlbmd0aCgpID4gR2xvYmFscy5NQVhfQ1JFREVOVElBTFNfTEVOR1RIKSB7CisgICAgICAgICAgICBMT0dHRVIud2FybigiTWF4TGVuZ3RoIG9mIGNyZWRlbnRpYWxzIGV4Y2VlZGVkIik7CisKKyAgICAgICAgICAgIHRocm93IG5ldyBQb3J0YWxVbmF1dGhvcml6ZWQoIkludmFsaWQgY3JlZGVudGlhbHMiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNoZWNrQ3JlZGVudGlhbHMoU3RyaW5nIGNyZWRlbnRpYWxzKSB0aHJvd3MgUG9ydGFsVW5hdXRob3JpemVkIHsKKyAgICAgICAgY2hlY2tDcmVkZW50aWFsc1JhdyhjcmVkZW50aWFscyk7CisKKyAgICAgICAgTG9naW5DcmVkZW50aWFscyBvYmo7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBvYmogPSBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oY3JlZGVudGlhbHMsIExvZ2luQ3JlZGVudGlhbHMuY2xhc3MpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyAvLyBOT1NPTkFSCisgICAgICAgICAgICBvYmogPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmouZ2V0VXNlck5hbWUoKSA9PSBudWxsIHx8IG9iai5nZXRVc2VyTmFtZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTE9HR0VSLndhcm4oIkludmFsaWQgY3JlZGVudGlhbHMgcHJvdmlkZWQuICIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFBvcnRhbFVuYXV0aG9yaXplZCgiSW52YWxpZCBjcmVkZW50aWFscyIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrV2hpdGVsaXN0Q2hhcnMoU3RyaW5nIHR4dCkgdGhyb3dzIFBvcnRhbEJhZFJlcXVlc3QgeyAvLyBOT1NPTkFSIDI0LjA5LjIwMTg6IFRoZXJlJ3MgYSBncmVhdCBwb3NzaWJpbGl0eSB0aGF0IHdlIG5lZWQgYSB3aGl0ZWJveC1jaGFyZWN0ZXIgY2hlY2sgZm9yIHNlY3VyaXR5IHJlYXNvbnMgYWdhaW4uIEJlY2F1c2Ugb2YgdGhpcywgd2UgbGVhdmUgdGhpcyBjb2RlCisgICAgICAgIGNoZWNrV2hpdGVsaXN0Q2hhcnModHh0LCBmYWxzZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrV2hpdGVsaXN0Q2hhcnMoU3RyaW5nIHR4dCwgYm9vbGVhbiBsb2dUZXh0T25FcnJvcikgdGhyb3dzIFBvcnRhbEJhZFJlcXVlc3QgeworICAgICAgICAvLyBlbXB0eSBTdHJpbmcgaXMgb2sKKyAgICAgICAgaWYgKHR4dCA9PSBudWxsIHx8IHR4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgdHgyID0gdHh0LnJlcGxhY2VBbGwoV0hJVEVMSVNULCAiIik7CisgICAgICAgIGlmICghdHgyLmVxdWFscyh0eHQpKSB7CisgICAgICAgICAgICBMT0dHRVIud2FybigiSW52YWxpZCB0ZXh0IG5vdCBtYXRjaGluZyB3aGl0ZWxpc3QiICsgKGxvZ1RleHRPbkVycm9yID8gIjoiICsgdHh0IDogIiIpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBQb3J0YWxCYWRSZXF1ZXN0KCJJbnZhbGlkIHRleHQgZGF0YSIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9SZXNwb25zZUJ1aWxkZXJXcmFwcGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL1Jlc3BvbnNlQnVpbGRlcldyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE1N2NmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9SZXNwb25zZUJ1aWxkZXJXcmFwcGVyLmphdmEKQEAgLTAsMCArMSw2MCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbnRyb2xsZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkdsb2JhbHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEludGVybmFsU2VydmVyRXJyb3I7CisKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlJlc3BvbnNlOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKKworcHVibGljIGVudW0gUmVzcG9uc2VCdWlsZGVyV3JhcHBlciB7CisgICAgSU5TVEFOQ0U7CisKKyAgICBwdWJsaWMgUmVzcG9uc2UuUmVzcG9uc2VCdWlsZGVyIGdldFJlc3BvbnNlQnVpbGRlciggU3RyaW5nIGpzb24gKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgICAgIHJldHVybiBnZXRSZXNwb25zZUJ1aWxkZXIoanNvblN0cmluZ1RvQnl0ZXMoIGpzb24gKSk7CisKKyAgICB9CisKKyAgICBwcml2YXRlIFJlc3BvbnNlLlJlc3BvbnNlQnVpbGRlciBnZXRSZXNwb25zZUJ1aWxkZXIoYnl0ZVtdIGpzb24pIHsKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhHbG9iYWxzLkhUVFBTVEFUVVNfT0spLmVudGl0eShqc29uKQorICAgICAgICAgICAgICAgIC5oZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IikKKyAgICAgICAgICAgICAgICAuaGVhZGVyKCJYLVhTUy1Qcm90ZWN0aW9uIiwgIjE7IG1vZGUgPSBibG9jayIpCisgICAgICAgICAgICAgICAgLmhlYWRlcigiWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCIsICJvZmYiKQorICAgICAgICAgICAgICAgIC5oZWFkZXIoIlgtQ29udGVudC1UeXBlLU9wdGlvbnMiLCAibm9zbmlmZiIpCisgICAgICAgICAgICAgICAgLmhlYWRlcigiWC1GcmFtZS1PcHRpb25zIiwgInNhbWVvcmlnaW4iKQorICAgICAgICAgICAgICAgIC5oZWFkZXIoIlN0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHkiLCAibWF4LWFnZT0xNTc2ODAwMDsgaW5jbHVkZVN1YkRvbWFpbnMiKQorICAgICAgICAgICAgICAgIC5oZWFkZXIoIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGU7IG5vLXN0b3JlOyBtdXN0LXJldmFsaWRhdGUiKQorICAgICAgICAgICAgICAgIC5oZWFkZXIoIlByYWdtYSIsICJuby1jYWNoZSIpCisgICAgICAgICAgICAgICAgLmhlYWRlcigiRXhwaXJlcyIsICIwIikKKyAgICAgICAgICAgICAgICAuaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4iLCAiKiIpOworICAgIH0KKworICAgIHByaXZhdGUgYnl0ZVtdIGpzb25TdHJpbmdUb0J5dGVzKCBTdHJpbmcganNvblN0cmluZyApIHRocm93cyBQb3J0YWxJbnRlcm5hbFNlcnZlckVycm9yIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBqc29uU3RyaW5nLmdldEJ5dGVzKCJVVEYtOCIpOworICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBQb3J0YWxJbnRlcm5hbFNlcnZlckVycm9yKCJVbmV4cGVjdGVkIEVycm9yIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgUmVzcG9uc2UgYnVpbGRPS1Jlc3BvbnNlKFN0cmluZyBqc29uU3RyaW5nKSB0aHJvd3MgUG9ydGFsRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGdldFJlc3BvbnNlQnVpbGRlcigganNvblN0cmluZ1RvQnl0ZXMoIGpzb25TdHJpbmcpKS5idWlsZCgpOworICAgIH0KKworCisgICAgcHVibGljIFJlc3BvbnNlIGJ1aWxkT0tSZXNwb25zZShTdHJpbmcganNvblN0cmluZywgU3RyaW5nIHNlc3Npb25Ub2tlbikgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBnZXRSZXNwb25zZUJ1aWxkZXIoanNvblN0cmluZ1RvQnl0ZXMoanNvblN0cmluZykpLmhlYWRlcihHbG9iYWxzLlNFU1NJT05fVE9LRU5fVEFHLCBzZXNzaW9uVG9rZW4pLmJ1aWxkKCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL1Rva2VuTWFuYWdlci5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9Ub2tlbk1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzhlMDFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9Ub2tlbk1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbnRyb2xsZXI7CisKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi5tb2RlbC5Kd3RQYXlsb2FkOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi5tb2RlbC5Kd3RUb2tlbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIudXRpbC5Kd3RIZWxwZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5CYWNrZW5kQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uSnNvbkdlbmVyYXRvckJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsVW5hdXRob3JpemVkOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWwuVXNlckF1dGhlbnRpY2F0aW9uOworCitwdWJsaWMgY2xhc3MgVG9rZW5NYW5hZ2VyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HR0VSID0gTG9nZ2VyLmdldExvZ2dlcihUb2tlbk1hbmFnZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKworICAgIHByaXZhdGUgc3RhdGljIGxvbmcgaW50ZXJuYWxTZXNzaW9uTGVuZ3RoT2Zmc2V0UGVyYyA9IDBMOworCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTZXNzaW9uSXRlbSB7CisgICAgICAgIHByaXZhdGUgbG9uZyBzZXNzaW9uQ3JlYXRpb25UaW1lOworICAgICAgICBwcml2YXRlIGxvbmcgc2Vzc2lvbkxhc3RBY2Nlc3NUaW1lOworCisgICAgICAgIHByaXZhdGUgU3RyaW5nIHNlc3Npb25JZDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgY29va2llVG9rZW47CisgICAgICAgIHByaXZhdGUgVXNlckF1dGhlbnRpY2F0aW9uIHVzZXI7CisgICAgICAgIHByaXZhdGUgSnd0VG9rZW4gand0VG9rZW47CisKKyAgICAgICAgcHVibGljIFNlc3Npb25JdGVtKGxvbmcgc2Vzc2lvbkNyZWF0aW9uVGltZSkgeworICAgICAgICAgICAgdGhpcy5zZXNzaW9uQ3JlYXRpb25UaW1lID0gdGhpcy5zZXNzaW9uTGFzdEFjY2Vzc1RpbWUgPSBzZXNzaW9uQ3JlYXRpb25UaW1lOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0U2Vzc2lvbkNyZWF0aW9uVGltZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXNzaW9uQ3JlYXRpb25UaW1lOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNyZWF0aW9uVGltZShsb25nIHNlc3Npb25DcmVhdGlvblRpbWUpIHsKKyAgICAgICAgICAgIHRoaXMuc2Vzc2lvbkNyZWF0aW9uVGltZSA9IHNlc3Npb25DcmVhdGlvblRpbWU7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgbG9uZyBnZXRTZXNzaW9uTGFzdEFjY2Vzc1RpbWUoKSB7CisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbkxhc3RBY2Nlc3NUaW1lOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkxhc3RBY2Nlc3NUaW1lKGxvbmcgc2Vzc2lvbkxhc3RBY2Nlc3NUaW1lKSB7CisgICAgICAgICAgICB0aGlzLnNlc3Npb25MYXN0QWNjZXNzVGltZSA9IHNlc3Npb25MYXN0QWNjZXNzVGltZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBVc2VyQXV0aGVudGljYXRpb24gZ2V0VXNlcigpIHsKKyAgICAgICAgICAgIHJldHVybiB1c2VyOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0VXNlcihVc2VyQXV0aGVudGljYXRpb24gdXNlcikgeworICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBKd3RUb2tlbiBnZXRKd3RUb2tlbigpIHsKKyAgICAgICAgICAgIHJldHVybiBqd3RUb2tlbjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEp3dFRva2VuKEp3dFRva2VuIGp3dFRva2VuKSB7CisgICAgICAgICAgICB0aGlzLmp3dFRva2VuID0gand0VG9rZW47CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNlc3Npb25JZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXNzaW9uSWQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uSWQoU3RyaW5nIHNlc3Npb25JZCkgeworICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldENvb2tpZVRva2VuKCkgeworICAgICAgICAgICAgcmV0dXJuIGNvb2tpZVRva2VuOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0Q29va2llVG9rZW4oU3RyaW5nIGNvb2tpZVRva2VuKSB7CisgICAgICAgICAgICB0aGlzLmNvb2tpZVRva2VuID0gY29va2llVG9rZW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUb2tlbk1hbmFnZXIgSU5TVEFOQ0UgPSBuZXcgVG9rZW5NYW5hZ2VyKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgU2Vzc2lvbkl0ZW0+IHJlZ2lzdHJ5ID0gbmV3IEhhc2hNYXA8PigpOworCisgICAgcHJpdmF0ZSBUb2tlbk1hbmFnZXIoKSB7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBUb2tlbk1hbmFnZXIgZ2V0SW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBJTlNUQU5DRTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZWdpc3Rlck5ld1Nlc3Npb24oSnd0VG9rZW4gand0VG9rZW4pIHsKKworICAgICAgICBTdHJpbmcgZ3VpZCA9IGp3dFRva2VuLmdldEFjY2Vzc1Rva2VuKCk7CisgICAgICAgIFNlc3Npb25JdGVtIHNpdGVtID0gbmV3IFNlc3Npb25JdGVtKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKKyAgICAgICAgc2l0ZW0uc2V0Snd0VG9rZW4oand0VG9rZW4pOworICAgICAgICBzaXRlbS5zZXRTZXNzaW9uSWQoZ3VpZCk7CisKKyAgICAgICAgTE9HR0VSLmRlYnVnKCJSZWdpc3RlcmVkIFNlc3Npb24gd2l0aCBKV1Q6ICIgKyBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkudG9Kc29uKGp3dFRva2VuKSk7CisgICAgICAgIHJlZ2lzdHJ5LnB1dChndWlkLCBzaXRlbSk7CisgICAgfQorCisKKyAgICBwcml2YXRlIGJvb2xlYW4gc2Vzc2lvbkhhc0V4cGlyZWQobG9uZyBub3csIFNlc3Npb25JdGVtIHNpdGVtKSB7CisgICAgICAgIHJldHVybiAobm93IC0gc2l0ZW0uZ2V0U2Vzc2lvbkxhc3RBY2Nlc3NUaW1lKCkpID4KKyAgICAgICAgICAgICAgICBCYWNrZW5kQ29uZmlnLmdldEluc3RhbmNlKCkuZ2V0SW50ZXJuYWxTZXNzaW9uTGVuZ3RoTWlsbGlzKCkgKiAoMSArIChpbnRlcm5hbFNlc3Npb25MZW5ndGhPZmZzZXRQZXJjIC8gMTAwTCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlZnJlc2hTZXNzaW9uSXNBbGl2ZShTdHJpbmcgdG9rZW4sIGJvb2xlYW4gcmVmcmVzaCkgdGhyb3dzIFBvcnRhbFVuYXV0aG9yaXplZCB7CisgICAgICAgIFN0cmluZyBhY2Nlc3N0b2tlbiA9IEp3dEhlbHBlci5mb3JtYXRUb2tlbih0b2tlbik7CisgICAgICAgIFNlc3Npb25JdGVtIHNpdGVtID0gcmVnaXN0cnkuZ2V0KGFjY2Vzc3Rva2VuKTsKKyAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKworICAgICAgICBpZiAoc2l0ZW0gPT0gbnVsbCB8fCBzZXNzaW9uSGFzRXhwaXJlZChub3csIHNpdGVtKSkgeworICAgICAgICAgICAgaWYgKHNpdGVtICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBKd3RQYXlsb2FkIHBheUxvYWQgPSBKd3RIZWxwZXIuZ2V0UGF5TG9hZChzaXRlbS5nZXRKd3RUb2tlbigpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdXNlciA9IChwYXlMb2FkICE9IG51bGwgPyBwYXlMb2FkLmdldFByZWZlcnJlZFVzZXJuYW1lKCkgOiBudWxsKTsKKyAgICAgICAgICAgICAgICBMT0dHRVIuZGVidWcoIlNlc3Npb24gZXhwaXJlZCBmb3IgVXNlciAiICsgdXNlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWdpc3RyeS5yZW1vdmUodG9rZW4pOyAvLyB3ZSdyZSBkb25lCisgICAgICAgICAgICBMT0dHRVIuZGVidWcoIkludmFsaWQgVG9rZW46ICIgKyB0b2tlbik7CisgICAgICAgICAgICB0aHJvdyBuZXcgUG9ydGFsVW5hdXRob3JpemVkKCJJbnZhbGlkIFRva2VuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVmcmVzaCkgeworICAgICAgICAgICAgc2l0ZW0uc2V0U2Vzc2lvbkxhc3RBY2Nlc3NUaW1lKG5vdyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBsb2dvdXQoU3RyaW5nIHRva2VuKSB7CisgICAgICAgIFN0cmluZyBhY2Nlc3N0b2tlbiA9IEp3dEhlbHBlci5mb3JtYXRUb2tlbih0b2tlbik7CisgICAgICAgIGlmIChyZWdpc3RyeS5jb250YWluc0tleShhY2Nlc3N0b2tlbikpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJ5LnJlbW92ZShhY2Nlc3N0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2V4Y2VwdGlvbnMvUG9ydGFsQmFkUmVxdWVzdC5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvZXhjZXB0aW9ucy9Qb3J0YWxCYWRSZXF1ZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhNjNmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2V4Y2VwdGlvbnMvUG9ydGFsQmFkUmVxdWVzdC5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5HbG9iYWxzOworCitwdWJsaWMgY2xhc3MgUG9ydGFsQmFkUmVxdWVzdCBleHRlbmRzIFBvcnRhbEV4Y2VwdGlvbiB7CisgICAgcHVibGljIFBvcnRhbEJhZFJlcXVlc3QoKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorCisgICAgcHVibGljIFBvcnRhbEJhZFJlcXVlc3QoU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgc3VwZXIobWVzc2FnZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRIdHRwU3RhdHVzKCkgeworICAgICAgICByZXR1cm4gR2xvYmFscy5IVFRQU1RBVFVTX0JBRF9SRVFVRVNUOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2V4Y2VwdGlvbnMvUG9ydGFsRXhjZXB0aW9uLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOGJhODIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUG9ydGFsRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsgLy8gTk9TT05BUgorICAgIHB1YmxpYyBQb3J0YWxFeGNlcHRpb24oKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorCisgICAgcHVibGljIFBvcnRhbEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICBzdXBlcihtZXNzYWdlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgUG9ydGFsRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgdGhyb3dhYmxlKSB7CisgICAgICAgIHN1cGVyKG1lc3NhZ2UsIHRocm93YWJsZSk7CisgICAgfQorCisgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRIdHRwU3RhdHVzKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEV4Y2VwdGlvbk1hcHBlci5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvZXhjZXB0aW9ucy9Qb3J0YWxFeGNlcHRpb25NYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjFiMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvZXhjZXB0aW9ucy9Qb3J0YWxFeGNlcHRpb25NYXBwZXIuamF2YQpAQCAtMCwwICsxLDQzIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuZXhjZXB0aW9uczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uR2xvYmFsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkpzb25HZW5lcmF0b3JCYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWwuRXJyb3JSZXR1cm47CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbC5HZW5lcmFsUmV0dXJuSXRlbTsKKworcHVibGljIGZpbmFsIGNsYXNzIFBvcnRhbEV4Y2VwdGlvbk1hcHBlciB7CisgICAgcHJpdmF0ZSBQb3J0YWxFeGNlcHRpb25NYXBwZXIoKSB7fQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdW5rbm93bkVycm9yVG9Kc29uKCkgeworICAgICAgICBFcnJvclJldHVybiBlciA9IG5ldyBFcnJvclJldHVybigpOworICAgICAgICBlci5zZXRFcnJvclRleHQoIlVua25vd24gRXJyb3IiKTsKKyAgICAgICAgZXIuc2V0RXJyb3JDb2RlKEdsb2JhbHMuSFRUUFNUQVRVU19JTlRFUk5BTF9TRVJWRVJfRVJST1IpOworICAgICAgICByZXR1cm4gSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLnRvSnNvbihlcik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9Kc29uKFBvcnRhbEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBFcnJvclJldHVybiBlciA9IG5ldyBFcnJvclJldHVybigpOworICAgICAgICAgICAgZXIuc2V0RXJyb3JUZXh0KGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgZXIuc2V0RXJyb3JDb2RlKGUuZ2V0SHR0cFN0YXR1cygpKTsKKyAgICAgICAgICAgIHJldHVybiBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkudG9Kc29uKGVyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRHZW5lcmFsRXJyb3JKc29uKCkgeworICAgICAgICByZXR1cm4gSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLnRvSnNvbihuZXcgR2VuZXJhbFJldHVybkl0ZW0oIk5PSyIpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRHZW5lcmFsT0tKc29uKCkgeworICAgICAgICByZXR1cm4gSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLnRvSnNvbihuZXcgR2VuZXJhbFJldHVybkl0ZW0oIk9LIikpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2V4Y2VwdGlvbnMvUG9ydGFsRm9yYmlkZGVuLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEZvcmJpZGRlbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNTkzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEZvcmJpZGRlbi5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5HbG9iYWxzOworCitwdWJsaWMgY2xhc3MgUG9ydGFsRm9yYmlkZGVuIGV4dGVuZHMgUG9ydGFsRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgUG9ydGFsRm9yYmlkZGVuKCkgeworICAgICAgICBzdXBlcigpOworICAgIH0KKworICAgIHB1YmxpYyBQb3J0YWxGb3JiaWRkZW4oU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgc3VwZXIobWVzc2FnZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRIdHRwU3RhdHVzKCkgeworICAgICAgICByZXR1cm4gR2xvYmFscy5IVFRQU1RBVFVTX0ZPUkJJRERFTjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEludGVybmFsU2VydmVyRXJyb3IuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2V4Y2VwdGlvbnMvUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDQ2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEludGVybmFsU2VydmVyRXJyb3IuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuZXhjZXB0aW9uczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uR2xvYmFsczsKKworcHVibGljIGNsYXNzIFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IgZXh0ZW5kcyBQb3J0YWxFeGNlcHRpb24geworICAgIHB1YmxpYyBQb3J0YWxJbnRlcm5hbFNlcnZlckVycm9yKFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIHN1cGVyKG1lc3NhZ2UpOworICAgIH0KKworICAgIHB1YmxpYyBQb3J0YWxJbnRlcm5hbFNlcnZlckVycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgdGhyb3dhYmxlKSB7CisgICAgICAgIHN1cGVyKG1lc3NhZ2UsIHRocm93YWJsZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRIdHRwU3RhdHVzKCkgeworICAgICAgICByZXR1cm4gR2xvYmFscy5IVFRQU1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbE5vdEZvdW5kLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbE5vdEZvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlZTUzYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2V4Y2VwdGlvbnMvUG9ydGFsTm90Rm91bmQuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuZXhjZXB0aW9uczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uR2xvYmFsczsKKworcHVibGljIGNsYXNzIFBvcnRhbE5vdEZvdW5kIGV4dGVuZHMgUG9ydGFsRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgUG9ydGFsTm90Rm91bmQoKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorCisgICAgcHVibGljIFBvcnRhbE5vdEZvdW5kKFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIHN1cGVyKG1lc3NhZ2UpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0SHR0cFN0YXR1cygpIHsKKyAgICAgICAgcmV0dXJuIEdsb2JhbHMuSFRUUFNUQVRVU19OT1RfRk9VTkQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvZXhjZXB0aW9ucy9Qb3J0YWxVbmF1dGhvcml6ZWQuamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2V4Y2VwdGlvbnMvUG9ydGFsVW5hdXRob3JpemVkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyNjRjZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2V4Y2VwdGlvbnMvUG9ydGFsVW5hdXRob3JpemVkLmphdmEKQEAgLTAsMCArMSwyOSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkdsb2JhbHM7CisKK3B1YmxpYyBjbGFzcyBQb3J0YWxVbmF1dGhvcml6ZWQgZXh0ZW5kcyBQb3J0YWxFeGNlcHRpb24geworICAgIHB1YmxpYyBQb3J0YWxVbmF1dGhvcml6ZWQoKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorCisgICAgcHVibGljIFBvcnRhbFVuYXV0aG9yaXplZChTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICBzdXBlcihtZXNzYWdlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldEh0dHBTdGF0dXMoKSB7CisgICAgICAgIHJldHVybiBHbG9iYWxzLkhUVFBTVEFUVVNfVU5BVVRIT1JJWkVEOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2hlYWx0aC9iYXNlL0hlYWx0aENoZWNrLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9oZWFsdGgvYmFzZS9IZWFsdGhDaGVjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YmM2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9oZWFsdGgvYmFzZS9IZWFsdGhDaGVjay5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuaGVhbHRoLmJhc2U7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBIZWFsdGhDaGVjayB7CisKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgUmVzdWx0IGNoZWNrKCkgdGhyb3dzIEV4Y2VwdGlvbjsgLy8gTk9TT05BUgorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvSGVhbHRoQ2hlY2tlci5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvSGVhbHRoQ2hlY2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZWJkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9oZWFsdGgvYmFzZS9IZWFsdGhDaGVja2VyLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmhlYWx0aC5iYXNlOworCitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgSGVhbHRoQ2hlY2tlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoSGVhbHRoQ2hlY2tlci5jbGFzcyk7CisKKyAgICBwcml2YXRlIExpc3Q8SGVhbHRoQ2hlY2s+IHJlZ2lzdGVyZWRIZWFsdGhDaGVja3MgPSBuZXcgTGlua2VkTGlzdDw+KCk7CisgICAgcHJpdmF0ZSBNYXA8SGVhbHRoQ2hlY2ssIFN0cmluZz4gbmFtaW5nTWFwID0gbmV3IEhhc2hNYXA8PigpOworCisgICAgcHVibGljIHZvaWQgcmVnaXN0ZXIoIFN0cmluZyB0aXRsZSwgSGVhbHRoQ2hlY2sgaGMgKSB7CisgICAgICAgIG5hbWluZ01hcC5wdXQoaGMsIHRpdGxlKTsKKyAgICAgICAgcmVnaXN0ZXJlZEhlYWx0aENoZWNrcy5hZGQoaGMpOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PE5hbWVkSGVhbHRoQ2hlY2tSZXN1bHQ+IHBlcmZvcm1IZWFsdGhDaGVja3MoKSB7CisgICAgICAgIExpc3Q8TmFtZWRIZWFsdGhDaGVja1Jlc3VsdD4gaGNMaXN0ID0gbmV3IExpbmtlZExpc3Q8PigpOworICAgICAgICBmb3IoIEhlYWx0aENoZWNrIGhjIDogcmVnaXN0ZXJlZEhlYWx0aENoZWNrcykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBoY0xpc3QuYWRkKG5ldyBOYW1lZEhlYWx0aENoZWNrUmVzdWx0KG5hbWluZ01hcC5nZXQoaGMpLCBoYy5jaGVjaygpKSk7CisKKyAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7IC8vIE5PU09OQVIgIHdlIGRlZmluYXRlbHkgd2FudCB0byBjYXRjaCBldmVyeXRoaW5nIGhlcmUhISEKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkVycm9yIGR1cmluZyBoZWFsdGhjaGVjayIsIHQpOworICAgICAgICAgICAgICAgIGhjTGlzdC5hZGQobmV3IE5hbWVkSGVhbHRoQ2hlY2tSZXN1bHQobmFtaW5nTWFwLmdldChoYyksCisgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQudW5oZWFsdGh5KCJFeGNlcHRpb24gZHVyaW5nIHRlc3Q6ICIrdCsiIC0+IFNlZSBMb2chIikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGNMaXN0OworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvTmFtZWRIZWFsdGhDaGVja1Jlc3VsdC5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvTmFtZWRIZWFsdGhDaGVja1Jlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MjZjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9oZWFsdGgvYmFzZS9OYW1lZEhlYWx0aENoZWNrUmVzdWx0LmphdmEKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5oZWFsdGguYmFzZTsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uQnVpbGRlcjsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgTmFtZWRIZWFsdGhDaGVja1Jlc3VsdCB7CisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICBwcml2YXRlIFJlc3VsdCByZXN1bHQ7CisKKyAgICBwdWJsaWMgTmFtZWRIZWFsdGhDaGVja1Jlc3VsdCggU3RyaW5nIG5hbWUsIFJlc3VsdCByZXN1bHQgKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgdG9Kc29uKCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOyAvLyBOT1NPTkFSIC0gX2ZkIHdlIGRvbid0IGEgbmV3IGRlcGVuZGVuY3kgYmVjYXVzZSBvZiB0aGlzCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlwiIituYW1lKyJcIjoiKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChuZXcgR3NvbkJ1aWxkZXIoKS5kaXNhYmxlSHRtbEVzY2FwaW5nKCkuY3JlYXRlKCkudG9Kc29uKHJlc3VsdCkpOworICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9Kc29uKExpc3Q8TmFtZWRIZWFsdGhDaGVja1Jlc3VsdD4gcmVzdWx0QXJyYXkgKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCd7Jyk7CisgICAgICAgIGZvciggaW50IGk9MDsgaSA8IHJlc3VsdEFycmF5LnNpemUoKTsgaSsrICkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocmVzdWx0QXJyYXkuZ2V0KGkpLnRvSnNvbigpKTsKKyAgICAgICAgICAgIGlmKCBpKzEgPCByZXN1bHRBcnJheS5zaXplKCkgKSB7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnVpbGRlci5hcHBlbmQoJ30nKS50b1N0cmluZygpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgcHVibGljIFJlc3VsdCBnZXRSZXN1bHQoKSB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvUmVzdWx0LmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9oZWFsdGgvYmFzZS9SZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmY3ZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvUmVzdWx0LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5oZWFsdGguYmFzZTsKKworCitwdWJsaWMgY2xhc3MgUmVzdWx0IHsKKyAgICBwcml2YXRlIGJvb2xlYW4gaGVhbHRoeTsKKyAgICBwcml2YXRlIFN0cmluZyBtZXNzYWdlOworCisgICAgcHJpdmF0ZSBSZXN1bHQoKSB7fQorCisgICAgcHVibGljIHN0YXRpYyBSZXN1bHQgaGVhbHRoeSgpIHsKKyAgICAgICAgUmVzdWx0IHJlcyA9IG5ldyBSZXN1bHQoKTsKKyAgICAgICAgcmVzLmhlYWx0aHkgPSB0cnVlOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHVuaGVhbHRoeShTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICBSZXN1bHQgcmVzID0gbmV3IFJlc3VsdCgpOworICAgICAgICByZXMuaGVhbHRoeSA9IGZhbHNlOworICAgICAgICByZXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0hlYWx0aHkoKSB7CisgICAgICAgIHJldHVybiBoZWFsdGh5OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2hlYWx0aC9pbXBsL0tleUNsb2FrUHJlc2VudEhlYWx0aENoZWNrLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9oZWFsdGgvaW1wbC9LZXlDbG9ha1ByZXNlbnRIZWFsdGhDaGVjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYTdiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9oZWFsdGgvaW1wbC9LZXlDbG9ha1ByZXNlbnRIZWFsdGhDaGVjay5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuaGVhbHRoLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIudXRpbC5Kd3RIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5CYWNrZW5kQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEludGVybmFsU2VydmVyRXJyb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmhlYWx0aC5iYXNlLkhlYWx0aENoZWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5oZWFsdGguYmFzZS5SZXN1bHQ7CisKK3B1YmxpYyBjbGFzcyBLZXlDbG9ha1ByZXNlbnRIZWFsdGhDaGVjayBleHRlbmRzIEhlYWx0aENoZWNrIHsKKworICAgIHByb3RlY3RlZCBib29sZWFuIGNoZWNraXQoKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgICAgIHJldHVybiBKd3RIZWxwZXIuc2VydmljZUF2YWlsYWJsZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBSZXN1bHQgY2hlY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaWYoIGNoZWNraXQoKSApIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuaGVhbHRoeSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQmFja2VuZENvbmZpZyBnYyA9IEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIFN0cmluZyBtc2cgPSBnYy5nZXRBdXRoU2VydmVyVXJsKCkgKyAiLyIgKyBnYy5nZXRLZXljbG9ha1JlYWxtKCk7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LnVuaGVhbHRoeSgiS2V5Q2xvYWstU2VydmljZSBub3QgYXZhaWxhYmxlOiAiK21zZyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9yZXN0L0JhY2tlbmRSZXN0U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvcmVzdC9CYWNrZW5kUmVzdFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjZmYjBhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvcmVzdC9CYWNrZW5kUmVzdFNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDE4NCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnJlc3Q7CisKK2ltcG9ydCBqYXZheC53cy5ycy4qOworCitpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLkp3dFRva2VuOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uR2xvYmFsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkpzb25HZW5lcmF0b3JCYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb250cm9sbGVyLkJhY2tlbmRDb250cm9sbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb250cm9sbGVyLkJhc2VXZWJTZXJ2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb250cm9sbGVyLkNvbnRyb2xsZXJJbXBsZW1lbnRhdGlvbnM7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbnRyb2xsZXIuUmVzcG9uc2VCdWlsZGVyV3JhcHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29udHJvbGxlci5Ub2tlbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEV4Y2VwdGlvbk1hcHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuZXhjZXB0aW9ucy5Qb3J0YWxVbmF1dGhvcml6ZWQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmhlYWx0aC5iYXNlLkhlYWx0aENoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmhlYWx0aC5iYXNlLk5hbWVkSGVhbHRoQ2hlY2tSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmhlYWx0aC5pbXBsLktleUNsb2FrUHJlc2VudEhlYWx0aENoZWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWwuVmVyc2lvbkluZm87CisKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkNvbnRleHQ7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLlVyaUluZm87CisKK0BQYXRoKCIvYmVzZXJ2aWNlIikKK3B1YmxpYyBjbGFzcyBCYWNrZW5kUmVzdFNlcnZpY2UgZXh0ZW5kcyBCYXNlV2ViU2VydmljZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoQmFja2VuZFJlc3RTZXJ2aWNlLmNsYXNzLmdldE5hbWUoKSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERVZFTE9QX01PREU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExFVF9NRV9JTiA9ICJMRVRfTUVfSU4iOworCisgICAgc3RhdGljIHsKKyAgICAgICAgLy8gZGV0ZXJtaW5lIHN0YXRpYyBWZXJzaW9uSW5mbworICAgICAgICBTdHJpbmcgdmVyc2lvblN0cmluZyA9IEJhY2tlbmRSZXN0U2VydmljZS5jbGFzcy5nZXRQYWNrYWdlKCkuZ2V0SW1wbGVtZW50YXRpb25WZXJzaW9uKCkudG9VcHBlckNhc2UoKTsKKyAgICAgICAgREVWRUxPUF9NT0RFID0gdmVyc2lvblN0cmluZy5jb250YWlucygiREVWRUxPUCIpIHx8IHZlcnNpb25TdHJpbmcuY29udGFpbnMoIlNOQVBTSE9UIik7CisgICAgfQorICAgIEBDb250ZXh0CisgICAgcHJpdmF0ZSBVcmlJbmZvIHVyaUluZm87CisKKyAgICBwdWJsaWMgQmFja2VuZFJlc3RTZXJ2aWNlKCkgeworICAgICAgICBzdXBlcihsb2dnZXIpOworICAgIH0KKworICAgIEBQT1NUCisgICAgQFBhdGgoIi9sb2dpbiIpCisgICAgQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKyAgICBAQ29uc3VtZXMoImFwcGxpY2F0aW9uL2pzb24iKQorICAgIHB1YmxpYyBSZXNwb25zZSBsb2dpbihTdHJpbmcgbG9naW5DcmVkZW50aWFscykgeworCisgICAgICAgIHRyeSAoQXV0b0Nsb3NlYWJsZSBpZ25vcmVkID0gcGVyZm9ybSgibG9naW4oKSIpKSB7IC8vIE5PU09OQVIKKyAgICAgICAgICAgIEp3dFRva2VuIGp3dFRva2VuOworCisgICAgICAgICAgICBpZiAobG9naW5DcmVkZW50aWFscyA9PSBudWxsIHx8IGxvZ2luQ3JlZGVudGlhbHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkxvZ2luIEVycm9yLiBFbXB0eSBDcmVkZW50aWFscyIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBQb3J0YWxVbmF1dGhvcml6ZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gd2lsbCB0aHJvdyBleGNlcHRpb24gaWYgaXQgZmFpbHMKKyAgICAgICAgICAgICAgICBqd3RUb2tlbiA9IG5ldyBCYWNrZW5kQ29udHJvbGxlcigpLmF1dGhlbnRpY2F0ZShsb2dpbkNyZWRlbnRpYWxzKTsKKyAgICAgICAgICAgICAgICBUb2tlbk1hbmFnZXIgdG9rZW5NYW5hZ2VyID0gVG9rZW5NYW5hZ2VyLmdldEluc3RhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW5NYW5hZ2VyLnJlZ2lzdGVyTmV3U2Vzc2lvbihqd3RUb2tlbik7CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJMb2dpbiBTdWNjZXNzIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVKc29uUmVzcG9uc2Uoand0VG9rZW4pOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkxvZ2luIEVycm9yLiBJbnZhbGlkIEtleUNsb2FrIENyZWRlbnRpYWxzL1NldHRpbmdzIik7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VGcm9tRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBSZXNwb25zZSBjcmVhdGVKc29uUmVzcG9uc2UoT2JqZWN0IG9iaikgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisgICAgICAgIFJlc3BvbnNlLlJlc3BvbnNlQnVpbGRlciByYiA9IFJlc3BvbnNlQnVpbGRlcldyYXBwZXIuSU5TVEFOQ0UKKyAgICAgICAgICAgIC5nZXRSZXNwb25zZUJ1aWxkZXIob2JqICE9IG51bGwgPyBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkudG9Kc29uKG9iaikgOiBQb3J0YWxFeGNlcHRpb25NYXBwZXIuZ2V0R2VuZXJhbE9LSnNvbigpKTsKKworICAgICAgICByZXR1cm4gcmIuYnVpbGQoKTsKKyAgICB9CisKKyAgICBAR0VUCisgICAgQFBhdGgoIi9jaGVja0F1dGgiKQorICAgIEBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisgICAgcHVibGljIFJlc3BvbnNlIGNoZWNrQXV0aChASGVhZGVyUGFyYW0odmFsdWUgPSBHbG9iYWxzLktFWUNMT0FLX0FVVEhfVEFHKSBTdHJpbmcgYWNjZXNzVG9rZW4pIHsKKyAgICAgICAgbG9nZ2VyLnRyYWNlKCJjaGVja0F1dGggcG9ydGFsIGNhbGxlZCIpOworICAgICAgICByZXR1cm4gaW52b2tlKGFjY2Vzc1Rva2VuLCB0cnVlLCBuZXcgQ29udHJvbGxlckltcGxlbWVudGF0aW9ucy5DaGVja0F1dGgoKSk7CisgICAgfQorCisgICAgQEdFVAorICAgIEBQYXRoKCIvbG9nb3V0IikKKyAgICBAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorICAgIHB1YmxpYyBSZXNwb25zZSBsb2dvdXQoQEhlYWRlclBhcmFtKHZhbHVlID0gR2xvYmFscy5LRVlDTE9BS19BVVRIX1RBRykgU3RyaW5nIGFjY2Vzc1Rva2VuKSB7CisgICAgICAgIHJldHVybiBpbnZva2UoYWNjZXNzVG9rZW4sIGZhbHNlLCBuZXcgQ29udHJvbGxlckltcGxlbWVudGF0aW9ucy5Mb2dvdXQoYWNjZXNzVG9rZW4pKTsKKyAgICB9CisKKyAgICBAR0VUCisgICAgQFBhdGgoIi92ZXJzaW9uSW5mby8iKQorICAgIEBQcm9kdWNlcygiYXBwbGljYXRpb24vanNvbiIpCisgICAgcHVibGljIFJlc3BvbnNlIGdldFZlcnNpb25JbmZvKCkgeworICAgICAgICB0cnkgKEF1dG9DbG9zZWFibGUgaWdub3JlZCA9IHBlcmZvcm0oImdldFZlcnNpb25JbmZvKCkiKSkgeyAvLyBOT1NPTkFSCisgICAgICAgICAgICBWZXJzaW9uSW5mbyB2ZXJzaW9uSW5mbyA9IG5ldyBCYWNrZW5kQ29udHJvbGxlcigpLmdldFZlcnNpb25JbmZvKCk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlSnNvblJlc3BvbnNlKHZlcnNpb25JbmZvKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZUZyb21FeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAR0VUCisgICAgQFBhdGgoIi91c2VyTW9kdWxlc0ZvclVzZXIvIikKKyAgICBAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorICAgIHB1YmxpYyBSZXNwb25zZSBnZXRVc2VyTW9kdWxlc0ZvclVzZXIoQEhlYWRlclBhcmFtKHZhbHVlID0gR2xvYmFscy5LRVlDTE9BS19BVVRIX1RBRykgU3RyaW5nIGFjY2Vzc1Rva2VuKSB7CisgICAgICAgIHJldHVybiBpbnZva2UoYWNjZXNzVG9rZW4sIGZhbHNlLCBuZXcgQ29udHJvbGxlckltcGxlbWVudGF0aW9ucy5HZXRVc2VyTW9kdWxlc0ZvclVzZXIobmV3IEJhY2tlbmRDb250cm9sbGVyKCkpKTsKKyAgICB9CisKKyAgICBAR0VUCisgICAgQFBhdGgoIi91c2Vyc0ZvclJvbGUve3VzZXJSb2xlfSIpCisgICAgQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi9qc29uIikKKyAgICBwdWJsaWMgUmVzcG9uc2UgZ2V0VXNlcnNGb3JSb2xlKEBQYXRoUGFyYW0oInVzZXJSb2xlIikgU3RyaW5nIHVzZXJSb2xlLAorICAgICAgICBASGVhZGVyUGFyYW0odmFsdWUgPSBHbG9iYWxzLktFWUNMT0FLX0FVVEhfVEFHKSBTdHJpbmcgYWNjZXNzVG9rZW4pIHsKKyAgICAgICAgcmV0dXJuIGludm9rZShhY2Nlc3NUb2tlbiwgZmFsc2UsIG5ldyBDb250cm9sbGVySW1wbGVtZW50YXRpb25zLkdldFVzZXJzRm9yUm9sZShuZXcgQmFja2VuZENvbnRyb2xsZXIoKSx1c2VyUm9sZSkpOworICAgIH0KKworICAgIEBHRVQKKyAgICBAUGF0aCgiL3VzZXJzIikKKyAgICBAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorICAgIHB1YmxpYyBSZXNwb25zZSBnZXRVc2VycyhASGVhZGVyUGFyYW0odmFsdWUgPSBHbG9iYWxzLktFWUNMT0FLX0FVVEhfVEFHKSBTdHJpbmcgYWNjZXNzVG9rZW4pIHsKKyAgICAgICAgcmV0dXJuIGludm9rZShhY2Nlc3NUb2tlbiwgZmFsc2UsIG5ldyBDb250cm9sbGVySW1wbGVtZW50YXRpb25zLkdldFVzZXJzKCkpOworICAgIH0KKworICAgIEBHRVQKKyAgICBAUGF0aCgiL2hlYWx0aGNoZWNrIikKKyAgICBAUHJvZHVjZXMoImFwcGxpY2F0aW9uL2pzb24iKQorICAgIHB1YmxpYyBSZXNwb25zZSBnZXRIZWFsdGhDaGVjaygpIHsKKyAgICAgICAgSGVhbHRoQ2hlY2tlciBoYyA9IG5ldyBIZWFsdGhDaGVja2VyKCk7CisgICAgICAgIGhjLnJlZ2lzdGVyKCJLZXljbG9hayBwcmVzZW50IiwgbmV3IEtleUNsb2FrUHJlc2VudEhlYWx0aENoZWNrKCkpOworCisgICAgICAgIFN0cmluZyByZXR1cm5Kc29uID0gTmFtZWRIZWFsdGhDaGVja1Jlc3VsdC50b0pzb24oaGMucGVyZm9ybUhlYWx0aENoZWNrcygpKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlQnVpbGRlcldyYXBwZXIuSU5TVEFOQ0UuYnVpbGRPS1Jlc3BvbnNlKHJldHVybkpzb24pOworICAgICAgICB9IGNhdGNoIChQb3J0YWxFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJ1bmV4cGVjdGVkIGVycm9yIiwgZSk7CisgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKFJlc3BvbnNlLlN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpLmJ1aWxkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNCYWNrZG9vciggU3RyaW5nIHNlc3Npb25JZCApIHsKKyAgICAgICAgLy8gYmFja2Rvb3IgaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgdmVyc2lvbihQT00pIGNvbnRhaW5zICJERVZFTE9QIiBvciAiU05BUFNIT1QiCisgICAgICAgIHJldHVybiBERVZFTE9QX01PREUgJiYgTEVUX01FX0lOLmVxdWFscyhzZXNzaW9uSWQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGFzc2VydEFuZFJlZnJlc2hUb2tlbihTdHJpbmcgdG9rZW4sIGJvb2xlYW4gcmVmcmVzaCkgdGhyb3dzIFBvcnRhbFVuYXV0aG9yaXplZCB7CisgICAgICAgIGlmIChpc0JhY2tkb29yKHRva2VuKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFRva2VuTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlZnJlc2hTZXNzaW9uSXNBbGl2ZSh0b2tlbiwgcmVmcmVzaCk7CisKKyAgICB9CisKKyAgICBwcml2YXRlIFJlc3BvbnNlIHJlc3BvbnNlRnJvbUV4Y2VwdGlvbihFeGNlcHRpb24gZSkgeworICAgICAgICBpbnQgZXJyY29kZTsKKyAgICAgICAgU3RyaW5nIHJldEpzb247CisKKyAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBQb3J0YWxFeGNlcHRpb24pIHsKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2F1Z2h0IEJhY2tlbmRFeGNlcHRpb24iLCBlKTsKKyAgICAgICAgICAgIGVycmNvZGUgPSAoKFBvcnRhbEV4Y2VwdGlvbikgZSkuZ2V0SHR0cFN0YXR1cygpOworICAgICAgICAgICAgcmV0SnNvbiA9IFBvcnRhbEV4Y2VwdGlvbk1hcHBlci50b0pzb24oKFBvcnRhbEV4Y2VwdGlvbikgZSk7CisgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2Uuc3RhdHVzKGVycmNvZGUpLmVudGl0eShyZXRKc29uKS5idWlsZCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmV4cGVjdGVkIGV4Y2VwdGlvbiIsIGUpOworICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlLnN0YXR1cyhHbG9iYWxzLkhUVFBTVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKS5lbnRpdHkoUG9ydGFsRXhjZXB0aW9uTWFwcGVyLmdldEdlbmVyYWxFcnJvckpzb24oKSkuYnVpbGQoKTsKKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvcmVzdC9SZXN0U2VydmljZUNvbmZpZ3VyYXRpb24uamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3Jlc3QvUmVzdFNlcnZpY2VDb25maWd1cmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjOGQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3Jlc3QvUmVzdFNlcnZpY2VDb25maWd1cmF0aW9uLmphdmEKQEAgLTAsMCArMSwyOSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnJlc3Q7CisKKworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK3B1YmxpYyBjbGFzcyBSZXN0U2VydmljZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBqYXZheC53cy5ycy5jb3JlLkFwcGxpY2F0aW9uIHsKKyAgICBwdWJsaWMgUmVzdFNlcnZpY2VDb25maWd1cmF0aW9uKCkgeworICAgICAgICAvLyBTdGFuZGFyZCBDb250c3RydWN0b3IgbmVlZGVkCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFNldDxDbGFzczw/Pj4gZ2V0Q2xhc3NlcygpIHsKKyAgICAgICAgU2V0PENsYXNzPD8+PiByZXN0U2VydmljZXNDbGFzc2VzID0gbmV3IEhhc2hTZXQ8PigpOworICAgICAgICByZXN0U2VydmljZXNDbGFzc2VzLmFkZChCYWNrZW5kUmVzdFNlcnZpY2UuY2xhc3MpOworICAgICAgICByZXR1cm4gcmVzdFNlcnZpY2VzQ2xhc3NlczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvRXJyb3JSZXR1cm4uamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9FcnJvclJldHVybi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjQwNzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvRXJyb3JSZXR1cm4uamF2YQpAQCAtMCwwICsxLDM0IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsOworCitpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CisKK3B1YmxpYyBjbGFzcyBFcnJvclJldHVybiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNDY1MzE5ODg3NTQ3ODMzNzQxM0w7CisgICAgcHJpdmF0ZSBTdHJpbmcgZXJyb3JUZXh0OworICAgIHByaXZhdGUgaW50IGVycm9yQ29kZTsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JUZXh0KCkgeworICAgICAgICByZXR1cm4gZXJyb3JUZXh0OworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRFcnJvclRleHQoU3RyaW5nIGVycm9yVGV4dCkgeworICAgICAgICB0aGlzLmVycm9yVGV4dCA9IGVycm9yVGV4dDsKKyAgICB9CisgICAgcHVibGljIGludCBnZXRFcnJvckNvZGUoKSB7CisgICAgICAgIHJldHVybiBlcnJvckNvZGU7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldEVycm9yQ29kZShpbnQgZXJyb3JDb2RlKSB7CisgICAgICAgIHRoaXMuZXJyb3JDb2RlID0gZXJyb3JDb2RlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9HZW5lcmFsUmV0dXJuSXRlbS5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL0dlbmVyYWxSZXR1cm5JdGVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU0ZjdkMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9HZW5lcmFsUmV0dXJuSXRlbS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWw7CisKKworcHVibGljIGNsYXNzIEdlbmVyYWxSZXR1cm5JdGVtIHsKKyAgICBwcml2YXRlIFN0cmluZyByZXQ7CisKKyAgICBwdWJsaWMgR2VuZXJhbFJldHVybkl0ZW0oIFN0cmluZyByZXQgKSB7CisgICAgICAgIHRoaXMucmV0ID0gcmV0OworfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmV0KCkgeworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJldChTdHJpbmcgcmV0KSB7CisgICAgICAgIHRoaXMucmV0ID0gcmV0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9Mb2dpbkNyZWRlbnRpYWxzLmphdmEgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvTG9naW5DcmVkZW50aWFscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjODBkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvTG9naW5DcmVkZW50aWFscy5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWw7CisKK3B1YmxpYyBjbGFzcyBMb2dpbkNyZWRlbnRpYWxzIHsKKyAgICBwcml2YXRlIFN0cmluZyB1c2VyTmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB7CisgICAgICAgIHJldHVybiB1c2VyTmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVc2VyTmFtZShTdHJpbmcgdXNlck5hbWUpIHsKKyAgICAgICAgdGhpcy51c2VyTmFtZSA9IHVzZXJOYW1lOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CisgICAgICAgIHJldHVybiBwYXNzd29yZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dvcmQpIHsKKyAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9Vc2VyQXV0aGVudGljYXRpb24uamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9Vc2VyQXV0aGVudGljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2I3NWY2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1VzZXJBdXRoZW50aWNhdGlvbi5qYXZhCkBAIC0wLDAgKzEsNjkgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWw7CisKK3B1YmxpYyBjbGFzcyBVc2VyQXV0aGVudGljYXRpb24geworCisgICAgcHJpdmF0ZSBpbnQgaWQ7CisgICAgcHJpdmF0ZSBib29sZWFuIHNlbGVjdGVkOworICAgIHByaXZhdGUgU3RyaW5nIHVzZXJuYW1lOworICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOworICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisgICAgcHJpdmF0ZSBib29sZWFuIHNwZWNpYWxVc2VyOworCisgICAgcHVibGljIGludCBnZXRJZCgpIHsKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldElkKGludCBpZCkgeworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNTZWxlY3RlZCgpIHsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkKGJvb2xlYW4gc2VsZWN0ZWQpIHsKKyAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CisgICAgICAgIHJldHVybiBwYXNzd29yZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dvcmQpIHsKKyAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzU3BlY2lhbFVzZXIoKSB7CisgICAgICAgIHJldHVybiBzcGVjaWFsVXNlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRTcGVjaWFsVXNlcihib29sZWFuIHNwZWNpYWxVc2VyKSB7CisgICAgICAgIHRoaXMuc3BlY2lhbFVzZXIgPSBzcGVjaWFsVXNlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJuYW1lKCkgeworICAgICAgICByZXR1cm4gdXNlcm5hbWU7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldFVzZXJuYW1lKFN0cmluZyB1c2VybmFtZSkgeworICAgICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1VzZXJDYWNoZS5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1VzZXJDYWNoZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTY3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvVXNlckNhY2hlLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLktleUNsb2FrVXNlcjsKKworcHVibGljIGNsYXNzIFVzZXJDYWNoZSB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVXNlckNhY2hlIFVTRVJDQUNIRV9JTlNUQU5DRSA9IG5ldyBVc2VyQ2FjaGUoKTsKKyAgcHJpdmF0ZSBmaW5hbCBMaXN0PEtleUNsb2FrVXNlcj4ga2V5Q2xvYWtVc2VycyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgIHByaXZhdGUgVXNlckNhY2hlKCl7CisgIH0KKworICBwdWJsaWMgc3RhdGljIFVzZXJDYWNoZSBnZXRJbnN0YW5jZSgpIHsKKyAgICAgIHJldHVybiBVU0VSQ0FDSEVfSU5TVEFOQ0U7CisgIH0KKworICBwdWJsaWMgTGlzdDxLZXlDbG9ha1VzZXI+IGdldEtleUNsb2FrVXNlcnMoKSB7CisgICAgc3luY2hyb25pemVkIChrZXlDbG9ha1VzZXJzKXsKKyAgICAgIHJldHVybiBrZXlDbG9ha1VzZXJzOworICAgIH0KKyAgfQorCisgIHB1YmxpYyB2b2lkIHNldEtleUNsb2FrVXNlcnMoTGlzdDxLZXlDbG9ha1VzZXI+IGtleUNsb2FrVXNlcnMpIHsKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMua2V5Q2xvYWtVc2Vycyl7CisgICAgICB0aGlzLmtleUNsb2FrVXNlcnMuY2xlYXIoKTsKKyAgICAgIHRoaXMua2V5Q2xvYWtVc2Vycy5hZGRBbGwoa2V5Q2xvYWtVc2Vycyk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvVXNlck1vZHVsZS5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1VzZXJNb2R1bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGMxOGQzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1VzZXJNb2R1bGUuamF2YQpAQCAtMCwwICsxLDgwIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5Kc29uR2VuZXJhdG9yQmFzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2FkZXJCYXNlOworCitwdWJsaWMgY2xhc3MgVXNlck1vZHVsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29uZmlnRmlsZU5hbWUgPSAibW9kdWxlQ29uZmlnRGV2TG9jYWwuanNvbiI7CisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICBwcml2YXRlIEludGVnZXIgY29sczsKKyAgICBwcml2YXRlIEludGVnZXIgcm93czsKKyAgICBwcml2YXRlIFN0cmluZyBjb2xvcjsKKyAgICBwcml2YXRlIFN0cmluZyBsaW5rOworICAgIHByaXZhdGUgU3RyaW5nIHBpY3R1cmVMaW5rOworICAgIHByaXZhdGUgU3RyaW5nIHJlcXVpcmVkUm9sZTsKKworICAgIHByaXZhdGUgc3RhdGljIFVzZXJNb2R1bGVbXSBpbnN0YW5jZTsKKworICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIFVzZXJNb2R1bGVbXSBnZXRJbnN0YW5jZSgpIHsKKyAgICAgICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyBqc29uQ29uZmlnID0gbG9hZEpzb25Db25maWcoKTsKKyAgICAgICAgICAgIGluc3RhbmNlID0gSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLmZyb21Kc29uKGpzb25Db25maWcsIFVzZXJNb2R1bGVbXS5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGxvYWRKc29uQ29uZmlnKCkgeworICAgICAgICBSZXNvdXJjZUxvYWRlckJhc2UgcmVzb3VyY2VMb2FkZXJCYXNlID0gbmV3IFJlc291cmNlTG9hZGVyQmFzZSgpOworICAgICAgICByZXR1cm4gcmVzb3VyY2VMb2FkZXJCYXNlLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoY29uZmlnRmlsZU5hbWUpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TW9kdWxlTmFtZSgpIHsgcmV0dXJuIG5hbWU7IH0KKworICAgIHB1YmxpYyB2b2lkIHNldE1vZHVsZU5hbWUoU3RyaW5nIG5hbWUpIHsgdGhpcy5uYW1lID0gbmFtZTsgfQorCisgICAgcHVibGljIEludGVnZXIgZ2V0Q29scygpIHsgcmV0dXJuIGNvbHM7IH0KKworICAgIHB1YmxpYyB2b2lkIHNldENvbHMoSW50ZWdlciBjb2xzKSB7IHRoaXMuY29scyA9IGNvbHM7IH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIGdldFJvd3MoKSB7IHJldHVybiByb3dzOyB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRSb3dzKEludGVnZXIgcm93cykgeyB0aGlzLnJvd3MgPSByb3dzOyB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldENvbG9yKCkgeyByZXR1cm4gY29sb3I7IH0KKworICAgIHB1YmxpYyB2b2lkIHNldENvbG9yKFN0cmluZyBjb2xvcikgeyB0aGlzLmNvbG9yID0gY29sb3I7IH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGluaygpIHsgcmV0dXJuIGxpbms7IH0KKworICAgIHB1YmxpYyB2b2lkIHNldExpbmsoU3RyaW5nIGxpbmspIHsgdGhpcy5saW5rID0gbGluazsgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRQaWN0dXJlTGluaygpIHsgcmV0dXJuIHBpY3R1cmVMaW5rOyB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQaWN0dXJlTGluayhTdHJpbmcgcGljdHVyZUxpbmspIHsgdGhpcy5waWN0dXJlTGluayA9IHBpY3R1cmVMaW5rOyB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFJlcXVpcmVkUm9sZSgpIHsgcmV0dXJuIHJlcXVpcmVkUm9sZTsgfQorCisgICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRSb2xlKFN0cmluZyByb2xlKSB7IHRoaXMucmVxdWlyZWRSb2xlID0gcm9sZTsgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q29uZmlnRmlsZU5hbWUoKSB7CisgICAgICAgIHJldHVybiBjb25maWdGaWxlTmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q29uZmlnRmlsZU5hbWUoU3RyaW5nIGNvbmZpZ0ZpbGVOYW1lKSB7CisgICAgICAgIFVzZXJNb2R1bGUuY29uZmlnRmlsZU5hbWUgPSBjb25maWdGaWxlTmFtZTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9WZXJzaW9uSW5mby5qYXZhIGIvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1ZlcnNpb25JbmZvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiZjAwMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9WZXJzaW9uSW5mby5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWw7CisKK3B1YmxpYyBjbGFzcyBWZXJzaW9uSW5mbyB7CisgICAgcHJpdmF0ZSBTdHJpbmcgYmFja2VuZFZlcnNpb247CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldEJhY2tlbmRWZXJzaW9uKCkgeworICAgICAgICByZXR1cm4gYmFja2VuZFZlcnNpb247CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0QmFja2VuZFZlcnNpb24oU3RyaW5nIGJhY2tlbmRWZXJzaW9uKSB7CisgICAgICAgIHRoaXMuYmFja2VuZFZlcnNpb24gPSBiYWNrZW5kVmVyc2lvbjsKKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL19iYWNrZW5kQ29uZmlnQ3VzdG9tLmpzb24gYi9zcmMvbWFpbi9yZXNvdXJjZXMvX2JhY2tlbmRDb25maWdDdXN0b20uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzA2NThlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vcmVzb3VyY2VzL19iYWNrZW5kQ29uZmlnQ3VzdG9tLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAiaW50ZXJuYWxTZXNzaW9uTGVuZ3RoTWlsbGlzIjogMzYwMDAwMCwKKyAgInJlbG9hZFVzZXJzSW5TZWMiOiAzMDAsCisgICJhdXRoU2VydmVyVXJsIjogImh0dHA6Ly9lbnRqYXZhMDAyOjgwODAvIiwKKyAgImtleWNsb2FrUmVhbG0iOiAiZWxvZ2Jvb2siLAorICAia2V5Y2xvYWtDbGllbnQiOiAiZWxvZ2Jvb2stYmFja2VuZCIsCisgICJrZXljbG9ha0FkbWluIjogImFkbWluIiwKKyAgImtleWNsb2FrUFciOiAiYWRtaW4iLAorICAibWF4TG9hZFVzZXJzIjogMTAwMAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL3Jlc291cmNlcy9fbW9kdWxlQ29uZmlnQ3VzdG9tLmpzb24gYi9zcmMvbWFpbi9yZXNvdXJjZXMvX21vZHVsZUNvbmZpZ0N1c3RvbS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZTU5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9yZXNvdXJjZXMvX21vZHVsZUNvbmZpZ0N1c3RvbS5qc29uCkBAIC0wLDAgKzEsMzkgQEAKK1sKKyAgeworICAgICJuYW1lIjogIkJldHJpZWJzdGFnZWJ1Y2giLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODA4OC9lbG9nYm9va0ZFIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvbWVkaWVuL2NhY2hlL21haW5faW1hZ2UvbV9sb2didWNoXzI0NDM2MzYuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImVsb2dib29rLWFjY2VzcyIKKworICB9LAorICB7CisgICAgIm5hbWUiOiAiQmVyZWl0c2NoYWZ0c3BsYW51bmciLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHBzOi8vd3d3Lm9wZW5rb25zZXF1ZW56LmRlL2Fud2VuZGVyLzExLWdlcGxhbnRlLXByb2pla3RlLzk0LWJlcmVpdHNjaGFmdHNwbGFuIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvbWVkaWVuL2NhY2hlL21haW5faW1hZ2UvbF9iZXJlaXRzY2hhZnRzcGxhbl81Nzg4MjA0Ny5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAicGxhbm5pbmctYWNjZXNzIgorICB9LAorICB7CisgICAgIm5hbWUiOiAiRWluc3BlaXNlbWFuYWdlbWVudCIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvYW53ZW5kZXIvMTEtZ2VwbGFudGUtcHJvamVrdGUvMjAtZWlzbWFuIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvbWVkaWVuL2NhY2hlL21haW5faW1hZ2UvbF9va19tb2R1bGU2LmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJmZWVkaW4tbWFuYWdlbWVudC1hY2Nlc3MiCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJHZXBsYW50ZSBNYcOfbmFobWVuIiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9hbndlbmRlci8xMS1nZXBsYW50ZS1wcm9qZWt0ZS82NC1nZXBsYW50ZS1uZXR6bWFzc25haG1lIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvL2NvbXBvbmVudHMvY29tX2ZsZXhpY29udGVudC9saWJyYWlyaWVzL3BocHRodW1iL3BocFRodW1iLnBocD9zcmM9L21lZGllbi9jYWNoZS9tYWluX2ltYWdlL2xfb2tfbW9kdWxlNS5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAicGxhbm5lZC1wb2xpY2llcy1hY2Nlc3MiCisgIH0KK10KZGlmZiAtLWdpdCBhL3NyYy9tYWluL3Jlc291cmNlcy9iYWNrZW5kQ29uZmlnRGV2TG9jYWwuanNvbiBiL3NyYy9tYWluL3Jlc291cmNlcy9iYWNrZW5kQ29uZmlnRGV2TG9jYWwuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGRkMjM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vcmVzb3VyY2VzL2JhY2tlbmRDb25maWdEZXZMb2NhbC5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgImludGVybmFsU2Vzc2lvbkxlbmd0aE1pbGxpcyI6IDM2MDAwMDAsCisgICJyZWxvYWRVc2Vyc0luU2VjIjogMzAwLAorICAiYXV0aFNlcnZlclVybCI6ICJodHRwOi8vZW50b3Brb246ODA4MC8iLAorICAia2V5Y2xvYWtSZWFsbSI6ICJFbG9nYm9vayIsCisgICJrZXljbG9ha0NsaWVudCI6ICJlbG9nYm9vay1iYWNrZW5kIiwKKyAgImtleWNsb2FrQWRtaW4iOiAiYWRtaW4iLAorICAia2V5Y2xvYWtQVyI6ICJhZG1pbiIsCisgICJtYXhMb2FkVXNlcnMiOiAxMDAwCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL2JhY2tlbmRDb25maWdEZXZTZXJ2ZXIuanNvbiBiL3NyYy9tYWluL3Jlc291cmNlcy9iYWNrZW5kQ29uZmlnRGV2U2VydmVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlMTYwOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9iYWNrZW5kQ29uZmlnRGV2U2VydmVyLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAiaW50ZXJuYWxTZXNzaW9uTGVuZ3RoTWlsbGlzIjogMzYwMDAwMCwKKyAgInJlbG9hZFVzZXJzSW5TZWMiOiAzMDAsCisgICJhdXRoU2VydmVyVXJsIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8iLAorICAia2V5Y2xvYWtSZWFsbSI6ICJFbG9nYm9vayIsCisgICJrZXljbG9ha0NsaWVudCI6ICJlbG9nYm9vay1iYWNrZW5kIiwKKyAgImtleWNsb2FrQWRtaW4iOiAiYWRtaW4iLAorICAia2V5Y2xvYWtQVyI6ICJhZG1pbiIsCisgICJtYXhMb2FkVXNlcnMiOiAxMDAwCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL2JhY2tlbmRDb25maWdEb2NrZXIuanNvbiBiL3NyYy9tYWluL3Jlc291cmNlcy9iYWNrZW5kQ29uZmlnRG9ja2VyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyMGNmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9iYWNrZW5kQ29uZmlnRG9ja2VyLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAiaW50ZXJuYWxTZXNzaW9uTGVuZ3RoTWlsbGlzIjogMzYwMDAwMCwKKyAgInJlbG9hZFVzZXJzSW5TZWMiOiAzMDAsCisgICJhdXRoU2VydmVyVXJsIjogImh0dHA6Ly8xNzIuMjUuMC42Njo4ODg4LyIsCisgICJrZXljbG9ha1JlYWxtIjogInBvcnRhbGRvY2tlciIsCisgICJrZXljbG9ha0NsaWVudCI6ICJwb3J0YWwtZG9ja2VyIiwKKyAgImtleWNsb2FrQWRtaW4iOiAiYWRtaW4iLAorICAia2V5Y2xvYWtQVyI6ICJhZG1pbiIsCisgICJtYXhMb2FkVXNlcnMiOiAxMDAwCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL2JhY2tlbmRDb25maWdQcm9kdWN0aW9uLmpzb24gYi9zcmMvbWFpbi9yZXNvdXJjZXMvYmFja2VuZENvbmZpZ1Byb2R1Y3Rpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWQ3MzNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vcmVzb3VyY2VzL2JhY2tlbmRDb25maWdQcm9kdWN0aW9uLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAiaW50ZXJuYWxTZXNzaW9uTGVuZ3RoTWlsbGlzIjogNDY4MDAwMDAsCisgICJyZWxvYWRVc2Vyc0luU2VjIjogMzAwLAorICAiYXV0aFNlcnZlclVybCI6ICJodHRwOi8vbG9jYWxob3N0OjgzODAvIiwKKyAgImtleWNsb2FrUmVhbG0iOiAiT3BlbktSZWFsbSIsCisgICJrZXljbG9ha0NsaWVudCI6ICJlbG9nYm9vay1iYWNrZW5kIiwKKyAgImtleWNsb2FrQWRtaW4iOiAiYWRtaW4iLAorICAia2V5Y2xvYWtQVyI6ICJhZG1pbiIsCisgICJtYXhMb2FkVXNlcnMiOiAxMDAwCit9CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvbW9kdWxlQ29uZmlnRGV2TG9jYWwuanNvbiBiL3NyYy9tYWluL3Jlc291cmNlcy9tb2R1bGVDb25maWdEZXZMb2NhbC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNGRmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9yZXNvdXJjZXMvbW9kdWxlQ29uZmlnRGV2TG9jYWwuanNvbgpAQCAtMCwwICsxLDc2IEBACitbCisgIHsKKyAgICAibmFtZSI6ICJCZXRyaWVic3RhZ2VidWNoIGxvY2FsIDQyMDAiLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly9sb2NhbGhvc3Q6NDIwMC8iLAorICAgICJwaWN0dXJlTGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9tX2xvZ2J1Y2hfMjQ0MzYzNi5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAiZWxvZ2Jvb2stYWNjZXNzIgorCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJCZXRyaWVic3RhZ2VidWNoIGxvY2FsIDgwODAiLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9lbG9nYm9va0ZFIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvbWVkaWVuL2NhY2hlL21haW5faW1hZ2UvbV9sb2didWNoXzI0NDM2MzYuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImVsb2dib29rLWFjY2VzcyIKKworICB9LAorICB7CisgICAgIm5hbWUiOiAiQmVyZWl0c2NoYWZ0c3BsYW51bmciLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHBzOi8vd3d3Lm9wZW5rb25zZXF1ZW56LmRlL2Fud2VuZGVyLzExLWdlcGxhbnRlLXByb2pla3RlLzk0LWJlcmVpdHNjaGFmdHNwbGFuIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvbWVkaWVuL2NhY2hlL21haW5faW1hZ2UvbF9iZXJlaXRzY2hhZnRzcGxhbl81Nzg4MjA0Ny5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAicGxhbm5pbmctYWNjZXNzIgorICB9LAorICB7CisgICAgIm5hbWUiOiAiRWluc3BlaXNlbWFuYWdlbWVudCIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvYW53ZW5kZXIvMTEtZ2VwbGFudGUtcHJvamVrdGUvMjAtZWlzbWFuIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvbWVkaWVuL2NhY2hlL21haW5faW1hZ2UvbF9va19tb2R1bGU2LmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJmZWVkaW4tbWFuYWdlbWVudC1hY2Nlc3MiCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJHZXBsYW50ZSBNYcOfbmFobWVuIiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwOi8vbG9jYWxob3N0OjQyMjAvIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvL2NvbXBvbmVudHMvY29tX2ZsZXhpY29udGVudC9saWJyYWlyaWVzL3BocHRodW1iL3BocFRodW1iLnBocD9zcmM9L21lZGllbi9jYWNoZS9tYWluX2ltYWdlL2xfb2tfbW9kdWxlNS5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAicGxhbm5lZC1wb2xpY2llcy1hY2Nlc3MiCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJLb250YWt0c3RhbW1kYXRlbiIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cDovL2VudGRvY2tlcmdzczo0MjIyIiwKKyAgICAicGljdHVyZUxpbmsiOiAiYXNzZXRzL2ltZy9rb250YWt0c3RhbW1kYXRlbl9rYWNoZWwuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImtvbi1hY2Nlc3MiCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJLb250YWt0c3RhbW1kYXRlbiBsb2NhbCA4MDgwIiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwOi8vbG9jYWxob3N0OjgwODAvY29udGFjdGRhdGFiYXNlIiwKKyAgICAicGljdHVyZUxpbmsiOiAiYXNzZXRzL2ltZy9rb250YWt0c3RhbW1kYXRlbl9rYWNoZWwuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImtvbi1hY2Nlc3MiCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJLb250YWt0c3RhbW1kYXRlbiBsb2NhbCA0MjAwIiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwOi8vbG9jYWxob3N0OjQyMDAiLAorICAgICJwaWN0dXJlTGluayI6ICJhc3NldHMvaW1nL2tvbnRha3RzdGFtbWRhdGVuX2thY2hlbC5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAia29uLWFjY2VzcyIKKyAgfQorXQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL21vZHVsZUNvbmZpZ0RldlNlcnZlci5qc29uIGIvc3JjL21haW4vcmVzb3VyY2VzL21vZHVsZUNvbmZpZ0RldlNlcnZlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjY3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9yZXNvdXJjZXMvbW9kdWxlQ29uZmlnRGV2U2VydmVyLmpzb24KQEAgLTAsMCArMSwxMjEgQEAKK1sKKyAgeworICAgICJuYW1lIjogIkJldHJpZWJzdGFnZWJ1Y2giLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly9lbnRkb2NrZXJnc3M6ODA4NS9lbG9nYm9va0ZFIiwKKyAgICAicGljdHVyZUxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvbWVkaWVuL2NhY2hlL21haW5faW1hZ2UvbV9sb2didWNoXzI0NDM2MzYuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImVsb2dib29rLWFjY2VzcyIKKworICB9LAorICB7CisgICAgIm5hbWUiOiAiQmV0cmllYnN0YWdlYnVjaCAoV2ViKSIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cDovLzg3LjEyOC4yMTIuMjU0Ojg4ODAvZWxvZ2Jvb2tGRSIsCisgICAgInBpY3R1cmVMaW5rIjogImh0dHBzOi8vd3d3Lm9wZW5rb25zZXF1ZW56LmRlL21lZGllbi9jYWNoZS9tYWluX2ltYWdlL21fbG9nYnVjaF8yNDQzNjM2LmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJlbG9nYm9vay1hY2Nlc3MiCisKKyAgfSwgIAorICB7CisgICAgIm5hbWUiOiAiQmVyZWl0c2NoYWZ0c3BsYW51bmciLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogInBsYW5uZWRHcmlkTWVhc3VyZXMiLAorICAgICJwaWN0dXJlTGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9sX2JlcmVpdHNjaGFmdHNwbGFuXzU3ODgyMDQ3LmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJwbGFubmluZy1hY2Nlc3MiCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJFaW5zcGVpc2VtYW5hZ2VtZW50IiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9hbndlbmRlci8xMS1nZXBsYW50ZS1wcm9qZWt0ZS8yMC1laXNtYW4iLAorICAgICJwaWN0dXJlTGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9sX29rX21vZHVsZTYuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImZlZWRpbi1tYW5hZ2VtZW50LWFjY2VzcyIKKyAgfSwKKyAgeworICAgICJuYW1lIjogIkdlcGxhbnRlIE1hw59uYWhtZW4iLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly8xNzIuMTguMjIuMTYwOjg4ODAvcGxhbm5lZEdyaWRNZWFzdXJlcyIsCisgICAgInBpY3R1cmVMaW5rIjogImh0dHBzOi8vd3d3Lm9wZW5rb25zZXF1ZW56LmRlLy9jb21wb25lbnRzL2NvbV9mbGV4aWNvbnRlbnQvbGlicmFpcmllcy9waHB0aHVtYi9waHBUaHVtYi5waHA/c3JjPS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9sX29rX21vZHVsZTUuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogInBsYW5uZWQtcG9saWNpZXMtYWNjZXNzIgorICB9LAorICB7CisgICAgIm5hbWUiOiAiR2VwbGFudGUgTWHDn25haG1lbiAoV2ViKSIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cDovLzg3LjEyOC4yMTIuMjU0Ojg4ODAvcGxhbm5lZEdyaWRNZWFzdXJlcyIsCisgICAgInBpY3R1cmVMaW5rIjogImh0dHBzOi8vd3d3Lm9wZW5rb25zZXF1ZW56LmRlLy9jb21wb25lbnRzL2NvbV9mbGV4aWNvbnRlbnQvbGlicmFpcmllcy9waHB0aHVtYi9waHBUaHVtYi5waHA/c3JjPS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9sX29rX21vZHVsZTUuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogInBsYW5uZWQtcG9saWNpZXMtYWNjZXNzIgorICB9LAorICB7CisgICAgIm5hbWUiOiAiS29udGFrdHN0YW1tZGF0ZW4iLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly9lbnRkb2NrZXJnc3M6NDIyMiIsCisgICAgInBpY3R1cmVMaW5rIjogImFzc2V0cy9pbWcva29udGFrdHN0YW1tZGF0ZW5fa2FjaGVsLmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJrb24tYWNjZXNzIgorICB9LAorICB7CisgICAgIm5hbWUiOiAiS29udGFrdHN0YW1tZGF0ZW4gRmVhdHVyZSBCcmFuY2giLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly9lbnRkb2NrZXJnc3M6NDIyNCIsCisgICAgInBpY3R1cmVMaW5rIjogImFzc2V0cy9pbWcva29udGFrdHN0YW1tZGF0ZW5fa2FjaGVsLmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJrb24tYWNjZXNzIgorICB9LAorICB7CisgICAgIm5hbWUiOiAiU0lUIERFViIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cDovL2VudGRvY2tlcmdzczo0MjIzIiwKKyAgICAicGljdHVyZUxpbmsiOiAiYXNzZXRzL2ltZy9zdG9lcnVuZ3NpbmZvcm1hdGlvbl9rYWNoZWwuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImdyaWQtZmFpbHVyZS1hY2Nlc3MiCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJTSVQgRmVhdHVyZSBCcmFuY2ggLSBBIiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwOi8vZW50ZG9ja2VyZ3NzOjQyMjUiLAorICAgICJwaWN0dXJlTGluayI6ICJhc3NldHMvaW1nL3N0b2VydW5nc2luZm9ybWF0aW9uX2thY2hlbC5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAiZ3JpZC1mYWlsdXJlLWFjY2VzcyIKKyAgfSwKKyAgeworICAgICJuYW1lIjogIlNJVCBGZWF0dXJlIEJyYW5jaCAtIEIiLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly9lbnRkb2NrZXJnc3M6NDIyOSIsCisgICAgInBpY3R1cmVMaW5rIjogImFzc2V0cy9pbWcvc3RvZXJ1bmdzaW5mb3JtYXRpb25fa2FjaGVsLmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJncmlkLWZhaWx1cmUtYWNjZXNzIgorICB9LAorICB7CisgICAgIm5hbWUiOiAiU0lUIEZlYXR1cmUgQmFja2VuZCIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cDovL2VudGRvY2tlcmdzczo0MjI2IiwKKyAgICAicGljdHVyZUxpbmsiOiAiYXNzZXRzL2ltZy9zdG9lcnVuZ3NpbmZvcm1hdGlvbl9rYWNoZWwuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImdyaWQtZmFpbHVyZS1hY2Nlc3MiCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJTSVQgTG9jYWxob3N0IiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwOi8vbG9jYWxob3N0OjQyMDAiLAorICAgICJwaWN0dXJlTGluayI6ICJhc3NldHMvaW1nL3N0b2VydW5nc2luZm9ybWF0aW9uX2thY2hlbC5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAiZ3JpZC1mYWlsdXJlLWFjY2VzcyIKKyAgfQorXQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vcmVzb3VyY2VzL21vZHVsZUNvbmZpZ0RvY2tlci5qc29uIGIvc3JjL21haW4vcmVzb3VyY2VzL21vZHVsZUNvbmZpZ0RvY2tlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzODMyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9yZXNvdXJjZXMvbW9kdWxlQ29uZmlnRG9ja2VyLmpzb24KQEAgLTAsMCArMSwzOSBAQAorWworICB7CisgICAgIm5hbWUiOiAiQmV0cmllYnN0YWdlYnVjaCIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0Vsb2dib29rRnJvbnRlbmQiLAorICAgICJwaWN0dXJlTGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9tX2xvZ2J1Y2hfMjQ0MzYzNi5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAiZWxvZ2Jvb2stYWNjZXNzIgorCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJCZXJlaXRzY2hhZnRzcGxhbnVuZyIsCisgICAgImNvbHMiOiAxLAorICAgICJyb3dzIjogMSwKKyAgICAiY29sb3IiOiAiI2ZmZmZmZiIsCisgICAgImxpbmsiOiAiaHR0cHM6Ly93d3cub3BlbmtvbnNlcXVlbnouZGUvYW53ZW5kZXIvMTEtZ2VwbGFudGUtcHJvamVrdGUvOTQtYmVyZWl0c2NoYWZ0c3BsYW4iLAorICAgICJwaWN0dXJlTGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9sX2JlcmVpdHNjaGFmdHNwbGFuXzU3ODgyMDQ3LmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJwbGFubmluZy1hY2Nlc3MiCisgIH0sCisgIHsKKyAgICAibmFtZSI6ICJFaW5zcGVpc2VtYW5hZ2VtZW50IiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9hbndlbmRlci8xMS1nZXBsYW50ZS1wcm9qZWt0ZS8yMC1laXNtYW4iLAorICAgICJwaWN0dXJlTGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9sX29rX21vZHVsZTYuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImZlZWRpbi1tYW5hZ2VtZW50LWFjY2VzcyIKKyAgfSwKKyAgeworICAgICJuYW1lIjogIkdlcGxhbnRlIE1hw59uYWhtZW4iLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9HcmlkTWVhc3VyZXNGcm9udGVuZCIsCisgICAgInBpY3R1cmVMaW5rIjogImh0dHBzOi8vd3d3Lm9wZW5rb25zZXF1ZW56LmRlLy9jb21wb25lbnRzL2NvbV9mbGV4aWNvbnRlbnQvbGlicmFpcmllcy9waHB0aHVtYi9waHBUaHVtYi5waHA/c3JjPS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9sX29rX21vZHVsZTUuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogInBsYW5uZWQtcG9saWNpZXMtYWNjZXNzIgorICB9CitdCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvbW9kdWxlQ29uZmlnUHJvZHVjdGlvbi5qc29uIGIvc3JjL21haW4vcmVzb3VyY2VzL21vZHVsZUNvbmZpZ1Byb2R1Y3Rpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDhmN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vcmVzb3VyY2VzL21vZHVsZUNvbmZpZ1Byb2R1Y3Rpb24uanNvbgpAQCAtMCwwICsxLDU3IEBACitbCisgIHsKKyAgICAibmFtZSI6ICJCZXRyaWVic3RhZ2VidWNoIiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwczovLzE2OS41MC4xMy4xNTQvZWxvZ2Jvb2tGRSIsCisgICAgInBpY3R1cmVMaW5rIjogImh0dHBzOi8vd3d3Lm9wZW5rb25zZXF1ZW56LmRlL21lZGllbi9jYWNoZS9tYWluX2ltYWdlL21fbG9nYnVjaF8yNDQzNjM2LmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJlbG9nYm9vay1hY2Nlc3MiCisKKyAgfSwKKyAgeworICAgICJuYW1lIjogIkJlcmVpdHNjaGFmdHNwbGFudW5nIiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9hbndlbmRlci8xMS1nZXBsYW50ZS1wcm9qZWt0ZS85NC1iZXJlaXRzY2hhZnRzcGxhbiIsCisgICAgInBpY3R1cmVMaW5rIjogImh0dHBzOi8vd3d3Lm9wZW5rb25zZXF1ZW56LmRlL21lZGllbi9jYWNoZS9tYWluX2ltYWdlL2xfYmVyZWl0c2NoYWZ0c3BsYW5fNTc4ODIwNDcuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogInBsYW5uaW5nLWFjY2VzcyIKKyAgfSwKKyAgeworICAgICJuYW1lIjogIkVpbnNwZWlzZW1hbmFnZW1lbnQiLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHBzOi8vMTY5LjUwLjEzLjE1NC9laXNtYW4iLAorICAgICJwaWN0dXJlTGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9sX29rX21vZHVsZTYuanBnIiwKKyAgICAicmVxdWlyZWRSb2xlIjogImZlZWRpbi1tYW5hZ2VtZW50LWFjY2VzcyIKKyAgfSwKKyAgeworICAgICJuYW1lIjogIkdlcGxhbnRlIE1hw59uYWhtZW4iLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly8xNjkuNTAuMTMuMTU0L3BsYW5uZWRHcmlkTWVhc3VyZXMiLAorICAgICJwaWN0dXJlTGluayI6ICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS8vY29tcG9uZW50cy9jb21fZmxleGljb250ZW50L2xpYnJhaXJpZXMvcGhwdGh1bWIvcGhwVGh1bWIucGhwP3NyYz0vbWVkaWVuL2NhY2hlL21haW5faW1hZ2UvbF9va19tb2R1bGU1LmpwZyIsCisgICAgInJlcXVpcmVkUm9sZSI6ICJwbGFubmVkLXBvbGljaWVzLWFjY2VzcyIKKyAgfSwKKyAgeworICAgICJuYW1lIjogIktvbnRha3RzdGFtbWRhdGVuIiwKKyAgICAiY29scyI6IDEsCisgICAgInJvd3MiOiAxLAorICAgICJjb2xvciI6ICIjZmZmZmZmIiwKKyAgICAibGluayI6ICJodHRwOi8vMTY5LjUwLjEzLjE1NC9jb250YWN0ZGF0YWJhc2UiLAorICAgICJwaWN0dXJlTGluayI6ICJhc3NldHMvaW1nL2tvbnRha3RzdGFtbWRhdGVuX2thY2hlbC5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAia29uLWFjY2VzcyIKKyAgfSwKKyAgeworICAgICJuYW1lIjogIlN0w7ZydW5nc2luZm9ybWF0aW9uc3Rvb2wiLAorICAgICJjb2xzIjogMSwKKyAgICAicm93cyI6IDEsCisgICAgImNvbG9yIjogIiNmZmZmZmYiLAorICAgICJsaW5rIjogImh0dHA6Ly8xNjkuNTAuMTMuMTU0L2dyaWRmYWlsdXJlaW5mb3JtYXRpb24iLAorICAgICJwaWN0dXJlTGluayI6ICJhc3NldHMvaW1nL3N0b2VydW5nc2luZm9ybWF0aW9uX2thY2hlbC5qcGciLAorICAgICJyZXF1aXJlZFJvbGUiOiAiZ3JpZC1mYWlsdXJlLWFjY2VzcyIKKyAgfQorXQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYva2V5Y2xvYWsuanNvbiBiL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2tleWNsb2FrLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmZjMyYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2tleWNsb2FrLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICJyZWFsbSI6ICJlbG9nYm9vayIsCisgICJhdXRoLXNlcnZlci11cmwiOiAiaHR0cDovL2VudGphdmEwMDI6ODA4MC9hdXRoIiwKKyAgInNzbC1yZXF1aXJlZCI6ICJleHRlcm5hbCIsCisgICJyZXNvdXJjZSI6ICJlbG9nYm9vay1iYWNrZW5kIiwKKyAgInB1YmxpYy1jbGllbnQiOiB0cnVlLAorICAiZW5hYmxlLWNvcnMiOiB0cnVlLAorICAidXNlLXJlc291cmNlLXJvbGUtbWFwcGluZ3MiOiB0cnVlCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvbG9nZ2VyLnhtbCBiL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2xvZ2dlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBiOGYzYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2xvZ2dlci54bWwKQEAgLTAsMCArMSw2NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBsb2c0ajpjb25maWd1cmF0aW9uIFBVQkxJQworICAgICAgICAiLS8vQVBBQ0hFLy9EVEQgTE9HNEogMS4yLy9FTiIKKyAgICAgICAgImh0dHA6Ly9sb2dnaW5nLmFwYWNoZS5vcmcvbG9nNGovMS4yL2FwaWRvY3Mvb3JnL2FwYWNoZS9sb2c0ai94bWwvZG9jLWZpbGVzL2xvZzRqLmR0ZCI+Cis8bG9nNGo6Y29uZmlndXJhdGlvbiB4bWxuczpsb2c0aj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iPgorCisgICAgPGFwcGVuZGVyIG5hbWU9IkNPTlNPTEUiIGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlciI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJUaHJlc2hvbGQiIHZhbHVlPSJERUJVRyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iVGFyZ2V0IiB2YWx1ZT0iU3lzdGVtLm91dCIvPgorICAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IkNvbnZlcnNpb25QYXR0ZXJuIiB2YWx1ZT0iWyVke3l5eXkuTU0uZGQgSEg6bW06c3N9XSBbJXBdIFslY10gJW0lbiIvPgorICAgICAgICA8L2xheW91dD4KKyAgICA8L2FwcGVuZGVyPgorCisgICAgPGFwcGVuZGVyIG5hbWU9IlNvY2tldCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGoubmV0LlNvY2tldEFwcGVuZGVyIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlbW90ZUhvc3QiIHZhbHVlPSIxMjcuMC4wLjEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSI0NTYwIi8+CisgICAgICAgIDxsYXlvdXQgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dCI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSJbJWR7eXl5eS5NTS5kZCBISDptbTpzc31dIFslcF0gWyVjXSAlbSVuIi8+CisgICAgICAgIDwvbGF5b3V0PgorICAgIDwvYXBwZW5kZXI+CisKKyAgICA8IS0tIElzc3VlOiBkYXMgVmVyemVpY2huaXMgbXVzcyBleGlzdGllcmVuIC4uLiAtLT4KKyAgICA8YXBwZW5kZXIgbmFtZT0iRklMRSIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouRGFpbHlSb2xsaW5nRmlsZUFwcGVuZGVyIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9IlRocmVzaG9sZCIgdmFsdWU9IlRSQUNFIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJGaWxlIiB2YWx1ZT0iJHtjYXRhbGluYS5iYXNlfS9sb2dzL3BvcnRhbC1vcGVuay5iYWNrZW5kLmxvZyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iQXBwZW5kIiB2YWx1ZT0idHJ1ZSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iRGF0ZVBhdHRlcm4iIHZhbHVlPSInLid5eXl5LU1NLWRkIi8+CisgICAgICAgIDxsYXlvdXQgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dCI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSJbJWR7eXl5eS5NTS5kZCBISDptbTpzc31dIFslcF0gWyVjXSAlbSVuIi8+CisgICAgICAgIDwvbGF5b3V0PgorICAgIDwvYXBwZW5kZXI+CisKKyAgICA8IS0tIERlZmF1bHQgTG9nZ2luZyBjb25maWd1cmF0aW9uIGJlZ2lubmVuZCBtaXQgb3JnLmVjbGlwc2UgKD0gYWxsZSBQYWNrYWdlcykgLS0+CisgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlIj4KKyAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJJTkZPIi8+CisgICAgICAgIDwhLS08cHJpb3JpdHkgdmFsdWU9IkRFQlVHIi8+IC0tPgorICAgICAgICA8IS0tPHByaW9yaXR5IHZhbHVlPSJFUlJPUiIvPiAtLT4KKyAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IkNPTlNPTEUiLz4KKyAgICAgICAgPCEtLTxhcHBlbmRlci1yZWYgcmVmPSJTb2NrZXQiLz4gLS0+CisgICAgICAgIDwhLS08YXBwZW5kZXItcmVmIHJlZj0iRklMRSIvPiAtLT4KKyAgICAgICAgPCEtLTxhcHBlbmRlci1yZWYgcmVmPSJTWVNMT0ciLz4gLS0+CisgICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJGSUxFIi8+CisgICAgPC9jYXRlZ29yeT4KKyAgICA8Y2F0ZWdvcnkgbmFtZT0ib3JnLmpib3NzLnJlc3RlYXN5Ij4KKyAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJXQVJOIi8+CisgICAgICAgIDwhLS08cHJpb3JpdHkgdmFsdWU9IkRFQlVHIi8+IC0tPgorICAgICAgICA8IS0tPHByaW9yaXR5IHZhbHVlPSJFUlJPUiIvPiAtLT4KKyAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IkNPTlNPTEUiLz4KKyAgICAgICAgPCEtLTxhcHBlbmRlci1yZWYgcmVmPSJTb2NrZXQiLz4gLS0+CisgICAgICAgIDwhLS08YXBwZW5kZXItcmVmIHJlZj0iRklMRSIvPiAtLT4KKyAgICAgICAgPCEtLTxhcHBlbmRlci1yZWYgcmVmPSJTWVNMT0ciLz4gLS0+CisgICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJGSUxFIi8+CisgICAgPC9jYXRlZ29yeT4KKyAgICA8Y2F0ZWdvcnkgbmFtZT0iamF2YXgucGVyc2lzdGVuY2UuUGVyc2lzdGVuY2UiPgorICAgICAgICA8cHJpb3JpdHkgdmFsdWU9IklORk8iLz4KKyAgICAgICAgPCEtLTxwcmlvcml0eSB2YWx1ZT0iREVCVUciLz4gLS0+CisgICAgICAgIDwhLS08cHJpb3JpdHkgdmFsdWU9IkVSUk9SIi8+IC0tPgorICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iQ09OU09MRSIvPgorICAgICAgICA8IS0tPGFwcGVuZGVyLXJlZiByZWY9IlNvY2tldCIvPiAtLT4KKyAgICAgICAgPCEtLTxhcHBlbmRlci1yZWYgcmVmPSJGSUxFIi8+IC0tPgorICAgICAgICA8IS0tPGFwcGVuZGVyLXJlZiByZWY9IlNZU0xPRyIvPiAtLT4KKyAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IkZJTEUiLz4KKyAgICA8L2NhdGVnb3J5PgorCis8L2xvZzRqOmNvbmZpZ3VyYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlODA0MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTAsMCArMSw0OSBAQAorPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IgorICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCisJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgorICA8ZGlzcGxheS1uYW1lPlJlc3RmdWwgV2ViIEFwcGxpY2F0aW9uPC9kaXNwbGF5LW5hbWU+CisKKyAgPHNlcnZsZXQ+CisgICAgPHNlcnZsZXQtbmFtZT5qZXJzZXktc2VybHZldDwvc2VydmxldC1uYW1lPgorICAgIDxzZXJ2bGV0LWNsYXNzPgorICAgICAgb3JnLmdsYXNzZmlzaC5qZXJzZXkuc2VydmxldC5TZXJ2bGV0Q29udGFpbmVyCisgICAgPC9zZXJ2bGV0LWNsYXNzPgorICAgIDxpbml0LXBhcmFtPgorICAgICAgPHBhcmFtLW5hbWU+amVyc2V5LmNvbmZpZy5zZXJ2ZXIucHJvdmlkZXIucGFja2FnZXM8L3BhcmFtLW5hbWU+CisgICAgICA8cGFyYW0tdmFsdWU+b3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnJlc3Q8L3BhcmFtLXZhbHVlPgorICAgIDwvaW5pdC1wYXJhbT4KKyAgICA8bG9hZC1vbi1zdGFydHVwPjE8L2xvYWQtb24tc3RhcnR1cD4KKworICA8L3NlcnZsZXQ+CisKKworICA8c2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW5hbWU+amVyc2V5LXNlcmx2ZXQ8L3NlcnZsZXQtbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+L3Jlc3QvKjwvdXJsLXBhdHRlcm4+CisgIDwvc2VydmxldC1tYXBwaW5nPgorCisgIDxzZXJ2bGV0PgorICAgIDxzZXJ2bGV0LW5hbWU+bG9nNGotaW5pdDwvc2VydmxldC1uYW1lPgorICAgIDxzZXJ2bGV0LWNsYXNzPm9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24udXRpbC5Mb2dnZXJVdGlsPC9zZXJ2bGV0LWNsYXNzPgorICAgIDxpbml0LXBhcmFtPgorICAgICAgPHBhcmFtLW5hbWU+bG9nNGotaW5pdC1maWxlPC9wYXJhbS1uYW1lPgorICAgICAgPHBhcmFtLXZhbHVlPldFQi1JTkYvbG9nZ2VyLnhtbDwvcGFyYW0tdmFsdWU+CisgICAgPC9pbml0LXBhcmFtPgorICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICA8L3NlcnZsZXQ+CisKKyAgPHNlcnZsZXQ+CisgICAgPHNlcnZsZXQtbmFtZT5Jbml0QmFja2VuZENvbmZpZzwvc2VydmxldC1uYW1lPgorICAgIDxzZXJ2bGV0LWNsYXNzPm9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uSW5pdEJhY2tlbmRDb25maWc8L3NlcnZsZXQtY2xhc3M+CisgICAgPGxvYWQtb24tc3RhcnR1cD4yPC9sb2FkLW9uLXN0YXJ0dXA+CisgIDwvc2VydmxldD4KKworICA8c2VydmxldD4KKyAgICA8c2VydmxldC1uYW1lPkluaXRVc2VyQ2FjaGVKb2I8L3NlcnZsZXQtbmFtZT4KKyAgICA8c2VydmxldC1jbGFzcz5vcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkluaXRVc2VyQ2FjaGVKb2I8L3NlcnZsZXQtY2xhc3M+CisgICAgPGxvYWQtb24tc3RhcnR1cD4zPC9sb2FkLW9uLXN0YXJ0dXA+CisgIDwvc2VydmxldD4KKworPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwgYi9zcmMvbWFpbi93ZWJhcHAvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2I1MzQxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgoraXQgd29ya3MhCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL0JhY2tlbmRDb25maWdUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vQmFja2VuZENvbmZpZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQxYThhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL0JhY2tlbmRDb25maWdUZXN0LmphdmEKQEAgLTAsMCArMSwzNCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbjsKKworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CisKK3B1YmxpYyBjbGFzcyBCYWNrZW5kQ29uZmlnVGVzdCB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29uZmlnKCkgeworICAgICAgICBCYWNrZW5kQ29uZmlnIGJjID0gQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoIDM2MDAwMDAsIChpbnQpYmMuZ2V0SW50ZXJuYWxTZXNzaW9uTGVuZ3RoTWlsbGlzKCkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAzMDAgLCAoaW50KWJjLmdldFJlbG9hZFVzZXJzSW5TZWMoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyggImh0dHA6Ly9lbnRvcGtvbjo4MDgwLyIsIGJjLmdldEF1dGhTZXJ2ZXJVcmwoKSApOworICAgICAgICBhc3NlcnRFcXVhbHMoICJFbG9nYm9vayIsIGJjLmdldEtleWNsb2FrUmVhbG0oKSk7CisgICAgICAgIGFzc2VydEVxdWFscyggImVsb2dib29rLWJhY2tlbmQiLCBiYy5nZXRLZXljbG9ha0NsaWVudCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAiYWRtaW4iLCBiYy5nZXRLZXljbG9ha0FkbWluKCkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAiYWRtaW4iLCBiYy5nZXRLZXljbG9ha1BXKCkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAiYmFja2VuZENvbmZpZ0RldkxvY2FsLmpzb24iLCBCYWNrZW5kQ29uZmlnLmdldENvbmZpZ0ZpbGVOYW1lKCkgKTsKKyAgICAgICAgQmFja2VuZENvbmZpZy5zZXRDb25maWdGaWxlTmFtZSgiYmFja2VuZENvbmZpZ1Byb2R1Y3Rpb24uanNvbiIpOworICAgICAgICBhc3NlcnRFcXVhbHMoICJiYWNrZW5kQ29uZmlnUHJvZHVjdGlvbi5qc29uIiwgQmFja2VuZENvbmZpZy5nZXRDb25maWdGaWxlTmFtZSgpICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL0dzb25VVENEYXRlQWRhcHRlclRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Hc29uVVRDRGF0ZUFkYXB0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNTM3MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Hc29uVVRDRGF0ZUFkYXB0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSw0OSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbjsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Kc29uRWxlbWVudDsKK2ltcG9ydCBjb20uZ29vZ2xlLmdzb24uSnNvblNlcmlhbGl6YXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CisKK3B1YmxpYyBjbGFzcyBHc29uVVRDRGF0ZUFkYXB0ZXJUZXN0IHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2VyaWFsaXplVGVzdCgpIHsKKyAgICAgICAgR3NvblVUQ0RhdGVBZGFwdGVyIGdzb25VVENEYXRlQWRhcHRlciA9IG5ldyBHc29uVVRDRGF0ZUFkYXB0ZXIoKTsKKyAgICAgICAgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBqYXZhLnV0aWwuRGF0ZSBkYXRlID0gY2FsZW5kYXIuZ2V0VGltZSgpOworICAgICAgICBUeXBlIHR5cGUgPSBuZXcgVHlwZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZSgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgSnNvblNlcmlhbGl6YXRpb25Db250ZXh0IGpzb25TZXJpYWxpemF0aW9uQ29udGV4dCA9IG5ldyBKc29uU2VyaWFsaXphdGlvbkNvbnRleHQoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBKc29uRWxlbWVudCBzZXJpYWxpemUoT2JqZWN0IG8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgSnNvbkVsZW1lbnQgc2VyaWFsaXplKE9iamVjdCBvLCBUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBnc29uVVRDRGF0ZUFkYXB0ZXIuc2VyaWFsaXplKGRhdGUsIHR5cGUsIGpzb25TZXJpYWxpemF0aW9uQ29udGV4dCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vSW5pdEJhY2tlbmRDb25maWdUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vSW5pdEJhY2tlbmRDb25maWdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzYzkwOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Jbml0QmFja2VuZENvbmZpZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDQ5IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLnBvd2VybW9jay5yZWZsZWN0LldoaXRlYm94OworCitwdWJsaWMgY2xhc3MgSW5pdEJhY2tlbmRDb25maWdUZXN0IHsKKworICAgIHByaXZhdGUgSW5pdEJhY2tlbmRDb25maWcgaW5pdEJhY2tlbmRDb25maWcgPSBuZXcgSW5pdEJhY2tlbmRDb25maWcoKTsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFNldENvbmZpZ0ZpbGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFdoaXRlYm94Lmludm9rZU1ldGhvZChpbml0QmFja2VuZENvbmZpZywgInNldENvbmZpZ0ZpbGVzIiwgIkRldkxvY2FsIik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRlc3RHZW5lcmljKFN0cmluZyBlbnZpcm9ubWVudCApIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBXaGl0ZWJveC5pbnZva2VNZXRob2QoaW5pdEJhY2tlbmRDb25maWcsICJzZXRDb25maWdGaWxlcyIsIGVudmlyb25tZW50KTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RDb21iaW5hdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgICAgICB0ZXN0R2VuZXJpYygiRGV2TG9jYWwiKTsKKyAgICAgICAgdGVzdEdlbmVyaWMoIkRldkxvY2FsIik7CisKKyAgICAgICAgdGVzdEdlbmVyaWMoIkRldlNlcnZlciIpOworICAgICAgICB0ZXN0R2VuZXJpYygiRGV2U2VydmVyIik7CisKKyAgICAgICAgdGVzdEdlbmVyaWMoIkN1c3RvbSIpOworICAgICAgICB0ZXN0R2VuZXJpYygiQ3VzdG9tIik7CisKKyAgICAgICAgdGVzdEdlbmVyaWMobnVsbCk7CisgICAgICAgIHRlc3RHZW5lcmljKG51bGwpOworCisgICAgICAgIHRlc3RHZW5lcmljKCIiKTsKKyAgICAgICAgdGVzdEdlbmVyaWMoIiIpOworCit9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vSW5pdFVzZXJDYWNoZUpvYlRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Jbml0VXNlckNhY2hlSm9iVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjQ1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vSW5pdFVzZXJDYWNoZUpvYlRlc3QuamF2YQpAQCAtMCwwICsxLDI3IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi51dGlsLlJlc291cmNlTG9hZGVyQmFzZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBJbml0VXNlckNhY2hlSm9iVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RJbml0KCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24geworICAgICAgICBJbml0VXNlckNhY2hlSm9iIGpvYiA9IG5ldyBJbml0VXNlckNhY2hlSm9iKCk7CisgICAgICAgIGpvYi5pbml0KCk7CisgICAgICAgIC8vIFRlc3Qgb25seSBjb3ZlcnMgQ29kZSEKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi9Vc2VyQ2FjaGVUaW1lclRhc2tUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vVXNlckNhY2hlVGltZXJUYXNrVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNGYyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vVXNlckNhY2hlVGltZXJUYXNrVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQyIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uOworCitpbXBvcnQgc3RhdGljIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZS5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZS5hc3NlcnROdWxsOworaW1wb3J0IHN0YXRpYyBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmVhc3ltb2NrLkVhc3lNb2NrLmV4cGVjdDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5Kc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uOworCitpbXBvcnQgY29tLmdvb2dsZS5nc29uLnJlZmxlY3QuVHlwZVRva2VuOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlR5cGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuSnd0VG9rZW47CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLktleUNsb2FrUm9sZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuS2V5Q2xvYWtSb2xlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuS2V5Q2xvYWtVc2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi51dGlsLkp3dEhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2FkZXJCYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEludGVybmFsU2VydmVyRXJyb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbC5Vc2VyQ2FjaGU7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CitpbXBvcnQgb3JnLnBvd2VybW9jay5hcGkuZWFzeW1vY2suUG93ZXJNb2NrOworaW1wb3J0IG9yZy5wb3dlcm1vY2suY29yZS5jbGFzc2xvYWRlci5hbm5vdGF0aW9ucy5QcmVwYXJlRm9yVGVzdDsKK2ltcG9ydCBvcmcucG93ZXJtb2NrLm1vZHVsZXMuanVuaXQ0LlBvd2VyTW9ja1J1bm5lcjsKKworQFJ1bldpdGgoUG93ZXJNb2NrUnVubmVyLmNsYXNzKQorQFByZXBhcmVGb3JUZXN0KEp3dEhlbHBlci5jbGFzcykKK3B1YmxpYyBjbGFzcyBVc2VyQ2FjaGVUaW1lclRhc2tUZXN0ICBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisKKyAgICBwcml2YXRlIFVzZXJDYWNoZVRpbWVyVGFzayB0YXNrOworCisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHByZXBhcmVUZXN0cygpIHsKKyAgICAgICAgdGFzayA9IG5ldyBVc2VyQ2FjaGVUaW1lclRhc2soKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRLZXlDbG9ha1VzZXJzRnJvbVRva2VuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBqc29uID0gc3VwZXIubG9hZFN0cmluZ0Zyb21SZXNvdXJjZSgiSldUQWRtaW4uanNvbiIpOworICAgICAgICBKd3RUb2tlbiBqd3QgPSBnZXRHc29uKCkuZnJvbUpzb24oanNvbiwgSnd0VG9rZW4uY2xhc3MpOworCisgICAgICAgIFN0cmluZyBqc29uS2V5Q2xvYWtVc2VyID0gc3VwZXIubG9hZFN0cmluZ0Zyb21SZXNvdXJjZSgidGVzdEtleUNsb2FrVXNlcnMuanNvbiIpOworICAgICAgICBUeXBlIGxpc3RUeXBlS2V5Q2xvYWtVc2VyID0gbmV3IFR5cGVUb2tlbjxMaXN0PEtleUNsb2FrVXNlcj4+KCl7fS5nZXRUeXBlKCk7CisgICAgICAgIExpc3Q8S2V5Q2xvYWtVc2VyPiBrZXlDbG9ha1VzZXJzTGlzdCA9IGdldEdzb24oKS5mcm9tSnNvbihqc29uS2V5Q2xvYWtVc2VyLCBsaXN0VHlwZUtleUNsb2FrVXNlcik7CisgICAgICAgIGtleUNsb2FrVXNlcnNMaXN0LnJlbW92ZSgxKTsKKyAgICAgICAga2V5Q2xvYWtVc2Vyc0xpc3QucmVtb3ZlKDEpOworCisgICAgICAgIFN0cmluZyBqc29uS2V5Q2xvYWtSb2xlcyA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoInRlc3RLZXlDbG9ha0NsaWVudEFuZFJlYWxtUm9sZXMuanNvbiIpOworICAgICAgICBMaXN0PEtleUNsb2FrUm9sZT4ga2V5Q2xvYWtSb2xlc0xpc3QgPSBKd3RIZWxwZXIuZ2V0Um9sZXNMaXN0RnJvbUpzb24oanNvbktleUNsb2FrUm9sZXMpOworCisgICAgICAgIFBvd2VyTW9jay5tb2NrU3RhdGljKEp3dEhlbHBlci5jbGFzcyk7CisgICAgICAgIGV4cGVjdChKd3RIZWxwZXIubG9naW4oQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEtleWNsb2FrQWRtaW4oKSwgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEtleWNsb2FrUFcoKSkpLmFuZFJldHVybihqd3QpOworICAgICAgICBleHBlY3QoSnd0SGVscGVyLmdldFVzZXJzKGp3dCwgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldE1heExvYWRVc2VycygpKSkuYW5kUmV0dXJuKGtleUNsb2FrVXNlcnNMaXN0KTsKKyAgICAgICAgZXhwZWN0KEp3dEhlbHBlci5nZXRSb2xlc0ZvclVzZXIoand0LCBrZXlDbG9ha1VzZXJzTGlzdC5nZXQoMCkuZ2V0SWQoKSkpLmFuZFJldHVybihrZXlDbG9ha1JvbGVzTGlzdCk7CisKKyAgICAgICAgUG93ZXJNb2NrLnJlcGxheUFsbCgpOworICAgICAgICB0YXNrLnJ1bigpOworICAgICAgICBQb3dlck1vY2sudmVyaWZ5QWxsKCk7CisKKyAgICAgICAgTGlzdDxLZXlDbG9ha1VzZXI+IGtleUNsb2FrVXNlcnNSZXN1bHQgPSBVc2VyQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRLZXlDbG9ha1VzZXJzKCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGtleUNsb2FrVXNlcnNSZXN1bHQuc2l6ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDE4LCBrZXlDbG9ha1VzZXJzUmVzdWx0LmdldCgwKS5nZXRBbGxSb2xlcygpLnNpemUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiZmVlZGluLW1hbmFnZW1lbnQtYWNjZXNzIiwga2V5Q2xvYWtVc2Vyc1Jlc3VsdC5nZXQoMCkuZ2V0QWxsUm9sZXMoKS5nZXQoMCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3RjbGllbnRyb2xlIiwga2V5Q2xvYWtVc2Vyc1Jlc3VsdC5nZXQoMCkuZ2V0QWxsUm9sZXMoKS5nZXQoMTcpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRLZXlDbG9ha1VzZXJzX0VtcHR5VG9rZW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUG93ZXJNb2NrLm1vY2tTdGF0aWMoSnd0SGVscGVyLmNsYXNzKTsKKyAgICAgICAgTGlzdDxLZXlDbG9ha1VzZXI+IGNvbXBMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIFVzZXJDYWNoZS5nZXRJbnN0YW5jZSgpLnNldEtleUNsb2FrVXNlcnMoY29tcExpc3QpOworCisgICAgICAgIFN0cmluZyBqc29uS2V5Q2xvYWtSb2xlcyA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoInRlc3RLZXlDbG9ha1JvbGVzLmpzb24iKTsKKyAgICAgICAgVHlwZSBsaXN0VHlwZUtleUNsb2FrUm9sZSA9IG5ldyBUeXBlVG9rZW48TGlzdDxLZXlDbG9ha1JvbGU+Pigpe30uZ2V0VHlwZSgpOworICAgICAgICBMaXN0PEtleUNsb2FrUm9sZT4ga2V5Q2xvYWtSb2xlc0xpc3QgPSBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oanNvbktleUNsb2FrUm9sZXMsIGxpc3RUeXBlS2V5Q2xvYWtSb2xlKTsKKworICAgICAgICBleHBlY3QoSnd0SGVscGVyLmxvZ2luKEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRLZXljbG9ha0FkbWluKCksIEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRLZXljbG9ha1BXKCkpKS5hbmRSZXR1cm4obnVsbCk7CisKKyAgICAgICAgUG93ZXJNb2NrLnJlcGxheUFsbCgpOworICAgICAgICB0YXNrLnJ1bigpOworICAgICAgICBQb3dlck1vY2sudmVyaWZ5QWxsKCk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZShVc2VyQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRLZXlDbG9ha1VzZXJzKCkuaXNFbXB0eSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRLZXlDbG9ha1VzZXJzX251bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUG93ZXJNb2NrLm1vY2tTdGF0aWMoSnd0SGVscGVyLmNsYXNzKTsKKyAgICAgICAgTGlzdDxLZXlDbG9ha1VzZXI+IGNvbXBMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIFVzZXJDYWNoZS5nZXRJbnN0YW5jZSgpLnNldEtleUNsb2FrVXNlcnMoY29tcExpc3QpOworCisgICAgICAgIFN0cmluZyBqc29uS2V5Q2xvYWtSb2xlcyA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoInRlc3RLZXlDbG9ha1JvbGVzLmpzb24iKTsKKyAgICAgICAgVHlwZSBsaXN0VHlwZUtleUNsb2FrUm9sZSA9IG5ldyBUeXBlVG9rZW48TGlzdDxLZXlDbG9ha1JvbGU+Pigpe30uZ2V0VHlwZSgpOworICAgICAgICBMaXN0PEtleUNsb2FrUm9sZT4ga2V5Q2xvYWtSb2xlc0xpc3QgPSBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oanNvbktleUNsb2FrUm9sZXMsIGxpc3RUeXBlS2V5Q2xvYWtSb2xlKTsKKworICAgICAgICBleHBlY3QoSnd0SGVscGVyLmxvZ2luKEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRLZXljbG9ha0FkbWluKCksIEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRLZXljbG9ha1BXKCkpKS5hbmRSZXR1cm4obnVsbCk7CisKKyAgICAgICAgUG93ZXJNb2NrLnJlcGxheUFsbCgpOworICAgICAgICB0YXNrLnJ1bigpOworICAgICAgICBQb3dlck1vY2sudmVyaWZ5QWxsKCk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZShVc2VyQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRLZXlDbG9ha1VzZXJzKCkuaXNFbXB0eSgpKTsKKyAgICB9CisKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEdldEtleUNsb2FrVXNlcnNGcm9tVG9rZW5fTGlzdEVtcHR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBvd2VyTW9jay5tb2NrU3RhdGljKEp3dEhlbHBlci5jbGFzcyk7CisgICAgICAgIFN0cmluZyBqc29uS2V5Q2xvYWtVc2VyID0gc3VwZXIubG9hZFN0cmluZ0Zyb21SZXNvdXJjZSgidGVzdEtleUNsb2FrVXNlcnMuanNvbiIpOworICAgICAgICBUeXBlIGxpc3RUeXBlS2V5Q2xvYWtVc2VyID0gbmV3IFR5cGVUb2tlbjxMaXN0PEtleUNsb2FrVXNlcj4+KCl7fS5nZXRUeXBlKCk7CisgICAgICAgIExpc3Q8S2V5Q2xvYWtVc2VyPiBrZXlDbG9ha1VzZXJzTGlzdE9yZyA9IEpzb25HZW5lcmF0b3JCYXNlLmdldEdzb24oKS5mcm9tSnNvbihqc29uS2V5Q2xvYWtVc2VyLCBsaXN0VHlwZUtleUNsb2FrVXNlcik7CisKKyAgICAgICAgVXNlckNhY2hlLmdldEluc3RhbmNlKCkuc2V0S2V5Q2xvYWtVc2VycyhrZXlDbG9ha1VzZXJzTGlzdE9yZyk7CisgICAgICAgIFN0cmluZyBqc29uID0gc3VwZXIubG9hZFN0cmluZ0Zyb21SZXNvdXJjZSgiSldUQWRtaW4uanNvbiIpOworICAgICAgICBKd3RUb2tlbiBqd3QgPSBnZXRHc29uKCkuZnJvbUpzb24oanNvbiwgSnd0VG9rZW4uY2xhc3MpOworCisgICAgICAgIExpc3Q8S2V5Q2xvYWtVc2VyPiBrZXlDbG9ha1VzZXJzTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgICAgICAgIGV4cGVjdChKd3RIZWxwZXIubG9naW4oQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEtleWNsb2FrQWRtaW4oKSwgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldEtleWNsb2FrUFcoKSkpLmFuZFJldHVybihqd3QpOworICAgICAgICBleHBlY3QoSnd0SGVscGVyLmdldFVzZXJzKGp3dCwgQmFja2VuZENvbmZpZy5nZXRJbnN0YW5jZSgpLmdldE1heExvYWRVc2VycygpKSkuYW5kUmV0dXJuKGtleUNsb2FrVXNlcnNMaXN0KTsKKworICAgICAgICBQb3dlck1vY2sucmVwbGF5QWxsKCk7CisgICAgICAgIHRhc2sucnVuKCk7CisgICAgICAgIFBvd2VyTW9jay52ZXJpZnlBbGwoKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoa2V5Q2xvYWtVc2Vyc0xpc3Quc2l6ZSgpLCBVc2VyQ2FjaGUuZ2V0SW5zdGFuY2UoKS5nZXRLZXlDbG9ha1VzZXJzKCkuc2l6ZSgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vdXRpbC9IYXNoaW5nQWxnb1Rlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi91dGlsL0hhc2hpbmdBbGdvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYjg0MDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb21tb24vdXRpbC9IYXNoaW5nQWxnb1Rlc3QuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLnV0aWw7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIEhhc2hpbmdBbGdvVGVzdCB7CisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SGFzaEl0KCkgeworCQlTdHJpbmcgaGFzaCA9IEhhc2hpbmdBbGdvLmhhc2hJdCgiVGVzdE1lIik7CisJCWFzc2VydFRydWUoIjY2ZDU2NWEyZWI3NGUxYTIwYjZjMTJiYjJjYmY4NGVjYWFkZTg0ZWMiLmVxdWFscyhoYXNoKSk7CisJCWFzc2VydFRydWUoIU9iamVjdHMuZXF1YWxzKEhhc2hpbmdBbGdvLmhhc2hJdCgiVGhpc0lzVGVzdCIpLCBIYXNoaW5nQWxnby5oYXNoSXQoInRoaXNJc0FUZXN0IikpKTsKKwkJYXNzZXJ0TnVsbChIYXNoaW5nQWxnby5oYXNoSXQobnVsbCkpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi91dGlsL1Jlc291cmNlTG9hZGVyQmFzZVRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbW1vbi91dGlsL1Jlc291cmNlTG9hZGVyQmFzZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDg4OGVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29tbW9uL3V0aWwvUmVzb3VyY2VMb2FkZXJCYXNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24udXRpbDsKKworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBSZXNvdXJjZUxvYWRlckJhc2VUZXN0IHsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3Rsb2FkU3RyaW5nRnJvbVJlc291cmNlRXJyb3IoKSB7CisgICAgICAgIFJlc291cmNlTG9hZGVyQmFzZSBybGIgPSBuZXcgUmVzb3VyY2VMb2FkZXJCYXNlKCk7CisgICAgICAgIFN0cmluZyBzdHIgPSBybGIubG9hZFN0cmluZ0Zyb21SZXNvdXJjZSgiVU5LTk9XTl9GSUxFIik7CisgICAgICAgIGFzc2VydEVxdWFscygiIiwgc3RyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0JhY2tlbmRDb250cm9sbGVyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9CYWNrZW5kQ29udHJvbGxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTM1NjI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9CYWNrZW5kQ29udHJvbGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29udHJvbGxlcjsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuS2V5Q2xvYWtVc2VyOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uSnNvbkdlbmVyYXRvckJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi51dGlsLlJlc291cmNlTG9hZGVyQmFzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuZXhjZXB0aW9ucy5Qb3J0YWxVbmF1dGhvcml6ZWQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbC5Mb2dpbkNyZWRlbnRpYWxzOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWwuVXNlckF1dGhlbnRpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWwuVXNlck1vZHVsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsLlZlcnNpb25JbmZvOworaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBCYWNrZW5kQ29udHJvbGxlclRlc3QgIGV4dGVuZHMgUmVzb3VyY2VMb2FkZXJCYXNlIHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEdldFZlcnNpb25JbmZvKCkgeworICAgICAgICBCYWNrZW5kQ29udHJvbGxlciBiZWMgPSBuZXcgQmFja2VuZENvbnRyb2xsZXIoKTsKKyAgICAgICAgVmVyc2lvbkluZm8gdmkgPSBiZWMuZ2V0VmVyc2lvbkluZm8oKTsKKworICAgICAgICBTdHJpbmcgdkN1cnIgPSBnZXRDbGFzcygpLmdldFBhY2thZ2UoKS5nZXRJbXBsZW1lbnRhdGlvblZlcnNpb24oKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCB2aS5nZXRCYWNrZW5kVmVyc2lvbigpLCB2Q3VyciApOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgZ2V0VXNlck1vZHVsZUxpc3RfVGVtcG9yYXJ5T25seSgpIHsKKyAgICAgICAgLy9fZmQgb25seSB0ZW1wb3JhcmlseQorICAgICAgICBMaXN0PFVzZXJNb2R1bGU+IG1vZExpc3QgPSBuZXcgQmFja2VuZENvbnRyb2xsZXIoKS5nZXRVc2VyTW9kdWxlTGlzdCgpOworICAgICAgICBhc3NlcnRUcnVlKCAhbW9kTGlzdC5pc0VtcHR5KCkgKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbnRyb2xsZXIvQmFzZVdlYlNlcnZpY2VUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0Jhc2VXZWJTZXJ2aWNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTE3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0Jhc2VXZWJTZXJ2aWNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYwIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29udHJvbGxlcjsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOworaW1wb3J0IGphdmEubmV0LlVSSTsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkVudGl0eVRhZzsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLkdlbmVyaWNUeXBlOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTGluazsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk11bHRpdmFsdWVkTWFwOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuTmV3Q29va2llOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuUmVzcG9uc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5HbG9iYWxzOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEJhZFJlcXVlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbFVuYXV0aG9yaXplZDsKK2ltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OworaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBCYXNlV2ViU2VydmljZVRlc3QgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyIEVNUFRZTE9HR0VSID0gb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXIKKwkJCS5nZXRMb2dnZXIoQmFzZVdlYlNlcnZpY2VUZXN0LmNsYXNzLmdldE5hbWUoKSk7CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFRlc3RXZWJTZXJ2aWNlIGV4dGVuZHMgQmFzZVdlYlNlcnZpY2UgeworCQlwdWJsaWMgU3RyaW5nIHNlc3Npb25JZDsKKwkJcHVibGljIGJvb2xlYW4gdGhyb3dVbmF1dGhFeGNlcHRpb24gPSBmYWxzZTsKKworCQlwdWJsaWMgVGVzdFdlYlNlcnZpY2UoKSB7CisJCQlzdXBlcihFTVBUWUxPR0dFUik7CisJCX0KKworCQlwcm90ZWN0ZWQgdm9pZCBhc3NlcnRBbmRSZWZyZXNoVG9rZW4oU3RyaW5nIHNlc3Npb25JZCwgYm9vbGVhbiByZWZyZXNoKSB0aHJvd3MgUG9ydGFsRXhjZXB0aW9uIHsKKwkJCWlmICh0aHJvd1VuYXV0aEV4Y2VwdGlvbikgeworCQkJCXRocm93IG5ldyBQb3J0YWxVbmF1dGhvcml6ZWQoKTsKKwkJCX0gZWxzZSB7CisJCQkJdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7CisJCQl9CisJCX0KKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFRlc3RJbnZva2FibGUgZXh0ZW5kcyBCYWNrZW5kSW52b2thYmxlIHsKKwkJcHVibGljIGJvb2xlYW4gaXNJbnZva2VkID0gZmFsc2U7CisJCXB1YmxpYyBQb3J0YWxFeGNlcHRpb24gZXhjZXB0aW9uVG9UaHJvdyA9IG51bGw7CisJCXB1YmxpYyBib29sZWFuIHRocm93UnVudGltZSA9IGZhbHNlOworCQlwdWJsaWMgUmVzcG9uc2UgcmVzcG9uc2UgPSBudWxsOworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgUmVzcG9uc2UgaW52b2tlKCkgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisJCQlpZiAoZXhjZXB0aW9uVG9UaHJvdyAhPSBudWxsKSB7CisJCQkJdGhyb3cgZXhjZXB0aW9uVG9UaHJvdzsKKwkJCX0KKwkJCWlmICh0aHJvd1J1bnRpbWUpIHsKKwkJCQkoKFN0cmluZykgbnVsbCkuZXF1YWxzKCJlcnJvciIpOyAvL05PU09OQVIKKwkJCX0KKwkJCWlzSW52b2tlZCA9IHRydWU7CisJCQlyZXR1cm4gcmVzcG9uc2U7CisJCX0KKwl9CisJCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52b2tlRXhjZXB0aW9uKCkgeworCQlUZXN0V2ViU2VydmljZSB0d3MgPSBuZXcgVGVzdFdlYlNlcnZpY2UoKTsKKwkJVGVzdEludm9rYWJsZSB0aSA9IG5ldyBUZXN0SW52b2thYmxlKCk7CisKKwkJdGkuZXhjZXB0aW9uVG9UaHJvdyA9IG5ldyBQb3J0YWxCYWRSZXF1ZXN0KCk7CisJCVJlc3BvbnNlIHJldCA9IHR3cy5pbnZva2UoInNzZXNzIiwgZmFsc2UsIHRpKTsKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyhHbG9iYWxzLkhUVFBTVEFUVVNfQkFEX1JFUVVFU1QsIHJldC5nZXRTdGF0dXMoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52b2tlUnVudGltZUV4Y2VwdGlvbigpIHsKKwkJVGVzdFdlYlNlcnZpY2UgdHdzID0gbmV3IFRlc3RXZWJTZXJ2aWNlKCk7CisJCVRlc3RJbnZva2FibGUgdGkgPSBuZXcgVGVzdEludm9rYWJsZSgpOworCisJCXRpLnRocm93UnVudGltZSA9IHRydWU7CisJCVJlc3BvbnNlIHJldCA9IHR3cy5pbnZva2UoInNzZXNzIiwgIGZhbHNlLCB0aSk7CisJCWFzc2VydEVxdWFscyhHbG9iYWxzLkhUVFBTVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SLCByZXQuZ2V0U3RhdHVzKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFVuYXV0aEV4Y2VwdGlvbigpIHsKKwkJVGVzdFdlYlNlcnZpY2UgdHdzID0gbmV3IFRlc3RXZWJTZXJ2aWNlKCk7CisJCVRlc3RJbnZva2FibGUgdGkgPSBuZXcgVGVzdEludm9rYWJsZSgpOworCQl0d3MudGhyb3dVbmF1dGhFeGNlcHRpb24gPSB0cnVlOworCQlSZXNwb25zZSByZXQgPSB0d3MuaW52b2tlKCJzc2VzcyIsICBmYWxzZSwgdGkpOworCQlhc3NlcnRFcXVhbHMoR2xvYmFscy5IVFRQU1RBVFVTX1VOQVVUSE9SSVpFRCwgcmV0LmdldFN0YXR1cygpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RTZWN1cmVUeXBlTm9uZSgpIHsKKwkJVGVzdFdlYlNlcnZpY2UgdHdzID0gbmV3IFRlc3RXZWJTZXJ2aWNlKCk7CisJCVRlc3RJbnZva2FibGUgdGkgPSBuZXcgVGVzdEludm9rYWJsZSgpOworCQlSZXNwb25zZSByZXNwb25zZUZvclR5cGVOT05FID0gdHdzLmludm9rZSgic3Nlc3MiLCBmYWxzZSwgdGkpOworCQlhc3NlcnROdWxsKHJlc3BvbnNlRm9yVHlwZU5PTkUpOworCX0KKworCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52b2thdGlvbigpIHsKKwkJVGVzdFdlYlNlcnZpY2UgdHdzID0gbmV3IFRlc3RXZWJTZXJ2aWNlKCk7CisJCVRlc3RJbnZva2FibGUgdGkgPSBuZXcgVGVzdEludm9rYWJsZSgpOworCQl0aS5yZXNwb25zZSA9IG5ldyBSZXNwb25zZSgpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE9iamVjdCBnZXRFbnRpdHkoKSB7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBUIHJlYWRFbnRpdHkoQ2xhc3M8VD4gYUNsYXNzKSB7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBUIHJlYWRFbnRpdHkoR2VuZXJpY1R5cGU8VD4gZ2VuZXJpY1R5cGUpIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IFQgcmVhZEVudGl0eShDbGFzczxUPiBhQ2xhc3MsIEFubm90YXRpb25bXSBhbm5vdGF0aW9ucykgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gVCByZWFkRW50aXR5KEdlbmVyaWNUeXBlPFQ+IGdlbmVyaWNUeXBlLCBBbm5vdGF0aW9uW10gYW5ub3RhdGlvbnMpIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBoYXNFbnRpdHkoKSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGJ1ZmZlckVudGl0eSgpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgY2xvc2UoKSB7CisKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgTWVkaWFUeXBlIGdldE1lZGlhVHlwZSgpIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgTG9jYWxlIGdldExhbmd1YWdlKCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgeworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRBbGxvd2VkTWV0aG9kcygpIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgTWFwPFN0cmluZywgTmV3Q29va2llPiBnZXRDb29raWVzKCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBFbnRpdHlUYWcgZ2V0RW50aXR5VGFnKCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBEYXRlIGdldERhdGUoKSB7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIERhdGUgZ2V0TGFzdE1vZGlmaWVkKCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBVUkkgZ2V0TG9jYXRpb24oKSB7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIFNldDxMaW5rPiBnZXRMaW5rcygpIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBoYXNMaW5rKFN0cmluZyBzKSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBMaW5rIGdldExpbmsoU3RyaW5nIHMpIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgTGluay5CdWlsZGVyIGdldExpbmtCdWlsZGVyKFN0cmluZyBzKSB7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGludCBnZXRTdGF0dXMoKSB7CisJCQkJcmV0dXJuIDY2NjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgU3RhdHVzVHlwZSBnZXRTdGF0dXNJbmZvKCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBNdWx0aXZhbHVlZE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0TWV0YWRhdGEoKSB7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE11bHRpdmFsdWVkTWFwPFN0cmluZywgU3RyaW5nPiBnZXRTdHJpbmdIZWFkZXJzKCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBTdHJpbmcgZ2V0SGVhZGVyU3RyaW5nKFN0cmluZyBzKSB7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCX07CisKKwkJUmVzcG9uc2UgcmV0ID0gdHdzLmludm9rZSgic3Nlc3MiLCAgZmFsc2UsIHRpKTsKKwkJYXNzZXJ0VHJ1ZSh0aS5pc0ludm9rZWQpOworCQlhc3NlcnRFcXVhbHMoInNzZXNzIiwgdHdzLnNlc3Npb25JZCk7CisJCWFzc2VydEVxdWFscyg2NjYsIHJldC5nZXRTdGF0dXMoKSApOworCisJfQorCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0NvbnRyb2xsZXJJbXBsZW1lbnRhdGlvbnNUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0NvbnRyb2xsZXJJbXBsZW1lbnRhdGlvbnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjZTgxZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbnRyb2xsZXIvQ29udHJvbGxlckltcGxlbWVudGF0aW9uc1Rlc3QuamF2YQpAQCAtMCwwICsxLDk5IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29udHJvbGxlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi5tb2RlbC5LZXlDbG9ha1VzZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5HbG9iYWxzOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24udXRpbC5SZXNvdXJjZUxvYWRlckJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWwuVXNlck1vZHVsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsLlZlcnNpb25JbmZvOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLnBvd2VybW9jay5hcGkuZWFzeW1vY2suUG93ZXJNb2NrOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuZWFzeW1vY2suRWFzeU1vY2suZXhwZWN0OworCisKK3B1YmxpYyBjbGFzcyBDb250cm9sbGVySW1wbGVtZW50YXRpb25zVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisgICAgcHJpdmF0ZSBCYWNrZW5kQ29udHJvbGxlciBiZU1vY2s7CisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHByZXBhcmVUZXN0cygpIHsKKyAgICAgICAgYmVNb2NrID0gUG93ZXJNb2NrLmNyZWF0ZU5pY2VNb2NrKEJhY2tlbmRDb250cm9sbGVyLmNsYXNzKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRVc2VycygpIHRocm93cyBQb3J0YWxFeGNlcHRpb24geworICAgICAgICBMaXN0PEtleUNsb2FrVXNlcj4gdXNlckxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgQ29udHJvbGxlckltcGxlbWVudGF0aW9ucy5HZXRVc2VycyBjb250cm9sbGVySW1wbCA9IG5ldyBDb250cm9sbGVySW1wbGVtZW50YXRpb25zLkdldFVzZXJzKCk7CisgICAgICAgIGNvbnRyb2xsZXJJbXBsLnNldE1vZFVzZXIoIkVnYWxVc2VyIik7CisgICAgICAgIGNvbnRyb2xsZXJJbXBsLnNldFVzZXJJZCgxNCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnRyb2xsZXJJbXBsLmludm9rZSgpLmdldFN0YXR1cygpLCBHbG9iYWxzLkhUVFBTVEFUVVNfT0spOworICAgICAgICBhc3NlcnRFcXVhbHMoY29udHJvbGxlckltcGwuZ2V0TW9kVXNlcigpLCAiRWdhbFVzZXIiKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnRyb2xsZXJJbXBsLmdldFVzZXJJZCgpLCAxNCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0VmVyc2lvbkluZm8oKSB0aHJvd3MgUG9ydGFsRXhjZXB0aW9uIHsKKyAgICAgICAgVmVyc2lvbkluZm8gdmkgPSBuZXcgVmVyc2lvbkluZm8oKTsKKyAgICAgICAgQ29udHJvbGxlckltcGxlbWVudGF0aW9ucy5HZXRWZXJzaW9uSW5mbyBjb250cm9sbGVySW1wbCA9IG5ldyBDb250cm9sbGVySW1wbGVtZW50YXRpb25zLkdldFZlcnNpb25JbmZvKGJlTW9jayk7CisKKyAgICAgICAgZXhwZWN0KGJlTW9jay5nZXRWZXJzaW9uSW5mbygpKS5hbmRSZXR1cm4odmkpOworICAgICAgICBQb3dlck1vY2sucmVwbGF5KGJlTW9jayk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnRyb2xsZXJJbXBsLmludm9rZSgpLmdldFN0YXR1cygpLCBHbG9iYWxzLkhUVFBTVEFUVVNfT0spOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdExvZ091dCgpIHRocm93cyBQb3J0YWxFeGNlcHRpb24geworICAgICAgICBDb250cm9sbGVySW1wbGVtZW50YXRpb25zLkxvZ291dCBjb250cm9sbGVySW1wbCA9IG5ldyBDb250cm9sbGVySW1wbGVtZW50YXRpb25zLkxvZ291dCgiTG9nTWVPdXQiKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnRyb2xsZXJJbXBsLmludm9rZSgpLmdldFN0YXR1cygpLCBHbG9iYWxzLkhUVFBTVEFUVVNfT0spOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdENoZWNrQXV0aCgpIHRocm93cyBQb3J0YWxFeGNlcHRpb24geworICAgICAgICBDb250cm9sbGVySW1wbGVtZW50YXRpb25zLkNoZWNrQXV0aCBjb250cm9sbGVySW1wbCA9IG5ldyBDb250cm9sbGVySW1wbGVtZW50YXRpb25zLkNoZWNrQXV0aCgpOworICAgICAgICBhc3NlcnRFcXVhbHMoY29udHJvbGxlckltcGwuaW52b2tlKCkuZ2V0U3RhdHVzKCksIEdsb2JhbHMuSFRUUFNUQVRVU19PSyk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlck1vZHVsZXNGb3JVc2VyKCkgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisgICAgICAgIExpc3Q8VXNlck1vZHVsZT4gdXNlck1vZHVsZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgQ29udHJvbGxlckltcGxlbWVudGF0aW9ucy5HZXRVc2VyTW9kdWxlc0ZvclVzZXIgY29udHJvbGxlckltcGwgPSBuZXcgQ29udHJvbGxlckltcGxlbWVudGF0aW9ucy5HZXRVc2VyTW9kdWxlc0ZvclVzZXIoYmVNb2NrKTsKKyAgICAgICAgY29udHJvbGxlckltcGwuc2V0TW9kVXNlcigiRWdhbFVzZXIiKTsKKworICAgICAgICBleHBlY3QoYmVNb2NrLmdldFVzZXJNb2R1bGVMaXN0KCkpLmFuZFJldHVybih1c2VyTW9kdWxlcyk7CisgICAgICAgIFBvd2VyTW9jay5yZXBsYXkoYmVNb2NrKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoY29udHJvbGxlckltcGwuaW52b2tlKCkuZ2V0U3RhdHVzKCksIEdsb2JhbHMuSFRUUFNUQVRVU19PSyk7CisgICAgICAgIGFzc2VydEVxdWFscyhjb250cm9sbGVySW1wbC5nZXRNb2RVc2VyKCksICJFZ2FsVXNlciIpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEdldFVzZXJGb3JSb2xlKCkgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisgICAgICAgIExpc3Q8S2V5Q2xvYWtVc2VyPiBrZXlDbG9ha1VzZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIFN0cmluZyB1c2VyUm9sZSA9ICJ0aGVCZXN0Um9sZSI7CisgICAgICAgIENvbnRyb2xsZXJJbXBsZW1lbnRhdGlvbnMuR2V0VXNlcnNGb3JSb2xlIGNvbnRyb2xsZXJJbXBsID0gbmV3IENvbnRyb2xsZXJJbXBsZW1lbnRhdGlvbnMuR2V0VXNlcnNGb3JSb2xlKGJlTW9jaywgdXNlclJvbGUpOworICAgICAgICBjb250cm9sbGVySW1wbC5zZXRNb2RVc2VyKCJFZ2FsVXNlciIpOworCisgICAgICAgIGV4cGVjdChiZU1vY2suZ2V0VXNlcnNGb3JSb2xlKHVzZXJSb2xlKSkuYW5kUmV0dXJuKGtleUNsb2FrVXNlcnMpOworICAgICAgICBQb3dlck1vY2sucmVwbGF5KGJlTW9jayk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnRyb2xsZXJJbXBsLmludm9rZSgpLmdldFN0YXR1cygpLCBHbG9iYWxzLkhUVFBTVEFUVVNfT0spOworICAgICAgICBhc3NlcnRFcXVhbHMoY29udHJvbGxlckltcGwuZ2V0TW9kVXNlcigpLCAiRWdhbFVzZXIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL0lucHV0VmFsaWRhdG9yVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9JbnB1dFZhbGlkYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY5MGRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvY29udHJvbGxlci9JbnB1dFZhbGlkYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDgzIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29udHJvbGxlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uR2xvYmFsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2FkZXJCYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEJhZFJlcXVlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsVW5hdXRob3JpemVkOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5wb3dlcm1vY2sucmVmbGVjdC5XaGl0ZWJveDsKKworcHVibGljIGNsYXNzIElucHV0VmFsaWRhdG9yVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisKKyAgICAvLyBDaGVjayBDcmVkZW50aWFscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBAVGVzdChleHBlY3RlZCA9IFBvcnRhbFVuYXV0aG9yaXplZC5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tDcmVkZW50aWFsc19OdWxsKCkgdGhyb3dzIFBvcnRhbFVuYXV0aG9yaXplZCB7CisgICAgICAgIG5ldyBJbnB1dERhdGFWYWx1YXRvcigpLmNoZWNrQ3JlZGVudGlhbHMobnVsbCk7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQgPSBQb3J0YWxVbmF1dGhvcml6ZWQuY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdENoZWNrQ3JlZGVudGlhbHNfRW1wdHkoKSB0aHJvd3MgUG9ydGFsVW5hdXRob3JpemVkIHsKKyAgICAgICAgbmV3IElucHV0RGF0YVZhbHVhdG9yKCkuY2hlY2tDcmVkZW50aWFscygiIik7CisgICAgfQorCisgICAgQFRlc3QoZXhwZWN0ZWQgPSBQb3J0YWxVbmF1dGhvcml6ZWQuY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdENoZWNrQ3JlZGVudGlhbHNfVG9vTG9uZygpIHRocm93cyBQb3J0YWxVbmF1dGhvcml6ZWQgeworICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBHbG9iYWxzLk1BWF9DUkVERU5USUFMU19MRU5HVEg7IGkrKykgeworICAgICAgICAgICAgc2IuYXBwZW5kKCJXIik7CisgICAgICAgIH0KKyAgICAgICAgbmV3IElucHV0RGF0YVZhbHVhdG9yKCkuY2hlY2tDcmVkZW50aWFscyhzYi50b1N0cmluZygpKTsKKworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkID0gUG9ydGFsVW5hdXRob3JpemVkLmNsYXNzKQorICAgIHB1YmxpYyB2b2lkIHRlc3RDaGVja0NyZWRlbnRpYWxzX0ludmFsaWQoKSB0aHJvd3MgUG9ydGFsVW5hdXRob3JpemVkIHsKKyAgICAgICAgbmV3IElucHV0RGF0YVZhbHVhdG9yKCkuY2hlY2tDcmVkZW50aWFscygie1wiYWJjXCI6XCIxMjNcIn0iKTsKKyAgICB9CisKKyAgICBAVGVzdChleHBlY3RlZCA9IFBvcnRhbFVuYXV0aG9yaXplZC5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tDcmVkZW50aWFsc19JbnZhbGlkTm9Kc29uKCkgdGhyb3dzIFBvcnRhbFVuYXV0aG9yaXplZCB7CisgICAgICAgIG5ldyBJbnB1dERhdGFWYWx1YXRvcigpLmNoZWNrQ3JlZGVudGlhbHMoIjEyMyIpOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkID0gUG9ydGFsVW5hdXRob3JpemVkLmNsYXNzKQorICAgIHB1YmxpYyB2b2lkIHRlc3RDaGVja0NyZWRlbnRpYWxzX3Rvb0xvbmcoKSB0aHJvd3MgUG9ydGFsVW5hdXRob3JpemVkIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKEdsb2JhbHMuTUFYX0NSRURFTlRJQUxTX0xFTkdUSCArIDEpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEdsb2JhbHMuTUFYX0NSRURFTlRJQUxTX0xFTkdUSCArIDE7IGkrKykgeworICAgICAgICAgICAgc2IuYXBwZW5kKCJAIik7CisgICAgICAgIH0KKyAgICAgICAgbmV3IElucHV0RGF0YVZhbHVhdG9yKCkuY2hlY2tDcmVkZW50aWFscyhzYi50b1N0cmluZygpKTsKKworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgY2hlY2tXaGl0ZWxpc3RDaGFyc19vaygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBjYWxsV2hpdGVsaXN0Q2hlY2soIkFhQmJDY8Okw4TDtsOWw7zDnMOfID8wMTIzNDU2Nzg5KCkuIF8rICAsLTo7PSHCpyUmLycjPD5cIiIpOworICAgIH0KKworICAgIEBUZXN0KGV4cGVjdGVkID0gUG9ydGFsQmFkUmVxdWVzdC5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCBjaGVja1doaXRlbGlzdENoYXJzX25vaygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBjYWxsV2hpdGVsaXN0Q2hlY2sobnVsbCk7CisgICAgICAgIGNhbGxXaGl0ZWxpc3RDaGVjaygiIik7CisgICAgICAgIGNhbGxXaGl0ZWxpc3RDaGVjaygiQWFCYkNjLix7fSIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjYWxsV2hpdGVsaXN0Q2hlY2soU3RyaW5nIHRzdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIElucHV0RGF0YVZhbHVhdG9yIGlkdiA9IG5ldyBJbnB1dERhdGFWYWx1YXRvcigpOworICAgICAgICBXaGl0ZWJveC5pbnZva2VNZXRob2QoaWR2LCAiY2hlY2tXaGl0ZWxpc3RDaGFycyIsIHRzdCwgZmFsc2UpOworICAgIH0KKworCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL1Jlc3BvbnNlQnVpbGRlcldyYXBwZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL1Jlc3BvbnNlQnVpbGRlcldyYXBwZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0ZTA0ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbnRyb2xsZXIvUmVzcG9uc2VCdWlsZGVyV3JhcHBlclRlc3QuamF2YQpAQCAtMCwwICsxLDQyIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29udHJvbGxlcjsKKworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkdsb2JhbHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5leGNlcHRpb25zLlBvcnRhbEludGVybmFsU2VydmVyRXJyb3I7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKworcHVibGljIGNsYXNzIFJlc3BvbnNlQnVpbGRlcldyYXBwZXJUZXN0IHsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRSZXNwb25zZUJ1aWxkZXIoKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgICAgIFN0cmluZyBqc29uID0gInsgJ3JldCcgOiAnT0snIH0iOworICAgICAgICBSZXNwb25zZS5SZXNwb25zZUJ1aWxkZXIgcmIgPSBSZXNwb25zZUJ1aWxkZXJXcmFwcGVyLklOU1RBTkNFLmdldFJlc3BvbnNlQnVpbGRlcigganNvbiApOworICAgICAgICBSZXNwb25zZSByZXNwID0gcmIuYnVpbGQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEdsb2JhbHMuSFRUUFNUQVRVU19PSywgcmVzcC5nZXRTdGF0dXMoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QnVpbGRPa1Jlc3BvbnNlKCkgdGhyb3dzIFBvcnRhbEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBqc29uID0gInsgJ3Rlc3QnIDogJ1ZhbHVlJyB9IjsKKyAgICAgICAgUmVzcG9uc2UgcmVzcCA9IFJlc3BvbnNlQnVpbGRlcldyYXBwZXIuSU5TVEFOQ0UuYnVpbGRPS1Jlc3BvbnNlKCBqc29uICk7CisgICAgICAgIGFzc2VydEVxdWFscyggR2xvYmFscy5IVFRQU1RBVFVTX09LLCByZXNwLmdldFN0YXR1cygpKTsKKworICAgICAgICByZXNwID0gUmVzcG9uc2VCdWlsZGVyV3JhcHBlci5JTlNUQU5DRS5idWlsZE9LUmVzcG9uc2UoanNvbiwgInNzZXNzIik7CisgICAgICAgIGFzc2VydEVxdWFscyggR2xvYmFscy5IVFRQU1RBVFVTX09LLCByZXNwLmdldFN0YXR1cygpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL1Rva2VuTWFuYWdlclRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2NvbnRyb2xsZXIvVG9rZW5NYW5hZ2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzFkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9jb250cm9sbGVyL1Rva2VuTWFuYWdlclRlc3QuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbnRyb2xsZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuYXV0aDIubW9kZWwuSnd0VG9rZW47CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5CYWNrZW5kQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uSnNvbkdlbmVyYXRvckJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi51dGlsLlJlc291cmNlTG9hZGVyQmFzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuZXhjZXB0aW9ucy5Qb3J0YWxVbmF1dGhvcml6ZWQ7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcucG93ZXJtb2NrLnJlZmxlY3QuV2hpdGVib3g7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOworCitwdWJsaWMgY2xhc3MgVG9rZW5NYW5hZ2VyVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisKKyAgICBAQmVmb3JlCisgICAgcHVibGljIHZvaWQgY2xlYW5VcCgpIHsKKyAgICAgICAgVG9rZW5NYW5hZ2VyIHNlc3Npb25lID0gVG9rZW5NYW5hZ2VyLmdldEluc3RhbmNlKCk7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBUb2tlbk1hbmFnZXIuU2Vzc2lvbkl0ZW0+IHJlZ01hcCA9IFdoaXRlYm94LmdldEludGVybmFsU3RhdGUoc2Vzc2lvbmUsICJyZWdpc3RyeSIpOworICAgICAgICByZWdNYXAuY2xlYXIoKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RSZWdpc3Rlck5ld1Nlc3Npb24oKSB7CisgICAgICAgIGZpbmFsIGludCBDT1VOVCA9IDEwMDA7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBDT1VOVDsgaSsrKSB7CisgICAgICAgICAgICBUb2tlbk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZWdpc3Rlck5ld1Nlc3Npb24oY3JlYXRlSldUKCAiVCIraSApKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgQFRlc3QoZXhwZWN0ZWQgPSBQb3J0YWxVbmF1dGhvcml6ZWQuY2xhc3MpCisgICAgcHVibGljIHZvaWQgdGVzdFJlZnJlc2hTdGF0dXNJc0FsaXZlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBQb3J0YWxVbmF1dGhvcml6ZWQgeworICAgICAgICBUb2tlbk1hbmFnZXIgc2Vzc2lvbmUgPSBUb2tlbk1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgSnd0VG9rZW4gc3BlY2lhbFRva2VuID0gY3JlYXRlSldUKG51bGwpOworCisgICAgICAgIGxvbmcgdGltZU5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBzZXNzaW9uZS5yZWdpc3Rlck5ld1Nlc3Npb24oY3JlYXRlSldUKCJIVUdPMSIpKTsKKyAgICAgICAgc2Vzc2lvbmUucmVnaXN0ZXJOZXdTZXNzaW9uKHNwZWNpYWxUb2tlbik7CisgICAgICAgIHNlc3Npb25lLnJlZ2lzdGVyTmV3U2Vzc2lvbihjcmVhdGVKV1QoIkhVR08zIikpOworCisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBUb2tlbk1hbmFnZXIuU2Vzc2lvbkl0ZW0+IHJlZ01hcCA9IFdoaXRlYm94LmdldEludGVybmFsU3RhdGUoc2Vzc2lvbmUsICJyZWdpc3RyeSIpOworCisgICAgICAgIGFzc2VydEVxdWFscygzLCByZWdNYXAuc2l6ZSgpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShyZWdNYXAuY29udGFpbnNLZXkoIkhVR08xIikpOworICAgICAgICBhc3NlcnRUcnVlKHJlZ01hcC5jb250YWluc0tleShzcGVjaWFsVG9rZW4uZ2V0QWNjZXNzVG9rZW4oKSkpOworICAgICAgICBhc3NlcnRUcnVlKHJlZ01hcC5jb250YWluc0tleSgiSFVHTzMiKSk7CisKKyAgICAgICAgcmVnTWFwLnJlbW92ZShzcGVjaWFsVG9rZW4uZ2V0QWNjZXNzVG9rZW4oKSk7CisgICAgICAgIHJlZ01hcC5wdXQoc3BlY2lhbFRva2VuLmdldEFjY2Vzc1Rva2VuKCksIG5ldyBUb2tlbk1hbmFnZXIuU2Vzc2lvbkl0ZW0odGltZU5vdyAtIEJhY2tlbmRDb25maWcuZ2V0SW5zdGFuY2UoKS5nZXRJbnRlcm5hbFNlc3Npb25MZW5ndGhNaWxsaXMoKSAtIDEpKTsKKyAgICAgICAgcmVnTWFwLmdldChzcGVjaWFsVG9rZW4uZ2V0QWNjZXNzVG9rZW4oKSkuc2V0Snd0VG9rZW4oc3BlY2lhbFRva2VuKTsKKyAgICAgICAgcmVnTWFwLnJlbW92ZSgiSFVHTzMiKTsKKyAgICAgICAgcmVnTWFwLnB1dCgiSFVHTzMiLCBudWxsKTsKKworICAgICAgICBUaHJlYWQuc2xlZXAoNTApOyAvLyBOT1NPTkFSIC8vIExPQ0sgaXMgaGVsZAorCisgICAgICAgIFRva2VuTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlZnJlc2hTZXNzaW9uSXNBbGl2ZSgiSFVHTzEiLCB0cnVlKTsKKworICAgICAgICAvLyBjcmVhdGUgVGltZSBzdGF5cyB0aGUgc2FtZQorICAgICAgICBUb2tlbk1hbmFnZXIuU2Vzc2lvbkl0ZW0gc2l0MSA9IHJlZ01hcC5nZXQoIkhVR08xIik7CisgICAgICAgIGFzc2VydFRydWUoc2l0MS5nZXRTZXNzaW9uTGFzdEFjY2Vzc1RpbWUoKSA+IHNpdDEuZ2V0U2Vzc2lvbkNyZWF0aW9uVGltZSgpKTsKKworICAgICAgICBzaXQxLnNldFNlc3Npb25DcmVhdGlvblRpbWUoc2l0MS5nZXRTZXNzaW9uTGFzdEFjY2Vzc1RpbWUoKS0yMDApOworICAgICAgICBhc3NlcnRFcXVhbHMoIHNpdDEuZ2V0U2Vzc2lvbkNyZWF0aW9uVGltZSgpKzIwMCwgc2l0MS5nZXRTZXNzaW9uTGFzdEFjY2Vzc1RpbWUoKSk7CisgICAgICAgIHNpdDEuc2V0VXNlcihudWxsKTsKKyAgICAgICAgYXNzZXJ0TnVsbChzaXQxLmdldFVzZXIoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiSFVHTzEiLCBzaXQxLmdldFNlc3Npb25JZCgpICk7CisgICAgICAgIHNpdDEuc2V0Q29va2llVG9rZW4oIkNhcHRhaW5Db29raWUiKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJDYXB0YWluQ29va2llIiwgc2l0MS5nZXRDb29raWVUb2tlbigpKTsKKworICAgICAgICBUb2tlbk1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2dvdXQoIkhVR08xIik7CisgICAgICAgIGFzc2VydEVxdWFscygyLCByZWdNYXAuc2l6ZSgpKTsKKyAgICAgICAgVG9rZW5NYW5hZ2VyLmdldEluc3RhbmNlKCkubG9nb3V0KCAiRkFLRSIpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVnTWFwLnNpemUoKSk7CisKKworICAgICAgICAvLyBzZXNzaW9uIG91dCBvZiB0aW1lCisgICAgICAgIFRva2VuTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlZnJlc2hTZXNzaW9uSXNBbGl2ZShzcGVjaWFsVG9rZW4uZ2V0QWNjZXNzVG9rZW4oKSwgdHJ1ZSk7CisgICAgICAgIC8vIGZhaWxzIHdpdGggUG9ydGFsVW5hdXRob3JpemVkCisgICAgfQorCisgICAgcHJpdmF0ZSBKd3RUb2tlbiBjcmVhdGVKV1QoU3RyaW5nIGFjY2Vzc1Rva2VuICkgeworICAgICAgICBTdHJpbmcganNvbiA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoIkpXVEFkbWluLmpzb24iKTsKKyAgICAgICAgSnd0VG9rZW4gand0ID0gSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLmZyb21Kc29uKGpzb24sIEp3dFRva2VuLmNsYXNzKTsKKworICAgICAgICBpZiggYWNjZXNzVG9rZW4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIGp3dC5zZXRBY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGp3dDsKKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvZXhjZXB0aW9ucy9Qb3J0YWxFeGNlcHRpb25NYXBwZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEV4Y2VwdGlvbk1hcHBlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTUwNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvZXhjZXB0aW9ucy9Qb3J0YWxFeGNlcHRpb25NYXBwZXJUZXN0LmphdmEKQEAgLTAsMCArMSw1NCBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnM7CisKKworaW1wb3J0IHN0YXRpYyBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uSnNvbkdlbmVyYXRvckJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi51dGlsLlJlc291cmNlTG9hZGVyQmFzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsLkVycm9yUmV0dXJuOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgUG9ydGFsRXhjZXB0aW9uTWFwcGVyVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VG9Kc29uKCkgeworICAgICAgICBTdHJpbmcganNvbiA9IFBvcnRhbEV4Y2VwdGlvbk1hcHBlci50b0pzb24obmV3IFBvcnRhbE5vdEZvdW5kKCJsYWxpbHUiKSk7CisKKyAgICAgICAgRXJyb3JSZXR1cm4gZXIgPSBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oanNvbiwgRXJyb3JSZXR1cm4uY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZXIuZ2V0RXJyb3JDb2RlKCksIDQwNCk7CisgICAgICAgIGFzc2VydEVxdWFscygibGFsaWx1IiwgZXIuZ2V0RXJyb3JUZXh0KCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFVua25vd25FcnJvclRvSnNvbigpIHsKKyAgICAgICAgU3RyaW5nIGpzb24gPSBQb3J0YWxFeGNlcHRpb25NYXBwZXIudW5rbm93bkVycm9yVG9Kc29uKCk7CisKKyAgICAgICAgRXJyb3JSZXR1cm4gZXIgPSBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oanNvbiwgRXJyb3JSZXR1cm4uY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZXIuZ2V0RXJyb3JDb2RlKCksIDUwMCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2VuZXJhbE9LSnNvbigpIHsKKyAgICAgICAgU3RyaW5nIG9rID0gUG9ydGFsRXhjZXB0aW9uTWFwcGVyLmdldEdlbmVyYWxPS0pzb24oKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ7XCJyZXRcIjpcIk9LXCJ9Iiwgb2spOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEdlbmVyYWxFcnJvckpzb24oKSB7CisgICAgICAgIFN0cmluZyBub2sgPSBQb3J0YWxFeGNlcHRpb25NYXBwZXIuZ2V0R2VuZXJhbEVycm9ySnNvbigpOworICAgICAgICBhc3NlcnRFcXVhbHMoIntcInJldFwiOlwiTk9LXCJ9Iiwgbm9rKTsKKyAgICB9CisKKworCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEV4Y2VwdGlvbnNUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9leGNlcHRpb25zL1BvcnRhbEV4Y2VwdGlvbnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkZjE5MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2V4Y2VwdGlvbnMvUG9ydGFsRXhjZXB0aW9uc1Rlc3QuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuZXhjZXB0aW9uczsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uR2xvYmFsczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIFBvcnRhbEV4Y2VwdGlvbnNUZXN0IHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9ycygpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEdsb2JhbHMuSFRUUFNUQVRVU19CQURfUkVRVUVTVCwgbmV3IFBvcnRhbEJhZFJlcXVlc3QoKS5nZXRIdHRwU3RhdHVzKCkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEdsb2JhbHMuSFRUUFNUQVRVU19GT1JCSURERU4sIG5ldyBQb3J0YWxGb3JiaWRkZW4oKS5nZXRIdHRwU3RhdHVzKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoR2xvYmFscy5IVFRQU1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9FUlJPUiwgbmV3IFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IobnVsbCwgbnVsbCkuZ2V0SHR0cFN0YXR1cygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEdsb2JhbHMuSFRUUFNUQVRVU19OT1RfRk9VTkQsIG5ldyBQb3J0YWxOb3RGb3VuZCgpLmdldEh0dHBTdGF0dXMoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhHbG9iYWxzLkhUVFBTVEFUVVNfVU5BVVRIT1JJWkVELCBuZXcgUG9ydGFsVW5hdXRob3JpemVkKCkuZ2V0SHR0cFN0YXR1cygpKTsKKyAgICB9CisKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yczIoKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBleHRleHQgPSAiRXhUZXh0IjsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBQb3J0YWxCYWRSZXF1ZXN0KGV4dGV4dCkuZ2V0TWVzc2FnZSgpLCBleHRleHQpOworICAgICAgICBhc3NlcnRFcXVhbHMobmV3IFBvcnRhbEZvcmJpZGRlbihleHRleHQpLmdldE1lc3NhZ2UoKSwgZXh0ZXh0KTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBQb3J0YWxJbnRlcm5hbFNlcnZlckVycm9yKGV4dGV4dCkuZ2V0TWVzc2FnZSgpLCBleHRleHQpOworICAgICAgICBhc3NlcnRFcXVhbHMobmV3IFBvcnRhbE5vdEZvdW5kKGV4dGV4dCkuZ2V0TWVzc2FnZSgpLCBleHRleHQpOworICAgICAgICBhc3NlcnRFcXVhbHMobmV3IFBvcnRhbFVuYXV0aG9yaXplZChleHRleHQpLmdldE1lc3NhZ2UoKSwgZXh0ZXh0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9oZWFsdGgvYmFzZS9IZWFsdGhDaGVja2VyVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvSGVhbHRoQ2hlY2tlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2FlZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvSGVhbHRoQ2hlY2tlclRlc3QuamF2YQpAQCAtMCwwICsxLDkzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IMKpIDIwMTggUFRBIEdtYkguCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmhlYWx0aC5iYXNlOworCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZS5hc3NlcnRUcnVlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7CisKK3B1YmxpYyBjbGFzcyBIZWFsdGhDaGVja2VyVGVzdCB7CisgICAgcHVibGljIGJvb2xlYW4gaGMxQ2FsbGVkOworICAgIHB1YmxpYyBib29sZWFuIGhjMkNhbGxlZDsKKyAgICBwdWJsaWMgYm9vbGVhbiBoYzNDYWxsZWQ7CisKKyAgICBAQmVmb3JlCisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgaGMxQ2FsbGVkID0gZmFsc2U7CisgICAgICAgIGhjMkNhbGxlZCA9IGZhbHNlOworICAgICAgICBoYzNDYWxsZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3Rfb2soKSB7CisgICAgICAgIEhlYWx0aENoZWNrIGhjMSA9IG5ldyBIZWFsdGhDaGVjaygpIHsKKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwcm90ZWN0ZWQgUmVzdWx0IGNoZWNrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgaGMxQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmhlYWx0aHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBIZWFsdGhDaGVjayBoYzIgPSBuZXcgSGVhbHRoQ2hlY2soKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCBSZXN1bHQgY2hlY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBoYzJDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHQudW5oZWFsdGh5KCJiZWNhdXNlIG9mLi4uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgSGVhbHRoQ2hlY2tlciB0aGVDaGVja2VyID0gbmV3IEhlYWx0aENoZWNrZXIoKTsKKyAgICAgICAgdGhlQ2hlY2tlci5yZWdpc3RlcigiZmlyc3RUZXN0IiwgaGMxICk7CisgICAgICAgIHRoZUNoZWNrZXIucmVnaXN0ZXIoICJzZWNvbmRUZXN0IiwgaGMyICk7CisKKyAgICAgICAgTGlzdDxOYW1lZEhlYWx0aENoZWNrUmVzdWx0PiByZXRMaXN0ID0gdGhlQ2hlY2tlci5wZXJmb3JtSGVhbHRoQ2hlY2tzKCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAyLCByZXRMaXN0LnNpemUoKSApOworICAgICAgICBhc3NlcnRUcnVlKCBoYzFDYWxsZWQgKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSggaGMyQ2FsbGVkICk7CisgICAgICAgIGFzc2VydE51bGwoIHJldExpc3QuZ2V0KDApLmdldFJlc3VsdCgpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwoIHJldExpc3QuZ2V0KDEpLmdldFJlc3VsdCgpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyggImZpcnN0VGVzdCIsIHJldExpc3QuZ2V0KDApLmdldE5hbWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyggInNlY29uZFRlc3QiLCByZXRMaXN0LmdldCgxKS5nZXROYW1lKCkpOworICAgICAgICBhc3NlcnRUcnVlKCByZXRMaXN0LmdldCgwKS5nZXRSZXN1bHQoKS5pc0hlYWx0aHkoKSk7CisgICAgICAgIGFzc2VydEZhbHNlKCByZXRMaXN0LmdldCgxKS5nZXRSZXN1bHQoKS5pc0hlYWx0aHkoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0X25vaygpIHsKKyAgICAgICAgSGVhbHRoQ2hlY2sgaGMxID0gbmV3IEhlYWx0aENoZWNrKCkgeworCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCBSZXN1bHQgY2hlY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBoYzNDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkVycm9yIGluIGhlYWx0aENoZWNrIik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKworICAgICAgICBIZWFsdGhDaGVja2VyIHRoZUNoZWNrZXIgPSBuZXcgSGVhbHRoQ2hlY2tlcigpOworICAgICAgICB0aGVDaGVja2VyLnJlZ2lzdGVyKCJlcnJvclRlc3QiLCBoYzEgKTsKKworICAgICAgICBMaXN0PE5hbWVkSGVhbHRoQ2hlY2tSZXN1bHQ+IHJldExpc3QgPSB0aGVDaGVja2VyLnBlcmZvcm1IZWFsdGhDaGVja3MoKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoIDEsIHJldExpc3Quc2l6ZSgpICk7CisgICAgICAgIGFzc2VydFRydWUoIGhjM0NhbGxlZCApOworICAgICAgICBhc3NlcnROb3ROdWxsKCByZXRMaXN0LmdldCgwKS5nZXRSZXN1bHQoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICBhc3NlcnRGYWxzZSggcmV0TGlzdC5nZXQoMCkuZ2V0UmVzdWx0KCkuaXNIZWFsdGh5KCkpOworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvTmFtZWRIZWFsdGhDaGVja1Jlc3VsdFRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2hlYWx0aC9iYXNlL05hbWVkSGVhbHRoQ2hlY2tSZXN1bHRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNiOTc3MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2hlYWx0aC9iYXNlL05hbWVkSGVhbHRoQ2hlY2tSZXN1bHRUZXN0LmphdmEKQEAgLTAsMCArMSwzNiBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuaGVhbHRoLmJhc2U7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitwdWJsaWMgY2xhc3MgTmFtZWRIZWFsdGhDaGVja1Jlc3VsdFRlc3QgeworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEFsbCgpIHsKKyAgICAgICAgTmFtZWRIZWFsdGhDaGVja1Jlc3VsdCBoMSA9IG5ldyBOYW1lZEhlYWx0aENoZWNrUmVzdWx0KCJVbm8iLCBSZXN1bHQuaGVhbHRoeSgpKTsKKyAgICAgICAgTmFtZWRIZWFsdGhDaGVja1Jlc3VsdCBoMiA9IG5ldyBOYW1lZEhlYWx0aENoZWNrUmVzdWx0KCJEdWUiLCBSZXN1bHQudW5oZWFsdGh5KCJEYXJ1bSIpKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoIlwiVW5vXCI6e1wiaGVhbHRoeVwiOnRydWV9IiwgaDEudG9Kc29uKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIlwiRHVlXCI6e1wiaGVhbHRoeVwiOmZhbHNlLFwibWVzc2FnZVwiOlwiRGFydW1cIn0iLCBoMi50b0pzb24oKSk7CisKKyAgICAgICAgTGlzdDxOYW1lZEhlYWx0aENoZWNrUmVzdWx0PiBsaXN0YSA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKKyAgICAgICAgbGlzdGEuYWRkKGgxKTsKKyAgICAgICAgbGlzdGEuYWRkKGgyKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAie1wiVW5vXCI6e1wiaGVhbHRoeVwiOnRydWV9LFwiRHVlXCI6e1wiaGVhbHRoeVwiOmZhbHNlLFwibWVzc2FnZVwiOlwiRGFydW1cIn19IiwKKyAgICAgICAgICAgICAgICBOYW1lZEhlYWx0aENoZWNrUmVzdWx0LnRvSnNvbihsaXN0YSkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2hlYWx0aC9iYXNlL1Jlc3VsdFRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL2hlYWx0aC9iYXNlL1Jlc3VsdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjA1NmIwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2Jhc2UvUmVzdWx0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmhlYWx0aC5iYXNlOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOworCitwdWJsaWMgY2xhc3MgUmVzdWx0VGVzdCB7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBbGwoKSB7CisgICAgICAgIFJlc3VsdCByZXMxID0gUmVzdWx0LmhlYWx0aHkoKTsKKyAgICAgICAgUmVzdWx0IHJlczIgPSBSZXN1bHQudW5oZWFsdGh5KCJNc2ciKTsKKworICAgICAgICBhc3NlcnRUcnVlKHJlczEuaXNIZWFsdGh5KCkpOworICAgICAgICBhc3NlcnRGYWxzZShyZXMyLmlzSGVhbHRoeSgpKTsKKyAgICAgICAgYXNzZXJ0TnVsbChyZXMxLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwocmVzMi5nZXRNZXNzYWdlKCkpOworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2ltcGwvS2V5Q2xvYWtQcmVzZW50SGVhbHRoQ2hlY2tUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC9oZWFsdGgvaW1wbC9LZXlDbG9ha1ByZXNlbnRIZWFsdGhDaGVja1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWVmMTkwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvaGVhbHRoL2ltcGwvS2V5Q2xvYWtQcmVzZW50SGVhbHRoQ2hlY2tUZXN0LmphdmEKQEAgLTAsMCArMSw0OCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuaGVhbHRoLmltcGw7CisKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5wb3dlcm1vY2sucmVmbGVjdC5XaGl0ZWJveDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK3B1YmxpYyBjbGFzcyBLZXlDbG9ha1ByZXNlbnRIZWFsdGhDaGVja1Rlc3QgeworICAgIHByaXZhdGUgS2V5Q2xvYWtQcmVzZW50SGVhbHRoQ2hlY2sgaGM7CisKKyAgICBAQmVmb3JlCisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgaGMgPSBuZXcgS2V5Q2xvYWtQcmVzZW50SGVhbHRoQ2hlY2soKSB7CisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja2l0OworCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCBib29sZWFuIGNoZWNraXQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNraXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgV2hpdGVib3guc2V0SW50ZXJuYWxTdGF0ZShoYywgImNoZWNraXQiLCB0cnVlKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShoYy5jaGVjaygpLmlzSGVhbHRoeSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3ROb2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgV2hpdGVib3guc2V0SW50ZXJuYWxTdGF0ZShoYywgImNoZWNraXQiLCBmYWxzZSk7CisgICAgICAgIGFzc2VydEZhbHNlKGhjLmNoZWNrKCkuaXNIZWFsdGh5KCkpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdXRpbC9Kd3RIZWxwZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC91dGlsL0p3dEhlbHBlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDA0MzUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdXRpbC9Kd3RIZWxwZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMTggQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLkp3dFBheWxvYWQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLm1vZGVsLkp3dFRva2VuOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi5tb2RlbC5LZXlDbG9ha1JvbGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmF1dGgyLnV0aWwuSnd0SGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24udXRpbC5SZXNvdXJjZUxvYWRlckJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmV4Y2VwdGlvbnMuUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvcjsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZS5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZS5hc3NlcnRUcnVlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBKd3RIZWxwZXJUZXN0IGV4dGVuZHMgUmVzb3VyY2VMb2FkZXJCYXNlIHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEdldEp3dFBheWxvYWRfQmFzZTY0VVJMKCkgeworICAgICAgICAvL1Rva2VuIFByZSA0LjguMyBLZXljbG9haworICAgICAgICBTdHJpbmcgYmFzZTY0dXJsVG9rZW4gPSAiQUEuZXlKcWRHa2lPaUkzTkRWbU9UYzRaaTAwT1RZd0xUUmxPIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldZdFltRmlNUzFqTmpka1pqTXpPREV3WWpRaUxDSmxlSCIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBaU9qRTFNVFl3TVRBeE5Ea3NJbTVpWmlJNk1Dd2lhV0YiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMElqb3hOVEUyTURBNU9EUTVMQ0pwYzNNaU9pSm9kSFJ3IisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9pOHZiRzlqWVd4b2IzTjBPamd3T1RBdllYVjBhQzl5WiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRnNiWE12VFZaV1RtVjBlbVVpTENKaGRXUWlPaUpsYkciKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOW5ZbTl2YXkxaVlXTnJaVzVrSWl3aWMzVmlJam9pTlRrIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjVaV1kzTnpNdE5qUm1ZUzAwTXpNMkxXSXdORGt0TW1FeiIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOamM0TlRFelpUVTRJaXdpZEhsd0lqb2lRbVZoY21WeUkiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXdpWVhwd0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklzSW1GMWRHaGZkR2x0WlNJNk1Dd2ljMlZ6YzJsdmJsOSIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ6ZEdGMFpTSTZJbUUyT0dFNE16TmtMVFJpTlRJdE5EZ3ciKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXkwNU1EVTRMVFJrTmpKaE5tSTNOekkzTUNJc0ltRmpjIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlJNklqRWlMQ0poYkd4dmQyVmtMVzl5YVdkcGJuTWlPbCIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaUtpSmRMQ0p5WldGc2JWOWhZMk5sYzNNaU9uc2ljbTkiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic1pYTWlPbHNpWld4dloySnZiMnN0WVdOalpYTnpJaXdpIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlpXeHZaMkp2YjJzdGJtOXliV0ZzZFhObGNpSXNJblZ0WSIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWOWhkWFJvYjNKcGVtRjBhVzl1SWwxOUxDSnlaWE52ZFgiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmpaVjloWTJObGMzTWlPbnNpWVdOamIzVnVkQ0k2ZXlKIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInliMnhsY3lJNld5SnRZVzVoWjJVdFlXTmpiM1Z1ZENJcyIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbTFoYm1GblpTMWhZMk52ZFc1MExXeHBibXR6SWl3aWQiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWxsZHkxd2NtOW1hV3hsSWwxOWZTd2ljbTlzWlhNaU9pIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpiZFcxaFgyRjFkR2h2Y21sNllYUnBiMjRzSUdWc2IyZCIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpYjI5ckxXRmpZMlZ6Y3l3Z1pXeHZaMkp2YjJzdGJtOXkiKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYldGc2RYTmxjaXdnYjJabWJHbHVaVjloWTJObGMzTmRJIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIml3aWJtRnRaU0k2SWxWM1pTQnliOE9mSWl3aWNISmxabSIrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWeWNtVmtYM1Z6WlhKdVlXMWxJam9pYjNCbGJtdDBaWE4iKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMElpd2laMmwyWlc1ZmJtRnRaU0k2SWxWM1pTSXNJbVpoIisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJXbHNlVjl1WVcxbElqb2ljbV9EbnlKOS5DQyI7CisgICAgICAgIC8vU2luY2UgS2V5Y2xvYWsgNC44LjMgQXVkIFBhcmFtZXRlciBpcyBhbiBhcnJheSBub3cKKyAgICAgICAgYmFzZTY0dXJsVG9rZW4gPSAiZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJZ09pQWlTbGRVSWl3aWEybGtJaUE2SUNKSVJXUTROR2w0VjJ4YVZXazJiV0ZTYTAwNVRrMXdTRWQwYW1SWFJVMXBaR3ROVjBOdmJrOTBVMVpWSW4wLmV5SmxlSEFpT2pFMk1UQTNNell4TkRFc0ltbGhkQ0k2TVRZeE1EY3pOVGcwTVN3aWFuUnBJam9pTkdJd01UTTFOR010TjJObVpDMDBabUV5TFRobU1qUXRZV00wWm1KbFpXWmhOVFprSWl3aWFYTnpJam9pYUhSMGNEb3ZMMnh2WTJGc2FHOXpkRG80TVRnd0wyRjFkR2d2Y21WaGJHMXpMMFZzYjJkaWIyOXJJaXdpWVhWa0lqcGJJbkpsWVd4dExXMWhibUZuWlcxbGJuUWlMQ0poWTJOdmRXNTBJbDBzSW5OMVlpSTZJakF6TkRVME1qSm1MVGswTXpjdE5EVm1ZeTFpTW1ZMExUTmxZVGN3WkRVelkyUTNOQ0lzSW5SNWNDSTZJa0psWVhKbGNpSXNJbUY2Y0NJNkltVnNiMmRpYjI5ckxXSmhZMnRsYm1RaUxDSnpaWE56YVc5dVgzTjBZWFJsSWpvaU5EUmxNV1F4TVRjdFlUVTBNeTAwTldaakxXSmpOVEF0WmpFNU1EWXpaR1ZtT1RrMElpd2lZV055SWpvaU1TSXNJbUZzYkc5M1pXUXRiM0pwWjJsdWN5STZXeUlxSWwwc0luSmxZV3h0WDJGalkyVnpjeUk2ZXlKeWIyeGxjeUk2V3lKbGJHOW5ZbTl2YXkxdWIzSnRZV3gxYzJWeUlpd2ljR3hoYm01bFpDMXdiMnhwWTJsbGN5MXViM0p0WVd4MWMyVnlJaXdpWld4dloySnZiMnN0WVdOalpYTnpJaXdpWld4dloySnZiMnN0YzNWd1pYSjFjMlZ5SWl3aWEyOXVMV0ZrYldsdUlpd2laM0pwWkMxbVlXbHNkWEpsTFdGalkyVnpjeUlzSW05bVpteHBibVZmWVdOalpYTnpJaXdpYTI5dUxXRmpZMlZ6Y3lJc0ltZHlhV1F0Wm1GcGJIVnlaUzFoWkcxcGJpSXNJbkJzWVc1dVpXUXRjRzlzYVdOcFpYTXRZV05qWlhOeklpd2ljR3hoYm01cGJtY3RZV05qWlhOeklpd2lkVzFoWDJGMWRHaHZjbWw2WVhScGIyNGlMQ0p3YkdGdWJtVmtMWEJ2YkdsamFXVnpMWE4xY0dWeWRYTmxjaUpkZlN3aWNtVnpiM1Z5WTJWZllXTmpaWE56SWpwN0luSmxZV3h0TFcxaGJtRm5aVzFsYm5RaU9uc2ljbTlzWlhNaU9sc2lkbWxsZHkxMWMyVnljeUlzSW5GMVpYSjVMV2R5YjNWd2N5SXNJbkYxWlhKNUxYVnpaWEp6SWwxOUxDSmhZMk52ZFc1MElqcDdJbkp2YkdWeklqcGJJbTFoYm1GblpTMWhZMk52ZFc1MElpd2liV0Z1WVdkbExXRmpZMjkxYm5RdGJHbHVhM01pTENKMmFXVjNMWEJ5YjJacGJHVWlYWDE5TENKelkyOXdaU0k2SW1WdFlXbHNJSEJ5YjJacGJHVWlMQ0psYldGcGJGOTJaWEpwWm1sbFpDSTZabUZzYzJVc0ltNWhiV1VpT2lKQlpHMXBiaUJUZEhKaGRHOXlJaXdpY0hKbFptVnljbVZrWDNWelpYSnVZVzFsSWpvaVlXUnRhVzRpTENKbmFYWmxibDl1WVcxbElqb2lRV1J0YVc0aUxDSm1ZVzFwYkhsZmJtRnRaU0k2SWxOMGNtRjBiM0lpZlEuc3o1bk9aWkR3REhVUy1XTHp4MUtYX0tHVGlXR3VXVGlzUl9iYkh5UmVlWEp5TWVmTDZwbmdZd0ZfUXQwRVBrMWcwcnFtcWRoVE44LTVJYVNyd08xbjBSbVpyV0xnMTluMVFuamtBczZlYkY4NFVMMDduNUVFRkpLaDBsdXlXT0tiX0VXOEpacHdScExoYWlXVEc2S2RYbk9VNlZreEoteFgwbmNtckhTOE1ZRGhfdTFMaElVUG51NDN0cm4wakpXb05BdUhIVk1ZMHJocFhOYVpxYzNScThpSTNWeWU4N1l2czgzaktUajVkMXJIc0ZUcmthUnQ1MWJnaS0yTUw2SVphOUd4SWJDWXJvSFo3SWR1ZTAwamlzV1B6bVlVN0Ytd09wQVNCQ2xCRHN3ZVR3Ulk5RGdyX3lqck1ucy0xS1hmWXd0dDRCVEVjMElNS2ZYNWduZVNnIjsKKyAgICAgICAgLy8gdGhpcyBwYXlsb2FkIGNvbnRhaW5zIGEgY2hhciB3aXRoIGlzIHZhbGlkIGluIEJhc2U2NFVSTCBidXQgTk9UIGluIEJhc2U2NC4KKyAgICAgICAgSnd0VG9rZW4ganQgPSBuZXcgSnd0VG9rZW4oKTsKKyAgICAgICAganQuc2V0QWNjZXNzVG9rZW4oYmFzZTY0dXJsVG9rZW4pOworICAgICAgICBKd3RQYXlsb2FkIHBsID0gSnd0SGVscGVyLmdldFBheUxvYWQoanQpOworICAgICAgICBhc3NlcnROb3ROdWxsKCBwbCApOworCisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0Um9sZXNMaXN0RnJvbUpzb25fdGVzdEtleUNsb2FrUm9sZXNfbm9DbGllbnRSb2xlQXRBbGwoKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgICAgIFN0cmluZyBqc29uS2V5Q2xvYWtSb2xlcyA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoInRlc3RLZXlDbG9ha1JvbGVzX25vQ2xpZW50Um9sZUF0QWxsLmpzb24iKTsKKyAgICAgICAgTGlzdDxLZXlDbG9ha1JvbGU+IGtleUNsb2FrUm9sZXNMaXN0ID0gSnd0SGVscGVyLmdldFJvbGVzTGlzdEZyb21Kc29uKGpzb25LZXlDbG9ha1JvbGVzKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoImVsb2dib29rLWFjY2VzcyIsIGtleUNsb2FrUm9sZXNMaXN0LmdldCgwKS5nZXROYW1lKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwga2V5Q2xvYWtSb2xlc0xpc3Quc2l6ZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRSb2xlc0xpc3RGcm9tSnNvbl90ZXN0S2V5Q2xvYWtSb2xlc19ub0NsaWVudFJvbGVGb3JDbGllbnQoKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgICAgIFN0cmluZyBqc29uS2V5Q2xvYWtSb2xlcyA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoInRlc3RLZXlDbG9ha1JvbGVzX25vQ2xpZW50Um9sZUZvckNsaWVudC5qc29uIik7CisgICAgICAgIExpc3Q8S2V5Q2xvYWtSb2xlPiBrZXlDbG9ha1JvbGVzTGlzdCA9IEp3dEhlbHBlci5nZXRSb2xlc0xpc3RGcm9tSnNvbihqc29uS2V5Q2xvYWtSb2xlcyk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJlbG9nYm9vay1hY2Nlc3MiLCBrZXlDbG9ha1JvbGVzTGlzdC5nZXQoMCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGtleUNsb2FrUm9sZXNMaXN0LnNpemUoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0Um9sZXNMaXN0RnJvbUpzb25fdGVzdEtleUNsb2FrUm9sZXNfbm9SZWFsbVJvbGUoKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgICAgIFN0cmluZyBqc29uS2V5Q2xvYWtSb2xlcyA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoInRlc3RLZXlDbG9ha1JvbGVzX25vUmVhbG1Sb2xlLmpzb24iKTsKKyAgICAgICAgTGlzdDxLZXlDbG9ha1JvbGU+IGtleUNsb2FrUm9sZXNMaXN0ID0gSnd0SGVscGVyLmdldFJvbGVzTGlzdEZyb21Kc29uKGpzb25LZXlDbG9ha1JvbGVzKTsKKworICAgICAgICBhc3NlcnRUcnVlKGtleUNsb2FrUm9sZXNMaXN0LmlzRW1wdHkoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0Um9sZXNMaXN0RnJvbUpzb25fdGVzdEtleUNsb2FrUm9sZXNfb25seUNsaWVudFJvbGUoKSB0aHJvd3MgUG9ydGFsSW50ZXJuYWxTZXJ2ZXJFcnJvciB7CisgICAgICAgIFN0cmluZyBqc29uS2V5Q2xvYWtSb2xlcyA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoInRlc3RLZXlDbG9ha1JvbGVzX29ubHlDbGllbnRSb2xlLmpzb24iKTsKKyAgICAgICAgTGlzdDxLZXlDbG9ha1JvbGU+IGtleUNsb2FrUm9sZXNMaXN0ID0gSnd0SGVscGVyLmdldFJvbGVzTGlzdEZyb21Kc29uKGpzb25LZXlDbG9ha1JvbGVzKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoInZpZXctcHJvZmlsZSIsIGtleUNsb2FrUm9sZXNMaXN0LmdldCgwKS5nZXROYW1lKCkpOworICAgICAgICBhc3NlcnRUcnVlKGtleUNsb2FrUm9sZXNMaXN0LmdldCgwKS5nZXRDbGllbnRSb2xlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwga2V5Q2xvYWtSb2xlc0xpc3Quc2l6ZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRSb2xlc0xpc3RGcm9tSnNvbl90ZXN0S2V5Q2xvYWtSb2xlc19zYW1lQ2xpZW50UmVhbG1Sb2xlKCkgdGhyb3dzIFBvcnRhbEludGVybmFsU2VydmVyRXJyb3IgeworICAgICAgICBTdHJpbmcganNvbktleUNsb2FrUm9sZXMgPSBzdXBlci5sb2FkU3RyaW5nRnJvbVJlc291cmNlKCJ0ZXN0S2V5Q2xvYWtSb2xlc19zYW1lQ2xpZW50UmVhbG1Sb2xlLmpzb24iKTsKKyAgICAgICAgTGlzdDxLZXlDbG9ha1JvbGU+IGtleUNsb2FrUm9sZXNMaXN0ID0gSnd0SGVscGVyLmdldFJvbGVzTGlzdEZyb21Kc29uKGpzb25LZXlDbG9ha1JvbGVzKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoImVsb2dib29rLWFjY2VzcyIsIGtleUNsb2FrUm9sZXNMaXN0LmdldCgwKS5nZXROYW1lKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoNCwga2V5Q2xvYWtSb2xlc0xpc3Quc2l6ZSgpKTsKKyAgICB9CisKKworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL0Vycm9yUmV0dXJuVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL0Vycm9yUmV0dXJuVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YmEzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvRXJyb3JSZXR1cm5UZXN0LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbDsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkpzb25HZW5lcmF0b3JCYXNlLmdldEdzb247CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi51dGlsLlJlc291cmNlTG9hZGVyQmFzZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIEVycm9yUmV0dXJuVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisJLy8gSU1QT1JUQU5UIFRFU1QhISEKKwkvLyBNYWtlIHN1cmUsIG91ciBJbnRlcmZhY2UgcHJvZHVjZXMgYSBERUZJTkVEIEpzb24hCisJLy8gQ2hhbmdlcyBpbiB0aGUgaW50ZXJmYWNlIHdpbGwgSE9QRUZVTExZIGNyYXNoIGhlcmUhISEKKworCUBUZXN0CisJcHVibGljIHZvaWQgVGVzdFN0cnVjdHVyZUFnYWluc3RKc29uKCkgeworCQlTdHJpbmcganNvbiA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoInRlc3RFcnJvclJldHVybi5qc29uIik7CisJCUVycm9yUmV0dXJuIGVyclJldCA9IGdldEdzb24oKS5mcm9tSnNvbihqc29uLCBFcnJvclJldHVybi5jbGFzcyk7CisJCWFzc2VydEZhbHNlKGVyclJldC5nZXRFcnJvclRleHQoKS5pc0VtcHR5KCkpOworCQlhc3NlcnRFcXVhbHMoOTk5LCBlcnJSZXQuZ2V0RXJyb3JDb2RlKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgVGVzdFNldHRlcnMoKSB7CisJCUVycm9yUmV0dXJuIGVyclJldCA9IG5ldyBFcnJvclJldHVybigpOworCQllcnJSZXQuc2V0RXJyb3JDb2RlKDEpOworCQllcnJSZXQuc2V0RXJyb3JUZXh0KCJibGEgYmxhIik7CisJfQorCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvR2VuZXJhbFJldHVybkl0ZW1UZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvR2VuZXJhbFJldHVybkl0ZW1UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3Y2Q3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9HZW5lcmFsUmV0dXJuSXRlbVRlc3QuamF2YQpAQCAtMCwwICsxLDQyIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkpzb25HZW5lcmF0b3JCYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24udXRpbC5SZXNvdXJjZUxvYWRlckJhc2U7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBHZW5lcmFsUmV0dXJuSXRlbVRlc3QgZXh0ZW5kcyBSZXNvdXJjZUxvYWRlckJhc2UgeworCS8vIElNUE9SVEFOVCBURVNUISEhCisJLy8gTWFrZSBzdXJlLCBvdXIgSW50ZXJmYWNlIHByb2R1Y2VzIGEgREVGSU5FRCBKc29uIQorCS8vIENoYW5nZXMgaW4gdGhlIGludGVyZmFjZSB3aWxsIEhPUEVGVUxMWSBjcmFzaCBoZXJlISEhCisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIFRlc3RTdHJ1Y3R1cmVBZ2FpbnN0SnNvbigpIHsKKwkJU3RyaW5nIGpzb24gPSBzdXBlci5sb2FkU3RyaW5nRnJvbVJlc291cmNlKCJ0ZXN0R2VuZXJhbFJldHVybkl0ZW0uanNvbiIpOworCQlHZW5lcmFsUmV0dXJuSXRlbSBnUlJldCA9IEpzb25HZW5lcmF0b3JCYXNlLmdldEdzb24oKS5mcm9tSnNvbihqc29uLCBHZW5lcmFsUmV0dXJuSXRlbS5jbGFzcyk7CisJCWFzc2VydEVxdWFscygiSXQgd29ya3MhIiwgZ1JSZXQuZ2V0UmV0KCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgVGVzdFNldHRlcnMoKSB7CisJCUdlbmVyYWxSZXR1cm5JdGVtIGdyaSA9IG5ldyBHZW5lcmFsUmV0dXJuSXRlbSgiZmlyc3RTdHJpa2UiKTsKKwkJYXNzZXJ0VHJ1ZSgiZmlyc3RTdHJpa2UiLmVxdWFscyhncmkuZ2V0UmV0KCkpKTsKKwkJZ3JpLnNldFJldCgiUmV0b3VyIik7CisJCWFzc2VydFRydWUoIlJldG91ciIuZXF1YWxzKGdyaS5nZXRSZXQoKSkpOworCisJfQorCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvTG9naW5DcmVkZW50aWFsc1Rlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9Mb2dpbkNyZWRlbnRpYWxzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YWQ0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvTG9naW5DcmVkZW50aWFsc1Rlc3QuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLkpzb25HZW5lcmF0b3JCYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24udXRpbC5SZXNvdXJjZUxvYWRlckJhc2U7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBMb2dpbkNyZWRlbnRpYWxzVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVBZ2FpbnN0SnNvbigpIHsKKwkJU3RyaW5nIGpzb24gPSBzdXBlci5sb2FkU3RyaW5nRnJvbVJlc291cmNlKCJ0ZXN0TG9naW5DcmVkZW50aWFscy5qc29uIik7CisJCUxvZ2luQ3JlZGVudGlhbHMgbGMgPSBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oanNvbiwgTG9naW5DcmVkZW50aWFscy5jbGFzcyk7CisJCWFzc2VydEVxdWFscygiQ2FybG8iLCBsYy5nZXRVc2VyTmFtZSgpICk7CisJCWFzc2VydEVxdWFscygiQ290dHVyYSIsIGxjLmdldFBhc3N3b3JkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFNldHRlcnMoKSB7CisJCUxvZ2luQ3JlZGVudGlhbHMgbGMgPSBuZXcgTG9naW5DcmVkZW50aWFscygpOworCQlsYy5zZXRQYXNzd29yZCgicHdkIik7CisJCWFzc2VydFRydWUoInB3ZCIuZXF1YWxzKGxjLmdldFBhc3N3b3JkKCkpKTsKKwkJbGMuc2V0VXNlck5hbWUoInVzciIpOworCQlhc3NlcnRUcnVlKCJ1c3IiLmVxdWFscyhsYy5nZXRVc2VyTmFtZSgpKSk7CisJfQorCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvVXNlckF1dGhlbnRpY2F0aW9uVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1VzZXJBdXRoZW50aWNhdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmVjMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1VzZXJBdXRoZW50aWNhdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE4IFBUQSBHbWJILgorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorKiAKKyogICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisqIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwudmlld21vZGVsOworCisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5Kc29uR2VuZXJhdG9yQmFzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2FkZXJCYXNlOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgVXNlckF1dGhlbnRpY2F0aW9uVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVBZ2FpbnN0SnNvbigpIHsKKyAgICAgICAgU3RyaW5nIGpzb24gPSBzdXBlci5sb2FkU3RyaW5nRnJvbVJlc291cmNlKCJ0ZXN0VXNlckF1dGhlbnRpY2F0aW9uLmpzb24iKTsKKyAgICAgICAgVXNlckF1dGhlbnRpY2F0aW9uIHVhID0gSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLmZyb21Kc29uKGpzb24sIFVzZXJBdXRoZW50aWNhdGlvbi5jbGFzcyk7CisgICAgICAgIGFzc2VydFRydWUodWEuZ2V0SWQoKSA9PSAxICk7CisgICAgICAgIGFzc2VydFRydWUodWEuZ2V0VXNlcm5hbWUoKS5lcXVhbHMoIlBlZHJvIikpOworICAgICAgICBhc3NlcnRUcnVlKHVhLmdldFBhc3N3b3JkKCkuZXF1YWxzKCJwd2QiKSk7CisgICAgICAgIGFzc2VydFRydWUodWEuZ2V0TmFtZSgpLmVxdWFscygiUGVkcm8gUGVwaXRvIFNhbmNoZXoiKSk7CisgICAgICAgIGFzc2VydEZhbHNlKHVhLmlzU3BlY2lhbFVzZXIoKSk7CisgICAgICAgIGFzc2VydFRydWUodWEuaXNTZWxlY3RlZCgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTZXR0ZXJzKCkgeworICAgICAgICBVc2VyQXV0aGVudGljYXRpb24gdWEgPSBuZXcgVXNlckF1dGhlbnRpY2F0aW9uKCk7CisgICAgICAgIHVhLnNldElkKDEpOworICAgICAgICB1YS5zZXROYW1lKCJWYW1vcy1OYW1vcyIpOworICAgICAgICB1YS5zZXRQYXNzd29yZCgicGFzc29wb3J0byIpOworICAgICAgICB1YS5zZXRVc2VybmFtZSgiVk5BTU9TIik7CisgICAgICAgIHVhLnNldFNwZWNpYWxVc2VyKHRydWUpOworICAgICAgICB1YS5zZXRTZWxlY3RlZCh0cnVlKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvcG9ydGFsL3ZpZXdtb2RlbC9Vc2VyQ2FjaGVUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvVXNlckNhY2hlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTRjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvVXNlckNhY2hlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCDCqSAyMDE3LTIwMTggUFRBIEdtYkguCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisqIAorKiAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyogCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC52aWV3bW9kZWw7CisKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5hdXRoMi5tb2RlbC5LZXlDbG9ha1VzZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi5Kc29uR2VuZXJhdG9yQmFzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5wb3J0YWwuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2FkZXJCYXNlOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgVXNlckNhY2hlVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisgICAgLy8gSU1QT1JUQU5UIFRFU1QhISEKKyAgICAvLyBNYWtlIHN1cmUsIG91ciBJbnRlcmZhY2UgcHJvZHVjZXMgYSBERUZJTkVEIEpzb24hCisgICAgLy8gQ2hhbmdlcyBpbiB0aGUgaW50ZXJmYWNlIHdpbGwgSE9QRUZVTExZIGNyYXNoIGhlcmUhISEKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFN0cnVjdHVyZUFnYWluc3RKc29uQW5kU2V0dGVyc0FuZEdldHRlcnMoKSB7CisgICAgICAgIFN0cmluZyBqc29uID0gc3VwZXIubG9hZFN0cmluZ0Zyb21SZXNvdXJjZSgidGVzdEtleUNsb2FrVXNlcnMuanNvbiIpOworICAgICAgICBLZXlDbG9ha1VzZXJbXSBrZXlDbG9ha1VzZXJzID0gSnNvbkdlbmVyYXRvckJhc2UuZ2V0R3NvbigpLmZyb21Kc29uKGpzb24sIEtleUNsb2FrVXNlcltdLmNsYXNzKTsKKyAgICAgICAgTGlzdDxLZXlDbG9ha1VzZXI+IGtleUNsb2FrVXNlcnNMaXN0ID0gbmV3IEFycmF5TGlzdDw+KEFycmF5cy5hc0xpc3Qoa2V5Q2xvYWtVc2VycykpOworICAgICAgICBVc2VyQ2FjaGUgdWMgPSBVc2VyQ2FjaGUuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgdWMuc2V0S2V5Q2xvYWtVc2VycyhrZXlDbG9ha1VzZXJzTGlzdCk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZShrZXlDbG9ha1VzZXJzLmxlbmd0aCA9PSAzKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSh1Yy5nZXRLZXlDbG9ha1VzZXJzKCkuZ2V0KDApLmdldEZpcnN0TmFtZSgpLmVxdWFscygiQWRtaW5pc3RyYXRvciIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSh1Yy5nZXRLZXlDbG9ha1VzZXJzKCkuZ2V0KDIpLmdldFVzZXJuYW1lKCkuZXF1YWxzKCJvdHRvIikpOworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1VzZXJNb2R1bGVUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvVXNlck1vZHVsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWYxM2VmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1VzZXJNb2R1bGVUZXN0LmphdmEKQEAgLTAsMCArMSwzNiBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbDsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitwdWJsaWMgY2xhc3MgVXNlck1vZHVsZVRlc3QgeworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9kdWxlQ29uZmlnUHJvZHVjdGlvbigpIHsKKyAgICAgICAgVXNlck1vZHVsZVtdIHVtID0gVXNlck1vZHVsZS5nZXRJbnN0YW5jZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoICJCZXRyaWVic3RhZ2VidWNoIGxvY2FsIDQyMDAiLCB1bVswXS5nZXRNb2R1bGVOYW1lKCkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAiI2ZmZmZmZiIsIHVtWzBdLmdldENvbG9yKCkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAxLCAobG9uZyl1bVswXS5nZXRDb2xzKCkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAxLCAobG9uZyl1bVswXS5nZXRSb3dzKCkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAiaHR0cDovL2xvY2FsaG9zdDo0MjAwLyIsIHVtWzBdLmdldExpbmsoKSApOworICAgICAgICBhc3NlcnRFcXVhbHMoICJodHRwczovL3d3dy5vcGVua29uc2VxdWVuei5kZS9tZWRpZW4vY2FjaGUvbWFpbl9pbWFnZS9tX2xvZ2J1Y2hfMjQ0MzYzNi5qcGciLCB1bVswXS5nZXRQaWN0dXJlTGluaygpICk7CisgICAgICAgIGFzc2VydEVxdWFscyggImVsb2dib29rLWFjY2VzcyIsIHVtWzBdLmdldFJlcXVpcmVkUm9sZSgpICk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAibW9kdWxlQ29uZmlnRGV2TG9jYWwuanNvbiIsIFVzZXJNb2R1bGUuZ2V0Q29uZmlnRmlsZU5hbWUoKSk7CisgICAgICAgIFVzZXJNb2R1bGUuc2V0Q29uZmlnRmlsZU5hbWUoIm1vZHVsZUNvbmZpZ0RldkxvY2FsLmpzb24iKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAibW9kdWxlQ29uZmlnRGV2TG9jYWwuanNvbiIsIFVzZXJNb2R1bGUuZ2V0Q29uZmlnRmlsZU5hbWUoKSApOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1ZlcnNpb25JbmZvVGVzdC5qYXZhIGIvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9wb3J0YWwvdmlld21vZGVsL1ZlcnNpb25JbmZvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjQ3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL3BvcnRhbC92aWV3bW9kZWwvVmVyc2lvbkluZm9UZXN0LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IMKpIDIwMTctMjAxOCBQVEEgR21iSC4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyogCisqICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorKiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLnZpZXdtb2RlbDsKKworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLnBvcnRhbC5jb21tb24uSnNvbkdlbmVyYXRvckJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsucG9ydGFsLmNvbW1vbi51dGlsLlJlc291cmNlTG9hZGVyQmFzZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIFZlcnNpb25JbmZvVGVzdCBleHRlbmRzIFJlc291cmNlTG9hZGVyQmFzZSB7CisgICAgLy8gSU1QT1JUQU5UIFRFU1QhISEKKyAgICAvLyBNYWtlIHN1cmUsIG91ciBJbnRlcmZhY2UgcHJvZHVjZXMgYSBERUZJTkVEIEpzb24hCisgICAgLy8gQ2hhbmdlcyBpbiB0aGUgaW50ZXJmYWNlIHdpbGwgSE9QRUZVTExZIGNyYXNoIGhlcmUhISEKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFN0cnVjdHVyZUFnYWluc3RKc29uKCkgeworICAgICAgICBTdHJpbmcganNvbiA9IHN1cGVyLmxvYWRTdHJpbmdGcm9tUmVzb3VyY2UoIlZlcnNpb25JbmZvLmpzb24iKTsKKyAgICAgICAgVmVyc2lvbkluZm8gdmkgPSBKc29uR2VuZXJhdG9yQmFzZS5nZXRHc29uKCkuZnJvbUpzb24oanNvbiwgVmVyc2lvbkluZm8uY2xhc3MpOworCisgICAgICAgIGFzc2VydFRydWUodmkuZ2V0QmFja2VuZFZlcnNpb24oKS5lcXVhbHMoIjB4LjB4Lnh4IikpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFNldHRlcnMoKSB7CisgICAgICAgIFZlcnNpb25JbmZvIHZpID0gbmV3IFZlcnNpb25JbmZvKCk7CisKKyAgICAgICAgdmkuc2V0QmFja2VuZFZlcnNpb24oIjIyMiIpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVzb3VyY2VzL0pXVEFkbWluLmpzb24gYi9zcmMvdGVzdC9yZXNvdXJjZXMvSldUQWRtaW4uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE2NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVzb3VyY2VzL0pXVEFkbWluLmpzb24KQEAgLTAsMCArMSw4IEBACit7CisgICJhY2Nlc3NfdG9rZW4iOiAiZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJZ09pQWlTbGRVSWl3aWEybGtJaUE2SUNKb2RWbDBlVkJ5VUVWTFExcGhZM0ZmTVc1c09HWnNjRU5FVG5GSGRtWkVaSGN0WVV4R1FYTm9XSFpWSW4wLmV5SnFkR2tpT2lJNFptWTVOVGxoWkMwMk9EUTFMVFJsT0dFdFlqUmlZaTAyT0RRMFlqQXdNalUwWmpnaUxDSmxlSEFpT2pFMU1EWTJNREEwTlRBc0ltNWlaaUk2TUN3aWFXRjBJam94TlRBMk5qQXdNVFV3TENKcGMzTWlPaUpvZEhSd09pOHZaVzUwYW1GMllUQXdNam80TURnd0wyRjFkR2d2Y21WaGJHMXpMMlZzYjJkaWIyOXJJaXdpWVhWa0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDSXNJbk4xWWlJNklqTTFPV1ZtT1dNNUxUYzNaR1l0TkdFelpDMWhPV001TFdZNU5tUTRNemRrTW1RMU55SXNJblI1Y0NJNklrSmxZWEpsY2lJc0ltRjZjQ0k2SW1Wc2IyZGliMjlyTFdKaFkydGxibVFpTENKaGRYUm9YM1JwYldVaU9qQXNJbk5sYzNOcGIyNWZjM1JoZEdVaU9pSTVOalZtTnpNMU1TMHlaVGhpTFRRMU1qZ3RPV1l6WkMxbFpUWXlPRE5oT1RWaU1UWWlMQ0poWTNJaU9pSXhJaXdpWVd4c2IzZGxaQzF2Y21sbmFXNXpJanBiSWlvaVhTd2ljbVZoYkcxZllXTmpaWE56SWpwN0luSnZiR1Z6SWpwYkltVnNiMmRpYjI5ckxYTjFjR1Z5ZFhObGNpSXNJbVZzYjJkaWIyOXJMVzV2Y20xaGJIVnpaWElpTENKMWJXRmZZWFYwYUc5eWFYcGhkR2x2YmlKZGZTd2ljbVZ6YjNWeVkyVmZZV05qWlhOeklqcDdJbkpsWVd4dExXMWhibUZuWlcxbGJuUWlPbnNpY205c1pYTWlPbHNpZG1sbGR5MTFjMlZ5Y3lJc0luRjFaWEo1TFdkeWIzVndjeUlzSW5GMVpYSjVMWFZ6WlhKeklsMTlMQ0poWTJOdmRXNTBJanA3SW5KdmJHVnpJanBiSW0xaGJtRm5aUzFoWTJOdmRXNTBJaXdpYldGdVlXZGxMV0ZqWTI5MWJuUXRiR2x1YTNNaUxDSjJhV1YzTFhCeWIyWnBiR1VpWFgxOUxDSnVZVzFsSWpvaVFXUnRhVzVwYzNSeVlYUnZjaUJCWkcxcGJtbHpkSEpoZEc5M2FXTm9JaXdpY0hKbFptVnljbVZrWDNWelpYSnVZVzFsSWpvaVlXUnRhVzRpTENKbmFYWmxibDl1WVcxbElqb2lRV1J0YVc1cGMzUnlZWFJ2Y2lJc0ltWmhiV2xzZVY5dVlXMWxJam9pUVdSdGFXNXBjM1J5WVhSdmQybGphQ0lzSW1WdFlXbHNJam9pYzJWeVoyVnFMbXRsY201QWNIUmhMbVJsSWl3aWNtOXNaWE4wWlhOMElqb2lXMlZzYjJkaWIyOXJMWE4xY0dWeWRYTmxjaXdnWld4dloySnZiMnN0Ym05eWJXRnNkWE5sY2l3Z2RXMWhYMkYxZEdodmNtbDZZWFJwYjI0c0lHOW1abXhwYm1WZllXTmpaWE56TENCMWJXRmZZWFYwYUc5eWFYcGhkR2x2Yml3Z1pXeHZaMkp2YjJzdGJtOXliV0ZzZFhObGNsMGlmUS5vOTRCbDQzb3F5TE56WlJBQnZJcTl6LVhJOEpRanFqMkZTRGRVVUVaR1pQVE40dXdENWZ5aTBzT05iRHhtVEZ2Z1dQaF84WmhYNnRsREdpdXBWREJZNGVSSDQzRWV0dG0tdDRDRGF1TDdGekIzdzNkRFBGTUI1RGhQNHJycGtfa0FUd25ZMk5LTFJiZXF1bmg4WjZ3TFhqY21RTkxncmdrblhCX2dvZ1dBcUgyOWRxS2V4d2NlTU5JYnEta2phZUxzbUhTWE05VEU5cTdfTG45ZWwwNE9sa3BPVnNwVmd1ZWRmSU5jTkZnMERtWUxKV3lEMk9Sa09ITG1ZaWdONllueUI5UDJORk9uS0dsTHVRODdHam9zSTAwekJuaVJHaTNQaEU5TkdkNTFRZ2dkYmNzbTBhTThHaU1hWjdTTzVpOGlRV0wxMFRSRlJGeVRFZnk2aFNPOGciLAorICAicmVmcmVzaF90b2tlbiI6ICJleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaVNsZFVJaXdpYTJsa0lpQTZJQ0pvZFZsMGVWQnlVRVZMUTFwaFkzRmZNVzVzT0dac2NFTkVUbkZIZG1aRVpIY3RZVXhHUVhOb1dIWlZJbjAuZXlKcWRHa2lPaUpsWm1ObU56RXhOUzA0WXpSaUxUUXpabVF0T0dNMFpTMHhOalZoWVRWbU0yWmhaREVpTENKbGVIQWlPakUxTURZMk1ERTVOVEFzSW01aVppSTZNQ3dpYVdGMElqb3hOVEEyTmpBd01UVXdMQ0pwYzNNaU9pSm9kSFJ3T2k4dlpXNTBhbUYyWVRBd01qbzRNRGd3TDJGMWRHZ3ZjbVZoYkcxekwyVnNiMmRpYjI5cklpd2lZWFZrSWpvaVpXeHZaMkp2YjJzdFltRmphMlZ1WkNJc0luTjFZaUk2SWpNMU9XVm1PV001TFRjM1pHWXROR0V6WkMxaE9XTTVMV1k1Tm1RNE16ZGtNbVExTnlJc0luUjVjQ0k2SWxKbFpuSmxjMmdpTENKaGVuQWlPaUpsYkc5blltOXZheTFpWVdOclpXNWtJaXdpWVhWMGFGOTBhVzFsSWpvd0xDSnpaWE56YVc5dVgzTjBZWFJsSWpvaU9UWTFaamN6TlRFdE1tVTRZaTAwTlRJNExUbG1NMlF0WldVMk1qZ3pZVGsxWWpFMklpd2ljbVZoYkcxZllXTmpaWE56SWpwN0luSnZiR1Z6SWpwYkltVnNiMmRpYjI5ckxYTjFjR1Z5ZFhObGNpSXNJbVZzYjJkaWIyOXJMVzV2Y20xaGJIVnpaWElpTENKMWJXRmZZWFYwYUc5eWFYcGhkR2x2YmlKZGZTd2ljbVZ6YjNWeVkyVmZZV05qWlhOeklqcDdJbkpsWVd4dExXMWhibUZuWlcxbGJuUWlPbnNpY205c1pYTWlPbHNpZG1sbGR5MTFjMlZ5Y3lJc0luRjFaWEo1TFdkeWIzVndjeUlzSW5GMVpYSjVMWFZ6WlhKeklsMTlMQ0poWTJOdmRXNTBJanA3SW5KdmJHVnpJanBiSW0xaGJtRm5aUzFoWTJOdmRXNTBJaXdpYldGdVlXZGxMV0ZqWTI5MWJuUXRiR2x1YTNNaUxDSjJhV1YzTFhCeWIyWnBiR1VpWFgxOWZRLnJOMWY0aDl0MS1zSFcyRVhwdllzM1NwbzhaeGUxLXFOdUxXQ2dPd0Q2RTNsX3pEd2RIT2xQeEp3bFBMd3dlUTJ1dUhpMS1ibGs4ME9kZ29EdWVEc2xFM3RDZGt5Z181bFhPWEdfalZ3cWdJRjhxUDJLVGx6OWdqaEpCd0JKOTRZc0hZVjJ3d3k4anZUbVVrMTA4RlZ6RVlCdkFITDdLTXpvRC1CSl80UXhMaEx1VXZoTzdJMi14UDlzTlJuVUdfNHhPclhsMjJXaFFRVk52V0JXTDA3NlRPU2RCc25vOC0xb2g0eldyWHNiUmFfaUExR3lEUV9RTTVDcGYxMVdFNnRmdlRESnNFSFRfNkdCUThxejhGV1NoNFBfWXRWRFRPWlpoRGJiZGRkRmVaUG5RZHhrTFdYQmhwRF9qdzhKdXVFMXFSX3JBVXl0V2RKcFNqejJWOTBtUSIsCisgICJ0b2tlbl90eXBlIjogImJlYXJlciIsCisgICJzZXNzaW9uX3N0YXRlIjogIjk2NWY3MzUxLTJlOGItNDUyOC05ZjNkLWVlNjI4M2E5NWIxNiIsCisgICJleHBpcmVzX2luIjogMzAwLAorICAicmVmcmVzaF9leHBpcmVzX2luIjogMTgwMAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVzb3VyY2VzL1ZlcnNpb25JbmZvLmpzb24gYi9zcmMvdGVzdC9yZXNvdXJjZXMvVmVyc2lvbkluZm8uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTUxMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVzb3VyY2VzL1ZlcnNpb25JbmZvLmpzb24KQEAgLTAsMCArMSwzIEBACit7CisgICJiYWNrZW5kVmVyc2lvbiI6ICIweC4weC54eCIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEVycm9yUmV0dXJuLmpzb24gYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEVycm9yUmV0dXJuLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1NDBhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0RXJyb3JSZXR1cm4uanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgImVycm9yVGV4dCI6ICJURVNUQVQiLAorICAiZXJyb3JDb2RlIjogOTk5Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEdlbmVyYWxSZXR1cm5JdGVtLmpzb24gYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEdlbmVyYWxSZXR1cm5JdGVtLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmOWQzOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0R2VuZXJhbFJldHVybkl0ZW0uanNvbgpAQCAtMCwwICsxLDMgQEAKK3sKKyAgInJldCIgOiAiSXQgd29ya3MhIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0S2V5Q2xvYWtDbGllbnRBbmRSZWFsbVJvbGVzLmpzb24gYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrQ2xpZW50QW5kUmVhbG1Sb2xlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWNiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrQ2xpZW50QW5kUmVhbG1Sb2xlcy5qc29uCkBAIC0wLDAgKzEsMTU5IEBACit7CisgICJyZWFsbU1hcHBpbmdzIjogWworICAgIHsKKyAgICAgICJpZCI6ICI3YTE0NWJlNS0yMGJhLTQ5OTItYWQ1NC0xN2MyOGQwYmMwZjkiLAorICAgICAgIm5hbWUiOiAiZmVlZGluLW1hbmFnZW1lbnQtYWNjZXNzIiwKKyAgICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiBmYWxzZSwKKyAgICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAgICJjbGllbnRSb2xlIjogZmFsc2UsCisgICAgICAiY29udGFpbmVySWQiOiAiZWxvZ2Jvb2siCisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAiMzdkNDJjYzMtMDE1Ny00YWI2LWI5ZmUtOGJlNTBkZTM3ZGE4IiwKKyAgICAgICJuYW1lIjogInBsYW5uZWQtcG9saWNpZXMtZXhlY3V0b3IiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICJiMWNmMDM0Yi1iY2UzLTRkMjktOWU5ZC02OTJiZjQyMGNlODMiLAorICAgICAgIm5hbWUiOiAicGxhbm5lZC1wb2xpY2llcy1hY2Nlc3MiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICJiYWY0NGZjMi03ODg4LTQ4ODgtYmVhYS03OTI4OGU5MjY4YTAiLAorICAgICAgIm5hbWUiOiAicGxhbm5pbmctYWNjZXNzIiwKKyAgICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiBmYWxzZSwKKyAgICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAgICJjbGllbnRSb2xlIjogZmFsc2UsCisgICAgICAiY29udGFpbmVySWQiOiAiZWxvZ2Jvb2siCisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAiYTE3NjAyNjctYjcyZC00Y2VmLWJiMmEtOTFjMGQ0YTI0Y2Q3IiwKKyAgICAgICJuYW1lIjogInBsYW5uZWQtcG9saWNpZXMtbWVhc3VyZXBsYW5uZXIiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICJmNDFmNjE0NC1mNzg4LTQzNGQtYmU3YS1lZTMxOTAwOTlmNWQiLAorICAgICAgIm5hbWUiOiAicGxhbm5lZC1wb2xpY2llcy1zdXBlcnVzZXIiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IHRydWUsCisgICAgICAiY2xpZW50Um9sZSI6IGZhbHNlLAorICAgICAgImNvbnRhaW5lcklkIjogImVsb2dib29rIgorICAgIH0sCisgICAgeworICAgICAgImlkIjogImY4ZmEzYTg0LWI3ZDgtNGFkNy05OGM1LTNjNzdjYTZjMWEzMyIsCisgICAgICAibmFtZSI6ICJrb25fYWRtaW4iLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICIxZTQxZDA4OS03MmVhLTRiMjItYTg4Yy01NjAzN2I5NjgwZDgiLAorICAgICAgIm5hbWUiOiAicGxhbm5lZC1wb2xpY2llcy1tZWFzdXJlYXBwbGljYW50IiwKKyAgICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiBmYWxzZSwKKyAgICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAgICJjbGllbnRSb2xlIjogZmFsc2UsCisgICAgICAiY29udGFpbmVySWQiOiAiZWxvZ2Jvb2siCisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAiZTQyMzYyNmUtNDYxNi00NWI3LTljM2QtMTBhN2YwYWNhYjhjIiwKKyAgICAgICJuYW1lIjogImVsb2dib29rLXN1cGVydXNlciIsCisgICAgICAiZGVzY3JpcHRpb24iOiAiIiwKKyAgICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiBmYWxzZSwKKyAgICAgICJjb21wb3NpdGUiOiB0cnVlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICI2OWNkOWY3ZC1iZDdiLTQ3M2QtOWFlMi04Y2E4NjY1ZmE5YmYiLAorICAgICAgIm5hbWUiOiAicGxhbm5lZC1wb2xpY2llcy1yZXF1ZXN0ZXIiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICI3NTMzYjE2Ni03OWRhLTQ0ZjYtYmI4NC1mZTZhMzkxNmM5Y2QiLAorICAgICAgIm5hbWUiOiAicGxhbm5lZC1wb2xpY2llcy1tZWFzdXJlYXBwcm92ZXIiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICJkYzg0YzNmNC0yNTA5LTQ4OTQtOWI5MS03NzJiNjdkMWQ0NzAiLAorICAgICAgIm5hbWUiOiAicGxhbm5lZC1wb2xpY2llcy1jb21wbGV0aW9uIiwKKyAgICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiBmYWxzZSwKKyAgICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAgICJjbGllbnRSb2xlIjogZmFsc2UsCisgICAgICAiY29udGFpbmVySWQiOiAiZWxvZ2Jvb2siCisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAiMDYxODI3YmMtNzcxZC00Y2UxLTkxMjMtM2QyMTE2ODZjMDc4IiwKKyAgICAgICJuYW1lIjogInBsYW5uZWQtcG9saWNpZXMtbm9ybWFsdXNlciIsCisgICAgICAiZGVzY3JpcHRpb24iOiAiRGFyZiB2aWVsZXMsIGFiZXIgbmljaHQgYWxsZXMiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICIyN2I5NTc4Zi00MTZiLTRmNjctODI1OS02MDQ2NDYzNmY0NTciLAorICAgICAgIm5hbWUiOiAicGxhbm5lZC1wb2xpY2llcy1jbGVhcmFuY2UiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICI3Yjk3NzE1My0xMTA3LTRhN2QtYjJiMy1kYzZkYWE0NjFjMTUiLAorICAgICAgIm5hbWUiOiAia29uLWFjY2VzcyIsCisgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAiY29tcG9zaXRlIjogZmFsc2UsCisgICAgICAiY2xpZW50Um9sZSI6IGZhbHNlLAorICAgICAgImNvbnRhaW5lcklkIjogImVsb2dib29rIgorICAgIH0sCisgICAgeworICAgICAgImlkIjogIjM4NGU3YTY4LThlNzAtNDFhYS1iYmJkLTFhMGZmYjI5MzMzNSIsCisgICAgICAibmFtZSI6ICJlbG9nYm9vay1hY2Nlc3MiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICI2YjhkMmRhOC0yMjBjLTRmODMtOGUxNS04ODkwMDRlNjYzNTkiLAorICAgICAgIm5hbWUiOiAiZWxvZ2Jvb2stbm9ybWFsdXNlciIsCisgICAgICAiZGVzY3JpcHRpb24iOiAiRGFyZiB2aWVsZXMsIGFiZXIgbmljaHQgYWxsZXMiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9CisgIF0sCisgICJjbGllbnRNYXBwaW5ncyI6IHsKKyAgICAiZWxvZ2Jvb2stYmFja2VuZCI6IHsKKyAgICAgICJpZCI6ICJlOTkwNDUzMC0xY2VkLTRkNmItOTZkYy1mZDFmM2NlNjQyMGMiLAorICAgICAgImNsaWVudCI6ICJlbG9nYm9vay1iYWNrZW5kIiwKKyAgICAgICJtYXBwaW5ncyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJmOTk3MTYwNi1iNTg3LTQxZDAtYTkwMy00ZTk3YjEwM2UzYjIiLAorICAgICAgICAgICJuYW1lIjogInRlc3RjbGllbnRyb2xlIiwKKyAgICAgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgICAgICJjbGllbnRSb2xlIjogdHJ1ZSwKKyAgICAgICAgICAiY29udGFpbmVySWQiOiAiZTk5MDQ1MzAtMWNlZC00ZDZiLTk2ZGMtZmQxZjNjZTY0MjBjIgorICAgICAgICB9CisgICAgICBdCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RLZXlDbG9ha1JvbGVzLmpzb24gYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrUm9sZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDA4OGYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RLZXlDbG9ha1JvbGVzLmpzb24KQEAgLTAsMCArMSw3MCBAQAorWworICB7CisgICAgImlkIjogImU0MjM2MjZlLTQ2MTYtNDViNy05YzNkLTEwYTdmMGFjYWI4YyIsCisgICAgIm5hbWUiOiAiZWxvZ2Jvb2stc3VwZXJ1c2VyIiwKKyAgICAiZGVzY3JpcHRpb24iOiAiRGFyZiBzZWhyIHNlaHIgdmllbCIsCisgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICJjb21wb3NpdGUiOiB0cnVlLAorICAgICJjbGllbnRSb2xlIjogZmFsc2UsCisgICAgImNvbnRhaW5lcklkIjogImVsb2dib29rIgorICB9LAorICB7CisgICAgImlkIjogIjdhMTQ1YmU1LTIwYmEtNDk5Mi1hZDU0LTE3YzI4ZDBiYzBmOSIsCisgICAgIm5hbWUiOiAiZmVlZGluLW1hbmFnZW1lbnQtYWNjZXNzIiwKKyAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICJjbGllbnRSb2xlIjogZmFsc2UsCisgICAgImNvbnRhaW5lcklkIjogImVsb2dib29rIgorICB9LAorICB7CisgICAgImlkIjogImIxY2YwMzRiLWJjZTMtNGQyOS05ZTlkLTY5MmJmNDIwY2U4MyIsCisgICAgIm5hbWUiOiAicGxhbm5lZC1wb2xpY2llcy1hY2Nlc3MiLAorICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiBmYWxzZSwKKyAgICAiY29tcG9zaXRlIjogZmFsc2UsCisgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAiY29udGFpbmVySWQiOiAiZWxvZ2Jvb2siCisgIH0sCisgIHsKKyAgICAiaWQiOiAiYmFmNDRmYzItNzg4OC00ODg4LWJlYWEtNzkyODhlOTI2OGEwIiwKKyAgICAibmFtZSI6ICJwbGFubmluZy1hY2Nlc3MiLAorICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiBmYWxzZSwKKyAgICAiY29tcG9zaXRlIjogZmFsc2UsCisgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAiY29udGFpbmVySWQiOiAiZWxvZ2Jvb2siCisgIH0sCisgIHsKKyAgICAiaWQiOiAiYjIwYWJkNmQtZjIwMi00MWQ1LTkxZTItZjNlODI2NmJkMWZiIiwKKyAgICAibmFtZSI6ICJvZmZsaW5lX2FjY2VzcyIsCisgICAgImRlc2NyaXB0aW9uIjogIiR7cm9sZV9vZmZsaW5lLWFjY2Vzc30iLAorICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiB0cnVlLAorICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAiY2xpZW50Um9sZSI6IGZhbHNlLAorICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgfSwKKyAgeworICAgICJpZCI6ICIxNzNlZDNkZC03YzgzLTQyMDItYmVjOC1jMmYyYWI5OTE5ZmMiLAorICAgICJuYW1lIjogInVtYV9hdXRob3JpemF0aW9uIiwKKyAgICAiZGVzY3JpcHRpb24iOiAiJHtyb2xlX3VtYV9hdXRob3JpemF0aW9ufSIsCisgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAiY2xpZW50Um9sZSI6IGZhbHNlLAorICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgfSwKKyAgeworICAgICJpZCI6ICIzODRlN2E2OC04ZTcwLTQxYWEtYmJiZC0xYTBmZmIyOTMzMzUiLAorICAgICJuYW1lIjogImVsb2dib29rLWFjY2VzcyIsCisgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAiY2xpZW50Um9sZSI6IGZhbHNlLAorICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgfSwKKyAgeworICAgICJpZCI6ICI2YjhkMmRhOC0yMjBjLTRmODMtOGUxNS04ODkwMDRlNjYzNTkiLAorICAgICJuYW1lIjogImVsb2dib29rLW5vcm1hbHVzZXIiLAorICAgICJkZXNjcmlwdGlvbiI6ICJEYXJmIHZpZWxlcywgYWJlciBuaWNodCBhbGxlcyIsCisgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAiY2xpZW50Um9sZSI6IGZhbHNlLAorICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgfQorXQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RLZXlDbG9ha1JvbGVzX25vQ2xpZW50Um9sZUF0QWxsLmpzb24gYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrUm9sZXNfbm9DbGllbnRSb2xlQXRBbGwuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjBhNmExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RLZXlDbG9ha1JvbGVzX25vQ2xpZW50Um9sZUF0QWxsLmpzb24KQEAgLTAsMCArMSwyMSBAQAoreworICAicmVhbG1NYXBwaW5ncyI6IFsKKyAgICB7CisgICAgICAiaWQiOiAiMzg0ZTdhNjgtOGU3MC00MWFhLWJiYmQtMWEwZmZiMjkzMzM1IiwKKyAgICAgICJuYW1lIjogImVsb2dib29rLWFjY2VzcyIsCisgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAiY29tcG9zaXRlIjogZmFsc2UsCisgICAgICAiY2xpZW50Um9sZSI6IGZhbHNlLAorICAgICAgImNvbnRhaW5lcklkIjogImVsb2dib29rIgorICAgIH0sCisgICAgeworICAgICAgImlkIjogIjZiOGQyZGE4LTIyMGMtNGY4My04ZTE1LTg4OTAwNGU2NjM1OSIsCisgICAgICAibmFtZSI6ICJlbG9nYm9vay1ub3JtYWx1c2VyIiwKKyAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXJmIHZpZWxlcywgYWJlciBuaWNodCBhbGxlcyIsCisgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAiY29tcG9zaXRlIjogZmFsc2UsCisgICAgICAiY2xpZW50Um9sZSI6IGZhbHNlLAorICAgICAgImNvbnRhaW5lcklkIjogImVsb2dib29rIgorICAgIH0KKyAgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0S2V5Q2xvYWtSb2xlc19ub0NsaWVudFJvbGVGb3JDbGllbnQuanNvbiBiL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0S2V5Q2xvYWtSb2xlc19ub0NsaWVudFJvbGVGb3JDbGllbnQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTFiZWYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RLZXlDbG9ha1JvbGVzX25vQ2xpZW50Um9sZUZvckNsaWVudC5qc29uCkBAIC0wLDAgKzEsNDcgQEAKK3sKKyAgInJlYWxtTWFwcGluZ3MiOiBbCisgICAgeworICAgICAgImlkIjogIjM4NGU3YTY4LThlNzAtNDFhYS1iYmJkLTFhMGZmYjI5MzMzNSIsCisgICAgICAibmFtZSI6ICJlbG9nYm9vay1hY2Nlc3MiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6ICI2YjhkMmRhOC0yMjBjLTRmODMtOGUxNS04ODkwMDRlNjYzNTkiLAorICAgICAgIm5hbWUiOiAiZWxvZ2Jvb2stbm9ybWFsdXNlciIsCisgICAgICAiZGVzY3JpcHRpb24iOiAiRGFyZiB2aWVsZXMsIGFiZXIgbmljaHQgYWxsZXMiLAorICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgImNsaWVudFJvbGUiOiBmYWxzZSwKKyAgICAgICJjb250YWluZXJJZCI6ICJlbG9nYm9vayIKKyAgICB9CisgIF0sCisgICJjbGllbnRNYXBwaW5ncyI6IHsKKyAgICAiYWNjb3VudCI6IHsKKyAgICAgICJpZCI6ICJhYjViNWRkMC1lOTQzLTRjZWYtYmI4Ni01ZjE3MDMxY2E2ZWQiLAorICAgICAgImNsaWVudCI6ICJhY2NvdW50IiwKKyAgICAgICJtYXBwaW5ncyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJiZmNmOTAzNC03OTIxLTQyMDAtYWQyYS1iZjNmOWMwZDNmMzgiLAorICAgICAgICAgICJuYW1lIjogInZpZXctcHJvZmlsZSIsCisgICAgICAgICAgImRlc2NyaXB0aW9uIjogIiR7cm9sZV92aWV3LXByb2ZpbGV9IiwKKyAgICAgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgICAgICJjbGllbnRSb2xlIjogdHJ1ZSwKKyAgICAgICAgICAiY29udGFpbmVySWQiOiAiYWI1YjVkZDAtZTk0My00Y2VmLWJiODYtNWYxNzAzMWNhNmVkIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlkIjogIjA3MDZiZWE3LWQ1M2ItNDA3NS1hNGFiLWQwYjE3NWNkNjYwZiIsCisgICAgICAgICAgIm5hbWUiOiAibWFuYWdlLWFjY291bnQiLAorICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICIke3JvbGVfbWFuYWdlLWFjY291bnR9IiwKKyAgICAgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAgICAgImNvbXBvc2l0ZSI6IHRydWUsCisgICAgICAgICAgImNsaWVudFJvbGUiOiB0cnVlLAorICAgICAgICAgICJjb250YWluZXJJZCI6ICJhYjViNWRkMC1lOTQzLTRjZWYtYmI4Ni01ZjE3MDMxY2E2ZWQiCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrUm9sZXNfbm9SZWFsbVJvbGUuanNvbiBiL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0S2V5Q2xvYWtSb2xlc19ub1JlYWxtUm9sZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NDcwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrUm9sZXNfbm9SZWFsbVJvbGUuanNvbgpAQCAtMCwwICsxLDI4IEBACit7CisgICJjbGllbnRNYXBwaW5ncyI6IHsKKyAgICAiYWNjb3VudCI6IHsKKyAgICAgICJpZCI6ICJhYjViNWRkMC1lOTQzLTRjZWYtYmI4Ni01ZjE3MDMxY2E2ZWQiLAorICAgICAgImNsaWVudCI6ICJhY2NvdW50IiwKKyAgICAgICJtYXBwaW5ncyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJiZmNmOTAzNC03OTIxLTQyMDAtYWQyYS1iZjNmOWMwZDNmMzgiLAorICAgICAgICAgICJuYW1lIjogInZpZXctcHJvZmlsZSIsCisgICAgICAgICAgImRlc2NyaXB0aW9uIjogIiR7cm9sZV92aWV3LXByb2ZpbGV9IiwKKyAgICAgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgICAgICJjbGllbnRSb2xlIjogdHJ1ZSwKKyAgICAgICAgICAiY29udGFpbmVySWQiOiAiYWI1YjVkZDAtZTk0My00Y2VmLWJiODYtNWYxNzAzMWNhNmVkIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlkIjogIjA3MDZiZWE3LWQ1M2ItNDA3NS1hNGFiLWQwYjE3NWNkNjYwZiIsCisgICAgICAgICAgIm5hbWUiOiAibWFuYWdlLWFjY291bnQiLAorICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICIke3JvbGVfbWFuYWdlLWFjY291bnR9IiwKKyAgICAgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAgICAgImNvbXBvc2l0ZSI6IHRydWUsCisgICAgICAgICAgImNsaWVudFJvbGUiOiB0cnVlLAorICAgICAgICAgICJjb250YWluZXJJZCI6ICJhYjViNWRkMC1lOTQzLTRjZWYtYmI4Ni01ZjE3MDMxY2E2ZWQiCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrUm9sZXNfb25seUNsaWVudFJvbGUuanNvbiBiL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0S2V5Q2xvYWtSb2xlc19vbmx5Q2xpZW50Um9sZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YWZmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrUm9sZXNfb25seUNsaWVudFJvbGUuanNvbgpAQCAtMCwwICsxLDI4IEBACit7CisgICJjbGllbnRNYXBwaW5ncyI6IHsKKyAgICAiZWxvZ2Jvb2stYmFja2VuZCI6IHsKKyAgICAgICJpZCI6ICJhYjViNWRkMC1lOTQzLTRjZWYtYmI4Ni01ZjE3MDMxY2E2ZWQiLAorICAgICAgImNsaWVudCI6ICJlbG9nYm9vay1iYWNrZW5kIiwKKyAgICAgICJtYXBwaW5ncyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJiZmNmOTAzNC03OTIxLTQyMDAtYWQyYS1iZjNmOWMwZDNmMzgiLAorICAgICAgICAgICJuYW1lIjogInZpZXctcHJvZmlsZSIsCisgICAgICAgICAgImRlc2NyaXB0aW9uIjogIiR7cm9sZV92aWV3LXByb2ZpbGV9IiwKKyAgICAgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAgICAgImNvbXBvc2l0ZSI6IGZhbHNlLAorICAgICAgICAgICJjbGllbnRSb2xlIjogdHJ1ZSwKKyAgICAgICAgICAiY29udGFpbmVySWQiOiAiYWI1YjVkZDAtZTk0My00Y2VmLWJiODYtNWYxNzAzMWNhNmVkIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlkIjogIjA3MDZiZWE3LWQ1M2ItNDA3NS1hNGFiLWQwYjE3NWNkNjYwZiIsCisgICAgICAgICAgIm5hbWUiOiAibWFuYWdlLWFjY291bnQiLAorICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICIke3JvbGVfbWFuYWdlLWFjY291bnR9IiwKKyAgICAgICAgICAic2NvcGVQYXJhbVJlcXVpcmVkIjogZmFsc2UsCisgICAgICAgICAgImNvbXBvc2l0ZSI6IHRydWUsCisgICAgICAgICAgImNsaWVudFJvbGUiOiB0cnVlLAorICAgICAgICAgICJjb250YWluZXJJZCI6ICJhYjViNWRkMC1lOTQzLTRjZWYtYmI4Ni01ZjE3MDMxY2E2ZWQiCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrUm9sZXNfc2FtZUNsaWVudFJlYWxtUm9sZS5qc29uIGIvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RLZXlDbG9ha1JvbGVzX3NhbWVDbGllbnRSZWFsbVJvbGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTQxYTMzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RLZXlDbG9ha1JvbGVzX3NhbWVDbGllbnRSZWFsbVJvbGUuanNvbgpAQCAtMCwwICsxLDQ3IEBACit7CisgICJyZWFsbU1hcHBpbmdzIjogWworICAgIHsKKyAgICAgICJpZCI6ICIzODRlN2E2OC04ZTcwLTQxYWEtYmJiZC0xYTBmZmIyOTMzMzUiLAorICAgICAgIm5hbWUiOiAiZWxvZ2Jvb2stYWNjZXNzIiwKKyAgICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiBmYWxzZSwKKyAgICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAgICJjbGllbnRSb2xlIjogZmFsc2UsCisgICAgICAiY29udGFpbmVySWQiOiAiZWxvZ2Jvb2siCisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAiNmI4ZDJkYTgtMjIwYy00ZjgzLThlMTUtODg5MDA0ZTY2MzU5IiwKKyAgICAgICJuYW1lIjogImVsb2dib29rLW5vcm1hbHVzZXIiLAorICAgICAgImRlc2NyaXB0aW9uIjogIkRhcmYgdmllbGVzLCBhYmVyIG5pY2h0IGFsbGVzIiwKKyAgICAgICJzY29wZVBhcmFtUmVxdWlyZWQiOiBmYWxzZSwKKyAgICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAgICJjbGllbnRSb2xlIjogZmFsc2UsCisgICAgICAiY29udGFpbmVySWQiOiAiZWxvZ2Jvb2siCisgICAgfQorICBdLAorICAiY2xpZW50TWFwcGluZ3MiOiB7CisgICAgImVsb2dib29rLWJhY2tlbmQiOiB7CisgICAgICAiaWQiOiAiYWI1YjVkZDAtZTk0My00Y2VmLWJiODYtNWYxNzAzMWNhNmVkIiwKKyAgICAgICJjbGllbnQiOiAiZWxvZ2Jvb2stYmFja2VuZCIsCisgICAgICAibWFwcGluZ3MiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaWQiOiAiYmZjZjkwMzQtNzkyMS00MjAwLWFkMmEtYmYzZjljMGQzZjM4IiwKKyAgICAgICAgICAibmFtZSI6ICJlbG9nYm9vay1hY2Nlc3MiLAorICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICIke3JvbGVfdmlldy1wcm9maWxlfSIsCisgICAgICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgICAgICJjb21wb3NpdGUiOiBmYWxzZSwKKyAgICAgICAgICAiY2xpZW50Um9sZSI6IHRydWUsCisgICAgICAgICAgImNvbnRhaW5lcklkIjogImFiNWI1ZGQwLWU5NDMtNGNlZi1iYjg2LTVmMTcwMzFjYTZlZCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICIwNzA2YmVhNy1kNTNiLTQwNzUtYTRhYi1kMGIxNzVjZDY2MGYiLAorICAgICAgICAgICJuYW1lIjogIm1hbmFnZS1hY2NvdW50IiwKKyAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiJHtyb2xlX21hbmFnZS1hY2NvdW50fSIsCisgICAgICAgICAgInNjb3BlUGFyYW1SZXF1aXJlZCI6IGZhbHNlLAorICAgICAgICAgICJjb21wb3NpdGUiOiB0cnVlLAorICAgICAgICAgICJjbGllbnRSb2xlIjogdHJ1ZSwKKyAgICAgICAgICAiY29udGFpbmVySWQiOiAiYWI1YjVkZDAtZTk0My00Y2VmLWJiODYtNWYxNzAzMWNhNmVkIgorICAgICAgICB9CisgICAgICBdCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RLZXlDbG9ha1VzZXJzLmpzb24gYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdEtleUNsb2FrVXNlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTkwNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RLZXlDbG9ha1VzZXJzLmpzb24KQEAgLTAsMCArMSw5MCBAQAorWworICB7CisgICAgImlkIjogIjM1OWVmOWM5LTc3ZGYtNGEzZC1hOWM5LWY5NmQ4MzdkMmQ1NyIsCisgICAgImNyZWF0ZWRUaW1lc3RhbXAiOiAxNTAxNTk0MTczNzg0LAorICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCisgICAgImVuYWJsZWQiOiB0cnVlLAorICAgICJ0b3RwIjogZmFsc2UsCisgICAgImVtYWlsVmVyaWZpZWQiOiBmYWxzZSwKKyAgICAiZmlyc3ROYW1lIjogIkFkbWluaXN0cmF0b3IiLAorICAgICJsYXN0TmFtZSI6ICJBZG1pbmlzdHJhdG93aWNoIiwKKyAgICAicmVhbG1Sb2xlcyI6IFsKKyAgICAgICJlbG9nYm9vay1zdXBlcnVzZXIiLAorICAgICAgImVsb2dib29rX2FjY2VzcyIsCisgICAgICAiZmVlZGluX21hbmFnZW1lbnRfYWNjZXNzIiwKKyAgICAgICJwbGFubmVkX3BvbGljaWVzX2FjY2VzcyIsCisgICAgICAib2ZmbGluZV9hY2Nlc3MiLAorICAgICAgInVtYV9hdXRob3JpemF0aW9uIiwKKyAgICAgICJwbGFubmluZ19hY2Nlc3MiLAorICAgICAgImVsb2dib29rLW5vcm1hbHVzZXIiCisgICAgXSwKKyAgICAiZGlzYWJsZWFibGVDcmVkZW50aWFsVHlwZXMiOiBbCisgICAgICAicGFzc3dvcmQiCisgICAgXSwKKyAgICAicmVxdWlyZWRBY3Rpb25zIjogW10sCisgICAgImFjY2VzcyI6IHsKKyAgICAgICJtYW5hZ2VHcm91cE1lbWJlcnNoaXAiOiBmYWxzZSwKKyAgICAgICJ2aWV3IjogdHJ1ZSwKKyAgICAgICJtYXBSb2xlcyI6IGZhbHNlLAorICAgICAgImltcGVyc29uYXRlIjogZmFsc2UsCisgICAgICAibWFuYWdlIjogZmFsc2UKKyAgICB9CisgIH0sCisgIHsKKyAgICAiaWQiOiAiYzRiNzhhYTctOTFkMi00NWQ3LThjYTMtMTYzMTU2ZDllZTQwIiwKKyAgICAiY3JlYXRlZFRpbWVzdGFtcCI6IDE1MDE1OTQyMzkwNjYsCisgICAgInVzZXJuYW1lIjogImh1Z28iLAorICAgICJlbmFibGVkIjogdHJ1ZSwKKyAgICAidG90cCI6IGZhbHNlLAorICAgICJlbWFpbFZlcmlmaWVkIjogZmFsc2UsCisgICAgImZpcnN0TmFtZSI6ICJIdWdvIiwKKyAgICAibGFzdE5hbWUiOiAiQm9zcyIsCisgICAgInJlYWxtUm9sZXMiOiBbCisgICAgICAiZWxvZ2Jvb2tfYWNjZXNzIiwKKyAgICAgICJmZWVkaW5fbWFuYWdlbWVudF9hY2Nlc3MiLAorICAgICAgInBsYW5uZWRfcG9saWNpZXNfYWNjZXNzIiwKKyAgICAgICJvZmZsaW5lX2FjY2VzcyIsCisgICAgICAidW1hX2F1dGhvcml6YXRpb24iLAorICAgICAgInBsYW5uaW5nX2FjY2VzcyIsCisgICAgICAiZWxvZ2Jvb2stbm9ybWFsdXNlciIKKyAgICBdLAorICAgICJkaXNhYmxlYWJsZUNyZWRlbnRpYWxUeXBlcyI6IFsKKyAgICAgICJwYXNzd29yZCIKKyAgICBdLAorICAgICJyZXF1aXJlZEFjdGlvbnMiOiBbXSwKKyAgICAiYWNjZXNzIjogeworICAgICAgIm1hbmFnZUdyb3VwTWVtYmVyc2hpcCI6IGZhbHNlLAorICAgICAgInZpZXciOiB0cnVlLAorICAgICAgIm1hcFJvbGVzIjogZmFsc2UsCisgICAgICAiaW1wZXJzb25hdGUiOiBmYWxzZSwKKyAgICAgICJtYW5hZ2UiOiBmYWxzZQorICAgIH0KKyAgfSwKKyAgeworICAgICJpZCI6ICJjMmU5ZDdhZS0yYmZhLTQ1NzgtYjA5ZS1mNWRjNWYwOWE4NzkiLAorICAgICJjcmVhdGVkVGltZXN0YW1wIjogMTUwMTU5NDI3MzY2MSwKKyAgICAidXNlcm5hbWUiOiAib3R0byIsCisgICAgImVuYWJsZWQiOiB0cnVlLAorICAgICJ0b3RwIjogZmFsc2UsCisgICAgImVtYWlsVmVyaWZpZWQiOiBmYWxzZSwKKyAgICAiZmlyc3ROYW1lIjogIk90dG8iLAorICAgICJsYXN0TmFtZSI6ICJOb3JtYWx2ZXJicmF1Y2hlciIsCisgICAgInJlYWxtUm9sZXMiOiBbCisgICAgICAiZWxvZ2Jvb2tfYWNjZXNzIiwKKyAgICAgICJvZmZsaW5lX2FjY2VzcyIsCisgICAgICAidW1hX2F1dGhvcml6YXRpb24iLAorICAgICAgImVsb2dib29rLW5vcm1hbHVzZXIiCisgICAgXSwKKyAgICAiZGlzYWJsZWFibGVDcmVkZW50aWFsVHlwZXMiOiBbCisgICAgICAicGFzc3dvcmQiCisgICAgXSwKKyAgICAicmVxdWlyZWRBY3Rpb25zIjogW10sCisgICAgImFjY2VzcyI6IHsKKyAgICAgICJtYW5hZ2VHcm91cE1lbWJlcnNoaXAiOiBmYWxzZSwKKyAgICAgICJ2aWV3IjogdHJ1ZSwKKyAgICAgICJtYXBSb2xlcyI6IGZhbHNlLAorICAgICAgImltcGVyc29uYXRlIjogZmFsc2UsCisgICAgICAibWFuYWdlIjogZmFsc2UKKyAgICB9CisgIH0KK10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdExvZ2luQ3JlZGVudGlhbHMuanNvbiBiL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0TG9naW5DcmVkZW50aWFscy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OTc0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdExvZ2luQ3JlZGVudGlhbHMuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgInVzZXJOYW1lIjogIkNhcmxvIiwKKyAgInBhc3N3b3JkIjogIkNvdHR1cmEiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3RVc2VyQXV0aGVudGljYXRpb24uanNvbiBiL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0VXNlckF1dGhlbnRpY2F0aW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkZWYyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0VXNlckF1dGhlbnRpY2F0aW9uLmpzb24KQEAgLTAsMCArMSw4IEBACit7CisgICJpZCI6IDEsCisgICJzZWxlY3RlZCI6IHRydWUsCisgICJ1c2VybmFtZSI6ICJQZWRybyIsCisgICJwYXNzd29yZCI6ICJwd2QiLAorICAibmFtZSI6ICJQZWRybyBQZXBpdG8gU2FuY2hleiIsCisgICJzcGVjaWFsVXNlciI6IGZhbHNlCit9Cg==