CkxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQpjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgpUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAoodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAp0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjE0LjAKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjE0LjAgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueSAKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy45IGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgOCwgbWFraW5nIHVzZSBvZiBmZWF0dXJlcyB0aGF0IGFycml2ZWQgd2l0aCBKYXZhIDguCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOiAKCiAgICBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KCk5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzIChKYXZhIDggb3IgYWJvdmUpLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyAgICAgICAgICAgIEFkZCBGdW5jdGlvbnMjZnVuY3Rpb24oRnVuY3Rpb24pLiBUaGFua3MgdG8gUm9iIFNwb29yLCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgRmFpbGFibGVGdW5jdGlvbiNmdW5jdGlvbihGYWlsYWJsZUZ1bmN0aW9uKS4gVGhhbmtzIHRvIFJvYiBTcG9vciwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIENhbGVuZGFyVXRpbHMuZ2V0SW5zdGFuY2UoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBzeW50YXggZm9yIG9wdGlvbmFsIHRva2VucyB0byBEdXJhdGlvbkZvcm1hdFV0aWxzICMxMDYyLiBUaGFua3MgdG8gRGFuIFdhdHNvbi4KbyAgICAgICAgICAgIEFkZCBBcnJheUZpbGwuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgRmFzdERhdGVQYXJzZXIuVGltZVpvbmVTdHJhdGVneS5UekluZm8udG9TdHJpbmcoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBMb2NhbGVVdGlscy5pc0xhbmd1YWdlVW5kZXRlcm1pbmVkKExvY2FsZSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgT2JqZWN0VXRpbHMudG9TdHJpbmcoU3VwcGxpZXI8T2JqZWN0PiwgU3VwcGxpZXI8U3RyaW5nPikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgTGF6eUluaXRpYWxpemVyLmlzSW5pdGlhbGl6ZWQoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBDb25jdXJyZW50SW5pdGlhbGl6ZXIjaXNJbml0aWFsaXplZCgpICMxMTIwLiBUaGFua3MgdG8gQmVuamFtaW4gQ29uZmlubywgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFN0cmVhbXMuZmFpbGFibGVTdHJlYW0oVC4uLikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgRmFpbGFibGVTdXBwbGllci5udWwoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBTdXBwbGllcnMubnVsKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgRXhjZXB0aW9uVXRpbHMudGhyb3dVbmNoZWNrZWQoVCkgd2hlcmUgVCBleHRlbmRzIFRocm93YWJsZSwgYW5kIGRlcHJlY2F0ZSBPYmplY3QgdmVyc2lvbi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBFeGNlcHRpb25VdGlscy5yZXRocm93UnVudGltZUV4Y2VwdGlvbihUKSwgYW5kIGRlcHJlY2F0ZSByZXRocm93KFQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTcxNjogQ29uY3VycmVudEluaXRpYWxpemVyIGltcGxlbWVudGF0aW9ucyBjYW4gbm93IGJlIGluc3RhbnRpYXRlZCBhbmQgY29uZmlndXJlZCB3aXRoIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgbGFtYmRhcy4gVGhhbmtzIHRvIEJlbmphbWluIENvbmZpbm8sIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE3MTc6IEFkZCBzdXBwb3J0IGZvciBSSVNDLVYgaW4gQXJjaFV0aWxzICMxMTI4LiBUaGFua3MgdG8gTGV2aSBaaW0sIEdhcnkgR3JlZ29yeS4KCkZpeGVkIEJ1Z3M6Cm8gICAgICAgICAgICBSZW5hbWUgdmFyaWFibGUgbmFtZXMgZnJvbSAnY2xzcycgdG8gJ2NsYXp6JyAjMTA4Ny4gVGhhbmtzIHRvIHJlbWVpby4KbyAgICAgICAgICAgIFtKYXZhZG9jXSBDb21wYXJhYmxlVXRpbHMnYzEnIHRvICdjb21wYXJhYmxlMScsICdjMicgdG8gJyBUaGFua3MgdG8gcmVtZWlvLgpvICAgICAgICAgICAgW0phdmFkb2NdIFJlbW92ZSAyLjEgc3BlY2lmaWMgY29tbWVudCAjMTA5MS4gVGhhbmtzIHRvIEVsbGlvdHRlIFJ1c3R5IEhhcm9sZC4KbyBMQU5HLTE3MDQ6IEltbXV0YWJsZVBhaXIgYW5kIEltbXV0YWJsZVRyaXBsZSBpbXBsZW1lbnRhdGlvbiBkb24ndCBtYXRjaCBmaW5hbCBpbiBKYXZhZG9jLiBUaGFua3MgdG8gRGFuIFppZW1iYSwgR2lsbGVzIFNhZG93c2tpLCBBbGV4IEhlcmJlcnQsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFtKYXZhZG9jXSBGaXggSW5jb3JyZWN0IERlc2NyaXB0aW9uIGluIFByb2Nlc3NvciBpc0FhcmNoNjQoKSAjMTA5My4gVGhhbmtzIHRvIFN1bmcgSG8gWW9vbi4KbyAgICAgICAgICAgIFtKYXZhZG9jXSBQb2ludCB0byByaWdodCBnZXRTaG9ydENsYXNzTmFtZSBmbGF2b3IgaW4gSmF2YWRvYyBmb3IgcmVsZXZhbnQgbm90ZXMgIzEwOTcuIFRoYW5rcyB0byBsamFjcXUuCm8gICAgICAgICAgICBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFN0cmluZ1V0aWxzLmlzTWl4ZWRDYXNlKCkgIzEwOTYuIFRoYW5rcyB0byBoZHVlbG1lLgpvIExBTkctMTcwNjogVGhyZWFkVXRpbHMgZmluZCBtZXRob2RzIHNob3VsZCBub3QgcmV0dXJuIG51bGwgaXRlbXMgIzEwOTguIFRoYW5rcyB0byBBbGJlcnRvIEZlcm7hbmRlei4KbyBMQU5HLTE3MTA6IFJlZmxlY3Rpb25Ub1N0cmluZ0J1aWxkZXIgY2hhbmdlcyBpbiB2ZXJzaW9uIDMuMTMuMCBoYXMgYnJva2VuIHRoZSBsb2dpYyBmb3Igb3ZlcnJpZGluZyBjbGFzc2VzLiBUaGFua3MgdG8gU2hhc2hhbmsgU2hhcm1hLCBHYXJ5IEdyZWdvcnksIE9rc2FuYS4KbyAgICAgICAgICAgIFJldHVybiAibnVsbCIgaW5zdGVhZCBvZiBOUEUgaW4gQ2xhc3NMb2FkZXJVdGlscy50b1N0cmluZyhDbGFzc0xvYWRlcikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBSZXR1cm4gIm51bGwiIGluc3RlYWQgb2YgTlBFIGluIENsYXNzTG9hZGVyVXRpbHMudG9TdHJpbmcoVVJMQ2xhc3NMb2FkZXIpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgUmV0dXJuIFRvU3RyaW5nU3R5bGUubnVsbFRleHQgaW5zdGVhZCBvZiBOUEUgZm9yIFJlZmxlY3Rpb25Ub1N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEZpeCBUaHJlc2hvbGRDaXJjdWl0QnJlYWtlciNjaGVja1N0YXRlKCkgIzExMDAuIFRoYW5rcyB0byB5aWNoaW56aHUsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFVzZSBDb25jdXJyZW50SW5pdGlhbGl6ZXIgaW1wbGVtZW50YXRpb25zIHdpdGhvdXQgc3ViY2xhc3NpbmcuICMxMTIzLiBUaGFua3MgdG8gQmVuamFtaW4gQ29uZmlubywgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVXBkYXRlIGNyaXRpY2FsIHZhbHVlIGZvciBjaGktc3F1YXJlIHRlc3QgIzExMjUuIFRoYW5rcyB0byBBbGV4IEhlcmJlcnQuCm8gICAgICAgICAgICBGaXggSmF2YWRvYyBzeW50YXggZXJyb3JzICMxMTI5LiBUaGFua3MgdG8gU3VuZyBIbyBZb29uLgoKQ2hhbmdlczoKbyAgICAgICAgICAgIEJ1bXAgY29tbW9ucy1wYXJlbnQgZnJvbSA1OCB0byA2NC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJ1bXAgb3JnLmVhc3ltb2NrOmVhc3ltb2NrIGZyb20gNS4xLjAgdG8gNS4yLjAgIzExMDQuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGNvbW1vbnMtdGV4dCBmcm9tIDEuMTAuMCB0byAxLjExLjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIG9yZy5jb2RlaGF1cy5tb2pvOmV4ZWMtbWF2ZW4tcGx1Z2luIGZyb20gMy4xLjAgdG8gMy4xLjEgIzExMzUuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIExhbmcsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBDb21tb25zIExhbmcgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvCgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nL2Rvd25sb2FkX2xhbmcuY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy4xMy4wCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy4xMy4wIHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgTGFuZy4KQ29tbW9ucyBMYW5nIGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhbnkgCkphdmEgZW52aXJvbm1lbnQuCgpMYW5nIDMuOSBhbmQgb253YXJkcyBub3cgdGFyZ2V0cyBKYXZhIDgsIG1ha2luZyB1c2Ugb2YgZmVhdHVyZXMgdGhhdCBhcnJpdmVkIHdpdGggSmF2YSA4LgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZTogCgogICAgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9hcnRpY2xlM18wLmh0bWwKCkFwYWNoZSBDb21tb25zIExhbmcsIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBmb3IgdGhlCmNsYXNzZXMgdGhhdCBhcmUgaW4gamF2YS5sYW5nJ3MgaGllcmFyY2h5LCBvciBhcmUgY29uc2lkZXJlZCB0byBiZSBzbwpzdGFuZGFyZCBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmxhbmcuCgpOZXcgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcyAoSmF2YSA4IG9yIGFib3ZlKS4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gICAgICAgICAgICBBZGQgR2l0SHViIGNvdmVyYWdlLnltbC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBFbnVtVXRpbHMuZ2V0RW51bVN5c3RlbVByb3BlcnR5KC4uLikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgVHJpQ29uc3VtZXIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgYW5kIHVzZSBFbnVtVXRpbHMuZ2V0Rmlyc3RFbnVtSWdub3JlQ2FzZShDbGFzcywgU3RyaW5nLCBGdW5jdGlvbiwgRSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgYW5kIHVzZSBTdXBwbGllcnMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgYW5kIHVzZSBBcnJheVV0aWxzLmdldENvbXBvbmVudFR5cGUoVFtdKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBhbmQgdXNlIENsYXNzVXRpbHMuZ2V0Q29tcG9uZW50VHlwZShDbGFzcz5UW10+KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBhbmQgdXNlIE9iamVjdFV0aWxzLmdldENsYXNzKFQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIGFuZCB1c2UgQXJyYXlVdGlscy5uZXdJbnN0YW5jZShDbGFzcz5UPiwgaW50KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBhbmQgdXNlIG51bGwtc2FmZSBTdHJlYW1zLm9mKFQuLi4pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIENsYXNzVXRpbHMuY29tcGFyYXRvcigpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIGFuZCB1c2UgVGhyZWFkVXRpbHMuc2xlZXBRdWlldGx5KER1cmF0aW9uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBhbmQgdXNlIEFycmF5VXRpbHMuc2V0QWxsKFRbXSwgSW50RnVuY3Rpb24pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIGFuZCB1c2UgQXJyYXlVdGlscy5zZXRBbGwoVFtdLCBTdXBwbGllcikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgQm9vbGVhbkNvbnN1bWVyLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIEludFRvQ2hhckZ1bmN0aW9uLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIEludFN0cmVhbXMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgVW5jaGVja2VkRnV0dXJlLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFVuY2hlY2tlZEV4Y2VwdGlvbi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBVbmNoZWNrZWRFeGVjdXRpb25FeGNlcHRpb24uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgVW5jaGVja2VkVGltZW91dEV4Y2VwdGlvbi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBVbmNoZWNrZWRJbnRlcnJ1cHRlZEV4Y2VwdGlvbi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBUaW1lWm9uZXMuR01ULiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIE9iamVjdFV0aWxzLmlkZW50aXR5SGFzaENvZGVIZXgoT2JqZWN0KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBPYmplY3RVdGlscy5oYXNoQ29kZUhleChPYmplY3QpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFN0cmluZ1V0aWxzLnJlbW92ZVN0YXJ0KFN0cmluZywgY2hhcikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNjU5OiBBZGQgbnVsbC1zYWZlIE9iamVjdFV0aWxzLmlzQXJyYXkoKSAjNzU0LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIENvbXBhcmFibGVVdGlscy5tYXgoQSwgQSkgYW5kIENvbXBhcmFibGVVdGlscy5taW4oQSwgQSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgVW5jaGVja2VkUmVmbGVjdGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBhbmQgdXNlIENsYXNzVXRpbHMuaXNQdWJsaWMoQ2xhc3MpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFVuY2hlY2tlZElsbGVnYWxBY2Nlc3NFeGNlcHRpb24uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgTWV0aG9kSW52b2tlcnMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgU3RyZWFtcy5udWxsU2FmZVN0cmVhbShDb2xsZWN0aW9uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBTdHJlYW1zLnRvU3RyZWFtKENvbGxlY3Rpb24pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFN0cmVhbXMuZmFpbGFibGVTdHJlYW0oQ29sbGVjdGlvbikgYW5kIGRlcHJlY2F0ZSBtaXNuYW1lZCBzdHJlYW0oQ29sbGVjdGlvbikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgU3RyZWFtcy5mYWlsYWJsZVN0cmVhbShTdHJlYW0pIGFuZCBkZXByZWNhdGUgbWlzbmFtZWQgc3RyZWFtKFN0cmVhbSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgRW51bVV0aWxzLmdldEVudW1NYXAoQ2xhc3MsIEZ1bmN0aW9uKS4gIzczMCBUaGFua3MgdG8gTWF4d2VsbCBDb2R5LCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgRmx1ZW50Qml0U2V0LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFN0cmVhbXMuaW5zdGFuY2VzT2YoQ2xhc3MsIENvbGxlY3Rpb24pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIEltbXV0YWJsZVBhaXIub2ZOb25OdWxsKEwsIFIpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIEltbXV0YWJsZVRyaXBsZS5vZk5vbk51bGwoTCwgTSwgUikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgTXV0YWJsZVBhaXIub2ZOb25OdWxsKEwsIFIpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIE11dGFibGVUcmlwbGUub2ZOb25OdWxsKEwsIE0sIFIpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFBhaXIub2ZOb25OdWxsKEwsIFIpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFRyaXBsZS5vZk5vbk51bGwoTCwgTSwgUikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgQXJyYXlVdGlscy5jb250YWluc0FueShPYmplY3RbXSwgT2JqZWN0Li4uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBQcm9jZXNzb3IuVHlwZS5BQVJDSF82NC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBQcm9jZXNzb3IuaXNBYXJjaDY0KCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBVcGRhdGUgQXJjaFV0aWxzLmdldFByb2Nlc3NvcihTdHJpbmcpIGZvciAiYWFyY2g2NCIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgSmF2YVZlcnNpb24uSkFWQV8xOC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBKYXZhVmVyc2lvbi5KQVZBXzE5LiBUaGFua3MgdG8gRW1tYW51ZWwgQm91cmcuCm8gICAgICAgICAgICBBZGQgSmF2YVZlcnNpb24uSkFWQV8yMC4gVGhhbmtzIHRvIEVtbWFudWVsIEJvdXJnLgpvICAgICAgICAgICAgQWRkIEphdmFWZXJzaW9uLkpBVkFfMjEuIFRoYW5rcyB0byBFbW1hbnVlbCBCb3VyZy4KbyAgICAgICAgICAgIEFkZCBUaW1lWm9uZXMudG9UaW1lWm9uZShUaW1lWm9uZSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgRnV0dXJlVGFza3MuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgTWVtb2l6ZXIoRnVuY3Rpb24pIGFuZCBNZW1vaXplcihGdW5jdGlvbiwgYm9vbGVhbikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgQ29uc3VtZXJzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIGdpdGh1Yi9jb2RlcWwtYWN0aW9uLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIGNvdmVyYWdlLnltbC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBEdXJhdGlvblV0aWxzLnNpbmNlKFRlbXBvcmFsKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBEdXJhdGlvblV0aWxzLm9mKEZhaWxhYmxlQ29uc3VtZXJ8RmFpbGFibGVSdW5uYmFsZSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgRXhjZXB0aW9uVXRpbHMuZm9yRWFjaChUaHJvd2FibGUsIENvbnN1bWVyPFRocm93YWJsZT4pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIEV4Y2VwdGlvblV0aWxzLnN0cmVhbShUaHJvd2FibGUpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIEV4Y2VwdGlvblV0aWxzLmdldFJvb3RDYXVzZVN0YWNrVHJhY2VMaXN0KFRocm93YWJsZSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgU3lzdGVtVXRpbHMuSVNfT1NfV0lORE9XU18xMS4gVGhhbmtzIHRvIFdpbGwgSGVycm1hbm4sIEdhcnkgR3JlZ29yeSwgUm9sYW5kIEtyZXV6ZXIuCm8gICAgICAgICAgICBBZGQgU3lzdGVtVXRpbHMuSVNfSkFWQV8xNi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBTeXN0ZW1VdGlscy5JU19KQVZBXzE3LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFN5c3RlbVV0aWxzLklTX0pBVkFfMTguIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgU3lzdGVtVXRpbHMuSVNfSkFWQV8xOS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBTeXN0ZW1VdGlscy5JU19KQVZBXzIwLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFN5c3RlbVV0aWxzLklTX0pBVkFfMjEuIFRoYW5rcyB0byBFbW1hbnVlbCBCb3VyZy4KbyBMQU5HLTE2Mjc6IEFkZCBBcnJheVV0aWxzLm9uZUhvdCgpLiBUaGFua3MgdG8gQWxiZXJ0byBTY290dG8sIEF2aWppdCBDaGFrcmFib3J0eSwgU3RldmUgQm9zbWFuLCBCcnVubyBQLiBLaW5vc2hpdGEsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE2NjI6IExldCBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyIG9ubHkgcmVmbGVjdCBnaXZlbiBmaWVsZCBuYW1lcyAjODQ5LiBUaGFua3MgdG8gRGFuaWVsIEF1Z3VzdG8gVmVyb25lemkgU2FsdmFkb3IsIEdhcnkgR3JlZ29yeSwgQnJ1bm8gUC4gS2lub3NoaXRhLgpvICAgICAgICAgICAgQWRkIFN0cmVhbXMub2YoRW51bWVyYXRpb248RT4pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFN0cmVhbXMub2YoSXRlcmFibGU8RT4pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFN0cmVhbXMub2YoSXRlcmF0b3I8RT4pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTY4OTogU2ltcGxlIHN1cHBvcnQgZm9yIE9wdGlvbmFsIGluIE9iamVjdFV0aWxzI2lzRW1wdHkoKSAjOTMzLiBUaGFua3MgdG8gSm9zZXBoIEhlbmRyaXgsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBQcm9jZXNzb3IuVHlwZS5nZXRMYWJlbCgpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFByb2Nlc3Nvci50b1N0cmluZygpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIEhhc2hDb2RlQnVpbGRlci5lcXVhbHMoT2JqZWN0KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBCb29sZWFuVXRpbHMudmFsdWVzKCkgYW5kIGZvckVhY2goKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBDbGFzc1BhdGhVdGlscy5wYWNrYWdlVG9QYXRoKFN0cmluZykgYW5kIHBhdGhUb1BhY2thZ2UoU3RyaW5nKSBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIENhbGVuZGFyVXRpbHMjZ2V0RGF5T2ZZZWFyKCkgIzk2OCBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyAgICAgICAgICAgIEFkZCBOdW1iZXJSYW5nZSwgRG91YmxlUmFuZ2UsIEludGVnZXJSYW5nZSwgTG9uZ1JhbmdlLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIG1pc3NpbmcgZXhjZXB0aW9uIGphdmFkb2MvdGVzdHMgZm9yIHNvbWUgbnVsbCBhcmd1bWVudHMgIzg2OS4gVGhhbmtzIHRvIERpZWdvIE1hcmNpbGlvLCBCcnVubyBQLiBLaW5vc2hpdGEsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBDbGFzc0xvYWRlclV0aWxzLmdldFN5c3RlbVVSTHMoKSBhbmQgZ2V0VGhyZWFkVVJMcygpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFJlZ0V4VXRpbHMuZG90QWxsKCkgYW5kIGRvdEFsbE1hdGNoZXIoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBQYWlyLmFjY2VwdChGYWlsYWJsZUJpQ29uc3VtZXIpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIFBhaXIuYXBwbHkoRmFpbGFibGVCaUZ1bmN0aW9uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE2Nzc6IEFkZCBSZWZsZWN0aW9uRGlmZkJ1aWxkZXIuc2V0RXhjbHVkZUZpZWxkTmFtZXMoLi4uKSBhbmQgRGlmZkV4Y2x1ZGUgYT8gIzgzOC4gVGhhbmtzIHRvIERlbm5pcyBCYWVydGVuLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNjQ3OiBBZGQgYW5kIEV4Y2VwdGlvblV0aWxzLmlzQ2hlY2tlZCgpIGFuZCBpc1VuY2hlY2tlZCgpICMxMDY5IFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLCBEaW1pdHJpb3MgRWZ0aHltaW91LCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgYW5kIHVzZSBFeGNlcHRpb25VdGlscy50aHJvd1VuY2hlY2tlZCh0aHJvd2FibGUpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIExvY2tpbmdWaXNpdG9ycy5jcmVhdGUoTywgUmVhZFdyaXRlTG9jaykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCgpGaXhlZCBCdWdzOgpvIExBTkctMTY0NTogTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKCkgdG8gcmVjb2duaXplIGhleCBpbnRlZ2VycyBwcmVmaXhlZCB3aXRoICsuIFRoYW5rcyB0byBBbGV4IEhlcmJlcnQuCm8gTEFORy0xNjQ2OiBOdW1iZXJVdGlscy5jcmVhdGVOdW1iZXIoKSB0byByZXR1cm4gcmVxdWVzdGVkIGZsb2F0aW5nIHBvaW50IHR5cGUgZm9yIHplcm8uIFRoYW5rcyB0byBBbGV4IEhlcmJlcnQuCm8gICAgICAgICAgICBETUk6IFJhbmRvbSBvYmplY3QgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uY2UgKERNSV9SQU5ET01fVVNFRF9PTkxZX09OQ0UpOyBCZXR0ZXIgbXVsdGktdGhyZWFkZWQgYmVoYXZpb3IuIFRoYW5rcyB0byBTcG90QnVncywgR2FyeSBHcmVnb3J5LgpvIExBTkctMTY0NjogUmVkdW5kYW50IENvbGxlY3Rpb24gb3BlcmF0aW9uLiBVc2UgQ29sbGVjdGlvbnMuZW1wdHlJdGVyYXRvcigpICM3MzguIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgTWFrZSBTdHJlYW1zLnN0cmVhbShDb2xsZWN0aW9uKSBudWxsLXNhZmUuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNjY3OiBBbGxvdyB0ZXN0cyB0byBhY2Nlc3MgamF2YS51dGlsIGNsYXNzZXMgc3VjaCBhcyBBcnJheUxpc3QgaW4gSmF2YSAxNiAjNzg4LiBUaGFua3MgdG8gQW5kcmV3IFRob21hcy4KbyBMQU5HLTE2Njk6IE9wZW5KREsgMTYgRGF5IFBlcmlvZCBQYXJzaW5nICM3OTEuIFRoYW5rcyB0byBBbmRyZXcgVGhvbWFzLgpvIExBTkctMTY2MzogVXBkYXRlIGRvY3VtZW50YXRpb24gdG8gbGlzdCBjb3JyZWN0IGV4Y2VwdGlvbiBmb3IgbnVsbCBhcnJheSBwYXJhbWV0ZXJzICM3ODUuIFRoYW5rcyB0byBBbmRyZXcgVGhvbWFzLgpvICAgICAgICAgICAgRml4aW5nIHJldmVyc2VkIEphdmFkb2MgZGVzY3JpcHRpb25zIGluIFN0b3BXYXRjaCAjNzgxLiBUaGFua3MgdG8gVGh1bmRlcmZvcmdlLgpvIExBTkctMTY3MDogRml4IHR5cG9zIGluIEphdmFEb2MgIzc5NS4gVGhhbmtzIHRvIElnb3IgU2h1dmFsb3YuCm8gICAgICAgICAgICBTaW1wbGlmeSBhc3NlcnRpb25zIHdpdGggZXF1aXZhbGVudCBidXQgbW9yZSBzaW1wbGUuICM3OTIuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgQXZvaWQgbXVsdGlwbGUgZXF1aXZhbGVudCBvY2N1cnJlbmNlcyBvZiB0aGUgc2FtZSBleHByZXNzaW9uLiAjNzk3LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyAgICAgICAgICAgIFJlbW92ZSByZWR1bmRhbnQgaW5pdGlhbGl6ZXJzICM4MDAuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgRml4IE9iamVjdFV0aWxzIEphdmFkb2NzICM3NTUuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgQWRkIHRlc3QgaWRlYSBmb3IgUmFuZ2VUZXN0IGZyb20gUFIgIzgxNSBieSBSdXNoaTk4LCBidXQgd2l0aCBhIG5ldyBjb21tZW50LiBUaGFua3MgdG8gUnVzaGk5OCwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTY3NDogTWFrZSBSYW5nZSBjb25zdHJ1Y3RvcnMgbW9yZSBnZW5lcmljICM4MTAuIFRoYW5rcyB0byBzaW5naGJhbGppdCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVXNlIGZpbmFsIGFuZCBSZW1vdmUgcmVkdW5kYW50IFN0cmluZy4gIzgxMywgIzgxNi4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gICAgICAgICAgICBVc2UgU2V0IGluc3RlYWQgb2YgTGlzdCBmb3IgY2hlY2tpbmcgdGhlIGNvbnRhaW5zKCkgbWV0aG9kICM3MzQuIFRoYW5rcyB0byBDaXByaWFuQm9kbmFyZXNjdS4KbyAgICAgICAgICAgIEphdmFkb2MgZm9yIFN0cmluZ1V0aWxzLnN1YnN0cmluZ0JlZm9yZShTdHJpbmcgc3RyLCBpbnQgc2VwYXJhdG9yKSBkb2Vzbid0IG1lbnRpb24gdGhhdCB0aGUgc2VwYXJhdG9yIGlzIGFuIGludC4gVGhhbmtzIHRvIFJvbGFuZCBLcmV1emVyLgpvICAgICAgICAgICAgRml4IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIFRocmVhZFV0aWxzLmdldFN5c3RlbVRocmVhZEdyb3VwKCkgd2hlbiB0aGUgY3VycmVudCB0aHJlYWQgaXMgc3RvcHBlZC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFycmF5VXRpbHMudG9QcmltaXRpdmUoQm9vbGVhbi4uLikgbnVsbCBhcnJheSBlbGVtZW50cyBtYXAgdG8gZmFsc2UsIGxpa2UgQm9vbGVhbi5wYXJzZUJvb2xlYW4obnVsbCkgYW5kIGl0cyBjYWxsZXJzIHJldHVybiBmYWxzZS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFN0ckJ1aWxkZXIuU3RyQnVpbGRlclJlYWRlci5za2lwKGxvbmcpOiBUaHJvdyBhbiBleGNlcHRpb24gd2hlbiBhbiBpbXBsaWNpdCBuYXJyb3dpbmcgY29udmVyc2lvbiBpbiBhIGNvbXBvdW5kIGFzc2lnbm1lbnQgd291bGQgcmVzdWx0IGluIGluZm9ybWF0aW9uIGxvc3Mgb3IgYSBudW1lcmljIGVycm9yIHN1Y2ggYXMgYW4gb3ZlcmZsb3dzLiBUaGFua3MgdG8gQ29kZVFMLCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBEZXByZWNhdGUgVmFsaWRhdGUjbm90TnVsbChPYmplY3QpIGluIGZhdm9yIG9mIHVzaW5nIE9iamVjdHMjcmVxdWlyZU5vbk51bGwoT2JqZWN0LCBTdHJpbmcpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTQ2MjogVXNlIFRpbWVab25lIGZyb20gY2FsZW5kYXIgaW4gRGF0ZUZvcm1hdFV0aWxzLiBUaGFua3MgdG8gTGlqdW4gTGlhbmcsIEFydW4gQXZhbmF0aGFuLCBUYWkgRHVwcmVlLCBNYXJpYSBCdWlha292YSwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVXBkYXRpbmcgamF2YWRvYyBmb3IgTnVsbFBvaW50ZXJFeGNlcHRpb24gd2hlbiBWYWxpZGF0ZS5ub3ROdWxsKCkgaXMgY2FsbGVkICM4NzAuIFRoYW5rcyB0byBEaWVnbyBNYXJjaWxpby4KbyAgICAgICAgICAgIEZpeGluZyBhbmQgYWRkaW5nIERhdGVVdGlscyBleGNlcHRpb24gSmF2YWRvY3MgIzg3MS4gVGhhbmtzIHRvIERpZWdvIE1hcmNpbGlvLgpvIExBTkctMTY3OTogSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBTdHJpbmdVdGlscy51bndyYXAoU3RyaW5nLCBTdHJpbmcpICM4NDQuIFRoYW5rcyB0byBjbG92ZXIuCm8gTEFORy0xNjc1OiBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFN0cmluZ1V0aWxzLmpvaW4gZm9yIHByaW1pdGl2ZXMgIzgxMi4gVGhhbmtzIHRvIGNsb3Zlci4KbyBMQU5HLTE2NzU6IEZpeGVkIE5QRSBnZXR0aW5nIFN0YWNrIFRyYWNlIGlmIFRocm93YWJsZSBpcyBudWxsICM3MzMuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgTWFrZSBWYWxpZGF0ZS5pc0Fzc2lnbmFibGVGcm9tKCkgY2hlY2sgbnVsbCBpbnB1dHMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnksIEFydHVybyBCZXJuYWwuCm8gICAgICAgICAgICBGaXggSmF2YWRvYyBmb3IgVmFsaWRhdGUuaXNBc3NpZ25hYmxlRnJvbSgpLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyAgICAgICAgICAgIE1ha2UgZmluYWwgbWFwcGluZ0Z1bmN0aW9uIHZhcmlhYmxlICM4NzYuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IHZhcmlhYmxlIGNyZWF0aW9ucyAjODgyLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyAgICAgICAgICAgIE1pbm9yIGNoYW5nZXMgIzc2OS4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gTEFORy0xNjgwOiBGYXN0RGF0ZUZvcm1hdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSAnTCctUGF0dGVybiBmcm9tIFNpbXBsZURhdGVGb3JtYXQuIFRoYW5rcyB0byBNaWNoYWVsIEtyYXVzZSwgU3RldmUgQm9zbWFuLCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBJbmNyZWFzZSB0ZXN0IGNvdmVyYWdlIG9mIENvbXBhcmFibGVVdGlscyBmcm9tIDcxJSB0byAxMDAlICM4OTguIFRoYW5rcyB0byBTdGV2ZSBCb3NtYW4sIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEluY3JlYXNlIG1ldGhvZCB0ZXN0IGNvdmVyYWdlIG9mIE11bHRpbGluZVJlY3Vyc2l2ZVRvU3RyaW5nU3R5bGUgIzg5OS4gVGhhbmtzIHRvIFN0ZXZlIEJvc21hbi4KbyAgICAgICAgICAgIEZpeCB1bnN0YWJsZSBjb3ZlcmFnZSBvZiBDaGFyU2VxdWVuY2VVdGlscyB0ZXN0cyBub3RpY2VkIGR1cmluZyBtZXJnZSBvZiBQUnMgODk4IGFuZCA4OTkgIzkwMS4gVGhhbmtzIHRvIFN0ZXZlIEJvc21hbi4KbyAgICAgICAgICAgIFJld3JpdGUgQ29udmVyc2lvbi5iaW5hcnlCZU1zYjBUb0hleERpZ2l0IHRvIGludmVydCBsb2dpYyBvZiBiaW5hcnlUb0hleERpZ2l0LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyAgICAgICAgICAgIEFsbG93IGV4dGVuc2lvbiBvZiBwcmV2aW91c2x5IGZpbmFsIGNsYXNzZXMgSW1tdXRhYmxlUGFpciBhbmQgSW1tdXRhYmxlVHJpcGxlLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVXBkYXRlIENsYXNzVXRpbHMgSmF2YWRvYyB3aXRoIHNvbWUgbWlzc2luZyB0aHJvd3MgTlBFICM5MTIuIFRoYW5rcyB0byBzaGFsaywgQnJ1bm8gUC4gS2lub3NoaXRhLCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBKYXZhZG9jOiBTdHJpbmdVdGlscy5yZXBlYXQoIiIsICJ4IiwgMykgPSAieHgiOyAjOTE4LiBUaGFua3MgdG8gZ3VpY2FpeXVlLgpvICAgICAgICAgICAgRml4IHR5cG9zICM5MjAsICM5MjMuIFRoYW5rcyB0byBNYXJjIFdyb2JlbC4KbyAgICAgICAgICAgIFNpbXBsaWZ5IGNvbmRpdGlvbiAjOTI1LiBUaGFua3MgdG8gQmhpbWFudG9ybyBTdXJ5byBBZG1vZGpvLgpvICAgICAgICAgICAgU3RyaW5nVXRpbHMuam9pbihJdGVyYWJsZSwgU3RyaW5nKSBzaG91bGQgb25seSByZXR1cm4gbnVsbCB3aGVuIHRoZSBJdGVyYWJsZSBpcyBudWxsLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgU3RyaW5nVXRpbHMuam9pbihJdGVyYXRvciwgU3RyaW5nKSBzaG91bGQgb25seSByZXR1cm4gbnVsbCB3aGVuIHRoZSBJdGVyYXRvciBpcyBudWxsLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIHRlc3RzIHRvIGluY3JlYXNlIGNvdmVyYWdlICM5MDQuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgRXh0ZW5kcyBPYmplY3QgY2xhdXNlcyBhcmUgcmVkdW5kYW50ICM5MzcuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgU2ltcGxpZnkgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4gIzk0MS4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gICAgICAgICAgICBGaXggc29tZSBKYXZhZG9jIGNvbW1lbnRzICM5MzguIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgRGVwcmVjYXRlIGdldE5hbm9zT2ZNaWlsaSgpIG1ldGhvZCB3aXRoIHR5cG8gYW5kIGNyZWF0ZSBwcm9wZXIgZ2V0TmFub3NPZk1pbGxpKCkgIzk0MC4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIERlcHJlY2F0ZSBUaHJlYWRVdGlscyBjb2RlIHRoYXQgZGVmaW5lcyBjdXN0b20gZnVuY3Rpb24gaW50ZXJmYWNlcyBpbiBmYXZvciBvZiBzdG9jayBqYXZhLnV0aWwuZnVuY3Rpb24uUHJlZGljYXRlIHVzYWdlLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgRml4IGxpbmtzIGluIEphdmFkb2MgYW5kIGRvY3VtZW50YXRpb24gIzkyNi4gVGhhbmtzIHRvIE1hcmMgV3JvYmVsLgpvIExBTkctMTYwNDogRGVwcmVjYXRlIFJhbmRvbVV0aWxzIGluIGZhdm9yIG9mIEFwYWNoZSBDb21tb25zIFJORyBVbmlmb3JtUmFuZG9tUHJvdmlkZXIgIzk0Mi4gVGhhbmtzIHRvIEdpbGxlcyBTYWRvd3NraSwgTWFrc3ltIEJvaGFjaG92LCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNjM4OiBBZGRlZCBkb2NzIHJlZ2FyZGluZyB3ZWVrIHllYXIgc3VwcG9ydCAjOTI0LiBUaGFua3MgdG8gU2hhaWxlbmRyYSBTb25pLCBNaWNoYWVsIE9zaXBvdiwgQXJ1biBBdmFuYXRoYW4sIEFuZHJldyBUaG9tYXMsIEJydW5vIFAuIEtpbm9zaGl0YSwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTY5MTogQ2xhc3NVdGlscy5nZXRTaG9ydENhbm9uaWNhbE5hbWUgZG9lc24ndCB1c2UgdGhlIGNhbm9uaWNhbE5hbWUgIzk0OS4gVGhhbmtzIHRvIFRoaXlhZ2FyYWphbiwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVmFsaWRhdGU6IEdldCBlcnJvciBtZXNzYWdlcyB3aXRob3V0IHVzaW5nIFN0cmluZy5mb3JtYXQgd2hlbiB2YXJhcmdzIGlzIGVtcHR5LiBUaGFua3MgdG8gUGlvdHIgU3Rhd2lyZWouCm8gICAgICAgICAgICBTaW1wbGlmeSBleHByZXNzaW9uIChsZW5ndGggaXMgbmV2ZXIgPCAwKSAjOTYyLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyAgICAgICAgICAgIEZpeCBzaW1wbGUgYnJva2VuIGphdmFkb2MuICM5ODEuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgRml4IHR5cG8gIzEwMDEuIFRoYW5rcyB0byBMZWVKdUh5dW4uCm8gICAgICAgICAgICBVc2UgT2JqZWN0cy5yZXF1aXJlTm9uTnVsbCgpIGRpcmVjdGx5ICMxMDIyLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyBMQU5HLTE2OTQ6IE1ldGhvZFV0aWxzLmdldE1hdGNoaW5nTWV0aG9kKCkgZmFpbHMgd2l0aCAiRm91bmQgbXVsdGlwbGUgY2FuZGlkYXRlcyIgIzEwMzMuIFRoYW5rcyB0byBTZWFzb25QYW4uCm8gTEFORy0xNjQzOiBDb25zdHJ1Y3QgQXJyYXlMaXN0IHdpdGggYmV0dGVyIGRlZmF1bHQgc2l6ZSAjMTA0MS4gVGhhbmtzIHRvIGxhdXJlbnRzY2hvZWxlbnMuCm8gICAgICAgICAgICBUaHJlYWRVdGlsc1Rlc3QjdGVzdFRocmVhZEdyb3VwcyB3aWxsIHRlc3QgZmFpbGVkIHdoZW4gdXNpbmcgSnVuaXQ1IHBhcmFsbGVsIHRlc3QgIzEwNTEuIFRoYW5rcyB0byByZW1laW8uCm8gICAgICAgICAgICBTd2FwIHRoZSBvcmRlciBvZiBhc3NlcnRpb24gYXJncyAoZmlyc3QgZXhjZXB0ZWQgdGhlbiBhY3R1YWwpICMxMDU0LiBUaGFua3MgdG8gcmVtZWlvLgpvICAgICAgICAgICAgRml4IHRoZSBjb21tZW50IG9mIEZhaWxhYmxlLCByZWR1bmRhbnQgIi0iICMxMDU2LiBUaGFua3MgdG8gcmVtZWlvLgpvICAgICAgICAgICAgRml4IHRoZSBjb21tZW50IG9mIENvbXBhcmFibGVVdGlscywgdXNpbmcgInNtYWxsZXN0Iiwgbm90ICJsYXJnZXN0IiAjMTA1OC4gVGhhbmtzIHRvIHJlbWVpby4KbyAgICAgICAgICAgIEFubm90YXRpb25VdGlsc1Rlc3QgYW5kIEZvcm1hdHRhYmxlVXRpbHNUZXN0IE9ubHkgdXNlIHN0YXRpYyBpbXBvcnRzIHRvIGltcG9ydCBhc3NlcnQgbWV0aG9kcyBpbiB0ZXN0cyAjMTA1Mi4gVGhhbmtzIHRvIHJlbWVpby4KbyAgICAgICAgICAgIFtMQU5HLTE2ODFdIEZpeCBzb21lIEZpZWxkVXRpbHMgSmF2YWRvY3MgIzEwNDcuIFRoYW5rcyB0byBsYXVyZW50c2Nob2VsZW5zLCBCcnVubyBQLiBLaW5vc2hpdGEsIERpZWdvIE1hcmNpbGlvLgpvICAgICAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IHN0YXRlbWVudCBpbiBEdXJhdGlvbkZvcm1hdFV0aWxzICM5NjUuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvIExBTkctMTY5OTogQ29ycmVjdGVkIHZhbHVlIG9mIFN5c3RlbVV0aWxzLkpBVkFfVkVORE9SICMxMDY2LiBUaGFua3MgdG8gRGFycmVuIENvbGVtYW4uCm8gICAgICAgICAgICBbU3RlcFNlY3VyaXR5XSBjaTogSGFyZGVuIEdpdEh1YiBBY3Rpb25zICMxMDY3LiBUaGFua3MgdG8gc3RlcC1zZWN1cml0eS1ib3QsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFVwZGF0ZSBKYXZhZG9jIGZvciB0aGUgaW5zZXJ0IG1ldGhvZHMgaW4gQXJyYXlVdGlscyAjMTA3OC4gVGhhbmtzIHRvIERpbWl0cmlvcyBFZnRoeW1pb3UuCm8gICAgICAgICAgICBEZXByZWNhdGUgRXhjZXB0aW9uVXRpbHMuRXhjZXB0aW9uVXRpbHMoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE2OTc6IFR5cGVVdGlscy5nZXRSYXdUeXBlKCkgdGhyb3dzIGEgTnVsbFBvaW50ZXJFeGNlcHRpb24gb24gV2lsZGNhcmQgR2VuZXJpY0FycmF5VHlwZS4gVGhhbmtzIHRvIEphbiBBcm5lIFNwYXJrYSwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGluc3RlYWQgb2YgSW50ZXJuYWxFcnJvciBpbiB0aGUgYnVpbGRlciBwYWNrYWdlLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQXZvaWQgTlBFIGluIE11dGFibGVPYmplY3QjZXF1YWxzKCkgZm9yIG51bGwgY29udGVudC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFN5c3RlbVV0aWxzIGZpeCBhbmQgdXBkYXRlcyByZWxhdGVkIHRvIG1hY09TICMxMDg1LiBUaGFua3MgdG8gQWxpIEtoYWxlcWkgWWVrdGEsIEdhcnkgR3JlZ29yeS4KCkNoYW5nZXM6Cm8gICAgICAgICAgICBCdW1wIGFjdGlvbnMvY2FjaGUgZnJvbSAyLjEuNCB0byAzLjAuMTAgIzc0MiwgIzc1MiwgIzc2NCwgIzgzMywgIzg2NywgIzk1OSwgIzk2NC4gVGhhbmtzIHRvIERlcGVuZGFib3QsIFhlbm9BbWVzcywgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQnVtcCBhY3Rpb25zL2NoZWNrb3V0IGZyb20gMiB0byAzLjEuMCAjODE5LCAjODI1LCAjODU5LCAjOTYzLiBUaGFua3MgdG8gRGVwZW5kYWJvdCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQnVtcCBhY3Rpb25zL3NldHVwLWphdmEgZnJvbSB2MS40LjMgdG8gMy41LjEgIzg3OS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJ1bXAgc3BvdGJ1Z3MtbWF2ZW4tcGx1Z2luIGZyb20gNC4yLjAgdG8gNC43LjMuMCAjNzM1LCAjODA4LCAjODIyLCAjODM0LCAjODY4LCAjODk1LCAjOTE5LCAjOTI3LCAjOTQ2LCAjOTg5LiBUaGFua3MgdG8gRGVwZW5kYWJvdCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQnVtcCBzcG90YnVncyBmcm9tIDQuMi4yIHRvIDQuNy4zICM3NDQsICM5MTcsICM5NDcsICM5NzMuIFRoYW5rcyB0byBEZXBlbmRhYm90LCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIG1hdmVuLWNoZWNrc3R5bGUtcGx1Z2luIGZyb20gMy4xLjIgdG8gMy4yLjAgIzk0My4gVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJ1bXAgY2hlY2tzdHlsZSBmcm9tIDguNDEgdG8gOS4zICM3MzksICM3NjgsICM3ODcsICM4MTEsICM4MjQsICM4NDMuIFRoYW5rcyB0byBEZXBlbmRhYm90LCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGVhc3ltb2NrIGZyb20gNC4yIHRvIDUuMS4wICM3NDYsICM5NzIsICM5ODYsICMxMDEyLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgY29tbW9ucy5qYWNvY28udmVyc2lvbiBmcm9tIDAuOC42IHRvIDAuOC44LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQnVtcCBjb21tb25zLmphcGljbXAudmVyc2lvbiBmcm9tIDAuMTUuMiB0byAwLjE2LjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGp1bml0LXBpb25lZXIgZnJvbSAxLjMuOCB0byAxLjkuMSAjNzQ5LCAjNzY3LCAjODMyLCAjODgzLCAjOTg4LCAjOTkxLCAjOTk1LiBUaGFua3MgdG8gRGVwZW5kYWJvdCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQnVtcCBqdW5pdC1ib20gZnJvbSA1LjcuMSB0byA1LjkuMSAjNzYxLCAjODA1LCAjODA3LCAjODM2LCAjOTI4LCAjOTU1LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgbWF2ZW4tamF2YWRvYy1wbHVnaW4gZnJvbSAzLjIuMCB0byAzLjQuMS4gVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJ1bXAgam1oLnZlcnNpb24gZnJvbSAxLjI3IHRvIDEuMzYgIzc5NCwgIzg0MiwgIzg3MiwgIzk5MC4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIG1hdmVuLXBtZC1wbHVnaW4gZnJvbSAzLjE0LjAgdG8gMy4xOS4wICM4MDIsICM4NTgsICM5MDksICM5NDguIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBwbWQgZnJvbSA2LjQwLjAgdG8gNi41Mi4wICM4MzcsICM4NjEsICM4NzMsICM5MDUsICM5MTUsICM5MzIsICM5NDQuIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBiaXouYVF1dGUuYm5kbGliIGZyb20gNS4zLjAgdG8gNi4zLjEgIzgxNCwgIzgzNS4gVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJ1bXAgbWF2ZW4tYnVuZGxlLXBsdWdpbiBmcm9tIDUuMS4xIHRvIDUuMS4yLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgYW5pbWFsLXNuaWZmZXItbWF2ZW4tcGx1Z2luIGZyb20gMS4xOSB0byAxLjIxLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgZXhlYy1tYXZlbi1wbHVnaW4gZnJvbSAxLjYuMCB0byAzLjEuMCAjNTkwLCAjOTIyLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgbWF2ZW4tc3VyZWZpcmUtcGx1Z2luIGZyb20gMy4wLjAtTTUgdG8gMy4wLjAtTTcgIzg4MCwgIzkxMC4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIGFwYWNoZS1yYXQgZnJvbSAwLjEzIHRvIDAuMTQuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGNvbW1vbnMtcGFyZW50IGZyb20gNTMgdG8gNTggIzk1NCwgIzEwMDAsICMxMDExLCAjMTA2MS4gVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEJ1bXAgY29tbW9ucy10ZXh0IGZyb20gMS45IHRvIDEuMTAuMCAjOTU3LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgY29tbW9ucy5wbWQtaW1wbC52ZXJzaW9uIGZyb20gNi40OS4wIHRvIDYuNTEuMCAjOTYxLiBUaGFua3MgdG8gRGVwZW5kYWJvdCwgR2FyeSBHcmVnb3J5LgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBMYW5nLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBMYW5nIHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nLwoKRG93bmxvYWQgcGFnZTogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy9kb3dubG9hZF9sYW5nLmNnaQoKSGF2ZSBmdW4hCi1BcGFjaGUgQ29tbW9ucyBUZWFtCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuMTIuMAogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy4xMi4wIHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgTGFuZy4KQ29tbW9ucyBMYW5nIGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhbnkgCkphdmEgZW52aXJvbm1lbnQuCgpMYW5nIDMuOSBhbmQgb253YXJkcyBub3cgdGFyZ2V0cyBKYXZhIDgsIG1ha2luZyB1c2Ugb2YgZmVhdHVyZXMgdGhhdCBhcnJpdmVkIHdpdGggSmF2YSA4LgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZTogCgogICAgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9hcnRpY2xlM18wLmh0bWwKCkFwYWNoZSBDb21tb25zIExhbmcsIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBmb3IgdGhlCmNsYXNzZXMgdGhhdCBhcmUgaW4gamF2YS5sYW5nJ3MgaGllcmFyY2h5LCBvciBhcmUgY29uc2lkZXJlZCB0byBiZSBzbwpzdGFuZGFyZCBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmxhbmcuCgpOZXcgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcy4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gICAgICAgICAgICBBZGQgQm9vbGVhblV0aWxzLmJvb2xlYW5WYWx1ZXMoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBCb29sZWFuVXRpbHMucHJpbWl0aXZlVmFsdWVzKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTM1OiBBZGQgU3RyaW5nVXRpbHMuY29udGFpbnNBbnlJZ25vcmVDYXNlKENoYXJTZXF1ZW5jZSwgQ2hhclNlcXVlbmNlLi4uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeSwgSXNpcmEgU2VuZXZpcmF0bmUuCm8gTEFORy0xMzU5OiBBZGQgU3RvcFdhdGNoLmdldFN0b3BUaW1lKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnksIEtlZWdhbiBXaXR0LgpvICAgICAgICAgICAgTW9yZSB0ZXN0IGNvdmVyYWdlIGZvciBDaGFyU2VxdWVuY2VVdGlscy4gIzYzMS4gVGhhbmtzIHRvIEVkZ2FyIEFzYXRyeWFuLgpvICAgICAgICAgICAgQWRkIGZsdWVudC1zdHlsZSBBcnJheVNvcnRlci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBhbmQgdXNlIExvY2FsZVV0aWxzLnRvTG9jYWxlKExvY2FsZSkgdG8gYXZvaWQgTlBFcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBGYWlsYWJsZVNob3J0U3VwcGxpZXIsIGhhbmR5IGZvciBKREJDIEFQSXMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgSmF2YVZlcnNpb24uSkFWQV8xNy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE2MzY6IEFkZCBtaXNzaW5nIGJvb2xlYW5bXSBqb2luIG1ldGhvZCAjNjg2LiBUaGFua3MgdG8gLgpvICAgICAgICAgICAgQWRkIFN0cmluZ1V0aWxzLnN1YnN0cmluZ0JlZm9yZShTdHJpbmcsIGludCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgUmFuZ2UuSU5URUdFUi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZCBEdXJhdGlvblV0aWxzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgSW50cm9kdWNlIHRoZSB1c2Ugb2YgQE5vbm51bGwsIGFuZCBATnVsbGFibGUsIGFuZCB0aGUgT2JqZWN0cyBjbGFzcyBhcyBhIGhlbHBlciB0b29sLgpvICAgICAgICAgICAgQWRkIGFuZCB1c2UgdHJ1ZSBhbmQgZmFsc2UgU3RyaW5nIGNvbnN0YW50cyAjNzE0LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIGFuZCB1c2UgT2JqZWN0VXRpbHMucmVxdWlyZU5vbkVtcHR5KCkgIzcxNi4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwsIEdhcnkgR3JlZ29yeS4KCkZpeGVkIEJ1Z3M6Cm8gTEFORy0xNTkyOiBDb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIFJhbmRvbVV0aWxzLm5leHRMb25nKGxvbmcsIGxvbmcpIFRoYW5rcyB0byBIdWFuZyBQaW5nY2FpLCBBbGV4IEhlcmJlcnQuCm8gTEFORy0xNjAwOiBSZXN0b3JlIGhhbmRsaW5nIG9mIGNvbGxlY3Rpb25zIGZvciBub24tSlNPTiBUb1N0cmluZ1N0eWxlICM2MTAuIFRoYW5rcyB0byBNaWNoYWVsIEYuCm8gICAgICAgICAgICBDb250ZXh0ZWRFeGNlcHRpb24gSmF2YWRvYyBhZGQgbWlzc2luZyBzZW1pY29sb24gIzU4MS4gVGhhbmtzIHRvIGlhbWNoYW8xMTI5LgpvIExBTkctMTYwODogUmVzb2x2ZSBKVW5pdCBwaW9uZWVyIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIHVzaW5nIEpVbml0IEJPTS4gVGhhbmtzIHRvIEVkZ2FyIEFzYXRyeWFuLgpvICAgICAgICAgICAgTnVtYmVyVXRpbHNUZXN0IC0gaW5jb3JyZWN0IHR5cGVzIGluIG1pbi9tYXggdGVzdHMgIzYzNC4gVGhhbmtzIHRvIEh1YmVydFdvLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTc5OiBJbXByb3ZlIFN0cmluZ1V0aWxzLnN0cmlwQWNjZW50cyBjb252ZXJzaW9uIG9mIHJlbWFpbmluZyBhY2NlbnRzLiBUaGFua3MgdG8gWGVub0FtZXNzLgpvIExBTkctMTYwNjogU3RyaW5nVXRpbHMuY291bnRNYXRjaGVzIC0gY2xhcmlmeSBKYXZhZG9jLiBUaGFua3MgdG8gUnVzdGVtIEdhbGlldi4KbyBMQU5HLTE1OTE6IFJlbW92ZSByZWR1bmRhbnQgYXJndW1lbnQgZnJvbSBzdWJzdHJpbmcgY2FsbC4gVGhhbmtzIHRvIGJoYXduYTk0LgpvIExBTkctMTYxMzogQmlnRGVjaW1hbCBpcyBjcmVhdGVkIHdoZW4geW91IHBhc3MgaXQgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcywgIzY0Mi4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE1NDE6IEFycmF5VXRpbHMuY29udGFpbnMoKSBhbmQgaW5kZXhPZigpIGZhaWwgdG8gaGFuZGxlIERvdWJsZS5OYU4gIzY0Ny4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE2MTU6IEFycmF5VXRpbHMgY29udGFpbnMoKSBhbmQgaW5kZXhPZigpIGZhaWwgdG8gaGFuZGxlIEZsb2F0Lk5hTiAjICM1NjEuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLCBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBGaXggcG90ZW50aWFsIE5QRSBpbiBUeXBlVXRpbHMuaXNBc3NpZ25hYmxlKFR5cGUsIFBhcmFtZXRlcml6ZWRUeXBlLCBNYXAsIFR5cGU+KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE0MjA6IFR5cGVVdGlscy5pc0Fzc2lnbmFibGUgcmV0dXJucyB3cm9uZyByZXN1bHQgZm9yIEdlbmVyaWNBcnJheVR5cGUgYW5kIFBhcmFtZXRlcml6ZWRUeXBlLCAjNjQzLiBUaGFua3MgdG8gR29yZG9uIEZyYXNlciwgUm9zdGlzbGF2IEtyYXNueSwgQXJ0dXJvIEJlcm5hbCwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTYxMjogdGVzdEdldEFsbEZpZWxkcyBhbmQgdGVzdEdldEZpZWxkc1dpdGhBbm5vdGF0aW9uIHNvbWV0aW1lcyBmYWlsLiBUaGFua3MgdG8gWGluVCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgRml4IEphdmFkb2MgZm9yIFN5c3RlbVV0aWxzLmlzSmF2YVZlcnNpb25BdE1vc3QoKSAjNjM4LiBUaGFua3MgdG8gSm9obiBSLiBEJ09yYXppby4KbyBMQU5HLTE2MTA6IEZpeCBTdHJpbmdVdGlscy51bndyYXAgdGhyb3dzIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gIzYzNi4gVGhhbmtzIHRvIFRvbnkgTGlhbmcuCm8gICAgICAgICAgICBGaXggZm9ybWF0dGluZyBvZiBpc0FueUJsYW5rKCkgYW5kIGlzQW55RW1wdHkoKS4gIzUxMy4gVGhhbmtzIHRvIElzaXJhIFNlbmV2aXJhdG5lLgpvIExBTkctMTYxODogVHlwZVV0aWxzLiBjb250YWluc1R5cGVWYXJpYWJsZXMgZG9lcyBub3Qgc3VwcG9ydCBHZW5lcmljQXJyYXlUeXBlICM2NjEuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvIExBTkctMTYyMjogSmF2YWRvYyBvZiBzb21lIG1ldGhvZHMgaW5jb3JyZWN0bHkgcmVmZXJzIHRvIGFub3RoZXIgbWV0aG9kLCAjNjY3LCAjNjY4LiAjNjcwLiBUaGFua3MgdG8gS2FuYWsgU29ueSwgYW5vbWVuLXMuCm8gTEFORy0xNjIwOiBSZWZpbmUgU3RyaW5nVXRpbHMubGFzdEluZGV4T2ZJZ25vcmVDYXNlICM2NjQuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvIExBTkctMTYxOTogUmVmaW5lIFN0cmluZ1V0aWxzLmFiYnJldmlhdGUgIzY2My4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gTEFORy0xNTg0OiBSZWZpbmUgU3RyaW5nVXRpbHMuaXNOdW1lcmljU3BhY2UgIzU3My4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gTEFORy0xNTgwOiBSZWZpbmUgU3RyaW5nVXRpbHMuZGVsZXRlV2hpdGVzcGFjZSAjNTY5LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyBMQU5HLTE2MjY6IENvcnJlY3Rpb24gaW4gSmF2YWRvYyBvZiBzb21lIG1ldGhvZHMuICM2NzMgVGhhbmtzIHRvIEthbmFrIFNvbnkuCm8gTEFORy0xNjI4OiBKYXZhZG9jIGZvciBSYW5kb21TdHJpbmdVdGlscy5yYW5kb20oKSBsZXR0ZXJzLCBudW1iZXJzIHBhcmFtZXRlcnMgaXMgd3JvbmcuIFRoYW5rcyB0byBKYXJra28gUmFudGF2dW9yaS4KbyAgICAgICAgICAgIENvcnJlY3QgbWFya3VwIGluIEphdmFkb2MgZm9yIHVuYmFsYW5jZWQgYnJhY2VzICM2NzkuIFRoYW5rcyB0byBGZWxpeCBTY2h1bWFjaGVyLgpvIExBTkctMTU0NDogTWV0aG9kVXRpbHMuaW52b2tlTWV0aG9kIE51bGxQb2ludGVyRXhjZXB0aW9uIGluIGNhc2Ugb2YgbnVsbCBpbiBhcmdzIGxpc3QgIzY4MC4gVGhhbmtzIHRvIFBldGVyIE5hZ3ksIE1pY2hhZWwgQnVjaywgR2FyeSBHcmVnb3J5LgpvIExBTkctMTYzNzogRml4IDIgZGlnaXQgd2VlayB5ZWFyIGZvcm1hdHRpbmcgIzY4OC4gVGhhbmtzIHRvIFVyaSBHb25lbiwgR2FyeSBHcmVnb3J5LCBNaWNoYWVsIE9zaXBvdi4KbyAgICAgICAgICAgIEZpeCBicm9rZW4gSmF2YWRvYyBsaW5rcyB0byBjb21tb25zLXRleHQgIzcxMi4gVGhhbmtzIHRvIENocmlzIFNtb3d0b24uCm8gICAgICAgICAgICBBZGQgYW5kIHVzZSBUaHJlYWRVdGlscy5zbGVlcChEdXJhdGlvbikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBBZGQgYW5kIHVzZSBUaHJlYWRVdGlscy5qb2luKFRocmVhZCwgRHVyYXRpb24pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIE9iamVjdFV0aWxzLndhaXQoRHVyYXRpb24pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKQ2hhbmdlczoKbyBMQU5HLTE1OTY6IEFycmF5VXRpbHMudG9QcmltaXRpdmUoT2JqZWN0KSBkb2VzIG5vdCBzdXBwb3J0IGJvb2xlYW4gYW5kIG90aGVyIHR5cGVzICM2MDcuIFRoYW5rcyB0byBSaWNoYXJkIEVja2FydCBkZSBDYXN0aWxoby4KbyAgICAgICAgICAgIEVuYWJsZSBEZXBlbmRhYm90ICM1ODcuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCdW1wIGp1bml0LWp1cGl0ZXIgZnJvbSA1LjYuMiB0byA1LjcuMC4KbyAgICAgICAgICAgIEJ1bXAgc3BvdGJ1Z3MgZnJvbSA0LjEuMiB0byA0LjIuMSwgIzYyNywgIzY3MSwgIzcwOC4gVGhhbmtzIHRvIGNodG9tcGtpLCBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBzcG90YnVncy1tYXZlbi1wbHVnaW4gZnJvbSA0LjAuMCB0byA0LjIuMCwgIzU5MywgIzU5NiwgIzYwOSwgIzYyMywgIzYzMiwgIzY5Mi4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIGJpei5hUXV0ZS5ibmRsaWIgZnJvbSA1LjEuMSB0byA1LjMuMCAjNTkyLCAjNjI4LCAjNzE1LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAganVuaXQtcGlvbmVlciBmcm9tIDAuNi4wIHRvIDEuMS4wLCAjNTg5LCAjNTk3LCAjNjAwLCAjNjI0LCAjNjI1LCAjNjYyLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgY2hlY2tzdHlsZSBmcm9tIDguMzQgdG8gOC40MCwgIzU5NCwgIzYxNCwgIzYzNywgIzY2NSwgIzcwNi4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBCdW1wIGFjdGlvbnMvY2hlY2tvdXQgZnJvbSB2Mi4zLjEgdG8gdjIuMy40ICM2MDEsICM2MzkuIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgQnVtcCBhY3Rpb25zL3NldHVwLWphdmEgZnJvbSB2MS40LjAgdG8gdjEuNC4yICM2MTIuIFRoYW5rcyB0byBEZXBlbmRhYm90LgpvICAgICAgICAgICAgVXBkYXRlIGNvbW1vbnMuamFjb2NvLnZlcnNpb24gMC44LjUgdG8gMC44LjYgKEZpeGVzIEphdmEgMTUgYnVpbGRzKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFVwZGF0ZSBtYXZlbi1zdXJlZmlyZS1wbHVnaW4gMi4yMi4yIC0+IDMuMC4wLU01LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQnVtcCBtYXZlbi1wbWQtcGx1Z2luIGZyb20gMy4xMy4wIHRvIDMuMTQuMCAjNjYwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgam1oLnZlcnNpb24gZnJvbSAxLjIxIHRvIDEuMjcgIzY3NC4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBVcGRhdGUgY29tbW9ucy5qYXBpY21wLnZlcnNpb24gMC4xNC4zIC0+IDAuMTUuMi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFByb2Nlc3Nvci5qYXZhOiBjaGVjayBlbnVtIGVxdWFsaXR5IHdpdGggPT0gaW5zdGVhZCBvZiAuZXF1YWxzKCkgbWV0aG9kICM2OTAuIFRoYW5rcyB0byBBbGkgSy4gTm91cmkuCm8gICAgICAgICAgICBCdW1wIGp1bml0LXBpb25lZXIgZnJvbSAxLjEuMCB0byAxLjMuMCAjNzAyLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgbWF2ZW4tY2hlY2tzdHlsZS1wbHVnaW4gZnJvbSAzLjEuMSB0byAzLjEuMiAjNzA1LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAgYWN0aW9ucy9jYWNoZSBmcm9tIHYyIHRvIHYyLjEuNCAjNzEwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KbyAgICAgICAgICAgIEJ1bXAganVuaXQtYm9tIGZyb20gNS43LjAgdG8gNS43LjEgIzcwNy4gVGhhbmtzIHRvIERlcGVuZGFib3QuCm8gICAgICAgICAgICBNaW5vciBJbXByb3ZlbWVudHMgIzcwMS4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCm8gICAgICAgICAgICBNaW5vciBJbXByb3ZlbWVudDogQWRkIGZpbmFsIHZhcmlhYmxlLnRyeSB0byBtYWtlIHRoZSBjb2RlIHJlYWQtb25seSAjNzAwLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KbyAgICAgICAgICAgIE1pbm9yIEltcHJvdmVtZW50OiBSZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemVyICM2OTkuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgpvICAgICAgICAgICAgVXNlIG93biB2YWxpZGF0b3IgT2JqZWN0VXRpbHMuYW55TnVsbCB0byBjaGVjayBudWxsIFN0cmluZyBpbnB1dCAjNzE4LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgTGFuZywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIENvbW1vbnMgTGFuZyB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy8KCkRvd25sb2FkIHBhZ2U6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvZG93bmxvYWRfbGFuZy5jZ2kKCkhhdmUgZnVuIQotQXBhY2hlIENvbW1vbnMgVGVhbQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjExCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy4xMSB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIExhbmcuCkNvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55IApKYXZhIGVudmlyb25tZW50LgoKTGFuZyAzLjkgYW5kIG9ud2FyZHMgbm93IHRhcmdldHMgSmF2YSA4LCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgOC4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6IAoKICAgIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKTmV3IGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvICAgICAgICAgICAgQWRkIEFycmF5VXRpbHMuaXNTYW1lTGVuZ3RoKCkgdG8gY29tcGFyZSBtb3JlIGFycmF5IHR5cGVzICM0MzAuIFRoYW5rcyB0byBYZW5vQW1lc3MsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIEFkZGVkIHRoZSBMb2NrcyBjbGFzcyBhcyBhIGNvbnZlbmllbnQgcG9zc2liaWxpdHkgdG8gZGVhbCB3aXRoIGxvY2tlZCBvYmplY3RzLgpvIExBTkctMTU2ODogQWRkIHRvIEZ1bmN0aW9uczogRmFpbGFibGVCb29sZWFuU3VwcGxpZXIsIEZhaWxhYmxlSW50U3VwcGxpZXIsIEZhaWxhYmxlTG9uZ1N1cHBsaWVyLCBGYWlsYWJsZURvdWJsZVN1cHBsaWVyLCBhbmQgc28gb24uCm8gTEFORy0xNTY5OiBBZGQgQXJyYXlVdGlscy5nZXQoVFtdLCBpbmRleCwgVCkgdG8gcHJvdmlkZSBhbiBvdXQtb2YtYm91bmRzIGRlZmF1bHQgdmFsdWUuCm8gTEFORy0xNTcwOiBBZGQgSmF2YVZlcnNpb24gZW51bSBjb25zdGFudHMgZm9yIEphdmEgMTQgYW5kIDE1LiAjNTUzLiBUaGFua3MgdG8gRWRnYXIgQXNhdHJ5YW4uCm8gICAgICAgICAgICBBZGQgSmF2YVZlcnNpb24gZW51bSBjb25zdGFudHMgZm9yIEphdmEgMTYuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTU2OiBVc2UgSmF2YSA4IGxhbWJkYXMgYW5kIE1hcCBvcGVyYXRpb25zLiBUaGFua3MgdG8gWGVub0FtZXNzLgpvIExBTkctMTU2NTogQ2hhbmdlIHJlbW92ZUxhc3RGaWVsZFNlcGFyYXRvciB0byB1c2UgZW5kc1dpdGggIzU1MC4gVGhhbmtzIHRvIFhlbm9BbWVzcy4KbyBMQU5HLTE1NTc6IENoYW5nZSBhIFBhdHRlcm4gdG8gYSBzdGF0aWMgZmluYWwgZmllbGQsIGZvciBub3QgbGV0dGluZyBpdCBjb21waWxlIGVhY2ggdGltZSB0aGUgZnVuY3Rpb24gaW52b2tlZC4gIzU0Mi4gVGhhbmtzIHRvIFhlbm9BbWVzcywgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkIEltbXV0YWJsZVBhaXIgZmFjdG9yeSBtZXRob2RzIGxlZnQoKSBhbmQgcmlnaHQoKS4KbyAgICAgICAgICAgIEFkZCBPYmplY3RVdGlscy50b1N0cmluZyhPYmplY3QsIFN1cHBsaWVyPFN0cmluZz4pLgpvICAgICAgICAgICAgQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlscy5zdWJzdHJpbmdBZnRlcihTdHJpbmcsIGludCkuCm8gICAgICAgICAgICBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzLnN1YnN0cmluZ0FmdGVyTGFzdChTdHJpbmcsIGludCkuCgpGaXhlZCBCdWdzOgpvICAgICAgICAgICAgRml4IEphdmFkb2MgZm9yIFN0cmluZ1V0aWxzLmFwcGVuZElmTWlzc2luZ0lnbm9yZUNhc2UoKSAjNTA3LiBUaGFua3MgdG8gY29udGV4dHNodWZmbGluZy4KbyBMQU5HLTE1NjA6IFJlZmluZSBKYXZhZG9jICM1NDUuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTU0OiBGaXggdHlwb3MgIzUzOS4gVGhhbmtzIHRvIFhlbm9BbWVzcy4KbyBMQU5HLTE1NTU6IElnbm9yZWQgZXhjZXB0aW9uIGBpZ25vcmVkYCwgc2hvdWxkIG5vdCBiZSBjYWxsZWQgc28gIzU0MC4gVGhhbmtzIHRvIFhlbm9BbWVzcy4KbyBMQU5HLTE1Mjg6IFN0cmluZ1V0aWxzLnJlcGxhY2VFYWNoUmVwZWF0ZWRseSBnaXZlcyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gIzUwNS4gVGhhbmtzIHRvIEVkd2luIERlbGdhZG8gSC4KbyBMQU5HLTE1NDM6IFtKU09OIHN0cmluZyBmb3IgbWFwc10gVG9TdHJpbmdCdWlsZGVyLnJlZmxlY3Rpb25Ub1N0cmluZyBkb2VzbnQgcmVuZGVyIG5lc3RlZCBtYXBzIGNvcnJlY3RseS4gVGhhbmtzIHRvIFN3YXJhaiBQYWwsIFdhbmRlciBDb3N0YSwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQ29ycmVjdCBKYXZhZG9jcyBvZiBtZXRob2RzIHRoYXQgdXNlIFZhbGlkYXRlLm5vdE51bGwoKSBhbmQgcmVwbGFjZSBzb21lIHVzZXMgb2YgVmFsaWRhdGUuaXNUcnVlKCkgd2l0aCBWYWxpZGF0ZS5ub3ROdWxsKCkuICM1MjUuIFRoYW5rcyB0byBJc2lyYSBTZW5ldmlyYXRuZS4KbyBMQU5HLTE1Mzk6IEFkZCBhbGxOdWxsKCkgYW5kIGFueU51bGwoKSBtZXRob2RzIHRvIE9iamVjdFV0aWxzLiAjNTIyLiBUaGFua3MgdG8gSXNpcmEgU2VuZXZpcmF0bmUuCgpDaGFuZ2VzOgpvICAgICAgICAgICAgUmVmaW5lIHRlc3Qgb3V0cHV0IGZvciBGYXN0RGF0ZVBhcnNlclRlc3QgVGhhbmtzIHRvIEppbiBYdS4KbyBMQU5HLTE1NDk6IENoYXJTZXF1ZW5jZVV0aWxzLmxhc3RJbmRleE9mIDogcmVtYWtlIGl0IFRoYW5rcyB0byBKaW4gWHUuCm8gICAgICAgICAgICByZW1vdmUgZW5jb2RpbmcgYW5kIGRvY0VuY29kaW5nIGFuZCB1c2UgaW5oZXJpdGVkIHZhbHVlcyBmcm9tIGNvbW1vbnMtcGFyZW50IFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gICAgICAgICAgICBTaW1wbGlmeSBudWxsIGNoZWNrcyBpbiBQYWlyLmhhc2hDb2RlKCkgdXNpbmcgT2JqZWN0cy5oYXNoQ29kZSgpLiAjNTE3LiBUaGFua3MgdG8gSXNpcmEgU2VuZXZpcmF0bmUsIEJydW5vIFAuIEtpbm9zaGl0YS4KbyAgICAgICAgICAgIFNpbXBsaWZ5IG51bGwgY2hlY2tzIGluIFRyaXBsZS5oYXNoQ29kZSgpIHVzaW5nIE9iamVjdHMuaGFzaENvZGUoKS4gIzUxNi4gVGhhbmtzIHRvIElzaXJhIFNlbmV2aXJhdG5lLCBCcnVubyBQLiBLaW5vc2hpdGEuCm8gICAgICAgICAgICBTaW1wbGlmeSBzb21lIGlmIHN0YXRlbWVudHMgaW4gU3RyaW5nVXRpbHMuICM1MjEuIFRoYW5rcyB0byBJc2lyYSBTZW5ldmlyYXRuZSwgQnJ1bm8gUC4gS2lub3NoaXRhLgpvIExBTkctMTUzNzogU2ltcGxpZnkgYSBudWxsIGNoZWNrIGluIHRoZSBwcml2YXRlIHJlcGxhY2VFYWNoKCkgbWV0aG9kIG9mIFN0cmluZ1V0aWxzLiAjNTE0LiBUaGFua3MgdG8gSXNpcmEgU2VuZXZpcmF0bmUsIEJydW5vIFAuIEtpbm9zaGl0YS4KbyBMQU5HLTE1MzQ6IFJlcGxhY2Ugc29tZSB1c2FnZXMgb2YgdGhlIHRlcm5hcnkgb3BlcmF0b3Igd2l0aCBjYWxscyB0byBNYXRoLm1heCgpIGFuZCBNYXRoLm1pbigpICM1MTIuIFRoYW5rcyB0byBJc2lyYSBTZW5ldmlyYXRuZSwgQnJ1bm8gUC4gS2lub3NoaXRhLgpvICAgICAgICAgICAgKEphdmFkb2MpIEZpeCByZXR1cm4gdGFnIGZvciB0aHJvd2FibGVPZiooKSBtZXRob2RzICM1MTguIFRoYW5rcyB0byBBcmVuZCB2LiBSZWluZXJzZG9yZmYsIEJydW5vIFAuIEtpbm9zaGl0YS4KbyBMQU5HLTE1NDU6IENoYXJTZXF1ZW5jZVV0aWxzLnJlZ2lvbk1hdGNoZXMgaXMgd3JvbmcgZGVhbGluZyB3aXRoIEdlb3JnaWFuLiBUaGFua3MgdG8gWGVub0FtZXNzLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTUwOiBPcHRpbWl6ZSBBcnJheVV0aWxzOjppc0FycmF5SW5kZXhWYWxpZCBtZXRob2QuICM1NTEuIFRoYW5rcyB0byBFZGdhciBBc2F0cnlhbi4KbyBMQU5HLTE1NjE6IFVzZSBMaXN0LnNvcnQgaW5zdGVhZCBvZiBDb2xsZWN0aW9uLnNvcnQgIzU0Ni4gVGhhbmtzIHRvIFhlbm9BbWVzcy4KbyBMQU5HLTE1NjM6IFVzZSBTdGFuZGFyZENoYXJzZXRzLlVURl84ICM1NDguIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTY0OiBVc2UgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCBpbnN0ZWFkb2YgQXJyYXlzLmFzTGlzdCB3aGVuIHRoZXJlIGJlIG9ubHkgb25lIGVsZW1lbnQuICM1NDkuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTUzOiBDaGFuZ2UgYXJyYXkgc3R5bGUgZnJvbSBgaW50IGFbXWAgdG8gYGludFtdIGFgICM1MzcuIFRoYW5rcyB0byBYZW5vQW1lc3MuCm8gTEFORy0xNTUyOiBDaGFuZ2UgZnJvbSBhZGRBbGwgdG8gY29uc3RydWN0b3JzIGZvciBzb21lIExpc3QgIzUzNi4gVGhhbmtzIHRvIFhlbm9BbWVzcy4KbyBMQU5HLTE1NTg6IFNpbXBsaWZ5IGlmIGFzIHNvbWUgY29uZGl0aW9ucyBhcmUgY292ZXJlZCBieSBvdGhlcnMgIzU0My4gVGhhbmtzIHRvIFhlbm9BbWVzcy4KbyBMQU5HLTE1Njc6IEZpeGVkIEphdmFkb2NzIGZvciBzZXRUZXN0UmVjdXJzaXZlKCkgIzU1Ni4gVGhhbmtzIHRvIE1pZ3VlbCBNdfFveiwgQnJ1bm8gUC4gS2lub3NoaXRhLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTQyOiBUb1N0cmluZ0J1aWxkZXIucmVmbGVjdGlvblRvU3RyaW5nIC0gV3JvbmcgSlNPTiBmb3JtYXQgd2hlbiBvYmplY3QgaGFzIGEgTGlzdCBvZiBFbnVtLiBUaGFua3MgdG8gVHI/biBOZz9jIEtob2EsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIE1ha2Ugb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkNoYXJTZXF1ZW5jZVV0aWxzLnRvQ2hhckFycmF5KENoYXJTZXF1ZW5jZSkgcHVibGljLgpvICAgICAgICAgICAgb3JnLmFwYWNoZS5jb21tb25zOmNvbW1vbnMtcGFyZW50IDUwIC0+IDUxLgpvICAgICAgICAgICAgb3JnLmp1bml0LXBpb25lZXI6anVuaXQtcGlvbmVlciAwLjUuNCAtPiAwLjYuMC4KbyAgICAgICAgICAgIG9yZy5qdW5pdC5qdXBpdGVyOmp1bml0LWp1cGl0ZXIgNS42LjAgLT4gNS42LjIuCm8gICAgICAgICAgICBjb20uZ2l0aHViLnNwb3RidWdzOnNwb3RidWdzIDQuMC4wIC0+IDQuMC42LgpvICAgICAgICAgICAgY29tLnB1cHB5Y3Jhd2wudG9vbHM6Y2hlY2tzdHlsZSA4LjI5IC0+IDguMzQuCm8gICAgICAgICAgICBjb21tb25zLnN1cmVmaXJlLnZlcnNpb24gMy4wLjAtTTQgLT4gMy4wLjAtTTUuLgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBMYW5nLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBMYW5nIHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nLwoKRG93bmxvYWQgcGFnZTogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy9kb3dubG9hZF9jc3YuY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy4xMAogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuMTAgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueSAKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy45IGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgOCwgbWFraW5nIHVzZSBvZiBmZWF0dXJlcyB0aGF0IGFycml2ZWQgd2l0aCBKYXZhIDguCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOiAKCiAgICBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KCk5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLiBSZXF1aXJlcyBKYXZhIDgsIHN1cHBvcnRzIEphdmEgOSwgMTAsIDExLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBMQU5HLTE0NTc6IEFkZCBFeGNlcHRpb25VdGlscy50aHJvd2FibGVPZlR5cGUoVGhyb3dhYmxlLCBDbGFzcykgYW5kIGZyaWVuZHMuCm8gTEFORy0xNDU4OiBBZGQgRU1QVFlfQVJSQVkgY29uc3RhbnRzIHRvIGNsYXNzZXMgaW4gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnR1cGxlLgpvIExBTkctMTQ2MTogQWRkIG51bGwtc2FmZSBTdHJpbmdVdGlscyBBUElzIHRvIHdyYXAgU3RyaW5nI2dldEJ5dGVzKFtDaGFyc2V0fFN0cmluZ10pLgpvIExBTkctMTQ2NzogQWRkIHplcm8gYXJnIGNvbnN0cnVjdG9yIGZvciBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuTm90SW1wbGVtZW50ZWRFeGNlcHRpb24uCm8gTEFORy0xNDcwOiBBZGQgQXJyYXlVdGlscy5hZGRGaXJzdCgpIG1ldGhvZHMuCm8gTEFORy0xNDc5OiBBZGQgUmFuZ2UuZml0KFQpIHRvIGZpdCBhIHZhbHVlIGludG8gYSByYW5nZS4KbyBMQU5HLTE0Nzc6IEFkZGVkIEZ1bmN0aW9ucy5hcyosIGFuZCB0ZXN0cyB0aGVyZW9mLCBhcyBzdWdnZXN0ZWQgYnkgUGV0ZXIgVmVyaGFzCm8gTEFORy0xNDg1OiBBZGQgZ2V0dGVycyBmb3IgbGhzIGFuZCByaHMgb2JqZWN0cyBpbiBEaWZmUmVzdWx0ICM0NTEuIFRoYW5rcyB0byBuaWNvbGFzYmQuCm8gTEFORy0xNDg2OiBHZW5lcmlmeSBidWlsZGVyIGNsYXNzZXMgRGlmZmFibGUsIERpZmZCdWlsZGVyLCBhbmQgRGlmZlJlc3VsdCAjNDUyLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTQ4NzogQWRkIENsYXNzTG9hZGVyVXRpbHMgd2l0aCB0b1N0cmluZygpIGltcGxlbWVudGF0aW9ucyAjNDUzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTQ4OTogQWRkIG51bGwtc2FmZSBBUElzIGFzIFN0cmluZ1V0aWxzLnRvUm9vdExvd2VyQ2FzZShTdHJpbmcpIGFuZCBTdHJpbmdVdGlscy50b1Jvb3RVcHBlckNhc2UoU3RyaW5nKSAjNDU2LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTQ5NDogQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50aW1lLkNhbGVuZGFycy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE0OTU6IEFkZCBFbnVtVXRpbHMgZ2V0RW51bSgpIG1ldGhvZHMgd2l0aCBkZWZhdWx0IHZhbHVlcyAjNDc1LiBUaGFua3MgdG8gQ2hlb25nIFZvb24gTGVvbmcuCm8gTEFORy0xMTc3OiBBZGRlZCBpbmRleGVzT2YgbWV0aG9kcyBhbmQgc2ltcGxpZmllZCByZW1vdmVBbGxPY2N1cmVuY2VzICM0NzEuIFRoYW5rcyB0byBMaWVsIEZyaWRtYW4uCm8gTEFORy0xNDk4OiBBZGQgc3VwcG9ydCBvZiBsYW1iZGEgdmFsdWUgZXZhbHVhdGlvbiBmb3IgZGVmYXVsdGluZyBtZXRob2RzICM0MTYuIFRoYW5rcyB0byBMeXNlcmdpZCwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTUwMzogQWRkIGZhY3RvcnkgbWV0aG9kcyB0byBQYWlyIGNsYXNzZXMgd2l0aCBNYXAuRW50cnkgaW5wdXQuICM0NTQuIFRoYW5rcyB0byBYZW5vQW1lc3MsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE1MDU6IEFkZCBTdG9wV2F0Y2ggY29udmVuaWVuY2UgQVBJcyB0byBmb3JtYXQgdGltZXMgYW5kIGNyZWF0ZSBhIHNpbXBsZSBpbnN0YW5jZS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE1MDY6IEFsbG93IGEgU3RvcFdhdGNoIHRvIGNhcnJ5IGFuIG9wdGlvbmFsIG1lc3NhZ2UuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNTA3OiBBZGQgQ29tcGFyYWJsZVV0aWxzICMzOTguIFRoYW5rcyB0byBTYW0gS3J1Z2xvdiwgTWFyayBEYWNlaywgTWFyYyBNYWdvbiwgUGFzY2FsIFNjaHVtYWNoZXIsIFJvYiBUb21wa2lucywgQnJ1bm8gUC4gS2lub3NoaXRhLCBBbWV5IEphZGl5ZSwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTUwODogQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscy5nZXRVc2VyTmFtZSgpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTUwOTogQWRkIE9iamVjdFRvU3RyaW5nQ29tcGFyYXRvci4gIzQ4My4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE1MTA6IEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuYXJjaC5Qcm9jZXNzb3IuQXJjaC5nZXRMYWJlbCgpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTUxMjogQWRkIElTX0pBVkFfMTQgYW5kIElTX0pBVkFfMTUgdG8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTUxMzogT2JqZWN0VXRpbHM6IEdldCBmaXJzdCBub24tbnVsbCBzdXBwbGllciB2YWx1ZS4gVGhhbmtzIHRvIEJlcm5oYXJkIEJvbmlnbCwgR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgQWRkZWQgdGhlIFN0cmVhbXMgY2xhc3MsIGFuZCBGdW5jdGlvbnMuc3RyZWFtKCkgYXMgYW4gYWNjZXNzb3IgdGhlcmVvZi4KCkZpeGVkIEJ1Z3M6Cm8gTEFORy0xNTE0OiBNYWtlIHRlc3QgbW9yZSBzdGFibGUgYnkgd3JhcHBpbmcgYXNzZXJ0aW9ucyBpbiBoYXNoc2V0LiBUaGFua3MgdG8gY29udGV4dHNodWZmbGluZy4KbyBMQU5HLTE0NTA6IEdlbmVyYXRlIEphdmFkb2MgamFyIG9uIGJ1aWxkLgpvIExBTkctMTQ2MDogVHJpdmlhbDogeWVhciBvZiByZWxlYXNlIGZvciAzLjkgc2F5cyAyMDE4LCBzaG91bGQgYmUgMjAxOSBUaGFua3MgdG8gTGFycnkgV2VzdC4KbyBMQU5HLTE0NzY6IFVzZSBzeW5jaHJvbml6ZSBvbiBhIHNldCBjcmVhdGVkIHdpdGggQ29sbGVjdGlvbnMuc3luY2hyb25pemVkU2V0IGJlZm9yZSBpdGVyYXRpbmcgVGhhbmtzIHRvIGVtb3BlcnMuCm8gTEFORy0xNDc1OiBTdHJpbmdVdGlscy51bndyYXAgaW5jb3JyZWN0IHRocm93IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uIFRoYW5rcyB0byBzdHp4LgpvIExBTkctMTQwNjogU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpbiBTdHJpbmdVdGlscy5yZXBsYWNlSWdub3JlQ2FzZSAjNDIzLiBUaGFua3MgdG8gZ2VyYXRvcnJlcy4KbyBMQU5HLTE0NTM6IFN0cmluZ1V0aWxzLnJlbW92ZUlnbm9yZUNhc2UoIj9hIiwgImEiKSB0aHJvd3MgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiAjNDIzLiBUaGFua3MgdG8gZ2VyYXRvcnJlcy4KbyBMQU5HLTE0MjY6IENvcnJlY3RlZCB1c2FnZSBleGFtcGxlcyBpbiBKYXZhZG9jcyAjNDU4LiBUaGFua3MgdG8gQnJvd2VyLCBNaWtrbyBNYXVudSwgU3VyYWogR2F1dGFtLgpvIExBTkctMTQ2MzogU3RyaW5nVXRpbHMgYWJicmV2aWF0ZSByZXR1cm5zIFN0cmluZyBvZiBsZW5ndGggZ3JlYXRlciB0aGFuIG1heFdpZHRoICM0NzcuIFRoYW5rcyB0byBiYmVja2VyY3NjYywgR2FyeSBHcmVnb3J5LgpvIExBTkctMTUwMDogVGVzdCBtYXkgZmFpbCBkdWUgdG8gYSBkaWZmZXJlbnQgb3JkZXIgb2YgZmllbGRzIHJldHVybmVkIGJ5IHJlZmxlY3Rpb24gYXBpICM0ODAuIFRoYW5rcyB0byBjb250ZXh0c2h1ZmZsaW5nLgpvIExBTkctMTUwMTogU29ydCBmaWVsZHMgaW4gUmVmbGVjdGlvblRvU3RyaW5nQnVpbGRlciBmb3IgZGV0ZXJtaW5pc3RpYyBvcmRlciAjNDgxLiBUaGFua3MgdG8gY29udGV4dHNodWZmbGluZy4KbyBMQU5HLTE0MzM6IE1ldGhvZFV0aWxzIHdpbGwgdGhyb3cgYSBOUEUgaWYgaW52b2tlTWV0aG9kKCkgaXMgY2FsbGVkIGZvciBhIHZhci1hcmdzIG1ldGhvZCAjNDA3LiBUaGFua3MgdG8gQ2hyaXN0aWFuIEZyYW56ZW4uCm8gTEFORy0xNTE4OiBNZXRob2RVdGlscy5nZXRBbm5vdGF0aW9uKCkgd2l0aCBzZWFyY2hTdXBlcnMgPSB0cnVlIGRvZXMgbm90IHdvcmsgaWYgc3VwZXIgaXMgZ2VuZXJpYyAjNDk0LiBUaGFua3MgdG8gTWljaGVsZSBQcmV0aSwgQnJ1bm8gUC4gS2lub3NoaXRhLCBHYXJ5IEdyZWdvcnkuCgpDaGFuZ2VzOgpvIExBTkctMTQzNzogUmVtb3ZlIHJlZHVuZGFudCBpZiBzdGF0ZW1lbnRzIGluIGpvaW4gbWV0aG9kcyAjNDExLiBUaGFua3MgdG8gQW5kcmVpIFRyb2llLgpvICAgICAgICAgICAgY29tbW9ucy5qYXBpY21wLnZlcnNpb24gMC4xMy4xIC0+IDAuMTQuMS4KbyAgICAgICAgICAgIGp1bml0LWp1cGl0ZXIgNS41LjAgLT4gNS41LjEuCm8gICAgICAgICAgICBqdW5pdC1qdXBpdGVyIDUuNS4xIC0+IDUuNS4yLgpvICAgICAgICAgICAgSW1wcm92ZSBKYXZhZG9jIGJhc2VkIG9uIHRoZSBkaXNjdXNzaW9uIG9mIHRoZSBHaXRIdWIgUFIgIzQ1OS4gVGhhbmtzIHRvIEpvbmF0aGFuIExlaXRzY2h1aCwgQnJ1bm8gUC4gS2lub3NoaXRhLCBSb2IgVG9tcGtpbnMsIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIG1hdmVuLWNoZWNrc3R5bGUtcGx1Z2luIDMuMC4wIC0+IDMuMS4wLgpvIExBTkctNjk2OiAgVXBkYXRlIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgaXNzdWUgTEFORy02OTYgIzQ0OS4gVGhhbmtzIHRvIFBldGVyIFZlcmhhcy4KbyAgICAgICAgICAgIEFubm90YXRpb25VdGlscyBsaXR0bGUgY2xlYW51cCAjNDY3LiBUaGFua3MgdG8gUGV0ZXIgVmVyaGFzLgpvICAgICAgICAgICAgVXBkYXRlIHRlc3QgZGVwZW5kZW5jeTogb3JnLmVhc3ltb2NrOmVhc3ltb2NrIDQuMC4yIC0+IDQuMS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFVwZGF0ZSB0ZXN0IGRlcGVuZGVuY3k6IG9yZy5oYW1jcmVzdDpoYW1jcmVzdCAyLjEgLT4gMi4yLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgVXBkYXRlIHRlc3QgZGVwZW5kZW5jeTogb3JnLmp1bml0LXBpb25lZXI6anVuaXQtcGlvbmVlciAwLjMuMCAtPiAwLjQuMi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFVwZGF0ZSBidWlsZCBkZXBlbmRlbmN5OiBjb20ucHVwcHljcmF3bC50b29sczpjaGVja3N0eWxlIDguMTggLT4gOC4yNy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIFVwZGF0ZSBQT00gcGFyZW50OiBvcmcuYXBhY2hlLmNvbW1vbnM6Y29tbW9ucy1wYXJlbnQgNDggLT4gNTAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBCb29sZWFuVXRpbHMgSmF2YWRvYyAjNDY5LiBUaGFua3MgdG8gUGV0ZXIgVmVyaGFzLgpvICAgICAgICAgICAgRnVuY3Rpb25zIEphdmFkb2MgIzQ2Ni4gVGhhbmtzIHRvIFBldGVyIFZlcmhhcy4KbyAgICAgICAgICAgIG9yZy5lYXN5bW9jazplYXN5bW9jayA0LjEgLT4gNC4yLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgb3JnLmp1bml0LXBpb25lZXI6anVuaXQtcGlvbmVlciAwLjQuMiAtPiAwLjUuNC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgIG9yZy5qdW5pdC5qdXBpdGVyOmp1bml0LWp1cGl0ZXIgNS41LjIgLT4gNS42LjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICBVc2UgSmF2YWRvYyB7QGNvZGV9IGluc3RlYWQgb2YgcHJlIHRhZ3MuICM0OTAuIFRoYW5rcyB0byBQZXRlciBWZXJoYXMuCm8gICAgICAgICAgICBFeGNlcHRpb25VdGlsc1Rlc3QgdG8gMTAwJSAjNDg2LiBUaGFua3MgdG8gUGV0ZXIgVmVyaGFzLgpvICAgICAgICAgICAgUmV1c2Ugb3duIGNvZGUgaW4gRnVuY3Rpb25zLmphdmEgIzQ5My4gVGhhbmtzIHRvIFBldGVyIFZlcmhhcy4KbyBMQU5HLTE1MjM6IEF2b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gaW4gU3RyaW5nVXRpbHMud3JhcElmTWlzc2luZy4gIzQ5Ni4gVGhhbmtzIHRvIEVkZ2FyIEFzYXRyeWFuLCBCcnVubyBQLiBLaW5vc2hpdGEsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE1MjU6IEludGVybmFsbHkgdXNlIFZhbGlkYXRlLm5vdE51bGwoZm9vLCAuLi4pIGluc3RlYWQgb2YgVmFsaWRhdGUuaXNUcnVlKGZvbyAhPSBudWxsLCAuLi4pLiBUaGFua3MgdG8gRWRnYXIgQXNhdHJ5YW4sIEJydW5vIFAuIEtpbm9zaGl0YSwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTUyNjogQWRkIDEgYW5kIDAgaW4gdG9Cb29sZWFuT2JqZWN0KGZpbmFsIFN0cmluZyBzdHIpICM1MDIuIFRoYW5rcyB0byBEb21pbmlrIFNjaHJhbW0uCm8gTEFORy0xNTI3OiBSZW1vdmUgYW4gcmVkdW5kYW50IGFyZ3VtZW50IGNoZWNrIGluIE51bWJlclV0aWxzICM1MDQuIFRoYW5rcyB0byBQZW5neXUgTmllLgpvIExBTkctMTUyOTogRGVwcmVjYXRlIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcnJheVV0aWxzLnJlbW92ZUFsbE9jY3VyZW5jZXMoKikgZm9yIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcnJheVV0aWxzLnJlbW92ZUFsbE9jY3VycmVuY2VzKCopLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LCBCaWxsQ2luZHksIEJydW5vIFAuIEtpbm9zaGl0YS4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgTGFuZywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIENvbW1vbnMgTGFuZyB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy8KCkRvd25sb2FkIHBhZ2U6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvZG93bmxvYWRfbGFuZy5jZ2kKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuOQogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuOSB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIExhbmcuCkNvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55IApKYXZhIGVudmlyb25tZW50LgoKTGFuZyAzLjkgYW5kIG9ud2FyZHMgbm93IHRhcmdldHMgSmF2YSA4LCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgOC4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6IAoKICAgIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKTmV3IGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuIFJlcXVpcmVzIEphdmEgOCwgc3VwcG9ydHMgSmF2YSA5LCAxMCwgMTEKCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gTEFORy0xNDQyOiBKYXZhZG9jIHBvaW50aW5nIHRvIENvbW1vbnMgUk5HLgpvICAgICAgICAgICAgQWRkaW5nIHRoZSBGdW5jdGlvbnMgY2xhc3MuCm8gTEFORy0xNDExOiBBZGQgaXNFbXB0eSBtZXRob2QgdG8gT2JqZWN0VXRpbHMgVGhhbmtzIHRvIEFsZXhhbmRlciBUc3ZldGtvdi4KbyBMQU5HLTE0MjI6IEFkZCBudWxsLXNhZmUgU3RyaW5nVXRpbHMudmFsdWVPZihjaGFyW10pIHRvIGRlbGVnYXRlIHRvIFN0cmluZy52YWx1ZU9mKGNoYXJbXSkKbyBMQU5HLTE0Mjc6IEFkZCBBUEkgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLmlzSmF2YVZlcnNpb25BdE1vc3QoSmF2YVZlcnNpb24pCgoKQ2hhbmdlczoKbyBMQU5HLTE0MTY6IEFkZCBtb3JlIFN5c3RlbVV0aWxzLklTX0pBVkFfWFggdmFyaWFudHMuCm8gTEFORy0xNDE2OiBVcGRhdGUgdG8gSlVuaXQgNQpvIExBTkctMTQxNzogQWRkIEBGdW5jdGlvbmFsSW50ZXJmYWNlIHRvIFRocmVhZFByZWRpY2F0ZSBhbmQgVGhyZWFkR3JvdXBQcmVkaWNhdGUKbyBMQU5HLTE0MTU6IFVwZGF0ZSBKYXZhIExhbmd1YWdlIHJlcXVpcmVtZW50IHRvIDEuOApvIExBTkctMTQzNjogQ29uc29saWRhdGUgdGhlIFN0cmluZ1V0aWxzIGVxdWFscyBhbmQgZXF1YWxzSWdub3JlQ2FzZSBKYXZhZG9jIGFuZCBpbXBsZW1lbnRhdGlvbgpvICAgICAgICAgICAgKGRvYykgRml4IGphdmFkb2MgZm9yICdzdGFydEluZGV4JyBwYXJhbWV0ZXIgb2YgU3RyaW5nVXRpbHMuam9pbigpIG1ldGhvZHMuIEdpdEh1YiBQUiAjNDEyLiBUaGFua3MgdG8gQW5kcmVpIFRyb2llIGFmdDkwLgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBMYW5nLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBMYW5nIHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nLwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy44LjEKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjguMSB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIExhbmcuCkNvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55CkphdmEgZW52aXJvbm1lbnQuCgpMYW5nIDMuMCBhbmQgb253YXJkcyBub3cgdGFyZ2V0cyBKYXZhIDcuMCwgbWFraW5nIHVzZSBvZiBmZWF0dXJlcyB0aGF0IGFycml2ZWQgd2l0aCBKYXZhIDcuMC4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6CgogICAgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9hcnRpY2xlM18wLmh0bWwKCkFwYWNoZSBDb21tb25zIExhbmcsIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBmb3IgdGhlCmNsYXNzZXMgdGhhdCBhcmUgaW4gamF2YS5sYW5nJ3MgaGllcmFyY2h5LCBvciBhcmUgY29uc2lkZXJlZCB0byBiZSBzbwpzdGFuZGFyZCBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmxhbmcuCgpUaGlzIHJlbGVhc2UgaXMgYSBidWdmaXggZm9yIFJlc3RvcmluZyBCdW5kbGUtU3ltYm9saWNOYW1lIGluIHRoZSBNQU5JRkVTVC5tZiBmaWxlLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCgpGaXhlZCBCdWdzOgpvIExBTkctMTQxOTogUmVzdG9yZSBCdW5kbGVTeW1ib2xpY05hbWUgZm9yIE9TR2kKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuOAogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuOCB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIExhbmcuCkNvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55CkphdmEgZW52aXJvbm1lbnQuCgpMYW5nIDMuMCBhbmQgb253YXJkcyBub3cgdGFyZ2V0cyBKYXZhIDcuMCwgbWFraW5nIHVzZSBvZiBmZWF0dXJlcyB0aGF0IGFycml2ZWQgd2l0aCBKYXZhIDcuMC4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6CgogICAgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9hcnRpY2xlM18wLmh0bWwKCkFwYWNoZSBDb21tb25zIExhbmcsIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBmb3IgdGhlCmNsYXNzZXMgdGhhdCBhcmUgaW4gamF2YS5sYW5nJ3MgaGllcmFyY2h5LCBvciBhcmUgY29uc2lkZXJlZCB0byBiZSBzbwpzdGFuZGFyZCBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmxhbmcuCgpOZXcgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcy4gUmVxdWlyZXMgSmF2YSA3LCBzdXBwb3J0cyBKYXZhIDgsIDksIDEwLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBMQU5HLTEzNTI6IEVudW1VdGlscy5nZXRFbnVtSWdub3JlQ2FzZSBhbmQgaXNWYWxpZEVudW1JZ25vcmVDYXNlIG1ldGhvZHMgYWRkZWQgVGhhbmtzIHRvIFJ1c2xhbiBTaWJnYXR1bGxpbi4KbyBMQU5HLTEzNzI6IEFkZCBUb1N0cmluZ1N1bW1hcnkgYW5ub3RhdGlvbiBUaGFua3MgdG8gU+lyZ2lvIE96YWtpLgpvIExBTkctMTM1NjogQWRkIGJ5cGFzcyBvcHRpb24gZm9yIGNsYXNzZXMgdG8gcmVjdXJzaXZlIGFuZCByZWZsZWN0aXZlIEVxdWFsc0J1aWxkZXIgVGhhbmtzIHRvIFlhdGhvcyBVRy4KbyBMQU5HLTEzOTE6IEltcHJvdmUgSmF2YWRvYyBmb3IgU3RyaW5nVXRpbHMuaXNBbnlFbXB0eShudWxsKSBUaGFua3MgdG8gU2F1cm8gTWF0dWxsaSwgT2xlZyBDaHViYXJ5b3YuCm8gTEFORy0xMzkzOiBBZGQgQVBJIFN5c3RlbVV0aWxzLlN0cmluZyBnZXRFbnZpcm9ubWVudFZhcmlhYmxlKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgZGVmYXVsdFZhbHVlKSBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTM5NDogb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzIHNob3VsZCBub3Qgd3JpdGUgdG8gU3lzdGVtLmVyci4gVGhhbmtzIHRvIFNlYmIsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTEyMzg6IEFkZCBSZWdleFV0aWxzIGNsYXNzIGluc3RlYWQgb2Ygb3ZlcmxvYWRpbmcgbWV0aG9kcyBpbiBTdHJpbmdVdGlscyB0aGF0IHRha2UgYSByZWdleCB0byB0YWtlIHByZWNvbXBpbGVkIFBhdHRlcm4uIFRoYW5rcyB0byBDaHJpc3RvcGhlciBDb3JkZWlybywgR2FyeSBHcmVnb3J5LCBCcnVubyBQLiBLaW5vc2hpdGEsIE9sZWcgQ2h1YmFyeW92LgpvIExBTkctMTM5MDogU3RyaW5nVXRpbHMuam9pbigpIHdpdGggc3VwcG9ydCBmb3IgTGlzdDw/PiB3aXRoIGNvbmZpZ3VyYWJsZSBzdGFydC9lbmQgaW5kaWNlcy4gVGhhbmtzIHRvIEpvY2hlbiBTY2hhbGFuZGEuCm8gTEFORy0xMzkyOiBNZXRob2RzIGZvciBnZXR0aW5nIGZpcnN0IG5vbiBlbXB0eSBvciBub24gYmxhbmsgdmFsdWUgVGhhbmtzIHRvIEplZmYgTmVsc29uLgpvIExBTkctMTQwODogUm91bmRpbmcgdXRpbGl0aWVzIGZvciBjb252ZXJ0aW5nIHRvIEJpZ0RlY2ltYWwKCkZpeGVkIEJ1Z3M6Cm8gTEFORy0xMzgwOiBGYXN0RGF0ZVBhcnNlciB0b28gc3RyaWN0IG9uIGFiYnJldmlhdGVkIHNob3J0IG1vbnRoIHN5bWJvbHMgVGhhbmtzIHRvIE1hcmt1cyBKZWxzbWEuCm8gTEFORy0xMzk2OiBKc29uVG9TdHJpbmdTdHlsZSBkb2VzIG5vdCBlc2NhcGUgc3RyaW5nIG5hbWVzCm8gTEFORy0xMzk1OiBKc29uVG9TdHJpbmdTdHlsZSBkb2VzIG5vdCBlc2NhcGUgZG91YmxlIHF1b3RlIGluIGEgc3RyaW5nIHZhbHVlIFRoYW5rcyB0byBKaW0gR2FuLgpvIExBTkctMTM4NDogTmV3IEphdmEgdmVyc2lvbiAoIjExIikgbXVzdCBiZSBoYW5kbGVkIFRoYW5rcyB0byBJYW4gWW91bmcuCm8gTEFORy0xMzY0OiBFeGNlcHRpb25VdGlscyNnZXRSb290Q2F1c2UoVGhyb3dhYmxlIHQpIHNob3VsZCByZXR1cm4gdCBpZiBubyBsb3dlciBsZXZlbCBjYXVzZSBleGlzdHMgVGhhbmtzIHRvIFpoZW5nIFhpZS4KbyBMQU5HLTEwNjA6IE51bWJlclV0aWxzLmlzTnVtYmVyIGFzc3VtZXMgbnVtYmVyIHN0YXJ0aW5nIHdpdGggWmVybyBUaGFua3MgdG8gUGlvdHIgS29zbWFsYS4KbyBMQU5HLTEzNzU6IGRlZmF1bHRTdHJpbmcoZmluYWwgU3RyaW5nIHN0cikgaW4gU3RyaW5nVXRpbHMgdG8gcmV1c2UgZGVmYXVsdFN0cmluZyhmaW5hbCBTdHJpbmcgc3RyLCBmaW5hbCBTdHJpbmcgZGVmYXVsdFN0cikgVGhhbmtzIHRvIEplcnJ5IFpoYW8uCm8gTEFORy0xMzc0OiBQYXJzaW5nIEpzb24gQXJyYXkgZmFpbGVkIFRoYW5rcyB0byBKYXN3YW50aCBCYWxhLgpvIExBTkctMTM3MTogRml4IFR5cGVVdGlscyNwYXJhbWV0ZXJpemUgdG8gd29yayBjb3JyZWN0bHkgd2l0aCBuYXJyb3dlci10eXBlZCBhcnJheSBUaGFua3MgdG8gRG1pdHJ5IE92Y2hpbm5pa292LgpvIExBTkctMTM3MDogRml4IEV2ZW50Q291bnRDaXJjdWl0QnJlYWtlciBpbmNyZW1lbnQgYmF0Y2ggVGhhbmtzIHRvIEFuZHJlIERpZWIuCm8gTEFORy0xMzg1OiBOdW1iZXJVdGlscy5jcmVhdGVOdW1iZXIoKSB0aHJvd3MgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBUaGFua3MgdG8gUm9oYW4gUGFkaHllLgpvIExBTkctMTM5NzogV29yZFV0aWxzLndyYXAgdGhyb3dzIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hlbiB3cmFwTGVuZ3RoIGlzIEludGVnZXIuTUFYX1ZBTFVFLiBUaGFua3MgdG8gVGFrYW5vYnUgQXNhbnVtYS4KbyBMQU5HLTE0MDE6IFR5cG8gaW4gSmF2YURvYyBmb3IgbGFzdEluZGV4T2YgVGhhbmtzIHRvIFJvbWFuIEdvbHlzaGV2LCBBbGV4IE1hbWVkb3YuCgpDaGFuZ2VzOgpvIExBTkctMTM2NzogT2JqZWN0VXRpbHMuaWRlbnRpdHlUb1N0cmluZyhPYmplY3QpIGFuZCBmcmllbmRzIHNob3VsZCBhbGxvY2F0ZSBidWlsZGVycyBhbmQgYnVmZmVycyB3aXRoIGEgc2l6ZSBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTQwNTogUmVtb3ZlIGNoZWNrcyBmb3IgamF2YSB2ZXJzaW9ucyBiZWxvdyB0aGUgbWluaW11bSBzdXBwb3J0ZWQgb25lIFRoYW5rcyB0byBMYXJzIEdyZWZlci4KbyBMQU5HLTE0MDI6IE51bGwvaW5kZXggc2FmZSBnZXQgbWV0aG9kcyBmb3IgQXJyYXlVdGlscyBUaGFua3MgdG8gTWFyayBEYWNlay4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuNwogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuNyB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIExhbmcuCkNvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55CkphdmEgZW52aXJvbm1lbnQuCgpMYW5nIDMuMCBhbmQgb253YXJkcyBub3cgdGFyZ2V0cyBKYXZhIDUuMCwgbWFraW5nIHVzZSBvZiBmZWF0dXJlcyB0aGF0IGFycml2ZWQgd2l0aCBKYXZhIDUuMCBzdWNoIGFzIGdlbmVyaWNzLAp2YXJpYWJsZSBhcmd1bWVudHMsIGF1dG9ib3hpbmcsIGNvbmN1cnJlbmN5IGFuZCBmb3JtYXR0ZWQgb3V0cHV0LgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZToKCiAgICBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KCk5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLiBSZXF1aXJlcyBKYXZhIDcsIHN1cHBvcnRzIEphdmEgOCwgOSwgMTAuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIExBTkctMTM1NTogVGltZVpvbmUuZ2V0VGltZVpvbmUoKSBpbiBGYXN0RGF0ZVBhcnNlciBjYXVzZXMgcmVzb3VyY2UgY29udGVudGlvbiAoUFIgIzI5Ni4pIFRoYW5rcyB0byBDaGFzIEhvbnRvbi4KbyBMQU5HLTEzNjA6IEFkZCBtZXRob2RzIHRvIE9iamVjdFV0aWxzIHRvIGdldCB2YXJpb3VzIGZvcm1zIG9mIGNsYXNzIG5hbWVzIGluIGEgbnVsbC1zYWZlIG1hbm5lciBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKRml4ZWQgQnVnczoKbyBMQU5HLTEzNjI6IEZpeCB0ZXN0cyBEYXRlVXRpbHNUZXN0IGZvciBKYXZhIDkgd2l0aCBlbl9HQiBsb2NhbGUgVGhhbmtzIHRvIFN0ZXBoZW4gQ29sZWJvdXJuZS4KbyBMQU5HLTEzNjU6IEZpeCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiBpc0phdmFWZXJzaW9uQXRMZWFzdCBvbiBKYXZhIDEwLCBhZGQgU3lzdGVtVXRpbHMuSVNfSkFWQV8xMCwgYWRkIEphdmFWZXJzaW9uLkpBVkFfMTAgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTEzNDg6IFN0YWNrT3ZlcmZsb3dFcnJvciBvbiBUeXBlVXRpbHMudG9TdHJpbmcoLi4uKSBmb3IgYSBnZW5lcmljIHJldHVybiB0eXBlIG9mIEVudW0udmFsdWVPZiBUaGFua3MgdG8gbWJ1c3NvLgpvIExBTkctMTM1MDogQ29uc3RydWN0b3JVdGlscy5pbnZva2VDb25zdHJ1Y3RvcihDbGFzcywgT2JqZWN0Li4uKSByZWdyZXNzaW9uIFRoYW5rcyB0byBCcmV0dCBLYWlsLgpvIExBTkctMTM0OTogRXF1YWxzQnVpbGRlciNpc1JlZ2lzdGVyZWQ6IHN3YXBwZWRQYWlyIGNvbnN0cnVjdGlvbiBidWcgVGhhbmtzIHRvIE5hbWFuIE5pZ2FtLgpvIExBTkctMTM1Nzogb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRmFzdERhdGVQYXJzZXIgc2hvdWxkIHVzZSB0b1VwcGVyQ2FzZShMb2NhbGUpIFRoYW5rcyB0byBCcnVjZUt1aUxpdS4KCkNoYW5nZXM6Cm8gTEFORy0xMzU4OiBJbXByb3ZlIFN0cmluZ1V0aWxzI3JlcGxhY2UgdGhyb3VnaHB1dCBUaGFua3MgdG8gU3RlcGhhbmUgTGFuZGVsbGUuCm8gTEFORy0xMzQ2OiBSZW1vdmUgZGVwcmVjYXRpb24gZnJvbSBSYW5kb21TdHJpbmdVdGlscwpvIExBTkctMTM2MTogRXhjZXB0aW9uVXRpbHMuZ2V0VGhyb3dhYmxlTGlzdCgpIGlzIHVzaW5nIGRlcHJlY2F0ZWQgRXhjZXB0aW9uVXRpbHMuZ2V0Q2F1c2UoKSBUaGFua3MgdG8gQW5hLgoKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuNgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuNiB2ZXJzaW9uIG9mCkFwYWNoZSBDb21tb25zIExhbmcgYXMgd2VsbCBhcyBhIGhpc3RvcnkgYWxsIGNoYW5nZXMgaW4gdGhlIENvbW1vbnMgTGFuZyAzLngKcmVsZWFzZSBsaW5lLiBDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlCmNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueSBKYXZhIGVudmlyb25tZW50LiBDb21tb25zIExhbmcgMy42IGF0CmxlYXN0IHJlcXVpcmVzIEphdmEgNy4wLiBOb3RlIHRoYXQgdGhpcyBoYXMgY2hhbmdlZCBmcm9tIENvbW1vbnMgTGFuZyAzLjUsIHdoaWNoCm9ubHkgcmVxdWlyZWQgSmF2YSAxLjYuCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOgoKICAgIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpISUdITElHSFRTCj09PT09PT09PT0KClNvbWUgb2YgdGhlIGhpZ2hsaWdodHMgaW4gdGhpcyByZWxlYXNlIGluY2x1ZGU6CgpvIFRoZSBjbGFzcyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuY29uY3VycmVudC5NZW1vaXplciBpcyBhbiBpbXBsZW1lbnRhdGlvbgogICAgb2YgdGhlIE1lbW9pemVyIHBhdHRlcm4gYXMgc2hvd24gaW4KICAgIEdvZXR6LCBCcmlhbiBldCBhbC4gKDIwMDYpIC0gSmF2YSBDb25jdXJyZW5jeSBpbiBQcmFjdGljZSwgcC4gMTA4LgpvIFRoZSBjbGFzcyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuQXJjaFV0aWxzIGhhcyBiZWVuIGFkZGVkLiBBcmNoVXRpbHMgaXMKICAgIGEgdXRpbGl0eSBjbGFzcyBmb3IgdGhlICJvcy5hcmNoIiBzeXN0ZW0gcHJvcGVydHkuCgpERVBSRUNBVElPTlMKPT09PT09PT09PT09CgpUaGUgQXBhY2hlIENvbW1vbnMgQ29tbXVuaXR5IGhhcyByZWNlbnRseSBzZXQgdXAgdGhlIENvbW1vbnMgVGV4dCBjb21wb25lbnQKYXMgYSBob21lIGZvciBhbGdvcml0aG1zIHdvcmtpbmcgb24gc3RyaW5ncy4gRm9yIHRoaXMgcmVhc29uIG1vc3Qgb2YgdGhlIHN0cmluZwpmb2N1c2VkIGZ1bmN0aW9uYWxpdHkgaW4gQ29tbW9ucyBMYW5nIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIG1vdmVkIHRvCkNvbW1vbnMgVGV4dC4gVGhpcyBpbmNsdWRlczoKCm8gQWxsIGNsYXNzZXMgaW4gdGhlIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50ZXh0IGFuZCB0aGUKICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50ZXh0LnRyYW5zbGF0ZSBwYWNrYWdlcwpvIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdFc2NhcGVVdGlscwpvIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5SYW5kb21TdHJpbmdVdGlscwpvIFRoZSBtZXRob2RzIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlscy5nZXRKYXJvV2lua2xlckRpc3RhbmNlIGFuZAogICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzLmdldExldmVuc2h0ZWluRGlzdGFuY2UKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgQ29tbW9ucyBUZXh0IHdlYnNpdGU6CgogICAgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvdGV4dAoKVGhlIGNsYXNzIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5DaGFyRW5jb2RpbmcgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZgpqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuCgpUaGUgZm9sbG93aW5nIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgaW4Kb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFycmF5VXRpbHMgaW4gZmF2b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5zZXJ0Cm1ldGhvZHMuIE5vdGUgdGhhdCB0aGUgaGFuZGxpbmcgZm9yIG51bGwgaW5wdXRzIGRpZmZlcnMgYmV0d2VlbiBhZGQgYW5kIGluc2VydC4KCm8gYWRkKGJvb2xlYW5bXSwgaW50LCBib29sZWFuKSAtPiBpbnNlcnQoaW50LCBib29sZWFuW10sIGJvb2xlYW4uLi4pCm8gYWRkKGJ5dGVbXSwgaW50LCBib29sZWFuKSAgICAtPiBpbnNlcnQoaW50LCBieXRlW10sIGJ5dGUuLi4pCm8gYWRkKGNoYXJbXSwgaW50LCBib29sZWFuKSAgICAtPiBpbnNlcnQoaW50LCBjaGFyW10sIGNoYXIuLi4pCm8gYWRkKGRvdWJsZVtdLCBpbnQsIGJvb2xlYW4pICAtPiBpbnNlcnQoaW50LCBkb3VibGVbXSwgZG91YmxlLi4uKQpvIGFkZChmbG9hdFtdLCBpbnQsIGJvb2xlYW4pICAgLT4gaW5zZXJ0KGludCwgZmxvYXRbXSwgZmxvYXQuLi4pCm8gYWRkKGludFtdLCBpbnQsIGJvb2xlYW4pICAgICAtPiBpbnNlcnQoaW50LCBpbnRbXSwgaW50Li4uKQpvIGFkZChsb25nW10sIGludCwgYm9vbGVhbikgICAgLT4gaW5zZXJ0KGludCwgbG9uZ1tdLCBsb25nLi4uKQpvIGFkZChzaG9ydFtdLCBpbnQsIGJvb2xlYW4pICAgLT4gaW5zZXJ0KGludCwgc2hvcnRbXSwgc2hvcnQuLi4pCm8gYWRkKFRbXSwgaW50LCBib29sZWFuKSAgICAgICAtPiBpbnNlcnQoaW50LCBUW10sIFQuLi4pCgoKQ09NUEFUSUJJTElUWSBXSVRIIEpBVkEgOQo9PT09PT09PT09PT09PT09PT0KClRoZSBNQU5JRkVTVC5NRiBub3cgY29udGFpbnMgYW4gYWRkaXRpb25hbCBlbnRyeToKCiAgQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMKClRoaXMgc2hvdWxkIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIENvbW1vbnMgTGFuZyAzLjYgYXMgYSBtb2R1bGUgaW4gdGhlIEphdmEgOQptb2R1bGUgc3lzdGVtLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgaXNzdWUgYW5kIHRoZQpyZWZlcmVuY2VkIG1haWxpbmcgbGlzdCBkaXNjdXNzaW9uczoKCiAgICBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctMTMzOAoKVGhlIGJ1aWxkIHByb2JsZW1zIHByZXNlbnQgaW4gdGhlIDMuNSByZWxlYXNlIGhhdmUgYmVlbiByZXNvbHZlZC4gQnVpbGRpbmcKQ29tbW9ucyBMYW5nIDMuNiBzaG91bGQgd29yayBvdXQgb2YgdGhlIGJveCB3aXRoIHRoZSBsYXRlc3QgSmF2YSA5IEVBIGJ1aWxkLgpQbGVhc2UgcmVwb3J0IGFueSBKYXZhIDkgcmVsYXRlZCBpc3N1ZXMgYXQ6CgogICAgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09CgpvIExBTkctMTMzNjogQWRkIE5VTCBCeXRlIFRvIENoYXJVdGlscy4gVGhhbmtzIHRvIEJlbHVnYSBCZWhyLgpvIExBTkctMTMwNDogQWRkIG1ldGhvZCBpbiBTdHJpbmdVdGlscyB0byBkZXRlcm1pbmUgaWYgc3RyaW5nIGNvbnRhaW5zIGJvdGgKICAgICAgICAgICAgIG1peGVkIGNhc2VkIGNoYXJhY3RlcnMuIFRoYW5rcyB0byBBbmR5IEtsaW1jemFrLgpvIExBTkctMTMyNTogSW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBUb1N0cmluZ0J1aWxkZXIgY2xhc3MgdG8gMTAwJS4KICAgICAgICAgICAgIFRoYW5rcyB0byBBcnNoYWQgQmFzaGEuCm8gTEFORy0xMzA3OiBBZGQgYSBtZXRob2QgaW4gU3RyaW5nVXRpbHMgdG8gZXh0cmFjdCBvbmx5IGRpZ2l0cyBvdXQgb2YgaW5wdXQKICAgICAgICAgICAgIHN0cmluZy4gVGhhbmtzIHRvIEFyc2hhZCBCYXNoYS4KbyBMQU5HLTEyNTY6IEFkZCBKTUggbWF2ZW4gZGVwZW5kZW5jaWVzLiBUaGFua3MgdG8gQzByV2luLgpvIExBTkctMTE2NzogQWRkIG51bGwgZmlsdGVyIHRvIFJlZmxlY3Rpb25Ub1N0cmluZ0J1aWxkZXIuCiAgICAgICAgICAgICBUaGFua3MgdG8gTWFyayBEYWNlay4KbyBMQU5HLTEyOTk6IEFkZCBtZXRob2QgZm9yIGNvbnZlcnRpbmcgc3RyaW5nIHRvIGFuIGFycmF5IG9mIGNvZGUgcG9pbnRzLgpvIExBTkctNjYwOiAgQWRkIG1ldGhvZHMgdG8gaW5zZXJ0IGFycmF5cyBpbnRvIGFycmF5cyBhdCBhbiBpbmRleC4KbyBMQU5HLTEwMzQ6IEFkZCBzdXBwb3J0IGZvciByZWN1cnNpdmUgY29tcGFyaXNvbiB0bwogICAgICAgICAgICAgRXF1YWxzQnVpbGRlciNyZWZsZWN0aW9uRXF1YWxzLiBUaGFua3MgdG8gWWF0aG9zIFVHLgpvIExBTkctMTA2NzogQWRkIGEgcmVmbGVjdGlvbi1iYXNlZCB2YXJpYW50IG9mIERpZmZCdWlsZGVyLgpvIExBTkctNzQwOiAgSW1wbGVtZW50YXRpb24gb2YgYSBNZW1vaXplci4gVGhhbmtzIHRvIEphbWVzIFNhd2xlLgpvIExBTkctMTI1ODogQWRkIEFycmF5VXRpbHMjdG9TdHJpbmdBcnJheSBtZXRob2QuCiAgICAgICAgICAgICBUaGFua3MgdG8gSUcsIEdyemVnb3J6IFJvP25pZWNraS4KbyBMQU5HLTExNjA6IFN0cmluZ1V0aWxzI2FiYnJldmlhdGUgc2hvdWxkIHN1cHBvcnQgJ2N1c3RvbSBlbGxpcHNlcycgcGFyYW1ldGVyLgpvIExBTkctMTI5MzogQWRkIFN0cmluZ1V0aWxzI2lzQWxsRW1wdHkgYW5kICNpc0FsbEJsYW5rIG1ldGhvZHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gUGllcnJlIFRlbXBsaWVyLCBNYXJ0aW4gVGFyamFueWkuCm8gTEFORy0xMzEzOiBBZGQgQXJjaFV0aWxzIC0gQW4gdXRpbGl0eSBjbGFzcyBmb3IgdGhlICJvcy5hcmNoIiBzeXN0ZW0gcHJvcGVydHkuCiAgICAgICAgICAgICBUaGFua3MgdG8gVG9tc2NoaS4KbyBMQU5HLTEyNzI6IEFkZCBzaHVmZmxlIG1ldGhvZHMgdG8gQXJyYXlVdGlscy4KbyBMQU5HLTEzMTc6IEFkZCBNZXRob2RVdGlscyNmaW5kQW5ub3RhdGlvbiBhbmQgZXh0ZW5kCiAgICAgICAgICAgICBNZXRob2RVdGlscyNnZXRNZXRob2RzV2l0aEFubm90YXRpb24gZm9yIG5vbi1wdWJsaWMsIHN1cGVyLWNsYXNzCiAgICAgICAgICAgICBhbmQgaW50ZXJmYWNlIG1ldGhvZHMuIFRoYW5rcyB0byBZYXNzZXIgWmFtYW5pLgpvIExBTkctMTMzMTogQWRkIEltbXV0YWJsZVBhaXIubnVsbFBhaXIoKS4KbyBMQU5HLTEzMzI6IEFkZCBJbW11dGFibGVUcmlwbGUubnVsbFRyaXBsZSgpLgoKRklYRUQgQlVHUwo9PT09PT09PT09CgpvIExBTkctMTMzNzogRml4IHRlc3QgZmFpbHVyZXMgaW4gSUJNIEpESyA4IGZvciBUb1N0cmluZ0J1aWxkZXJUZXN0LgpvIExBTkctMTMxOTogTXVsdGlsaW5lUmVjdXJzaXZlVG9TdHJpbmdTdHlsZSBTdGFja092ZXJmbG93RXJyb3Igd2hlbiBvYmplY3QgaXMKICAgICAgICAgICAgIGFuIGFycmF5LgpvIExBTkctMTMyMDogTG9jYWxlVXRpbHMjdG9Mb2NhbGUgZG9lcyBub3Qgc3VwcG9ydCBsYW5ndWFnZSBmb2xsb3dlZCBieSBVTiBNLjQ5CiAgICAgICAgICAgICBudW1lcmljLTMgYXJlYSBjb2RlIGZvbGxvd2VkIGJ5IHZhcmlhbnQuCm8gTEFORy0xMzAwOiBDbGFyaWZ5IG9yIGltcHJvdmUgYmVoYXZpb3Igb2YgaW50LWJhc2VkIGluZGV4T2YgbWV0aG9kcyBpbgogICAgICAgICAgICAgU3RyaW5nVXRpbHMuIFRoYW5rcyB0byBNYXJrIERhY2VrLgpvIExBTkctMTI4NjogUmFuZG9tU3RyaW5nVXRpbHMgcmFuZG9tIG1ldGhvZCBjYW4gb3ZlcmZsb3cgYW5kIHJldHVybiBjaGFyYWN0ZXJzCiAgICAgICAgICAgICBvdXRzaWRlIG9mIHNwZWNpZmllZCByYW5nZS4KbyBMQU5HLTEyOTI6IFdvcmRVdGlscy53cmFwIHRocm93cyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLgpvIExBTkctMTI4NzogUmFuZG9tU3RyaW5nVXRpbHMjcmFuZG9tIGNhbiBlbnRlciBpbmZpbml0ZSBsb29wIGlmIGVuZCBwYXJhbWV0ZXIKICAgICAgICAgICAgIGlzIHRvIHNtYWxsLiBUaGFua3MgdG8gSXZhbiBNb3Jvem92LgpvIExBTkctMTI4NTogTnVsbFBvaW50ZXJFeGNlcHRpb24gaW4gRmFzdERhdGVQYXJzZXIkVGltZVpvbmVTdHJhdGVneS4KICAgICAgICAgICAgIFRoYW5rcyB0byBGcmFuY2VzY28gQ2hpY2NoaXJpY2PyLgpvIExBTkctMTI4MTogSmF2YWRvYyBvZiBTdHJpbmdVdGlscy5vcmRpbmFsSW5kZXhPZiBpcyBjb250cmFkaWN0b3J5LgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHJlYXMgTHVuZGJsYWQuCm8gTEFORy0xMTg4OiBTdHJpbmdVdGlscyNqb2luKFQuLi4pOiB3YXJuaW5nOiBbdW5jaGVja2VkXSBQb3NzaWJsZSBoZWFwCiAgICAgICAgICAgICBwb2xsdXRpb24gZnJvbSBwYXJhbWV0ZXJpemVkIHZhcmFyZyB0eXBlIFQuCm8gTEFORy0xMTQ0OiBNdWx0aXBsZSBjYWxscyBvZgogICAgICAgICAgICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmNvbmN1cnJlbnQuTGF6eUluaXRpYWxpemVyLmluaXRpYWxpemUoKQogICAgICAgICAgICAgYXJlIHBvc3NpYmxlLiBUaGFua3MgdG8gV2FsZGVtYXIgTWFpZXIsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTEyNzY6IFN0ckJ1aWxkZXIjcmVwbGFjZUFsbCBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uCiAgICAgICAgICAgICBUaGFua3MgdG8gQW5keSBLbGltY3phay4KbyBMQU5HLTEyNzg6IEJvb2xlYW5VdGlscyBqYXZhZG9jIGlzc3Vlcy4gVGhhbmtzIHRvIER1a2UgWWluLgpvIExBTkctMTA3MDogQXJyYXlVdGlscyNhZGQgY29uZnVzaW5nIGV4YW1wbGUgaW4gamF2YWRvYy4KICAgICAgICAgICAgIFRoYW5rcyB0byBQYXVsIFBvZ29ueXNoZXYuCm8gTEFORy0xMjcxOiBTdHJpbmdVdGlscyNpc0FueUVtcHR5IGFuZCAjaXNBbnlCbGFuayBzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhbgogICAgICAgICAgICAgZW1wdHkgYXJyYXkuIFRoYW5rcyB0byBQaWVycmUgVGVtcGxpZXIuCm8gTEFORy0xMTU1OiBBZGQgU3RyaW5nVXRpbHMjdW53cmFwLiBUaGFua3MgdG8gU2FpZiBBc2lmLCBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTEzMTE6IFR5cGVVdGlscy50b1N0cmluZygpIGRvZXNuJ3QgaGFuZGxlIHByaW1pdGl2ZSBhbmQgT2JqZWN0IGFycmF5cwogICAgICAgICAgICAgY29ycmVjdGx5LiBUaGFua3MgdG8gQWFyb24gRGlndWxsYS4KbyBMQU5HLTEzMTI6IExvY2FsZVV0aWxzI3RvTG9jYWxlIGRvZXMgbm90IHN1cHBvcnQgbGFuZ3VhZ2UgZm9sbG93ZWQgYnkgVU4gTS40OQogICAgICAgICAgICAgbnVtZXJpYy0zIGFyZWEgY29kZS4KbyBMQU5HLTEyNjU6IEJ1aWxkIGZhaWx1cmVzIHdoZW4gYnVpbGRpbmcgd2l0aCBKYXZhIDkgRUEuCm8gTEFORy0xMzE0OiBqYXZhZG9jIGNyZWF0aW9uIGJyb2tlbiB3aXRoIEphdmEgOC4gVGhhbmtzIHRvIEFsbG9uIE11cmllbmlrLgpvIExBTkctMTMxMDogTWV0aG9kVXRpbHMuaW52b2tlTWV0aG9kIHRocm93cyBBcnJheVN0b3JlRXhjZXB0aW9uIGlmIHVzaW5nCiAgICAgICAgICAgICB2YXJhcmdzIGFyZ3VtZW50cyBhbmQgc21hbGxlciB0eXBlcyB0aGFuIHRoZSBtZXRob2QgZGVmaW5lcy4KICAgICAgICAgICAgIFRoYW5rcyB0byBEb24gSmViYS4KCkNIQU5HRVMKPT09PT09PQoKbyBMQU5HLTEzMzg6IEFkZCBBdXRvbWF0aWMtTW9kdWxlLU5hbWUgTUFOSUZFU1QgZW50cnkgZm9yIEphdmEgOQogICAgICAgICAgICAgY29tcGF0aWJpbGl0eS4KbyBMQU5HLTEzMzQ6IERlcHJlY2F0ZSBDaGFyRW5jb2RpbmcgaW4gZmF2b3VyIG9mCiAgICAgICAgICAgICBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuCm8gTEFORy0xMTEwOiBJbXBsZW1lbnQgSGFzaFNldHZCaXRTZXRUZXN0IHVzaW5nIEpNSC4KICAgICAgICAgICAgIFRoYW5rcyB0byBCcnVubyBQLiBLaW5vc2hpdGEuCm8gTEFORy0xMjkwOiBJbmNyZWFzZSB0ZXN0IGNvdmVyYWdlIG9mIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcnJheVV0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHJpaSBBYnJhbW92LgpvIExBTkctMTI3NDogU3RyU3Vic3RpdHV0b3Igc2hvdWxkIHN0YXRlIGl0cyB0aHJlYWQgc2FmZXR5LgpvIExBTkctMTI3NzogU3RyaW5nVXRpbHMjZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZSByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uLgogICAgICAgICAgICAgVGhhbmtzIHRvIHl1ZmN1eS4KbyBMQU5HLTEyNzk6IFVwZGF0ZSBKYXZhIHJlcXVpcmVtZW50IGZyb20gSmF2YSA2IHRvIDcuCm8gTEFORy0xMTQzOiBTdHJpbmdVdGlscyBzaG91bGQgdXNlIHRvWHh4eENhc2UoaW50KSByYXRoZXIgdGhhbgogICAgICAgICAgICAgdG9YeHh4Q2FzZShjaGFyKS4gVGhhbmtzIHRvIHNlYmIuCm8gTEFORy0xMjk3OiBBZGQgU3lzdGVtVXRpbHMuZ2V0SG9zdE5hbWUoKSBBUEkuCm8gTEFORy0xMzAxOiBNb3ZpbmcgYXBhY2hlLXJhdC1wbHVnaW4gY29uZmlndXJhdGlvbiBpbnRvIHBsdWdpbk1hbmFnZW1lbnQuCiAgICAgICAgICAgICBUaGFua3MgdG8gS2FybCBIZWlueiBNYXJiYWlzZS4KbyBMQU5HLTEzMTY6IERlcHJlY2F0ZSBjbGFzc2VzL21ldGhvZHMgbW92ZWQgdG8gY29tbW9ucy10ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy41CgoKSElHSExJR0hUUwo9PT09PT09PT09CgpTb21lIG9mIHRoZSBoaWdobGlnaHRzIGluIHRoaXMgcmVsZWFzZSBpbmNsdWRlOgoKbyBBZGRlZCBKYXZhIDkgZGV0ZWN0aW9uIHRvIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscy4KbyBTdXBwb3J0IGZvciBzaGlmdGluZyBhbmQgc3dhcHBpbmcgZWxlbWVudHMgaW4KICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcnJheVV0aWxzLgpvIE5ldyBtZXRob2RzIGZvciBnZW5lcmF0aW5nIHJhbmRvbSBzdHJpbmdzIGZyb20gZGlmZmVyZW50IGNoYXJhY3RlciBjbGFzc2VzCiAgICBpbmNsdWRpbmcgYWxwaGFiZXRpYywgYWxwaGEtbnVtZXJpYyBhbmQgQVNDSUkgYWRkZWQgdG8KICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5SYW5kb21TdHJpbmdVdGlscy4KbyBOdW1lcm91cyBleHRlbnNpb25zIHRvIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlscyBpbmNsdWRpbmcKICAgIG51bGwgc2FmZSBjb21wYXJlIHZhcmlhbnRzLCBtb3JlIHJlbW92ZSBhbmQgcmVwbGFjZSB2YXJpYW50cywgcm90YXRpb24gYW5kCiAgICB0cnVuY2F0aW9uLgpvIEFkZGVkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5UaHJlYWRVdGlscyAtIGEgdXRpbGl0eSBjbGFzcyB0byB3b3JrIHdpdGgKICAgIGluc3RhbmNlcyBvZiBqYXZhLmxhbmcuVGhyZWFkIGFuZCBqYXZhLmxhbmcuVGhyZWFkR3JvdXAuCm8gQWRkZWQgYW5ub3RhdGlvbnMgQEVxdWFsc0V4Y2x1ZGUsIEBIYXNoQ29kZUV4Y2x1ZGUgYW5kIEBUb1N0cmluZ0V4Y2x1ZGUgdG8KICAgIG1hcmsgZmllbGRzIHdoaWNoIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSByZWZsZWN0aXZlIGJ1aWxkZXJzIGluIHRoZQogICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmJ1aWxkZXIgcGFja2FnZS4KbyBTdXBwb3J0IGZvciB2YXJpb3VzIG1vZGlmeSBhbmQgcmV0cmlldmUgdmFsdWUgdXNlIGNhc2VzIGFkZGVkIHRvIHRoZSBjbGFzc2VzCiAgICBpbiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMubXV0YWJsZS4KCkNPTVBBVElCSUxJVFkKPT09PT09PT09PT09PQoKQXBhY2hlIENvbW1vbnMgTGFuZyAzLjUgaXMgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCB0aGUgMy40IHJlbGVhc2UuIFVzZXJzCnNob3VsZCBub3QgZXhwZXJpZW5jZSBhbnkgcHJvYmxlbXMgd2hlbiB1cGdyYWRpbmcgZnJvbSAzLjQgdG8gMy41LgoKVGhlcmUgaGFzIGJlZW4gYW4gYWRkaXRpb24gdG8gdGhlIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50aW1lLkRhdGVQcmludGVyCmludGVyZmFjZToKCm8gQWRkZWQgbWV0aG9kICdwdWJsaWMgYm9vbGVhbiBwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLnRleHQuUGFyc2VQb3NpdGlvbiwKICAgIGphdmEudXRpbC5DYWxlbmRhciknCm8gQWRkZWQgbWV0aG9kICdwdWJsaWMgamF2YS5sYW5nLkFwcGVuZGFibGUgZm9ybWF0KGxvbmcsIGphdmEubGFuZy5BcHBlbmRhYmxlKScKbyBBZGRlZCBtZXRob2QgJ3B1YmxpYyBqYXZhLmxhbmcuQXBwZW5kYWJsZSBmb3JtYXQoamF2YS51dGlsLkRhdGUsCiAgICBqYXZhLmxhbmcuQXBwZW5kYWJsZSknCm8gQWRkZWQgbWV0aG9kICdwdWJsaWMgamF2YS5sYW5nLkFwcGVuZGFibGUgZm9ybWF0KGphdmEudXRpbC5DYWxlbmRhciwKICAgIGphdmEubGFuZy5BcHBlbmRhYmxlKScKCkZvciB0aGlzIHJlYXNvbiAzLjUgaXMgbm90IHN0cmljdGx5IHNvdXJjZSBjb21wYXRpYmxlIHRvIDMuNC4gU2luY2UgdGhlCkRhdGVQcmludGVyIGludGVyZmFjZSBpcyBub3QgbWVhbnQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cywgdGhpcwpjaGFuZ2UgaXQgbm90IGNvbnNpZGVyZWQgdG8gY2F1c2UgYW55IHByb2JsZW1zLgoKSkFWQSA5IFNVUFBPUlQKPT09PT09PT09PT09PT0KCkphdmEgOSBpbnRyb2R1Y2VzIGEgbmV3IHZlcnNpb24tc3RyaW5nIHNjaGVtZS4gRGV0YWlscyBvZiB0aGlzIG5ldyBzY2hlbWUgYXJlCmRvY3VtZW50ZWQgaW4gSkVQLTIyMyAoaHR0cHM6Ly9vcGVuamRrLm9yZy9qZXBzLzIyMykuIEluIG9yZGVyIHRvIHN1cHBvcnQKSkVQLTIyMyB0d28gY2xhc3NlcyBoYWQgdG8gYmUgY2hhbmdlZDoKCm8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkphdmFWZXJzaW9uCiAgICBkZXByZWNhdGVkIGVudW0gY29uc3RhbnQgSkFWQV8xXzkKICAgIGludHJvZHVjZWQgZW51bSBjb25zdGFudCBKQVZBXzkKCm8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzCiAgICBkZXByZWNhdGVkIGNvbnN0YW50IElTX0pBVkFfMV85CiAgICBpbnRyb2R1Y2VkIGNvbnN0YW50IElTX0pBVkFfOQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIExBTkctMTE5NwooaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HLTExOTcpLiBBbGwgb3RoZXIgQVBJcyBhcmUgZXhwZWN0ZWQKdG8gd29yayB3aXRoIEphdmEgOS4KCkJVSUxESU5HIE9OIEpBVkEgOQo9PT09PT09PT09PT09PT09PT0KCkphdmEgOCBpbnRyb2R1Y2VkIHRoZSBVbmljb2RlIENvbnNvcnRpdW0ncyBDb21tb24gTG9jYWxlIERhdGEgUmVwb3NpdG9yeSBhcwphbHRlcm5hdGl2ZSBzb3VyY2UgZm9yIGxvY2FsZSBkYXRhLiBKYXZhIDkgd2lsbCB1c2UgdGhlIENMRFIgcHJvdmlkZXIgYXMKZGVmYXVsdCBwcm92aWRlciBmb3IgbG9jYWxlIGRhdGEgKHNlZSBodHRwczovL29wZW5qZGsub3JnL2plcHMvMjUyKS4gVGhpcwpjYXVzZXMgYW4gbnVtYmVyIG9mIGxvY2FsZS1zZW5zaXRpdmUgdGVzdCBpbiBDb21tb25zIExhbmcgdG8gZmFpbC4gSW4gb3JkZXIKdG8gYnVpbGQgQ29tbW9ucyBMYW5nIDMuNSBvbiBKYXZhIDksIHRoZSBsb2NhbGUgcHJvdmlkZXIgaGFzIHRvIGJlIHNldCB0bwonSlJFJzoKCiAgICBtdm4gLURqYXZhLmxvY2FsZS5wcm92aWRlcnM9SlJFIGNsZWFuIGluc3RhbGwKCldlIGFyZSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZyB3YXlzIHRvIHN1cHBvcnQgYnVpbGRpbmcgb24gSmF2YSA5IHdpdGhvdXQKZnVydGhlciBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6Cmh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvTEFORy0xMjY1CgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctMTI3NTogQWRkZWQgYSB0cnlBY3F1aXJlKCkgbWV0aG9kIHRvIFRpbWVkU2VtYXBob3JlLgpvIExBTkctMTI1NTogQWRkIERhdGVVdGlscy50b0NhbGVuZGFyKERhdGUsIFRpbWVab25lKS4gVGhhbmtzIHRvIEthaXl1YW4gV2FuZy4KbyBMQU5HLTEwMjM6IEFkZCBXb3JkVXRpbHMud3JhcCBvdmVybG9hZCB3aXRoIGN1c3RvbWl6YWJsZSBicmVha2FibGUgY2hhcmFjdGVyLgogICAgICAgICAgICAgVGhhbmtzIHRvIE1hcmtvIEJla2h0YS4KbyBMQU5HLTc4NzogIEFkZCBtZXRob2QgcmVtb3ZlSWdub3JlQ2FzZShTdHJpbmcsIFN0cmluZykgdG8gU3RyaW5nVXRpbHMuIFRoYW5rcwogICAgICAgICAgICAgdG8gR29rdWwgTmFudGhha3VtYXIgQy4KbyBMQU5HLTEyMjQ6IEV4dGVuZCBSYW5kb21TdHJpbmdVdGlscyB3aXRoIG1ldGhvZHMgdGhhdCBnZW5lcmF0ZSBzdHJpbmdzCiAgICAgICAgICAgICBiZXR3ZWVuIGEgbWluIGFuZCBtYXggbGVuZ3RoLiBUaGFua3MgdG8gQ2FsZWIgQ3VzaGluZy4KbyBMQU5HLTEyNTc6IEFkZCBBUElzIFN0cmluZ1V0aWxzLndyYXBJZk1pc3NpbmcoU3RyaW5nLCBjaGFyfFN0cmluZykuIFRoYW5rcyB0bwogICAgICAgICAgICAgR2FyeSBHcmVnb3J5LgpvIExBTkctMTI1MzogQWRkIFJhbmRvbVV0aWxzI25leHRCb29sZWFuKCkgbWV0aG9kLiBUaGFua3MgdG8gYWRpbGVrLgpvIExBTkctMTA4NTogQWRkIGEgY2lyY3VpdCBicmVha2VyIGltcGxlbWVudGF0aW9uLiBUaGFua3MgdG8gT2xpdmVyIEhlZ2VyIGFuZAogICAgICAgICAgICAgQnJ1bm8gUC4gS2lub3NoaXRhLgpvIExBTkctMTAxMzogQWRkIFN0cmluZ1V0aWxzLnRydW5jYXRlKCkuIFRoYW5rcyB0byBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTExOTU6IEVuaGFuY2UgTWV0aG9kVXRpbHMgdG8gYWxsb3cgaW52b2NhdGlvbiBvZiBwcml2YXRlIG1ldGhvZHMuIFRoYW5rcwogICAgICAgICAgICAgdG8gRGVyZWsgQy4gQXNobW9yZS4KbyBMQU5HLTExODk6IEFkZCBnZXRBbmRJbmNyZW1lbnQvZ2V0QW5kRGVjcmVtZW50L2dldEFuZEFkZC9pbmNyZW1lbnRBbmRHZXQvCiAgICAgICAgICAgICBkZWNyZW1lbnRBbmRHZXQvYWRkQW5kR2V0IGluIE11dGFibGUqIGNsYXNzZXMuIFRoYW5rcyB0bwogICAgICAgICAgICAgSGFpeWFuZyBMaSBhbmQgTWF0dGhldyBCYXJ0ZW5zY2hsYWcuCm8gTEFORy0xMjI1OiBBZGQgUmFuZG9tU3RyaW5nVXRpbHMjcmFuZG9tR3JhcGggYW5kICNyYW5kb21QcmludCB3aGljaCBtYXRjaAogICAgICAgICAgICAgY29ycmVzcG9uZGluZyByZWd1bGFyIGV4cHJlc3Npb24gY2xhc3MuIFRoYW5rcyB0byBDYWxlYiBDdXNoaW5nLgpvIExBTkctMTIyMzogQWRkIFN0b3BXYXRjaCNnZXRUaW1lKFRpbWVVbml0KS4gVGhhbmtzIHRvIE5pY2sgTWFubGV5LgpvIExBTkctNzgxOiAgQWRkIG1ldGhvZHMgdG8gT2JqZWN0VXRpbHMgY2xhc3MgdG8gY2hlY2sgZm9yIG51bGwgZWxlbWVudHMgaW4gdGhlCiAgICAgICAgICAgICBhcnJheS4gVGhhbmtzIHRvIEtyenlzenRvZiBXb2xueS4KbyBMQU5HLTEyMjg6IFByZWZlciBUaHJvd2FibGUuZ2V0Q2F1c2UoKSBpbiBFeGNlcHRpb25VdGlscy5nZXRDYXVzZSgpLgogICAgICAgICAgICAgVGhhbmtzIHRvIEJyYWQgSGVzcy4KbyBMQU5HLTEyMzM6IERpZmZCdWlsZGVyIGFkZCBtZXRob2QgdG8gYWxsb3cgYXBwZW5kaW5nIGZyb20gYSBEaWZmUmVzdWx0LgogICAgICAgICAgICAgVGhhbmtzIHRvIE5pY2sgTWFubGV5LgpvIExBTkctMTE2ODogQWRkIFN5c3RlbVV0aWxzLklTX09TX1dJTkRPV1NfMTAgcHJvcGVydHkuCiAgICAgICAgICAgICBUaGFua3MgdG8gUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMTE1OiBBZGQgc3VwcG9ydCBmb3IgdmFyYXJncyBpbiBDb25zdHJ1Y3RvclV0aWxzLCBNZW1iZXJVdGlscywgYW5kCiAgICAgICAgICAgICBNZXRob2RVdGlscy4gVGhhbmtzIHRvIEppbSBMbG95ZCBhbmQgSm9lIEZlcm5lci4KbyBMQU5HLTExMzQ6IEFkZCBtZXRob2RzIHRvIGNoZWNrIG51bWJlcnMgYWdhaW5zdCBOYU4gYW5kIGluZmluaXRlIHRvCiAgICAgICAgICAgICBWYWxpZGF0ZS4gVGhhbmtzIHRvIEFsYW4gU21pdGhlZS4KbyBMQU5HLTEyMjA6IEFkZCB0ZXN0cyBmb3IgbWlzc2VkIGJyYW5jaGVzIGluIERhdGVVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBDYXNleSBTY2FyYm9yb3VnaC4KbyBMQU5HLTExNDY6IHovT1MgaWRlbnRpZmljYXRpb24gaW4gU3lzdGVtVXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gR2Fib3IgTGlwdGFrLgpvIExBTkctMTE5MjogRmFzdERhdGVGb3JtYXQgc3VwcG9ydCBvZiB0aGUgd2Vlay15ZWFyIGNvbXBvbmVudCAodXBwZXJjYXNlICdZJykuCiAgICAgICAgICAgICBUaGFua3MgdG8gRG9taW5payBTdGFkbGVyLgpvIExBTkctMTE2OTogQWRkIFN0cmluZ1V0aWxzIG1ldGhvZHMgdG8gY29tcGFyZSBhIHN0cmluZyB0byBtdWx0aXBsZSBzdHJpbmdzLgogICAgICAgICAgICAgVGhhbmtzIHRvIFJhZmFsIEdsb3dpbnNraSwgUm9iZXJ0IFBhcnIgYW5kIEFybWFuIFNoYXJpZi4KbyBMQU5HLTExODU6IEFkZCByZW1vdmUgYnkgcmVndWxhciBleHByZXNzaW9uIG1ldGhvZHMgaW4gU3RyaW5nVXRpbHMuCm8gTEFORy0xMTM5OiBBZGQgcmVwbGFjZSBieSByZWd1bGFyIGV4cHJlc3Npb24gbWV0aG9kcyBpbiBTdHJpbmdVdGlscy4KbyBMQU5HLTExNzE6IEFkZCBjb21wYXJlIG1ldGhvZHMgaW4gU3RyaW5nVXRpbHMuCm8gTEFORy0xMTc0OiBBZGQgc3VnYXIgdG8gUmFuZG9tVXRpbHMuIFRoYW5rcyB0byBQdW5rcmF0ejMxMi4KbyBMQU5HLTExNTQ6IEZhc3REYXRlRm9ybWF0IEFQSXMgdGhhdCB1c2UgYSBTdHJpbmdCdWlsZGVyLiBUaGFua3MgdG8KICAgICAgICAgICAgIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTExNDk6IEFiaWxpdHkgdG8gdGhyb3cgY2hlY2tlZCBleGNlcHRpb25zIHdpdGhvdXQgZGVjbGFyaW5nIHRoZW0uIFRoYW5rcwogICAgICAgICAgICAgdG8gR3JlZ29yeSBaYWsuCm8gTEFORy0xMTUzOiBJbXBsZW1lbnQgUGFyc2VQb3NpdGlvbiBhcGkgZm9yIEZhc3REYXRlUGFyc2VyLgpvIExBTkctMTEzNzogQWRkIGNoZWNrIGZvciBkdXBsaWNhdGUgZXZlbnQgbGlzdGVuZXIgaW4gRXZlbnRMaXN0ZW5lclN1cHBvcnQuCiAgICAgICAgICAgICBUaGFua3MgdG8gTWF0dGhldyBBZ3VpcnJlLgpvIExBTkctMTEzNTogQWRkIG1ldGhvZCBjb250YWluc0FsbFdvcmRzIHRvIFdvcmRVdGlscy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBFZHVhcmRvIE1hcnRpbnMuCm8gTEFORy0xMTMyOiBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyIGRvZXNuJ3QgdGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgICAgICAgICB3aGVuIHRoZSBjb25zdHJ1Y3RvcidzIG9iamVjdCBwYXJhbSBpcyBudWxsLiBUaGFua3MgdG8gSmFjayBUYW4uCm8gTEFORy03MDE6ICBTdHJpbmdVdGlscyBqb2luIHdpdGggdmFyIGFyZ3MuIFRoYW5rcyB0byBKYW1lcyBTYXdsZS4KbyBMQU5HLTExMDU6IEFkZCBUaHJlYWRVdGlscyAtIEEgdXRpbGl0eSBjbGFzcyB3aGljaCBwcm92aWRlcyBoZWxwZXIgbWV0aG9kcwogICAgICAgICAgICAgcmVsYXRlZCB0byBqYXZhLmxhbmcuVGhyZWFkICBJc3N1ZTogTEFORy0xMTA1LiBUaGFua3MgdG8KICAgICAgICAgICAgIEhlbmRyaWsgU2FseS4KbyBMQU5HLTEwMzE6IEFkZCBhbm5vdGF0aW9ucyB0byBleGNsdWRlIGZpZWxkcyBmcm9tIFJlZmxlY3Rpb25FcXVhbHNCdWlsZGVyLAogICAgICAgICAgICAgUmVmbGVjdGlvblRvU3RyaW5nQnVpbGRlciBhbmQgUmVmbGVjdGlvbkhhc2hDb2RlQnVpbGRlci4gVGhhbmtzCiAgICAgICAgICAgICB0byBGZWxpcGUgQWRvcm5vLgpvIExBTkctMTEyNzogVXNlIEpVbml0IHJ1bGVzIHRvIHNldCBhbmQgcmVzZXQgdGhlIGRlZmF1bHQgTG9jYWxlIGFuZCBUaW1lWm9uZS4KbyBMQU5HLTExMTk6IEFkZCByb3RhdGUoc3RyaW5nLCBpbnQpIG1ldGhvZCB0byBTdHJpbmdVdGlscy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBMb2ljIEd1aWJlcnQuCm8gTEFORy0xMDk5OiBBZGQgc3dhcCBhbmQgc2hpZnQgb3BlcmF0aW9ucyBmb3IgYXJyYXlzIHRvIEFycmF5VXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgQWRyaWFuIEJlci4KbyBMQU5HLTEwNTA6IENoYW5nZSBudWxsVG9FbXB0eSBtZXRob2RzIHRvIGdlbmVyaWNzLiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gTEFORy0xMDc0OiBBZGQgYSBtZXRob2QgdG8gQXJyYXlVdGlscyBmb3IgcmVtb3ZpbmcgYWxsIG9jY3VycmVuY2VzIG9mIGEgZ2l2ZW4KICAgICAgICAgICAgIGVsZW1lbnQgIElzc3VlOiBMQU5HLTEwNzQuIFRoYW5rcyB0byBIYWl5YW5nIExpLgoKRklYRUQgQlVHUwo9PT09PT09PT09PT0KCm8gTEFORy0xMjYxOiBBcnJheVV0aWxzLmNvbnRhaW5zIHJldHVybnMgZmFsc2UgZm9yIGluc3RhbmNlcyBvZiBzdWJ0eXBlcy4KbyBMQU5HLTEyNTI6IFJlbmFtZSBOdW1iZXJVdGlscy5pc051bWJlciwgaXNDcmVhdGFibGUgdG8gYmV0dGVyIHJlZmxlY3QKICAgICAgICAgICAgIGNyZWF0ZU51bWJlci4gQWxzbywgYWNjb21tb2RhdGVkIGZvciAiKyIgc3ltYm9sIGFzIHByZWZpeCBpbgogICAgICAgICAgICAgaXNDcmVhdGFibGUgYW5kIGlzTnVtYmVyLiBUaGFua3MgdG8gUm9iIFRvbXBraW5zLgpvIExBTkctMTIzMDogUmVtb3ZlIHVubmVjZXNzYXJ5IHN5bmNocm9uaXphdGlvbiBmcm9tIHJlZ2lzdHJ5IGxvb2t1cCBpbgogICAgICAgICAgICAgRXF1YWxzQnVpbGRlciBhbmQgSGFzaENvZGVCdWlsZGVyLiBUaGFua3MgdG8gUGhpbGlwcGUgTWFyc2NoYWxsLgpvIExBTkctMTIxNDogSGFuZGxlICJ2b2lkIiBpbiBDbGFzc1V0aWxzLmdldENsYXNzKCkuIFRoYW5rcyB0byBIZW5yeSBUdW5nLgpvIExBTkctMTI1MDogU2VyaWFsaXphdGlvblV0aWxzI2Rlc2VyaWFsaXplIGhhcyB1bm5lY2Vzc2FyeSBjb2RlIGFuZCBhIGNvbW1lbnQKICAgICAgICAgICAgIGZvciB0aGF0LiBUaGFua3MgdG8gR2xlYXNlIFdhbmcuCm8gTEFORy0xMTkwOiBUeXBlVXRpbHMuaXNBc3NpZ25hYmxlIHRocm93cyBOdWxsUG9pbnRlckV4Y2VwdGlvbiB3aGVuIGZyb21UeXBlCiAgICAgICAgICAgICBoYXMgdHlwZSB2YXJpYWJsZXMgYW5kIHRvVHlwZSBnZW5lcmljIHN1cGVyY2xhc3Mgc3BlY2lmaWVzIHR5cGUKICAgICAgICAgICAgIHZhcmlhYmxlLiBUaGFua3MgdG8gUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMjI2OiBTdHJpbmdVdGlscyNub3JtYWxpemVTcGFjZSBkb2VzIG5vdCB0cmltIHRoZSBzdHJpbmcgYW55bW9yZS4KICAgICAgICAgICAgIFRoYW5rcyB0byBQYXNjYWwgU2NodW1hY2hlci4KbyBMQU5HLTEyNTE6IFNlcmlhbGl6YXRpb25VdGlscy5DbGFzc0xvYWRlckF3YXJlT2JqZWN0SW5wdXRTdHJlYW0gc2hvdWxkIHVzZQogICAgICAgICAgICAgc3RhdGljIGluaXRpYWxpemVyIHRvIGluaXRpYWxpemUgcHJpbWl0aXZlVHlwZXMgbWFwLiBUaGFua3MgdG8KICAgICAgICAgICAgIFRha3V5YSBVZXNoaW4uCm8gTEFORy0xMjQ4OiBGYXN0RGF0ZVByaW50ZXIgTWVtb3J5IGFsbG9jYXRpb24gcmVncmVzc2lvbi4gVGhhbmtzIHRvCiAgICAgICAgICAgICBCZW5vaXQgV2lhcnQuCm8gTEFORy0xMDE4OiBGaXggcHJlY2lzaW9uIGxvc3Mgb24gTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKFN0cmluZykuIFRoYW5rcyB0bwogICAgICAgICAgICAgTmljayBNYW5sZXkuCm8gTEFORy0xMTk5OiBGaXggaW1wbGVtZW50YXRpb24gb2YgU3RyaW5nVXRpbHMuZ2V0SmFyb1dpbmtsZXJEaXN0YW5jZSgpLiBUaGFua3MKICAgICAgICAgICAgIHRvIE0uIFN0ZWlnZXIuCm8gTEFORy0xMjQ0OiBGaXggZGVhZCBsaW5rcyBpbiBTdHJpbmdVdGlscy5nZXRMZXZlbnNodGVpbkRpc3RhbmNlKCkgamF2YWRvYy4KICAgICAgICAgICAgIFRoYW5rcyB0byBqamJhbmtlcnQuCm8gTEFORy0xMjQyOiAiXHUyMjg0IjoiPyIgbWFwcGluZyBtaXNzaW5nIGZyb20KICAgICAgICAgICAgIEVudGl0eUFycmF5cyNIVE1MNDBfRVhURU5ERURfRVNDQVBFLiBUaGFua3MgdG8gTmVhbCBTdGV3YXJ0LgpvIExBTkctOTAxOiAgU3RyaW5nVXRpbHMjc3RhcnRzV2l0aEFueS9lbmRzV2l0aEFueSBpcyBjYXNlIHNlbnNpdGl2ZSAtCiAgICAgICAgICAgICBkb2N1bWVudGVkIGFzIGNhc2UgaW5zZW5zaXRpdmUuIFRoYW5rcyB0byBNYXR0aGV3IEJhcnRlbnNjaGxhZy4KbyBMQU5HLTEyMzI6IERpZmZCdWlsZGVyOiBBZGQgbnVsbCBjaGVjayBvbiBmaWVsZE5hbWUgd2hlbiBhcHBlbmRpbmcgT2JqZWN0IG9yCiAgICAgICAgICAgICBPYmplY3RbXS4gVGhhbmtzIHRvIE5pY2sgTWFubGV5LgpvIExBTkctMTE3ODogQXJyYXlVdGlscy5yZW1vdmVBbGwoT2JqZWN0IGFycmF5LCBpbnQuLi4gaW5kaWNlcykgc2hvdWxkIGRvIHRoZQogICAgICAgICAgICAgY2xvbmUsIG5vdCBpdHMgY2FsbGVycy4gVGhhbmtzIHRvIEhlbnJpIFlhbmRlbGwuCm8gTEFORy0xMTIwOiBTdHJpbmdVdGlscy5zdHJpcEFjY2VudHMgc2hvdWxkIHJlbW92ZSBhY2NlbnRzIGZyb20gIj8iIGFuZCAiPyIuCiAgICAgICAgICAgICBUaGFua3MgdG8ga2FjaGluZzg4LgpvIExBTkctMTIwNTogTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKCkgYmVoYXZlcyBpbmNvbnNpc3RlbnRseSB3aXRoCiAgICAgICAgICAgICBOdW1iZXJVdGlscy5pc051bWJlcigpLiBUaGFua3MgdG8gcGJyb3NlLgpvIExBTkctMTIyMjogRml4IGZvciBpbmNvcnJlY3QgY29tbWVudCBvbiBTdHJpbmdVdGlscy5jb250YWluc0lnbm9yZUNhc2UKICAgICAgICAgICAgIG1ldGhvZC4gVGhhbmtzIHRvIEFkYW0gSi4KbyBMQU5HLTEyMjE6IEZpeCB0eXBvIG9uIGFwcGVuZElmTWlzc2luZyBqYXZhZG9jLiBUaGFua3MgdG8gUGllcnJlIFRlbXBsaWVyLgpvIExBTkctMTIwMjogcGFyc2VEYXRlU3RyaWN0bHkgZG9lc24ndCBwYXNzIHNwZWNpZmllZCBsb2NhbGUuIFRoYW5rcyB0bwogICAgICAgICAgICAgTWFya3VzIEplbHNtYS4KbyBMQU5HLTEyMTk6IEZhc3REYXRlRm9ybWF0IGRvZXNuJ3QgcmVzcGVjdCBzdW1tZXIgZGF5bGlnaHQgaW4gc29tZSBsb2NhbGl6ZWQKICAgICAgICAgICAgIHN0cmluZ3MuIFRoYW5rcyB0byBKYXJlay4KbyBMQU5HLTExNzU6IFJlbW92ZSBBbnQtYmFzZWQgYnVpbGQuCm8gTEFORy0xMTk0OiBMaW1pdCBtYXggaGVhcCBtZW1vcnkgZm9yIGNvbnNpc3RlbnQgVHJhdmlzIENJIGJ1aWxkLgpvIExBTkctMTE4NjogRml4IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIEZhc3REYXRlUGFyc2VyJFRpbWVab25lU3RyYXRlZ3kuCiAgICAgICAgICAgICBUaGFua3MgdG8gTmlja01hbmxleS4KbyBMQU5HLTExOTM6IG9yZGluYWxJbmRleE9mKCJhYmMiLCAiYWIiLCAxKSBnaXZlcyBpbmNvcnJlY3QgYW5zd2VyIG9mIC0xCiAgICAgICAgICAgICAoY29ycmVjdCBhbnN3ZXIgc2hvdWxkIGJlIDApOyByZXZlcnQgZml4IGZvciBMQU5HLTEwNzcuIFRoYW5rcyB0bwogICAgICAgICAgICAgUWluIExpLgpvIExBTkctMTAwMjogU2V2ZXJhbCBwcmVkZWZpbmVkIElTTyBGYXN0RGF0ZUZvcm1hdHMgaW4gRGF0ZUZvcm1hdFV0aWxzIGFyZQogICAgICAgICAgICAgaW5jb3JyZWN0LiBUaGFua3MgdG8gTWljaGFlbCBPc2lwb3YuCm8gTEFORy0xMTUyOiBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIG9yIGZpZWxkIG92ZXItd3JpdGUgZm9yIGxhcmdlIHllYXIKICAgICAgICAgICAgIGZpZWxkcyBpbiBGYXN0RGF0ZVBhcnNlci4gVGhhbmtzIHRvIFBhcyBGaWxpcC4KbyBMQU5HLTExNDE6IFN0ckxvb2t1cC5zeXN0ZW1Qcm9wZXJ0aWVzTG9va3VwKCkgbm8gbG9uZ2VyIHJlYWN0cyBvbiBjaGFuZ2VzIG9uCiAgICAgICAgICAgICBzeXN0ZW0gcHJvcGVydGllcy4KbyBMQU5HLTExNDc6IEVudW1VdGlscyAqQml0VmVjdG9yIGlzc3VlIHdpdGggbW9yZSB0aGFuIDMyIHZhbHVlcyBFbnVtLiBUaGFua3MKICAgICAgICAgICAgIHRvIExvaWMgR3VpYmVydC4KbyBMQU5HLTEwNTk6IENhcGl0YWxpemUgamF2YWRvYyBpcyBpbmNvcnJlY3QuIFRoYW5rcyB0byBDb2xpbiBDYXNleS4KbyBMQU5HLTExMjI6IEluY29uc2lzdGVudCBiZWhhdmlvciBvZiBzd2FwIGZvciBtYWxmb3JtZWQgaW5wdXRzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEFkcmlhbiBCZXIuCm8gTEFORy0xMTMwOiBGaXggY3JpdGljYWwgaXNzdWVzIHJlcG9ydGVkIGJ5IFNvbmFyUXViZS4KbyBMQU5HLTExMzE6IFN0ckJ1aWxkZXIuZXF1YWxzKFN0ckJ1aWxkZXIpIGRvZXNuJ3QgY2hlY2sgZm9yIG51bGwgaW5wdXRzLgpvIExBTkctMTEyODogSnNvblRvU3RyaW5nU3R5bGUgZG9lc24ndCBoYW5kbGUgY2hhcnMgYW5kIG9iamVjdHMgY29ycmVjdGx5LgogICAgICAgICAgICAgVGhhbmtzIHRvIEphY2sgVGFuLgpvIExBTkctMTEyNjogRGF0ZUZvcm1hdFV0aWxzVGVzdC50ZXN0U01UUCBkZXBlbmRzIG9uIHRoZSBkZWZhdWx0IExvY2FsZS4KbyBMQU5HLTExMjM6IFVuaXQgdGVzdCBGYXN0RGF0ZVByaW50ZXJUaW1lWm9uZXNUZXN0IG5lZWRzIGEgdGltZXpvbmUgc2V0LgogICAgICAgICAgICAgVGhhbmtzIHRvIENocmlzdGlhbiBQLiBNb21vbi4KbyBMQU5HLTkxNjogIERhdGVGb3JtYXRVdGlscy5mb3JtYXQgZG9lcyBub3QgY29ycmVjdGx5IGNoYW5nZSBDYWxlbmRhcgogICAgICAgICAgICAgVGltZVpvbmUgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBUaGFua3MgdG8gQ2hyaXN0aWFuIFAuIE1vbW9uLgpvIExBTkctMTExNjogRGF0ZVV0aWxzVGVzdC50ZXN0TGFuZzUzMCBmYWlscyBmb3Igc29tZSB0aW1lem9uZXMuIFRoYW5rcyB0bwogICAgICAgICAgICAgQWFyb24gU2hlbGRvbi4KbyBMQU5HLTExMTQ6IFR5cGVVdGlscy5QYXJhbWV0ZXJpemVkVHlwZSNlcXVhbHMgZG9lc24ndCB3b3JrIHdpdGggd2lsZGNhcmQKICAgICAgICAgICAgIHR5cGVzLiBUaGFua3MgdG8gQW5keSBDb2F0ZXMuCm8gTEFORy0xMTE4OiBTdHJpbmdVdGlscy5yZXBlYXQoJ3onLCAtMSkgdGhyb3dzIE5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uLgogICAgICAgICAgICAgVGhhbmtzIHRvIExvaWMgR3VpYmVydC4KbyBMQU5HLTExMTE6IEZpeCBGaW5kQnVncyB3YXJuaW5ncyBpbiBEdXJhdGlvbkZvcm1hdFV0aWxzLgpvIExBTkctMTE2MjogU3RyaW5nVXRpbHMjZXF1YWxzIGZhaWxzIHdpdGggSW5kZXggT09CRSBvbiBub24tU3RyaW5ncyB3aXRoCiAgICAgICAgICAgICBpZGVudGljYWwgbGVhZGluZyBwcmVmaXguLgpvIExBTkctMTE2MzogVGhlcmUgYXJlIG5vIHRlc3RzIGZvciBDaGFyU2VxdWVuY2VVdGlscy5yZWdpb25NYXRjaGVzLgpvIExBTkctMTIwMDogRml4IEphdmFkb2Mgb2YgU3RyaW5nVXRpbHMub3JkaW5hbEluZGV4T2YuIFRoYW5rcyB0byBCYXJrWmhhbmcuCm8gTEFORy0xMTkxOiBJbmNvcnJlY3QgSmF2YWRvYwogICAgICAgICAgICAgU3RyaW5nVXRpbHMuY29udGFpbnNBbnkoQ2hhclNlcXVlbmNlLCBDaGFyU2VxdWVuY2UuLi4pLiBUaGFua3MgdG8KICAgICAgICAgICAgIHFlZCwgQnJlbnQgV29yZGVuIGFuZCBHYXJ5IEdyZWdvcnkuCgpDSEFOR0VTCj09PT09PT09PQpvIExBTkctMTE5NzogUHJlcGFyZSBKYXZhIDkgZGV0ZWN0aW9uLgpvIExBTkctMTI2MjogQ29tcGFyZVRvQnVpbGRlci5hcHBlbmQoT2JqZWN0LCBPYmplY3QsIENvbXBhcmF0b3IpIG1ldGhvZCBpcyB0b28KICAgICAgICAgICAgIGJpZyB0byBiZSBpbmxpbmVkLiBUaGFua3MgdG8gUnVzbGFuIENoZXJlbWluLgpvIExBTkctMTI1OTogSmF2YWRvYyBmb3IgQXJyYXlVdGlscy5pc05vdEVtcHR5KCkgaXMgc2xpZ2h0bHkgbWlzbGVhZGluZy4gVGhhbmtzCiAgICAgICAgICAgICB0byBEb21pbmlrIFN0YWRsZXIuCm8gTEFORy0xMjQ3OiBGYXN0RGF0ZVByaW50ZXIgZ2VuZXJhdGVzIGV4dHJhIERhdGUgb2JqZWN0cy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBCZW5vaXQgV2lhcnQuCm8gTEFORy0xMjI5OiBIYXNoQ29kZUJ1aWxkZXIuYXBwZW5kKE9iamVjdCxPYmplY3QpIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwKICAgICAgICAgICAgIHdoaWNoIHByZXZlbnRzIHdob2xlIGJ1aWxkZXIgdG8gYmUgc2NhbGFyaXplZC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBSdXNsYW4gQ2hlcmVtaW4uCm8gTEFORy0xMjQzOiBTaW1wbGlmeSBBcnJheVV0aWxzIHJlbW92ZUVsZW1lbnRzIGJ5IHVzaW5nIG5ldyBkZWNyZW1lbnRBbmRHZXQoKQogICAgICAgICAgICAgbWV0aG9kLgpvIExBTkctMTI0MDogT3B0aW1pemUgQml0RmllbGQgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb24uIFRoYW5rcyB0byB6aGFuaGIuCm8gTEFORy0xMjA2OiBJbXByb3ZlIENoYXJTZXRVdGlscy5zcXVlZXplKCkgcGVyZm9ybWFuY2UuIFRoYW5rcyB0bwogICAgICAgICAgICAgTW9oYW1tZWQgQWxmYWxsYWouCm8gTEFORy0xMTc2OiBJbXByb3ZlIEFycmF5VXRpbHMgcmVtb3ZlRWxlbWVudHMgdGltZSBjb21wbGV4aXR5IHRvIE8obikuIFRoYW5rcwogICAgICAgICAgICAgdG8gSmVmZmVyeSBZdWFuLgpvIExBTkctMTIzNDogZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZSB3aXRoIGEgdGhyZXNob2xkOiBvcHRpbWl6ZSBpbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgdGhlIHN0cmluZ3MgbGVuZ3RocyBkaWZmZXIgbW9yZSB0aGFuIHRoZSB0aHJlc2hvbGQuIFRoYW5rcyB0bwogICAgICAgICAgICAgSm9uYXRhbiBK9m5zc29uLgpvIExBTkctMTE1MTogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGZvciBOdW1iZXJVdGlscy5pc1BhcnNhYmxlLiBUaGFua3MgdG8KICAgICAgICAgICAgIEp1YW4gUGFibG8gU2FudG9zIFJvZHLtZ3Vlei4KbyBMQU5HLTEyMTg6IEVxdWFsc0J1aWxkZXIuYXBwZW5kKE9iamVjdCxPYmplY3QpIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwKICAgICAgICAgICAgIHdoaWNoIHByZXZlbnRzIHdob2xlIGJ1aWxkZXIgdG8gYmUgc2NhbGFyaXplZC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBSdXNsYW4gQ2hlcmVtaW4uCm8gTEFORy0xMjEwOiBTdHJpbmdVdGlscyNzdGFydHNXaXRoQW55IGhhcyBlcnJvciBpbiBKYXZhZG9jLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1hdHRoaWFzIE5pZWhvZmYuCm8gTEFORy0xMjA4OiBTdHJTdWJzdGl0dXRvciBjYW4gcHJlc2VydmUgZXNjYXBlcy4gVGhhbmtzIHRvIFNhbXVlbCBLYXJwLgpvIExBTkctMTE4MjogQ2xhcmlmeSBKYXZhZG9jIG9mIFN0cmluZ1V0aWxzLmNvbnRhaW5zQW55KCkuIFRoYW5rcyB0bwogICAgICAgICAgICAgTGFycnkgV2VzdCBhbmQgUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMTgzOiBNYWtpbmcgcmVwbGFjZVBhdHRlcm4vcmVtb3ZlUGF0dGVybiBtZXRob2RzIG51bGwgc2FmZSBpbgogICAgICAgICAgICAgU3RyaW5nVXRpbHMuCm8gTEFORy0xMDU3OiBSZXBsYWNlIFN0cmluZ0J1aWxkZXIgd2l0aCBTdHJpbmcgY29uY2F0ZW5hdGlvbiBmb3IgYmV0dGVyCiAgICAgICAgICAgICBvcHRpbWl6YXRpb24uIFRoYW5rcyB0byBPdOF2aW8gU2FudGFuYS4KbyBMQU5HLTEwNzU6IERlcHJlY2F0ZSBTeXN0ZW1VdGlscy5GSUxFX1NFUEFSQVRPUiBhbmQKICAgICAgICAgICAgIFN5c3RlbVV0aWxzLlBBVEhfU0VQQVJBVE9SLgpvIExBTkctOTc5OiAgVHlwZVV0aWxzLnBhcmFtZXRlcml6ZVdpdGhPd25lciAtIHdyb25nIGZvcm1hdCBkZXNjcmlwdG9yIGZvcgogICAgICAgICAgICAgImludmFsaWQgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycyIuIFRoYW5rcyB0byBCcnVubyBQLiBLaW5vc2hpdGEuCm8gTEFORy0xMTEyOiBNdWx0aWxpbmVSZWN1cnNpdmVUb1N0cmluZ1N0eWxlIGxhcmdlbHkgdW51c2FibGUgZHVlIHRvIGJlaW5nCiAgICAgICAgICAgICBwYWNrYWdlLXByaXZhdGUuCm8gTEFORy0xMDU4OiBTdHJpbmdVdGlscy51bmNhcGl0YWxpemUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIFRoYW5rcyB0bwogICAgICAgICAgICAgTGVvIFdhbmcuCm8gTEFORy0xMDY5OiBDaGFyU2V0LmdldEluc3RhbmNlIGRvY3VtZW50YXRpb24gZG9lcyBub3QgY2xlYXJseSBleHBsYWluIGhvdwogICAgICAgICAgICAgdG8gaW5jbHVkZSBuZWdhdGlvbiBjaGFyYWN0ZXIgaW4gc2V0LiBUaGFua3MgdG8gQXJubyBOb29yZG92ZXIuCm8gTEFORy0xMTA3OiBGaXggcGFyc2luZyBlZGdlIGNhc2VzIGluIEZhc3REYXRlUGFyc2VyLgpvIExBTkctMTI3MzogQWRkZWQgbmV3IHByb3BlcnR5IElTX09TX01BQ19PU1hfRUxfQ0FQSVRBTiBpbiBTeXN0ZW1VdGlscy4gVGhhbmtzCiAgICAgICAgICAgICB0byBKYWtlIFdhbmcuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjQKCgpDT01QQVRJQklMSVRZCj09PT09PT09PT09PT0KCkNvbW1vbnMgTGFuZyAzLjQgaXMgZnVsbHkgYmluYXJ5IGNvbXBhdGlibGUgdG8gdGhlIGxhc3QgcmVsZWFzZSBhbmQgY2FuCnRoZXJlZm9yZSBiZSB1c2VkIGFzIGEgZHJvcCBpbiByZXBsYWNlbWVudCBmb3IgMy4zLjIuIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2YKb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRHVyYXRpb25Gb3JtYXRVdGlscy5JU09fRVhURU5ERURfRk9STUFUX1BBVFRFUk4KaGFzIGNoYW5nZWQsIHdoaWNoIG1heSBhZmZlY3QgY2xpZW50cyB1c2luZyB0aGUgY29uc3RhbnQuIEZ1cnRoZXJtb3JlIHRoZQpjb25zdGFudCBpcyB1c2VkIGludGVybmFsbHkgaW4KbyBEdXJhdGlvbkZvcm1hdFV0aWxzLmZvcm1hdER1cmF0aW9uSVNPKGxvbmcpCm8gRHVyYXRpb25Gb3JtYXRVdGlscy5mb3JtYXRQZXJpb2RJU08obG9uZywgbG9uZykKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctMTAwMC4KCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTgyMTogIFN1cHBvcnQgT1MgWCB2ZXJzaW9ucyBpbiBTeXN0ZW1VdGlscy4gVGhhbmtzIHRvIFRpbW8gS29ja2VydC4KbyBMQU5HLTExMDM6IEFkZCBTeXN0ZW1VdGlscy5JU19KQVZBXzFfOQpvIExBTkctMTA5MzogQWRkIENsYXNzVXRpbHMuZ2V0QWJicmV2aWF0ZWROYW1lKCkuIFRoYW5rcyB0byBGYWJpYW4gTGFuZ2UuCm8gTEFORy0xMDgyOiBBZGQgb3B0aW9uIHRvIGRpc2FibGUgdGhlICJvYmplY3RzVHJpdmlhbGx5RXF1YWwiIHRlc3QgaW4KICAgICAgICAgICAgIERpZmZCdWlsZGVyLiBUaGFua3MgdG8gSm9uYXRoYW4gQmFrZXIuCm8gTEFORy0xMDE1OiBBZGQgSnNvblRvU3RyaW5nU3R5bGUgaW1wbGVtZW50YXRpb24gdG8gVG9TdHJpbmdTdHlsZS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTEwODA6IEFkZCBOb0NsYXNzTmFtZVRvU3RyaW5nU3R5bGUgaW1wbGVtZW50YXRpb24gb2YgVG9TdHJpbmdTdHlsZS4KICAgICAgICAgICAgIFRoYW5rcyB0byBJbm5va2VudHkgU2h1dmFsb3YuCm8gTEFORy04ODM6ICBBZGQgU3RyaW5nVXRpbHMuY29udGFpbnNBbnkoQ2hhclNlcXVlbmNlLCBDaGFyU2VxdWVuY2UuLi4pIG1ldGhvZC4KICAgICAgICAgICAgIFRoYW5rcyB0byBEYW5pZWwgU3Rld2FydC4KbyBMQU5HLTEwNTI6IE11bHRpbGluZSByZWN1cnNpdmUgdG8gc3RyaW5nIHN0eWxlLiBUaGFua3MgdG8gSmFuIE1hdOhybmUuCm8gTEFORy01MzY6ICBBZGQgaXNTb3J0ZWQoKSB0byBBcnJheVV0aWxzLiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gTEFORy0xMDMzOiBBZGQgU3RyaW5nVXRpbHMuY291bnRNYXRjaGVzKENoYXJTZXF1ZW5jZSwgY2hhcikKbyBMQU5HLTEwMjE6IFByb3ZpZGUgbWV0aG9kcyB0byByZXRyaWV2ZSBhbGwgZmllbGRzL21ldGhvZHMgYW5ub3RhdGVkIHdpdGggYQogICAgICAgICAgICAgc3BlY2lmaWMgdHlwZS4gVGhhbmtzIHRvIEFsZXhhbmRlciBN/GxsZXIuCm8gTEFORy0xMDE2OiBOdW1iZXJVdGlscyNpc1BhcnNhYmxlIG1ldGhvZChzKS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBKdWFuIFBhYmxvIFNhbnRvcyBSb2Ry7Wd1ZXouCm8gTEFORy05OTk6ICBBZGQgZnV6enkgU3RyaW5nIG1hdGNoaW5nIGxvZ2ljIHRvIFN0cmluZ1V0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEJlbiBSaXBrZW5zLgpvIExBTkctOTk0OiAgQWRkIHplcm8gY29weSByZWFkIG1ldGhvZCB0byBTdHJCdWlsZGVyLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1pa2hhaWwgTWF6dXJza3kuCm8gTEFORy05OTM6ICBBZGQgemVybyBjb3B5IHdyaXRlIG1ldGhvZCB0byBTdHJCdWlsZGVyLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1pa2hhaWwgTWF6dXJza3kuCm8gTEFORy0xMDQ0OiBBZGQgbWV0aG9kIE1ldGhvZFV0aWxzLmludm9rZUV4YWN0TWV0aG9kKE9iamVjdCwgU3RyaW5nKQpvIExBTkctMTA0NTogQWRkIG1ldGhvZCBNZXRob2RVdGlscy5pbnZva2VNZXRob2QoT2JqZWN0LCBTdHJpbmcpCgpGSVhFRCBCVUdTCj09PT09PT09PT09PQoKbyBMQU5HLTc5NDogIFN5c3RlbVV0aWxzLklTX09TX1dJTkRPV1NfMjAwOCwgVklTVEEgYXJlIGluY29ycmVjdC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUaW1vIEtvY2tlcnQuCm8gTEFORy0xMTA0OiBQYXJzZSB0ZXN0IGZhaWxzIGZvciBUaW1lWm9uZSBBbWVyaWNhL1Nhb19QYXVsbwpvIExBTkctOTQ4OiAgRXhjZXB0aW9uIHdoaWxlIHVzaW5nIEV4dGVuZGVkTWVzc2FnZUZvcm1hdCBhbmQgZXNjYXBpbmcgYnJhY2VzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHJleSBLaG9ibnlhLgpvIExBTkctMTA5MjogV3JvbmcgZm9ybWF0dGluZyBvZiB0aW1lIHpvbmVzIHdpdGggZGF5bGlnaHQgc2F2aW5nIHRpbWUgaW4KICAgICAgICAgICAgIEZhc3REYXRlUHJpbnRlcgpvIExBTkctMTA5MDogRmFzdERhdGVQYXJzZXIgZG9lcyBub3Qgc2V0IGVycm9yIGluZGljYXRpb24gaW4gUGFyc2VQb3NpdGlvbgpvIExBTkctMTA4OTogRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIGV4Y2VzcyBob3VycyBhcyBwZXIKICAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQKbyBMQU5HLTEwNjE6IEZhc3REYXRlUGFyc2VyIGVycm9yIC0gdGltZXpvbmVzIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBkbWVuZXNlcy4KbyBMQU5HLTEwODc6IE51bWJlclV0aWxzI2NyZWF0ZU51bWJlcigpIHJldHVybnMgcG9zaXRpdmUgQmlnRGVjaW1hbCB3aGVuCiAgICAgICAgICAgICBuZWdhdGl2ZSBGbG9hdCBpcyBleHBlY3RlZC4gVGhhbmtzIHRvIFJlbmF0IFpoaWxraWJhZXYuCm8gTEFORy0xMDgxOiBEaWZmQnVpbGRlci5hcHBlbmQoU3RyaW5nLCBPYmplY3QgbGVmdCwgT2JqZWN0IHJpZ2h0KSBkb2VzIG5vdCBkbwogICAgICAgICAgICAgYSBsZWZ0LmVxdWFscyhyaWdodCkgY2hlY2suIFRoYW5rcyB0byBKb25hdGhhbiBCYWtlci4KbyBMQU5HLTEwNTU6IFN0clN1YnN0aXR1dG9yLnJlcGxhY2VTeXN0ZW1Qcm9wZXJ0aWVzIGRvZXMgbm90IHdvcmsgY29uc2lzdGVudGx5LgogICAgICAgICAgICAgVGhhbmtzIHRvIEpvbmF0aGFuIEJha2VyLgpvIExBTkctMTA4MzogQWRkIChUKSBjYXN0cyB0byBnZXQgdW5pdCB0ZXN0cyB0byBwYXNzIGluIG9sZCBKREsuIFRoYW5rcyB0bwogICAgICAgICAgICAgSm9uYXRoYW4gQmFrZXIuCm8gTEFORy0xMDczOiBSZWFkIHdyb25nIGNvbXBvbmVudCB0eXBlIG9mIGFycmF5IGluIGFkZCBpbiBBcnJheVV0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIGhhaXlhbmcgbGkuCm8gTEFORy0xMDc3OiBTdHJpbmdVdGlscy5vcmRpbmFsSW5kZXhPZigiYWFhYWFhIiwgImFhIiwgMikgIT0gMyBpbiBTdHJpbmdVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBoYWl5YW5nIGxpLgpvIExBTkctMTA3MjogRHVwbGljYXRlZCAiMHgiIGNoZWNrIGluIGNyZWF0ZUJpZ0ludGVnZXIgaW4gTnVtYmVyVXRpbHMuIFRoYW5rcwogICAgICAgICAgICAgdG8gaGFpeWFuZyBsaS4KbyBMQU5HLTEwNjQ6IFN0cmluZ1V0aWxzLmFiYnJldmlhdGUgZGVzY3JpcHRpb24gZG9lc24ndCBhZ3JlZSB3aXRoIHRoZQogICAgICAgICAgICAgZXhhbXBsZXMuIFRoYW5rcyB0byBCLkouIEhlcmJpc29uLgpvIExBTkctMTA0MTogRml4IE1ldGhvZFV0aWxzVGVzdCBzbyBpdCBkb2VzIG5vdCBkZXBlbmQgb24gSkRLIG1ldGhvZCBvcmRlcmluZy4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbGV4YW5kcmUgQmFydGVsLgpvIExBTkctMTAwMDogUGFyc2VFeGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gcGFyc2UgVVRDIGRhdGVzIHdpdGggWiBhcyB6b25lCiAgICAgICAgICAgICBkZXNpZ25hdG9yIHVzaW5nIERhdGVGb3JtYXRVdGlscy5JU09fREFURVRJTUVfVElNRV9aT05FX0ZPUk1BVApvIExBTkctMTAzNTogSmF2YWRvYyBmb3IgRXF1YWxzQnVpbGRlci5yZWZsZWN0aW9uRXF1YWxzKCkgaXMgdW5jbGVhcgpvIExBTkctMTAwMTogSVNPIDg2MDEgbWlzc3BlbGxlZCB0aHJvdWdob3V0IHRoZSBKYXZhZG9jcy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBNaWNoYWVsIE9zaXBvdi4KbyBMQU5HLTEwODg6IEZhc3REYXRlUGFyc2VyIHNob3VsZCBiZSBjYXNlIGluc2Vuc2l0aXZlCm8gTEFORy05OTU6ICBGaXggYnVnIHdpdGggc3RyaXBwaW5nIHNwYWNlcyBvbiBsYXN0IGxpbmUgaW4gV29yZFV0aWxzLndyYXAoKS4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbmRyZXkgS2hvYm55YS4KCkNIQU5HRVMKPT09PT09PT09CgpvIExBTkctMTEwMjogTWFrZSBsb2dpYyBmb3IgY29tcGFyaW5nIE9TIHZlcnNpb25zIGluIFN5c3RlbVV0aWxzIHNtYXJ0ZXIKbyBMQU5HLTEwOTE6IFNodXRkb3duIHRocmVhZCBwb29scyBpbiB0ZXN0IGNhc2VzLiBUaGFua3MgdG8gRmFiaWFuIExhbmdlLgpvIExBTkctMTEwMTogRmFzdERhdGVQYXJzZXIgYW5kIEZhc3REYXRlUHJpbnRlciBzdXBwb3J0ICdYJyBmb3JtYXQKbyBMQU5HLTExMDA6IEF2b2lkIG1lbW9yeSBhbGxvY2F0aW9uIHdoZW4gdXNpbmcgZGF0ZSBmb3JtYXR0aW5nIHRvIFN0cmluZ0J1ZmZlci4KICAgICAgICAgICAgIFRoYW5rcyB0byBtYnJhY2hlci4KbyBMQU5HLTkzNTogIFBvc3NpYmxlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9uIHN0cmluZyBlc2NhcGUgZnVuY3Rpb25zLgogICAgICAgICAgICAgVGhhbmtzIHRvIEZhYmlhbiBMYW5nZSwgVGhvbWFzIE5laWRoYXJ0LgpvIExBTkctMTA5ODogQXZvaWQgU3RyaW5nIGFsbG9jYXRpb24gaW4gU3RyQnVpbGRlci5hcHBlbmQoQ2hhclNlcXVlbmNlKS4gVGhhbmtzCiAgICAgICAgICAgICB0byBNaWtoYWlsIE1henVyc2tpeSwgRmFiaWFuIExhbmdlLgpvIExBTkctMTA5ODogVXBkYXRlIG1hdmVuLWNoZWNrc3R5bGUtcGx1Z2luIHRvIDIuMTQuIFRoYW5rcyB0byBNaWNoYT8gS29yZGFzLgpvIExBTkctMTA5NzogVXBkYXRlIG9yZy5lYXN5bW9jazplYXN5bW9jayB0byAzLjMuMS4gVGhhbmtzIHRvIE1pY2hhPyBLb3JkYXMuCm8gTEFORy0xMDk2OiBVcGRhdGUgbWF2ZW4tcG1kLXBsdWdpbiB0byAzLjQuIFRoYW5rcyB0byBNaWNoYT8gS29yZGFzLgpvIExBTkctMTA5NTogVXBkYXRlIG1hdmVuLWFudHJ1bi1wbHVnaW4gdG8gMS44LiBUaGFua3MgdG8gTWljaGE/IEtvcmRhcy4KbyBMQU5HLTg3NzogIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBmb3IgU3RyaW5nRXNjYXBlVXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgRmFiaWFuIExhbmdlLgpvIExBTkctMTA3MTogRml4IHdyb25nIGV4YW1wbGVzIGluIEphdmFkb2Mgb2YKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLnJlcGxhY2VFYWNoUmVwZWF0ZWRseSguLi4pLAogICAgICAgICAgICAgU3RyaW5nVXRpbHMucmVwbGFjZUVhY2goLi4uKSBUaGFua3MgdG8gQXJubyBOb29yZG92ZXIuCm8gTEFORy04Mjc6ICBDb21wYXJlVG9CdWlsZGVyJ3MgZG9jIGRvZXNuJ3Qgc3BlY2lmeSBwcmVjZWRlbmNlIG9mIGZpZWxkcyBpdAogICAgICAgICAgICAgdXNlcyBpbiBwZXJmb3JtaW5nIGNvbXBhcmlzb25zCm8gTEFORy0xMDIwOiBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIG5vcm1hbGl6ZSBzcGFjZS4gVGhhbmtzIHRvIExpYm9yIE9uZHJ1c2VrLgpvIExBTkctMTAyNzogb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzI2lzSmF2YVZlcnNpb25BdExlYXN0IHNob3VsZAogICAgICAgICAgICAgcmV0dXJuIHRydWUgYnkgZGVmYXVsdApvIExBTkctMTAyNjogQnJpbmcgc3RhdGljIG1ldGhvZCByZWZlcmVuY2VzIGluIFN0cmluZ1V0aWxzIHRvIGNvbnNpc3RlbnQgc3R5bGUuCiAgICAgICAgICAgICBUaGFua3MgdG8gQWxleCBZdXJzaGEuCm8gTEFORy0xMDE3OiBVc2Ugbm9uLUFTQ0lJIGRpZ2l0cyBpbiBKYXZhZG9jIGV4YW1wbGVzIGZvcgogICAgICAgICAgICAgU3RyaW5nVXRpbHMuaXNOdW1lcmljLiBUaGFua3MgdG8gQ2hyaXN0b3BoIFNjaG5lZWdhbnMuCm8gTEFORy0xMDA4OiBDaGFuZ2UgbWluL21heCBtZXRob2RzIGluIE51bWJlclV0aWxzL0lFRUU3NTRyVXRpbHMgZnJvbSBhcnJheQogICAgICAgICAgICAgaW5wdXQgcGFyYW1ldGVycyB0byB2YXJhcmdzLiBUaGFua3MgdG8gVGhpYWdvIEFuZHJhZGUuCm8gTEFORy0xMDA2OiBBZGQgd3JhcCAod2l0aCBTdHJpbmcgb3IgY2hhcikgdG8gU3RyaW5nVXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgVGhpYWdvIEFuZHJhZGUuCm8gTEFORy0xMDA1OiBFeHRlbmQgRHVyYXRpb25Gb3JtYXRVdGlscyNmb3JtYXREdXJhdGlvbklTTyBkZWZhdWx0IHBhdHRlcm4gdG8KICAgICAgICAgICAgIG1hdGNoICNmb3JtYXREdXJhdGlvbkhNUy4gVGhhbmtzIHRvIE1pY2hhZWwgT3NpcG92LgpvIExBTkctMTAwNzogRml4aW5nIE51bWJlclV0aWxzIEpBVkFEb2MgY29tbWVudHMgZm9yIG1heCBtZXRob2RzLiBUaGFua3MgdG8KICAgICAgICAgICAgIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctNzMxOiAgQmV0dGVyIEphdmFkb2MgZm9yIEJpdEZpZWxkIGNsYXNzCm8gTEFORy0xMDA0OiBEdXJhdGlvbkZvcm1hdFV0aWxzI2Zvcm1hdER1cmF0aW9uSE1TIGltcGxlbWVudGF0aW9uIGRvZXMgbm90CiAgICAgICAgICAgICBjb3JyZXNwb25kIHRvIEphdmFkb2MgYW5kIHZpY2UgdmVyc2EuIFRoYW5rcyB0byBNaWNoYWVsIE9zaXBvdi4KbyBMQU5HLTEwMDM6IER1cmF0aW9uRm9ybWF0VXRpbHMgYXJlIG5vdCBhYmxlIHRvIGhhbmRsZSBuZWdhdGl2ZQogICAgICAgICAgICAgZHVyYXRpb25zL3BlcmlvZHMKbyBMQU5HLTk5ODogIEphdmFkb2MgaXMgbm90IGNsZWFyIG9uIHByZWZlcnJlZCBwYXR0ZXJuIHRvIGluc3RhbnRpYXRlCiAgICAgICAgICAgICBGYXN0RGF0ZVBhcnNlciAvIEZhc3REYXRlUHJpbnRlcgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4zLjIKCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTk4OTogIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMuSVNfSkFWQV8xXzgKCkZJWEVEIEJVR1MKPT09PT09PT09PT09CgpvIExBTkctOTkyOiAgTnVtYmVyVXRpbHMjaXNOdW1iZXIoKSByZXR1cm5zIGZhbHNlIGZvciAiMC4wIiwgIjAuNDc5MCIsIGV0IGFsCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjMuMQoKRklYRUQgQlVHUwo9PT09PT09PT09PT0KCm8gTEFORy05ODc6ICBEYXRlVXRpbHMuZ2V0RnJhZ21lbnRJbkRheXMoRGF0ZSwgQ2FsZW5kYXIuTU9OVEgpIHJldHVybnMgd3JvbmcKICAgICAgICAgICAgIGRheXMKbyBMQU5HLTk4MzogIER1cmF0aW9uRm9ybWF0VXRpbHMgZG9lcyBub3QgZGVzY3JpYmUgZm9ybWF0IHN0cmluZyBmdWxseQpvIExBTkctOTgxOiAgRHVyYXRpb25Gb3JtYXRVdGlscyNsZXh4IGRvZXMgbm90IGRldGVjdCB1bm1hdGNoZWQgcXVvdGUgY2hhcgpvIExBTkctOTg0OiAgRHVyYXRpb25Gb3JtYXRVdGlscyBkb2VzIG5vdCBoYW5kbGUgbGFyZ2UgZHVyYXRpb25zIGNvcnJlY3RseQpvIExBTkctOTgyOiAgRHVyYXRpb25Gb3JtYXRVdGlscy5mb3JtYXREdXJhdGlvbig2MTk5OSwgInMuU1NTUyIpIC0gbXMgZmllbGQKICAgICAgICAgICAgIHNpemUgc2hvdWxkIGJlIDQgZGlnaXRzCm8gTEFORy05Nzg6ICBGYWlsaW5nIHRlc3RzIHdpdGggSmF2YSA4IGIxMjgKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMwoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctOTU1OiAgQWRkIG1ldGhvZHMgZm9yIHJlbW92aW5nIGFsbCBpbnZhbGlkIGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvCiAgICAgICAgICAgICBYTUwgMS4wIGFuZCBYTUwgMS4xIGluIGFuIGlucHV0IHN0cmluZyB0byBTdHJpbmdFc2NhcGVVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBBZGFtIEhvb3Blci4KbyBMQU5HLTk3MDogIEFkZCBBUElzIE11dGFibGVCb29sZWFuIHNldFRydWUoKSBhbmQgc2V0RmFsc2UoKQpvIExBTkctOTYyOiAgQWRkIFNlcmlhbGl6YXRpb25VdGlscy5yb3VuZHRyaXAoVCBleHRlbmRzIFNlcmlhbGl6YWJsZSkgdG8KICAgICAgICAgICAgIHNlcmlhbGl6ZSB0aGVuIGRlc2VyaWFsaXplCm8gTEFORy02Mzc6ICBUaGVyZSBzaG91bGQgYmUgYSBEaWZmZXJlbmNlQnVpbGRlciB3aXRoIGEKICAgICAgICAgICAgIFJlZmxlY3Rpb25EaWZmZXJlbmNlQnVpbGRlciBpbXBsZW1lbnRhdGlvbgpvIExBTkctOTQ0OiAgQWRkIHRoZSBKYXJvLVdpbmtsZXIgc3RyaW5nIGRpc3RhbmNlIGFsZ29yaXRobSB0byBTdHJpbmdVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBSZWtoYSBKb3NoaS4KbyBMQU5HLTQxNzogIE5ldyBjbGFzcyBDbGFzc1BhdGhVdGlscyB3aXRoIG1ldGhvZHMgZm9yIHR1cm5pbmcgRlFOIGludG8KICAgICAgICAgICAgIHJlc291cmNlIHBhdGgKbyBMQU5HLTgzNDogIFZhbGlkYXRlOiBhZGQgaW5jbHVzaXZlQmV0d2VlbiBhbmQgZXhjbHVzaXZlQmV0d2VlbiBvdmVybG9hZHMKICAgICAgICAgICAgIGZvciBwcmltaXRpdmUgdHlwZXMKbyBMQU5HLTkwMDogIE5ldyBSYW5kb21VdGlscyBjbGFzcy4gVGhhbmtzIHRvIER1bmNhbiBKb25lcy4KbyBMQU5HLTk2NjogIEFkZCBJQk0gT1MvNDAwIGRldGVjdGlvbgoKRklYRUQgQlVHUwo9PT09PT09PT09PT0KCm8gTEFORy02MjE6ICBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyLnRvU3RyaW5nIGRvZXMgbm90IGRlYnVnIDNyZCBwYXJ0eSBvYmplY3QKICAgICAgICAgICAgIGZpZWxkcyB3aXRoaW4gM3JkIHBhcnR5IG9iamVjdC4gVGhhbmtzIHRvIFBoaWxpcCBIb2RnZXMsCiAgICAgICAgICAgICBUaG9tYXMgTmVpZGhhcnQuCm8gTEFORy05Nzc6ICBOdW1lcmljRW50aXR5RXNjYXBlciBpbmNvcnJlY3RseSBlbmNvZGVzIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycy4KICAgICAgICAgICAgIFRoYW5rcyB0byBDaHJpcyBLYXJjaGVyLgpvIExBTkctOTczOiAgTWFrZSBzb21lIHByaXZhdGUgZmllbGRzIGZpbmFsCm8gTEFORy05NzE6ICBOdW1iZXJVdGlscyNpc051bWJlcihTdHJpbmcpIGZhaWxzIHRvIHJlamVjdCBpbnZhbGlkIE9jdGFsIG51bWJlcnMKbyBMQU5HLTk3MjogIE51bWJlclV0aWxzI2lzTnVtYmVyIGRvZXMgbm90IGFsbG93IGZvciBoZXggMFhBQkNECm8gTEFORy05Njk6ICBTdHJpbmdVdGlscy50b0VuY29kZWRTdHJpbmcoYnl0ZVtdLCBDaGFyc2V0KSBuZWVkbGVzc2x5IHRocm93cwogICAgICAgICAgICAgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbi4gVGhhbmtzIHRvIE1hdHQgQmlzaG9wLgpvIExBTkctOTQ2OiAgQ29uc3RhbnRJbml0aWFsaXplclRlc3QgZmFpbHMgd2hlbiBidWlsZGluZyB3aXRoIElCTSBKREsgNwpvIExBTkctOTU0OiAgdW5jYXVnaHQgUGF0dGVyblN5bnRheEV4Y2VwdGlvbiBpbiBGYXN0RGF0ZUZvcm1hdCBvbiBBbmRyb2lkLgogICAgICAgICAgICAgVGhhbmtzIHRvIE1pY2hhZWwgS2VwcGxlci4KbyBMQU5HLTkzNjogIFN0cmluZ1V0aWxzLmdldExldmVuc2h0ZWluRGlzdGFuY2Ugd2l0aCB0b28gYmlnIG9mIGEgdGhyZXNob2xkCiAgICAgICAgICAgICByZXR1cm5zIHdyb25nIHJlc3VsdC4gVGhhbmtzIHRvIFlhbml2IEt1bmRhLCBFbGkgTGluZHNleS4KbyBMQU5HLTk0MzogIFRlc3QgRHVyYXRpb25Gb3JtYXRVdGlsc1Rlc3QudGVzdEVkZ2VEdXJhdGlvbiBmYWlscyBpbgogICAgICAgICAgICAgSkRLIDEuNiwgMS43IGFuZCAxLjgsIEJSU1QgdGltZSB6b25lCm8gTEFORy02MTM6ICBDb25zdHJ1Y3RvclV0aWxzLmdldEFjY2Vzc2libGVDb25zdHJ1Y3RvcigpIERvZXMgTm90IENoZWNrIHRoZQogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eSBvZiBFbmNsb3NpbmcgQ2xhc3NlcwpvIExBTkctOTUxOiAgRnJhZ21lbnRzIGFyZSB3cm9uZyBieSAxIGRheSB3aGVuIHVzaW5nIGZyYWdtZW50IFlFQVIgb3IgTU9OVEguCiAgICAgICAgICAgICBUaGFua3MgdG8gU2ViYXN0aWFuIEf2dHouCm8gTEFORy05NTA6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgdHdvIGRpZ2l0IHllYXIgcGFyc2luZyBsaWtlCiAgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0Cm8gTEFORy05NDk6ICBGYXN0RGF0ZVBhcnNlclRlc3QudGVzdFBhcnNlcyBkb2VzIG5vdCB0ZXN0IEZhc3REYXRlUGFyc2VyCm8gTEFORy05MTU6ICBXcm9uZyBsb2NhbGUgaGFuZGxpbmcgaW4gTG9jYWxlVXRpbHMudG9Mb2NhbGUoKS4KICAgICAgICAgICAgIFRoYW5rcyB0byBTZXJnaW8gRmVybuFuZGV6LgoKQ0hBTkdFUwo9PT09PT09PT0KCm8gTEFORy05NjE6ICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMucmVmbGVjdC5GaWVsZFV0aWxzLnJlbW92ZUZpbmFsTW9kaWZpZXIoRmllbGQpCiAgICAgICAgICAgICBkb2VzIG5vdCBjbGVhbiB1cCBhZnRlciBpdHNlbGYKbyBMQU5HLTk1ODogIEZhc3REYXRlUGFyc2VyIGphdmFkb2MgaW5jb3JyZWN0bHkgc3RhdGVzIHRoYXQgU2ltcGxlRGF0ZUZvcm1hdAogICAgICAgICAgICAgaXMgdXNlZCBpbnRlcm5hbGx5Cm8gTEFORy05NTY6ICBJbXByb3ZlIEphdmFkb2Mgb2YgV29yZFV0aWxzLndyYXAgbWV0aG9kcwpvIExBTkctOTM5OiAgTW92ZSBEb2N1bWVudGF0aW9uIGZyb20gdXNlciBndWlkZSB0byBwYWNrYWdlLWluZm8gZmlsZXMKbyBMQU5HLTk1MzogIENvbnZlcnQgcGFja2FnZS5odG1sIGZpbGVzIHRvIHBhY2thZ2UtaW5mby5qYXZhIGZpbGVzCm8gTEFORy05NDA6ICBGaXggZGVwcmVjYXRpb24gd2FybmluZ3MKbyBMQU5HLTgxOTogIEVudW1VdGlscy5nZW5lcmF0ZUJpdFZlY3RvciBuZWVkcyBhICI/IGV4dGVuZHMiCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjIuMQoKQlVHIEZJWEVTCj09PT09PT09PT09CgpvIExBTkctOTM3OiAgRml4IG1pc3NpbmcgSGFtY3Jlc3QgZGVwZW5kZW5jeSBpbiBBbnQgQnVpbGQKbyBMQU5HLTk0MTogIFRlc3QgZmFpbHVyZSBpbiBMb2NhbGVVdGlsc1Rlc3Qgd2hlbiBidWlsZGluZyB3aXRoIEpESyA4Cm8gTEFORy05NDI6ICBUZXN0IGZhaWx1cmUgaW4gRmFzdERhdGVQYXJzZXJUZXN0IGFuZCBGYXN0RGF0ZUZvcm1hdF9QYXJzZXJUZXN0CiAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIHdpdGggSkRLOC4gVGhhbmtzIHRvIEJydW5vIFAuIEtpbm9zaGl0YSwKICAgICAgICAgICAgIEhlbnJpIFlhbmRlbGwuCm8gTEFORy05Mzg6ICBCdWlsZCBmYWlscyB3aXRoIHRlc3QgZmFpbHVyZXMgd2hlbiBidWlsZGluZyB3aXRoIEpESyA4Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjIKCkNPTVBBVElCSUxJVFkgV0lUSCAzLjEKPT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIHJlbGVhc2UgaW50cm9kdWNlcyBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZXMgaW4Kb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRmFzdERhdGVGb3JtYXQ6Cm8gTWV0aG9kICdwcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgcGFyc2VQYXR0ZXJuKCknIGhhcyBiZWVuIHJlbW92ZWQKbyBNZXRob2QgJ3Byb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIHBhcnNlVG9rZW4oamF2YS5sYW5nLlN0cmluZywgaW50W10pJyBoYXMKICBiZWVuIHJlbW92ZWQKbyBNZXRob2QgJ3Byb3RlY3RlZCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGltZS5GYXN0RGF0ZUZvcm1hdCROdW1iZXJSdWxlCiAgc2VsZWN0TnVtYmVyUnVsZShpbnQsIGludCknIGhhcyBiZWVuIHJlbW92ZWQKClRoZXNlIGNoYW5nZXMgd2VyZSB0aGUgcmVzdWx0IG9mIFtMQU5HLTQ2Ml0uIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGNoYW5nZQp3aWxsIG5vdCBicmVhayBjbGllbnRzIGFzIENoYXJsZXMgSG9udG9uIHBvaW50ZWQgb3V0IG9uIDI1L0phbi8xMjoKIgogMS4gTWV0aG9kcyAiRmFzdERhdGVGb3JtYXQkTnVtYmVyUnVsZSBzZWxlY3ROdW1iZXJSdWxlKGludCwgaW50KSIgYW5kCiAgICAiTGlzdDxSdWxlPiBwYXJzZVBhdHRlcm4oKSIgY291bGRuJ3QgaGF2ZSBiZWVuIG92ZXJyaWRkZW4gYmVjYXVzZQogICAgTnVtYmVyUnVsZSBhbmQgUnVsZSB3ZXJlIHByaXZhdGUgdG8gRmFzdERhdGVGb3JtYXQuCiAyLiBEdWUgdG8gdGhlIGZhY3RvcnkgcGF0dGVybiB1c2VkLCBpdCdzIHVubGlrZWx5IG90aGVyIHR3byBtZXRob2RzIHdvdWxkIGhhdmUKICAgIGJlZW4gb3ZlcnJpZGRlbi4KIDMuIFRoZSBmb3VyIG1ldGhvZHMgYXJlIGhpZ2hseSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4gSSBjb25zaWRlciBpdCBhCiAgICBtaXN0YWtlIHRoYXQgdGhlIG1ldGhvZHMgd2VyZSBleHBvc2VkLgoiCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctNDYyLgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctOTM0OiAgQWRkIHJlbW92ZUZpbmFsTW9kaWZpZXIgdG8gRmllbGRVdGlscwpvIExBTkctODYzOiAgTWV0aG9kIHJldHVybnMgbnVtYmVyIG9mIGluaGVyaXRhbmNlIGhvcHMgYmV0d2VlbiBwYXJlbnQgYW5kCiAgICAgICAgICAgICBzdWJjbGFzcy4gVGhhbmtzIHRvIERhbmVlbCBTLiBZYWl0c2tvdi4KbyBMQU5HLTc3NDogIEFkZGVkIGlzU3RhcnRlZCwgaXNTdXNwZW5kZWQgYW5kIGlzU3RvcHBlZCB0byBTdG9wV2F0Y2guCiAgICAgICAgICAgICBUaGFua3MgdG8gRXJoYW4gQmFnZGVtaXIuCm8gTEFORy04NDg6ICBBZGRlZCBTdHJpbmdVdGlscy5pc0JsYW5rL2lzRW1wdHkgQ2hhclNlcXVlbmNlLi4uIG1ldGhvZHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQWxleGFuZGVyIE11dGhtYW5uLgpvIExBTkctOTI2OiAgQWRkZWQgQXJyYXlVdGlscy5yZXZlcnNlKGFycmF5LCBmcm9tLCB0bykgbWV0aG9kcy4KbyBMQU5HLTc5NTogIFN0cmluZ1V0aWxzLnRvU3RyaW5nKGJ5dGVbXSwgU3RyaW5nKSBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBhIG5ldwogICAgICAgICAgICAgU3RyaW5nVXRpbHMudG9TdHJpbmcoYnl0ZVtdLCBDaGFyU2V0KS4gVGhhbmtzIHRvIEFhcm9uIERpZ3VsbGEuCm8gTEFORy04OTM6ICBTdHJTdWJzdGl0dXRvciBub3cgc3VwcG9ydHMgZGVmYXVsdCB2YWx1ZXMgZm9yIHZhcmlhYmxlcy4KICAgICAgICAgICAgIFRoYW5rcyB0byBXb29uc2FuIEtvLgpvIExBTkctOTEzOiAgQWRkaW5nIC5naXRpZ25vcmUgdG8gY29tbW9ucy1sYW5nLiBUaGFua3MgdG8gQWxsb24gTXVyZWluaWsuCm8gTEFORy04Mzc6ICBBZGQgT2JqZWN0VXRpbHMudG9JZGVudGl0eVN0cmluZyBtZXRob2RzIHRoYXQgc3VwcG9ydAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciwgU3RyQnVpbGRlciwgYW5kIEFwcGVuZGFibGUuCm8gTEFORy04ODY6ICBBZGRlZCBDaGFyU2V0VXRpbHMuY29udGFpbnNBbnkoU3RyaW5nLCBTdHJpbmcpLgpvIExBTkctNzk3OiAgQWRkZWQgZXNjYXBlL3VuZXNjYXBlSnNvbiB0byBTdHJpbmdFc2NhcGVVdGlscy4KbyBMQU5HLTg3NTogIEFkZGVkIGFwcGVuZElmTWlzc2luZyBhbmQgcHJlcGVuZElmTWlzc2luZyBtZXRob2RzIHRvIFN0cmluZ1V0aWxzLgpvIExBTkctODcwOiAgQWRkIFN0cmluZ1V0aWxzLkxGIGFuZCBTdHJpbmdVdGlscy5DUiB2YWx1ZXMuCm8gTEFORy04NzM6ICBBZGQgRmllbGRVdGlscyBnZXRBbGxGaWVsZHMoKSB0byByZXR1cm4gYWxsIHRoZSBmaWVsZHMgZGVmaW5lZCBpbgogICAgICAgICAgICAgdGhlIGdpdmVuIGNsYXNzIGFuZCBzdXBlciBjbGFzc2VzLgpvIExBTkctODM1OiAgU3RyQnVpbGRlciBzaG91bGQgc3VwcG9ydCBTdHJpbmdCdWlsZGVyIGFzIGFuIGlucHV0IHBhcmFtZXRlci4KbyBMQU5HLTg1NzogIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW4gQ2hhclNlcXVlbmNlVHJhbnNsYXRvci4KbyBMQU5HLTg1NjogIENvZGUgcmVmYWN0b3JpbmcgaW4gTnVtYmVyVXRpbHMuCm8gTEFORy04NTU6ICBOdW1iZXJVdGlscyNjcmVhdGVCaWdJbnRlZ2VyIGRvZXMgbm90IGFsbG93IGZvciBoZXggYW5kIG9jdGFsCiAgICAgICAgICAgICBudW1iZXJzLgpvIExBTkctODU0OiAgTnVtYmVyVXRpbHMjY3JlYXRlTnVtYmVyIC0gZG9lcyBub3QgYWxsb3cgZm9yIGhleCBudW1iZXJzIHRvIGJlCiAgICAgICAgICAgICBsYXJnZXIgdGhhbiBMb25nLgpvIExBTkctODUzOiAgU3RyaW5nVXRpbHMgam9pbiBBUElzIGZvciBwcmltaXRpdmVzLgpvIExBTkctODQxOiAgQWRkIFN0cmluZ1V0aWxzIEFQSSB0byBjYWxsIFN0cmluZy5yZXBsYWNlQWxsIGluIERPVEFMTCBhLmsuYS4KICAgICAgICAgICAgIHNpbmdsZS1saW5lIG1vZGUuCm8gTEFORy04MjU6ICBDcmVhdGUgU3RyQnVpbGRlciBBUElzIHNpbWlsYXIgdG8KICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoU3RyaW5nLCBPYmplY3QuLi4pLgpvIExBTkctNjc1OiAgQWRkIFRyaXBsZSBjbGFzcyAodGVybmFyeSB2ZXJzaW9uIG9mIFBhaXIpLgpvIExBTkctNDYyOiAgRmFzdERhdGVGb3JtYXQgc3VwcG9ydHMgcGFyc2UgbWV0aG9kcy4KCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTkzMjogIFNwZWxsaW5nIGZpeGVzLiBUaGFua3MgdG8gVmlsbGUgU2t5dHTkLgpvIExBTkctOTI5OiAgT2N0YWxVbmVzY2FwZXIgdHJpZWQgdG8gcGFyc2UgYWxsIG9mIFwyNzkuCm8gTEFORy05Mjg6ICBPY3RhbFVuZXNjYXBlciBoYWQgYnVncyB3aGVuIHBhcnNpbmcgb2N0YWxzIHN0YXJ0aW5nIHdpdGggYSB6ZXJvLgpvIExBTkctOTA1OiAgRXF1YWxzQnVpbGRlciByZXR1cm5lZCB0cnVlIHdoZW4gY29tcGFyaW5nIGFycmF5cywgZXZlbiB3aGVuIHRoZQogICAgICAgICAgICAgZWxlbWVudHMgYXJlIGRpZmZlcmVudC4KbyBMQU5HLTkxNzogIEZpeGVkIGV4Y2VwdGlvbiB3aGVuIGNvbWJpbmluZyBjdXN0b20gYW5kIGNob2ljZSBmb3JtYXQgaW4KICAgICAgICAgICAgIEV4dGVuZGVkTWVzc2FnZUZvcm1hdC4gVGhhbmtzIHRvIEFybmUgQnVybWVpc3Rlci4KbyBMQU5HLTkwMjogIFJhbmRvbVN0cmluZ1V0aWxzLnJhbmRvbSBqYXZhZG9jIHdhcyBpbmNvcnJlY3RseSBwcm9taXNpbmcgbGV0dGVycwogICAgICAgICAgICAgYW5kIG51bWJlcnMgd291bGQsIGFzIG9wcG9zZWQgdG8gbWF5LCBhcHBlYXIgIElzc3VlOi4gVGhhbmtzIHRvCiAgICAgICAgICAgICBBbmRyemVqIFdpbm5pY2tpLgpvIExBTkctOTIxOiAgQm9vbGVhblV0aWxzLnhvcihib29sZWFuLi4uKSBwcm9kdWNlcyB3cm9uZyByZXN1bHRzLgpvIExBTkctODk2OiAgQm9vbGVhblV0aWxzLnRvQm9vbGVhbihTdHJpbmcgc3RyKSBqYXZhZG9jIGlzIG5vdCB1cGRhdGVkLiBUaGFua3MKICAgICAgICAgICAgIHRvIE1hcmsgQnJ5YW4gWXUuCm8gTEFORy04Nzk6ICBMb2NhbGVVdGlscyB0ZXN0IGZhaWxzIHdpdGggbmV3IExvY2FsZSAiamFfSlBfSlBfI3UtY2EtamFwYW5lc2UiCiAgICAgICAgICAgICBvZiBKREs3LgpvIExBTkctODM2OiAgU3RyU3Vic3RpdHV0b3IgZG9lcyBub3Qgc3VwcG9ydCBTdHJpbmdCdWlsZGVyIG9yIENoYXJTZXF1ZW5jZS4KICAgICAgICAgICAgIFRoYW5rcyB0byBBcm5hdWQgQnJ1bmV0LgpvIExBTkctNjkzOiAgTWV0aG9kIGNyZWF0ZU51bWJlciBmcm9tIE51bWJlclV0aWxzIGRvZXNuJ3Qgd29yayBmb3IgZmxvYXRpbmcKICAgICAgICAgICAgIHBvaW50IG51bWJlcnMgb3RoZXIgdGhhbiBGbG9hdCAgSXNzdWU6IExBTkctNjkzLiBUaGFua3MgdG8KICAgICAgICAgICAgIENhbHZpbiBFY2hvbHMuCm8gTEFORy04ODc6ICBGYXN0RGF0ZUZvcm1hdCBkb2VzIG5vdCB1c2UgdGhlIGxvY2FsZSBzcGVjaWZpYyBjYWNoZSBjb3JyZWN0bHkuCm8gTEFORy03NTQ6ICBDbGFzc1V0aWxzLmdldFNob3J0TmFtZShTdHJpbmcpIHdpbGwgbm93IG9ubHkgZG8gYSByZXZlcnNlIGxvb2t1cAogICAgICAgICAgICAgZm9yIGFycmF5IHR5cGVzLgpvIExBTkctODgxOiAgTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKCkgSmF2YWRvYyBzYXlzIGl0IGRvZXMgbm90IHdvcmsgZm9yIG9jdGFsCiAgICAgICAgICAgICBudW1iZXJzLgpvIExBTkctODY1OiAgTG9jYWxlVXRpbHMudG9Mb2NhbGUgZG9lcyBub3QgcGFyc2Ugc3RyaW5ncyBzdGFydGluZyB3aXRoIGFuCiAgICAgICAgICAgICB1bmRlcnNjb3JlLgpvIExBTkctODU4OiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSmF2YSgpIGFuZCBlc2NhcGVFY21hU2NyaXB0KCkgZG8gbm90CiAgICAgICAgICAgICBvdXRwdXQgdGhlIGVzY2FwZWQgc3Vycm9nYXRlIHBhaXJzIHRoYXQgYXJlIEphdmEgcGFyc2FibGUuCm8gTEFORy04NDk6ICBGYXN0RGF0ZUZvcm1hdCBhbmQgRmFzdERhdGVQcmludGVyIGdlbmVyYXRlcyBEYXRlIG9iamVjdHMKICAgICAgICAgICAgIHdhc3RlZnVsbHkuCm8gTEFORy04NDU6ICBTcGVsbGluZyBmaXhlcy4KbyBMQU5HLTg0NDogIEZpeCBleGFtcGxlcyBjb250YWluZWQgaW4gamF2YWRvYyBvZiBTdHJpbmdVdGlscy5jZW50ZXIgbWV0aG9kcy4KbyBMQU5HLTgzMjogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSB1bnRlcm1pbmF0ZWQgcXVvdGVzIGNvcnJlY3RseS4KbyBMQU5HLTgzMTogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSB3aGl0ZS1zcGFjZSBwcm9wZXJseS4KbyBMQU5HLTgzMDogIEZhc3REYXRlUGFyc2VyIGNvdWxkIHVzZSBcUSBcRSB0byBxdW90ZSByZWdleGVzLgpvIExBTkctODI4OiAgRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIG5vbi1HcmVnb3JpYW4gY2FsZW5kYXJzIHByb3Blcmx5LgpvIExBTkctODI2OiAgRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIG5vbi1BU0NJSSBkaWdpdHMgY29ycmVjdGx5LgpvIExBTkctODIyOiAgTnVtYmVyVXRpbHMjY3JlYXRlTnVtYmVyIC0gYmFkIGJlaGF2aW9yIGZvciBsZWFkaW5nICItLSIuCm8gTEFORy04MTg6ICBGYXN0RGF0ZUZvcm1hdCdzICJ6IiBwYXR0ZXJuIGRvZXMgbm90IHJlc3BlY3QgdGltZXpvbmUgb2YgQ2FsZW5kYXIKICAgICAgICAgICAgIGluc3RhbmNlcyBwYXNzZWQgdG8gZm9ybWF0KCkuCm8gTEFORy04MTc6ICBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLklTX09TX1dJTkRPV1NfOC4KbyBMQU5HLTgxMzogIFN0cmluZ1V0aWxzLmVxdWFsc0lnbm9yZUNhc2UgZG9lc24ndCBjaGVjayBzdHJpbmcgcmVmZXJlbmNlCiAgICAgICAgICAgICBlcXVhbGl0eS4KbyBMQU5HLTgxMDogIFN0cmluZ1V0aWxzLmpvaW4oKSBlbmRJbmRleCwgYnVnZ2VkIGZvciBsb29wLgpvIExBTkctODA3OiAgUmFuZG9tU3RyaW5nVXRpbHMgdGhyb3dzIGNvbmZ1c2luZyBJQUUgd2hlbiBlbmQgPD0gc3RhcnQuCm8gTEFORy04MDU6ICBSYW5kb21TdHJpbmdVdGlscy5yYW5kb20oY291bnQsIDAsIDAsIGZhbHNlLCBmYWxzZSwgdW5pdmVyc2UsCiAgICAgICAgICAgICByYW5kb20pIGFsd2F5cyB0aHJvd3MgamF2YS5sYW5nLkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi4KbyBMQU5HLTgwMjogIExvY2FsZVV0aWxzIC0gdW5uZWNlc3NhcnkgcmVjdXJzaXZlIGNhbGwgaW4gU3luY0F2b2lkIGNsYXNzLgpvIExBTkctODAwOiAgSmF2YWRvYyBidWcgaW4gRGF0ZVV0aWxzI2NlaWxpbmcgZm9yIENhbGVuZGFyIGFuZCBPYmplY3QgdmVyc2lvbnMuCm8gTEFORy03ODg6ICBTZXJpYWxpemF0aW9uVXRpbHMgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gd2hlbiBjbG9uaW5nCiAgICAgICAgICAgICBwcmltaXRpdmUgY2xhc3Nlcy4KbyBMQU5HLTc4NjogIFN0cmluZ1V0aWxzIGVxdWFscygpIHJlbGllcyBvbiB1bmRlZmluZWQgYmVoYXZpb3IuCm8gTEFORy03ODM6ICBEb2N1bWVudGF0aW9uIGJ1ZzogU3RyaW5nVXRpbHMuc3BsaXQuCm8gTEFORy03Nzc6ICBqYXIgY29udGFpbnMgdmVsb2NpdHkgdGVtcGxhdGUgb2YgcmVsZWFzZSBub3Rlcy4KbyBMQU5HLTc3NjogIFR5cGVVdGlsc1Rlc3QgY29udGFpbnMgaW5jb3JyZWN0IHR5cGUgYXNzaWduYWJpbGl0eSBhc3NlcnRpb24uCm8gTEFORy03NzU6ICBUeXBlVXRpbHMuZ2V0VHlwZUFyZ3VtZW50cygpIG1pc3NlcyB0eXBlIGFyZ3VtZW50cyBmb3IKICAgICAgICAgICAgIHBhcnRpYWxseS1hc3NpZ25lZCBjbGFzc2VzLgpvIExBTkctNzczOiAgSW1tdXRhYmxlUGFpciBkb2MgY29udGFpbnMgbm9uc2Vuc2UgdGV4dC4KbyBMQU5HLTc3MjogIENsYXNzVXRpbHMuUEFDS0FHRV9TRVBBUkFUT1IgSmF2YWRvYyBjb250YWlucyBnYXJiYWdlIHRleHQuCm8gTEFORy03NjU6ICBFdmVudExpc3RlbmVyU3VwcG9ydC5Qcm94eUludm9jYXRpb25IYW5kbGVyIG5vIGxvbmdlciBkZWZpbmVzCiAgICAgICAgICAgICBzZXJpYWxWZXJzaW9uVUlELgpvIExBTkctNzY0OiAgU3RyQnVpbGRlciBpcyBub3cgc2VyaWFsaXphYmxlLgpvIExBTkctNzYxOiAgRml4IEphdmFkb2MgQW50IHdhcm5pbmdzLgpvIExBTkctNzQ3OiAgTnVtYmVyVXRpbHMgZG9lcyBub3QgaGFuZGxlIExvbmcgSGV4IG51bWJlcnMuCm8gTEFORy03NDM6ICBKYXZhZG9jIGJ1ZyBpbiBzdGF0aWMgaW5uZXIgY2xhc3MgRGF0ZUl0ZXJhdG9yLgoKQ0hBTkdFUwo9PT09PT09PT0KCm8gTEFORy05MzE6ICBNaXNsZWFkaW5nIEphdmFkb2MgY29tbWVudCBpbiBTdHJCdWlsZGVyUmVhZGVyIGNsYXNzLiBUaGFua3MKICAgICAgICAgICAgIHRvIENocmlzdG9waCBTY2huZWVnYW5zLgpvIExBTkctOTEwOiAgU3RyaW5nVXRpbHMubm9ybWFsaXplU3BhY2Ugbm93IGhhbmRsZXMgbm9uLWJyZWFraW5nIHNwYWNlcwogICAgICAgICAgICAgKFVuaWNvZGUgMDBBMCkuIFRoYW5rcyB0byBUaW11ciBZYXJvc2guCm8gTEFORy04MDQ6ICBSZWR1bmRhbnQgY2hlY2sgZm9yIHplcm8gaW4gSGFzaENvZGVCdWlsZGVyIGN0b3IuIFRoYW5rcyB0bwogICAgICAgICAgICAgQWxsb24gTXVyZWluaWsuCm8gTEFORy04ODQ6ICBTaW1wbGlmeSBGYXN0RGF0ZUZvcm1hdDsgZWxpbWluYXRlIGJveGluZy4KbyBMQU5HLTg4MjogIExvb2t1cFRyYW5zbGF0b3Igbm93IHdvcmtzIHdpdGggaW1wbGVtZW50YXRpb25zIG9mIENoYXJTZXF1ZW5jZQogICAgICAgICAgICAgb3RoZXIgdGhhbiBTdHJpbmcuCm8gTEFORy04NDY6ICBQcm92aWRlIENoYXJTZXF1ZW5jZVV0aWxzLnJlZ2lvbk1hdGNoZXMgd2l0aCBhIHByb3BlciBncmVlbgogICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBvZiBpbmVmZmljaWVudGx5IGNvbnZlcnRpbmcgdG8gU3RyaW5ncy4KbyBMQU5HLTgzOTogIEFycmF5VXRpbHMgcmVtb3ZlRWxlbWVudHMgbWV0aG9kcyB1c2UgdW5uZWNlc3NhcnkgSGFzaFNldC4KbyBMQU5HLTgzODogIEFycmF5VXRpbHMgcmVtb3ZlRWxlbWVudHMgbWV0aG9kcyBjbG9uZSB0ZW1wb3JhcnkgaW5kZXggYXJyYXlzCiAgICAgICAgICAgICB1bm5lY2Vzc2FyaWx5LgpvIExBTkctNzk5OiAgRGF0ZVV0aWxzI3BhcnNlRGF0ZSB1c2VzIGRlZmF1bHQgbG9jYWxlOyBhZGQgTG9jYWxlIHN1cHBvcnQuCm8gTEFORy03OTg6ICBVc2UgZ2VuZXJpY3MgaW4gU2VyaWFsaXphdGlvblV0aWxzLgoKQ0hBTkdFUyBXSVRIT1VUIFRJQ0tFVAo9PT09PT09PT09PT09PT09PT09PT09PT0KCm8gRml4ZWQgVVJMcyBpbiBqYXZhZG9jIHRvIHBvaW50IHRvIG5ldyBvcmFjbGUuY29tIHBhZ2VzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjEKCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTgwMTogIEFkZCBDb252ZXJzaW9uIHV0aWxpdHkgdG8gY29udmVydCBiZXR3ZWVuIGRhdGEgdHlwZXMgb24gYnl0ZSBsZXZlbApvIExBTkctNzYwOiAgQWRkIEFQSSBTdHJpbmdVdGlscy50b1N0cmluZyhieXRlW10gaW5wdXQsIFN0cmluZyBjaGFyc2V0TmFtZSkKbyBMQU5HLTc1NjogIEFkZCBBUElzIENsYXNzVXRpbHMuaXNQcmltaXRpdmVXcmFwcGVyKENsYXNzPD8+KSBhbmQKICAgICAgICAgICAgIGlzUHJpbWl0aXZlT3JXcmFwcGVyKENsYXNzPD8+KQpvIExBTkctNjk1OiAgU3lzdGVtVXRpbHMuSVNfT1NfVU5JWCBkb2Vzbid0IHJlY29nbml6ZSBGcmVlQlNEIGFzIGEgVW5peCBzeXN0ZW0KCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTc0OTogIEluY29ycmVjdCBCdW5kbGUtU3ltYm9saWNOYW1lIGluIE1hbmlmZXN0Cm8gTEFORy03NDY6ICBOdW1iZXJVdGlscyBkb2VzIG5vdCBoYW5kbGUgdXBwZXItY2FzZSBoZXg6IDBYIGFuZCAtMFgKbyBMQU5HLTc0NDogIFN0cmluZ1V0aWxzIHRocm93cyBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xFeGNlcHRpb24gb24gR29vZ2xlCiAgICAgICAgICAgICBBcHAgRW5naW5lCm8gTEFORy03NDE6ICBBbnQgYnVpbGQgaGFzIHdyb25nIGNvbXBvbmVudC5uYW1lCm8gTEFORy02OTg6ICBEb2N1bWVudCB0aGF0IHRoZSBNdXRhYmxlIG51bWJlcnMgZG9uJ3Qgd29yayBhcyBleHBlY3RlZCB3aXRoCiAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0CgpDSEFOR0VTCj09PT09PT09PQoKbyBMQU5HLTc1ODogIEFkZCBhbiBleGFtcGxlIHdpdGggd2hpdGVzcGFjZSBpbiBTdHJpbmdVdGlscy5kZWZhdWx0SWZFbXB0eQpvIExBTkctNzUyOiAgRml4IGNyZWF0ZUxvbmcoKSBzbyBpdCBiZWhhdmVzIGxpa2UgY3JlYXRlSW50ZWdlcigpCm8gTEFORy03NTE6ICBJbmNsdWRlIHRoZSBhY3R1YWwgdHlwZSBpbiB0aGUgVmFsaWRhdGUuaXNJbnN0YW5jZSBhbmQKICAgICAgICAgICAgIGlzQXNzaWduYWJsZUZyb20gZXhjZXB0aW9uIG1lc3NhZ2VzCm8gTEFORy03NDg6ICBEZXByZWNhdGluZyBjaG9tcChTdHJpbmcsIFN0cmluZykKbyBMQU5HLTczNjogIENoYXJVdGlscyBzdGF0aWMgZmluYWwgYXJyYXkgQ0hBUl9TVFJJTkcgaXMgbm90IG5lZWRlZCB0byBjb21wdXRlCiAgICAgICAgICAgICBDSEFSX1NUUklOR19BUlJBWQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4wCgpBRERJVElPTlMKPT09PT09PT09PT0KCm8gTEFORy0yNzY6ICBNdXRhYmxlQmlnRGVjaW1hbCBhbmQgTXV0YWJsZUJpZ0ludGVnZXIuCm8gTEFORy0yODU6ICBXaXNoIDogbWV0aG9kIHVuYWNjZW50LgpvIExBTkctMzU4OiAgT2JqZWN0VXRpbHMuY29hbGVzY2UuCm8gTEFORy0zODY6ICBMZWZ0T2YvUmlnaHRPZk51bWJlciBpbiBSYW5nZSBjb252ZW5pZW5jZSBtZXRob2RzIG5lY2Vzc2FyeS4KbyBMQU5HLTQzNTogIEFkZCBDbGFzc1V0aWxzLmlzQXNzaWduYWJsZSgpIHZhcmlhbnRzIHdpdGggYXV0b2JveGluZy4KbyBMQU5HLTQ0NDogIFN0cmluZ1V0aWxzLmVtcHR5VG9OdWxsLgpvIExBTkctNDgyOiAgRW5oYW5jZSBTdHJTdWJzdGl0dXRvciB0byBzdXBwb3J0IG5lc3RlZCAke3Zhci0ke3N1YnZyfX0gZXhwYW5zaW9uCm8gTEFORy00ODI6ICBTdHJTdWJzdGl0dXRvciBub3cgc3VwcG9ydHMgc3Vic3RpdHV0aW9uIGluIHZhcmlhYmxlIG5hbWVzLgpvIExBTkctNDk2OiAgQSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMYXp5IGluaXRpYWxpemF0aW9uIHBhdHRlcm4uCm8gTEFORy00OTc6ICBBZGRpdGlvbiBvZiBDb250ZXh0ZWRFeGNlcHRpb24gYW5kIENvbnRleHRlZFJ1bnRpbWVFeGNlcHRpb24uCm8gTEFORy00OTg6ICBBZGQgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlVGV4dCgpIG1ldGhvZHMuCm8gTEFORy00OTk6ICBBZGQgc3VwcG9ydCBmb3IgdGhlIGhhbmRsaW5nIG9mIEV4ZWN1dGlvbkV4Y2VwdGlvbnMuCm8gTEFORy01MDE6ICBBZGQgc3VwcG9ydCBmb3IgYmFja2dyb3VuZCBpbml0aWFsaXphdGlvbi4KbyBMQU5HLTUyOTogIEFkZCBhIGNvbmN1cnJlbnQgcGFja2FnZS4KbyBMQU5HLTUzMzogIFZhbGlkYXRlOiBzdXBwb3J0IGZvciB2YWxpZGF0aW5nIGJsYW5rIHN0cmluZ3MuCm8gTEFORy01Mzc6ICBBZGQgQXJyYXlVdGlscy50b0FycmF5IHRvIGNyZWF0ZSBnZW5lcmljIGFycmF5cy4KbyBMQU5HLTU0NTogIEFkZCBhYmlsaXR5IHRvIGNyZWF0ZSBhIEZ1dHVyZSBmb3IgYSBjb25zdGFudC4KbyBMQU5HLTU0NjogIEFkZCBtZXRob2RzIHRvIFZhbGlkYXRlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGluZGV4IGlzIHZhbGlkIGZvcgogICAgICAgICAgICAgdGhlIGFycmF5L2xpc3Qvc3RyaW5nLgpvIExBTkctNTUzOiAgQWRkIFR5cGVVdGlscyBjbGFzcyB0byBwcm92aWRlIHV0aWxpdHkgY29kZSBmb3Igd29ya2luZyB3aXRoIGdlbmVyaWMKICAgICAgICAgICAgIHR5cGVzLgpvIExBTkctNTU5OiAgQWRkZWQgaXNBc3NpZ25hYmxlRnJvbSBhbmQgaXNJbnN0YW5jZU9mIHZhbGlkYXRpb24gbWV0aG9kcy4KbyBMQU5HLTU1OTogIEFkZGVkIHZhbGlkU3RhdGUgdmFsaWRhdGlvbiBtZXRob2QuCm8gTEFORy01NjA6ICBOZXcgVGltZWRTZW1hcGhvcmUgY2xhc3MuCm8gTEFORy01ODI6ICBQcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUaHJlYWRGYWN0b3J5IGludGVyZmFjZS4KbyBMQU5HLTU4ODogIENyZWF0ZSBhIGJhc2ljIFBhaXI8TCwgUj4gY2xhc3MuCm8gTEFORy01OTQ6ICBEYXRlVXRpbHMgZXF1YWwgJiBjb21wYXJlIGZ1bmN0aW9ucyB1cCB0byBtb3N0IHNpZ25pZmljYW50IGZpZWxkLgpvIExBTkctNjAxOiAgQWRkIEJ1aWxkZXIgSW50ZXJmYWNlIC8gVXBkYXRlIEJ1aWxkZXJzIHRvIEltcGxlbWVudCBJdC4KbyBMQU5HLTYwOTogIFN1cHBvcnQgbGF6eSBpbml0aWFsaXphdGlvbiB1c2luZyBhdG9taWMgdmFyaWFibGVzCm8gTEFORy02MTA6ICBFeHRlbmQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIENvbmN1cnJlbnRVdGlscyB0byBydW50aW1lIGV4Y2VwdGlvbnMuCm8gTEFORy02MTQ6ICBTdHJpbmdVdGlscy5lbmRzV2l0aEFueSBtZXRob2QKbyBMQU5HLTY0MDogIEFkZCBub3JtYWxpemVTcGFjZSB0byBTdHJpbmdVdGlscwpvIExBTkctNjQ0OiAgUHJvdmlkZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBuZXcgY29uY3VycmVudCBwYWNrYWdlCm8gTEFORy02NDk6ICBCb29sZWFuVXRpbHMudG9Cb29sZWFuT2JqZWN0IHRvIHN1cHBvcnQgc2luZ2xlIGNoYXJhY3RlciBpbnB1dApvIExBTkctNjUxOiAgQWRkIEFubm90YXRpb25VdGlscwpvIExBTkctNjUzOiAgUHJvdmlkZSBhIHZlcnkgYmFzaWMgQ29uY3VycmVudEluaXRpYWxpemVyIGltcGxlbWVudGF0aW9uCm8gTEFORy02NTU6ICBBZGQgU3RyaW5nVXRpbHMuZGVmYXVsdElmQmxhbmsoKQpvIExBTkctNjY3OiAgQWRkIGEgTnVsbC1zYWZlIGNvbXBhcmUoKSBtZXRob2QgdG8gT2JqZWN0VXRpbHMKbyBMQU5HLTY3NjogIERvY3VtZW50ZWQgcG90ZW50aWFsIE5QRSBpZiBhdXRvLWJveGluZyBvY2N1cnMgZm9yIHNvbWUgQm9vbGVhblV0aWxzCiAgICAgICAgICAgICBtZXRob2RzCm8gTEFORy02Nzg6ICBBZGQgc3VwcG9ydCBmb3IgQ29uY3VycmVudE1hcC5wdXRJZkFic2VudCgpCm8gTEFORy02OTI6ICBBZGQgaGFzaENvZGVNdWx0aSB2YXJhcmdzIG1ldGhvZApvIExBTkctNjk3OiAgQWRkIEZvcm1hdHRhYmxlVXRpbHMgY2xhc3MKbyBMQU5HLTY4NDogIExldmVuc2h0ZWluIERpc3RhbmNlIFdpdGhpbiBhIEdpdmVuIFRocmVzaG9sZAoKUkVNT1ZBTFMKPT09PT09PT09PQoKbyBMQU5HLTQzODogIFJlbW92ZSBAZGVwcmVjYXRlZHMuCm8gTEFORy00OTI6ICBSZW1vdmUgY29kZSBoYW5kbGVkIG5vdyBieSB0aGUgSkRLLgpvIExBTkctNDkzOiAgUmVtb3ZlIGNvZGUgdGhhdCBkb2VzIG5vdCBob2xkIGVub3VnaCB2YWx1ZSB0byByZW1haW4uCm8gTEFORy01OTA6ICBSZW1vdmUgSkRLIDEuMi8xLjMgYnVnIGhhbmRsaW5nIGluCiAgICAgICAgICAgICBTdHJpbmdVdGlscy5pbmRleE9mKFN0cmluZywgU3RyaW5nLCBpbnQpLgpvIExBTkctNjczOiAgV29yZFV0aWxzLmFiYnJldmlhdGUoKSByZW1vdmVkCm8gTEFORy02OTE6ICBSZW1vdmVkIERhdGVVdGlscy5VVENfVElNRV9aT05FCgpJTVBST1ZFTUVOVFMKPT09PT09PT09PT09PT0KCm8gTEFORy0yOTA6ICBFbnVtVXRpbHMgZm9yIEpESyA1LjAuCm8gTEFORy0zMzY6ICBGaW5hbGx5IHN0YXJ0IHVzaW5nIGdlbmVyaWNzLgpvIExBTkctMzU1OiAgU3RyQnVpbGRlciBzaG91bGQgaW1wbGVtZW50IENoYXJTZXF1ZW5jZSBhbmQgQXBwZW5kYWJsZS4KbyBMQU5HLTM5NjogIEludmVzdGlnYXRlIGZvciB2YXJhcmcgdXNhZ2VzLgpvIExBTkctNDI0OiAgSW1wcm92ZSBKYXZhZG9jIGZvciBTdHJpbmdVdGlscyBjbGFzcy4KbyBMQU5HLTQ1ODogIFJlZmFjdG9yIFZhbGlkYXRlLmphdmEgdG8gZWxpbWluYXRlIGNvZGUgcmVkdW5kYW5jeS4KbyBMQU5HLTQ3OTogIERvY3VtZW50IHdoZXJlIGluIFNWTiB0cnVuayBpcy4KbyBMQU5HLTUwNDogIGJyaW5nIEFycmF5VXRpbHMuaXNFbXB0eSB0byB0aGUgZ2VuZXJpY3Mgd29ybGQuCm8gTEFORy01MDU6ICBSZXdyaXRlIFN0cmluZ0VzY2FwZVV0aWxzLgpvIExBTkctNTA3OiAgU3RyaW5nRXNjYXBlVXRpbHMudW5lc2NhcGVKYXZhIHNob3VsZCBzdXBwb3J0IFx1KyBub3RhdGlvbi4KbyBMQU5HLTUxMDogIENvbnZlcnQgU3RyaW5nVXRpbHMgQVBJIHRvIHRha2UgQ2hhclNlcXVlbmNlLgpvIExBTkctNTEzOiAgQmV0dGVyIEVudW1VdGlscy4KbyBMQU5HLTUyODogIE11dGFibGUgY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IGFuIGFwcHJvcHJpYXRlbHkgdHlwZWQgTXV0YWJsZQogICAgICAgICAgICAgaW50ZXJmYWNlLgpvIExBTkctNTM5OiAgQ29tcGlsZSBjb21tb25zLmxhbmcgZm9yIENEQyAxLjEvRm91bmRhdGlvbiAxLjEuCm8gTEFORy01NDA6ICBNYWtlIE51bWVyaWNFbnRpdHlFc2NhcGVyIGltbXV0YWJsZS4KbyBMQU5HLTU0MTogIFJlcGxhY2UgU3RyaW5nQnVmZmVyIHdpdGggU3RyaW5nQnVpbGRlci4KbyBMQU5HLTU0ODogIFVzZSBJdGVyYWJsZSBvbiBBUEkgaW5zdGVhZCBvZiBDb2xsZWN0aW9uLgpvIExBTkctNTUxOiAgUmVwbGFjZSBSYW5nZSBjbGFzc2VzIHdpdGggZ2VuZXJpYyB2ZXJzaW9uLgpvIExBTkctNTYyOiAgQ2hhbmdlIE1hdmVuIGdyb3VwSWQuCm8gTEFORy01NjM6ICBDaGFuZ2UgSmF2YSBwYWNrYWdlIG5hbWUuCm8gTEFORy01NzA6ICBEbyB0aGUgdGVzdCBjYXNlcyByZWFsbHkgc3RpbGwgcmVxdWlyZSBtYWluKCkgYW5kIHN1aXRlKCkgbWV0aG9kcz8KbyBMQU5HLTU3OTogIEFkZCBuZXcgVmFsaWRhdGUgbWV0aG9kcy4KbyBMQU5HLTU5OTogIENsYXNzVXRpbHMuZ2V0Q2xhc3MoKTogQWxsb3cgRG90cyBhcyBJbm5lciBDbGFzcyBTZXBhcmF0b3JzLgpvIExBTkctNjA1OiAgRGVmYXVsdEV4Y2VwdGlvbkNvbnRleHQgb3ZlcndyaXRlcyB2YWx1ZXMgaW4gcmVjdXJzaXZlIHNpdHVhdGlvbnMuCm8gTEFORy02Njg6ICBDaGFuZ2UgT2JqZWN0VXRpbHMgbWluKCkgJiBtYXgoKSBmdW5jdGlvbnMgdG8gdXNlIHZhcmFyZ3MgcmF0aGVyCiAgICAgICAgICAgICB0aGFuIGp1c3QgdHdvIHBhcmFtZXRlcnMKbyBMQU5HLTY4MTogIFB1c2ggZG93biBXb3JkVXRpbHMgdG8gInRleHQiIHN1Yi1wYWNrYWdlLgpvIExBTkctNzExOiAgQWRkIGluY2x1ZGVhbnRydW50aW1lPWZhbHNlIHRvIGphdmFjIHRhcmdldHMgdG8gcXVlbGwgd2FybmluZ3MgaW4KICAgICAgICAgICAgIGFudCAxLjguMSBhbmQgYmV0dGVyIChhbmQgbW9kZXN0IHBlcmZvcm1hbmNlIGdhaW4pLgpvIExBTkctNzEzOiAgSW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBGaWVsZFV0aWxzIHJlYWQgbWV0aG9kcyBhbmQgdHdlYWsKICAgICAgICAgICAgIGphdmFkb2MuCm8gTEFORy03MTg6ICBidWlsZC54bWwgSmF2YSAxLjUrIHVwZGF0ZXMuCgpCVUcgRklYRVMKPT09PT09PT09PT0KCm8gTEFORy0xMTogICBEZXBlbmQgb24gSkRLIDEuNSsuCm8gTEFORy0zMDI6ICBTdHJCdWlsZGVyIGRvZXMgbm90IGltcGxlbWVudCBjbG9uZSgpLgpvIExBTkctMzM5OiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSHRtbCgpIGVzY2FwZXMgbXVsdGlieXRlIGNoYXJhY3RlcnMgbGlrZQogICAgICAgICAgICAgQ2hpbmVzZSwgSmFwYW5lc2UsIGV0Yy4KbyBMQU5HLTM2OTogIEV4Y2VwdGlvblV0aWxzIG5vdCB0aHJlYWQtc2FmZS4KbyBMQU5HLTQxODogIEphdmFkb2MgaW5jb3JyZWN0IGZvciBTdHJpbmdVdGlscy5lbmRzV2l0aElnbm9yZUNhc2UuCm8gTEFORy00Mjg6ICBTdHJpbmdVdGlscy5pc0FscGhhLCBpc0FscGhhbnVtZXJpYyBhbmQgaXNOdW1lcmljIG5vdyByZXR1cm4gZmFsc2UKICAgICAgICAgICAgIGZvciAiIgpvIExBTkctNDM5OiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSFRNTCgpIGRvZXMgbm90IGVzY2FwZSBjaGFycyAoMHgwMC0weDIwKS4KbyBMQU5HLTQ0ODogIExvd2VyIEFzY2lpIENoYXJhY3RlcnMgZG9uJ3QgZ2V0IGVuY29kZWQgYnkgRW50aXRpZXMuamF2YS4KbyBMQU5HLTQ2ODogIEpESyAxLjUgYnVpbGQvcnVudGltZSBmYWlsdXJlIG9uIExBTkctMzkzIChFcXVhbHNCdWlsZGVyKS4KbyBMQU5HLTQ3NDogIEZpeGVzIGZvciB0aHJlYWQgc2FmZXR5LgpvIExBTkctNDc4OiAgU3RvcFdhdGNoIGRvZXMgbm90IHJlc2lzdCB0byBzeXN0ZW0gdGltZSBjaGFuZ2VzLgpvIExBTkctNDgwOiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSHRtbCBpbmNvcnJlY3RseSBjb252ZXJ0cyB1bmljb2RlCiAgICAgICAgICAgICBjaGFyYWN0ZXJzIGFib3ZlIFUrMDBGRkZGIGludG8gMiBjaGFyYWN0ZXJzLgpvIExBTkctNDgxOiAgUG9zc2libGUgcmFjZS1jb25kaXRpb25zIGluIGhhc2hDb2RlIG9mIHRoZSByYW5nZSBjbGFzc2VzLgpvIExBTkctNTY0OiAgSW1wcm92ZSBTdHJMb29rdXAgQVBJIGRvY3VtZW50YXRpb24uCm8gTEFORy01Njg6ICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgaXMgdXNlZCB0b28gZ2VuZXJhbGx5LgpvIExBTkctNTcxOiAgQXJyYXlVdGlscy5hZGQoVFs6ICBhcnJheSwgVCBlbGVtZW50KSBjYW4gY3JlYXRlIHVuZXhwZWN0ZWQKICAgICAgICAgICAgIENsYXNzQ2FzdEV4Y2VwdGlvbi4KbyBMQU5HLTU4NTogIGV4Y2VwdGlvbi5EZWZhdWx0RXhjZXB0aW9uQ29udGV4dC5nZXRGb3JtYXR0ZWRFeGNlcHRpb25NZXNzYWdlCiAgICAgICAgICAgICBjYXRjaGVzIFRocm93YWJsZS4KbyBMQU5HLTU5NjogIFN0clN1YnN0aXR1dG9yIHNob3VsZCBhbHNvIGhhbmRsZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIG9mIGEKICAgICAgICAgICAgIGphdmEudXRpbC5Qcm9wZXJ0aWVzIGNsYXNzCm8gTEFORy02MDA6ICBKYXZhZG9jIGlzIGluY29ycmVjdCBmb3IgcHVibGljIHN0YXRpYyBpbnQKICAgICAgICAgICAgIGxhc3RJbmRleE9mKFN0cmluZyBzdHIsIFN0cmluZyBzZWFyY2hTdHIpLgpvIExBTkctNjAyOiAgQ29udGV4dGVkUnVudGltZUV4Y2VwdGlvbiBubyBsb25nZXIgYW4gJ3VuY2hlY2tlZCcgZXhjZXB0aW9uLgpvIExBTkctNjA2OiAgRXF1YWxzQnVpbGRlciBjYXVzZXMgU3RhY2tPdmVyZmxvd0V4Y2VwdGlvbi4KbyBMQU5HLTYwODogIFNvbWUgU3RyaW5nVXRpbHMgbWV0aG9kcyBzaG91bGQgdGFrZSBhbiBpbnQgY2hhcmFjdGVyIGluc3RlYWQgb2YKICAgICAgICAgICAgIGNoYXIgdG8gdXNlIFN0cmluZyBBUEkgZmVhdHVyZXMuCm8gTEFORy02MTc6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVYTUwoKSBjYW4ndCBwcm9jZXNzIFVURi0xNiBzdXBwbGVtZW50YXJ5CiAgICAgICAgICAgICBjaGFyYWN0ZXJzCm8gTEFORy02MjQ6ICBTeXN0ZW1VdGlscy5nZXRKYXZhVmVyc2lvbkFzRmxvYXQgdGhyb3dzCiAgICAgICAgICAgICBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIG9uIEFuZHJvaWQgcnVudGltZS9EYWx2aWsgVk0KbyBMQU5HLTYyOTogIENoYXJzZXQgbWF5IG5vdCBiZSB0aHJlYWRzYWZlLCBiZWNhdXNlIHRoZSBIYXNoU2V0IGlzIG5vdCBzeW5jaC4KbyBMQU5HLTYzODogIE51bWJlclV0aWxzIGNyZWF0ZU51bWJlciB0aHJvd3MgYSBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uCiAgICAgICAgICAgICB3aGVuIGFyZ3VtZW50IGNvbnRhaW5pbmcgImUiIGFuZCAiRSIgaXMgcGFzc2VkIGluCm8gTEFORy02NDM6ICBKYXZhZG9jIFN0cmluZ1V0aWxzLmxlZnQoKSBjbGFpbXMgdG8gdGhyb3cgb24gbmVnYXRpdmUgbGVuLCBidXQKICAgICAgICAgICAgIGRvZXNuJ3QKbyBMQU5HLTY0NTogIEZhc3REYXRlRm9ybWF0LmZvcm1hdCgpIG91dHB1dHMgaW5jb3JyZWN0IHdlZWsgb2YgeWVhciBiZWNhdXNlCiAgICAgICAgICAgICBsb2NhbGUgaXNuJ3QgcmVzcGVjdGVkCm8gTEFORy02NDY6ICBTdHJpbmdFc2NhcGVVdGlscy51bmVzY2FwZUphdmEgZG9lc24ndCBoYW5kbGUgb2N0YWwgZXNjYXBlcyBhbmQKICAgICAgICAgICAgIFVuaWNvZGUgd2l0aCBleHRyYSB1Cm8gTEFORy02NTY6ICBFeGFtcGxlIFN0cmluZ1V0aWxzLmluZGV4T2ZBbnlCdXQoInp6YWJ5eWNkeHgiLCAnJykgPSAwIGluY29ycmVjdApvIExBTkctNjU4OiAgU29tZSBlbnRpdGllcyBsaWtlICZPdW1sOyBhcmUgbm90IG1hdGNoZWQgcHJvcGVybHkgYWdhaW5zdCBpdHMKICAgICAgICAgICAgIElTTzg4NTktMSByZXByZXNlbnRhdGlvbgpvIExBTkctNjU5OiAgRW50aXR5QXJyYXlzIHR5cG86IHsiXHUyMTIyIiwgIiZtaW51czsifSwgLy8gbWludXMgc2lnbiwgVSsyMjEyCiAgICAgICAgICAgICBJU090ZWNoCm8gTEFORy02NjogICBTdHJpbmdFc2NhcGVyLmVzY2FwZVhtbCgpIGVzY2FwZXMgY2hhcmFjdGVycyA+IDB4N2YuCm8gTEFORy02NjI6ICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMubWF0aC5GcmFjdGlvbiBkb2VzIG5vdCByZWR1Y2UKICAgICAgICAgICAgIChJbnRlZ2VyLk1JTl9WQUxVRSwgMl5rKQpvIExBTkctNjYzOiAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLm1hdGguRnJhY3Rpb24gZG9lcyBub3QgYWx3YXlzIHN1Y2NlZWQgaW4KICAgICAgICAgICAgIG11bHRpcGx5QnkgYW5kIGRpdmlkZUJ5Cm8gTEFORy02NjQ6ICBOdW1iZXJVdGlscy5pc051bWJlcihTdHJpbmcpIGlzIG5vdCByaWdodCB3aGVuIHRoZSBTdHJpbmcgaXMKICAgICAgICAgICAgICIxLjFMIgpvIExBTkctNjcyOiAgRG9jIGJ1ZyBpbiBEYXRlVXRpbHMjY2VpbGluZwpvIExBTkctNjc3OiAgRGF0ZVV0aWxzLmlzU2FtZUxvY2FsVGltZSBjb21wYXJlcyB1c2luZyAxMiBob3VyIGNsb2NrIGFuZCBub3QKICAgICAgICAgICAgIDI0IGhvdXIKbyBMQU5HLTY4NTogIEVxdWFsc0J1aWxkZXIgc3luY2hyb25pemVzIG9uIEhhc2hDb2RlQnVpbGRlci4KbyBMQU5HLTcwMzogIFN0cmluZ1V0aWxzLmpvaW4gdGhyb3dzIE5QRSB3aGVuIHRvU3RyaW5nIHJldHVybnMgbnVsbCBmb3Igb25lIG9mCiAgICAgICAgICAgICBvYmplY3RzIGluIGNvbGxlY3Rpb24KbyBMQU5HLTcxMDogIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hlbiBjYWxsaW5nIHVuZXNjYXBlSHRtbDQoIiYjMDMiKQpvIExBTkctNzE0OiAgU3RyaW5nVXRpbHMgZG9jL2NvbW1lbnQgc3BlbGxpbmcgZml4ZXMuCm8gTEFORy03MTU6ICBDaGFyU2V0VXRpbHMuc3F1ZWV6ZSgpIHNwZWVkdXAuCm8gTEFORy03MTY6ICBzd2FwQ2FzZSBhbmQgKmNhcGl0YWxpemUgc3BlZWR1cHMuCgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIENvbW1vbnMgTGFuZywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8Kc3VibWl0IGJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUKQXBhY2hlIENvbW1vbnMgTGFuZyB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy8KCkhhdmUgZnVuIQotQXBhY2hlIENvbW1vbnMgTGFuZyB0ZWFtCgo=