IyMgS2hyb25vcyBHcm91cCBWdWxrYW4tVG9vbHMgUmVwb3NpdG9yeSBNYW5hZ2VtZW50CgojICoqT3BlbiBTb3VyY2UgUHJvamVjdCCWIE9iamVjdGl2ZXMqKgoKKiBBc3Npc3QgVnVsa2FuIFVzZXJzCiAgLSBUaGUgZ29hbCBpcyBmb3IgdG9vbCBhbmQgdXRpbGl0eSBiZWhhdmlvciB0byBhc3Npc3QgaW4gdGhlIGRldmVsb3BtZW50IG9mIHZ1bGthbiBhcHBsaWNhdGlvbnMuCiAgICAtIFtDb3JlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3Z1bGthbi9zcGVjcy8xLjAvaHRtbC92a3NwZWMuaHRtbCkKICAgIC0gW0hlYWRlciBGaWxlc10oaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvdnVsa2FuLyNoZWFkZXJzKQogICAgLSBbU0RLIFJlc291cmNlc10oaHR0cHM6Ly92dWxrYW4ubHVuYXJnLmNvbSkKKiBJU1YgRW5hYmxlbWVudAogIC0gVXBkYXRlcyBvZiB0b29scyBhbmQgdXRpbGl0aWVzIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gYSB0aW1lbHkgZmFzaGlvbgogIC0gRXZlcnkgZWZmb3J0IHdpbGwgYmUgbWFkZSB0byBiZSByZXNwb25zaXZlIHRvIElTViBpc3N1ZXMKKiBDcm9zcyBQbGF0Zm9ybSBDb21wYXRpYmlsaXR5CiAgLSBHb29nbGUgYW5kIEx1bmFyRyBjb2xsYWJvcmF0aW9uOgogICAgLSBHb29nbGU6IE1vbml0b3IgZm9yIEFuZHJvaWQKICAgIC0gTHVuYXJHOiBNb25pdG9yIGZvciBkZXNrdG9wIChXaW5kb3dzLCBMaW51eCwgYW5kIE1hY09TKQogICAgLSBDb250aW51b3VzIEludGVncmF0aW9uOiBIVyB0ZXN0IGZhcm1zIG9wZXJhdGVkIGJ5IEdvb2dsZSBhbmQgTHVuYXJHIG1vbml0b3IgdmFyaW91cyBoYXJkd2FyZS9zb2Z0d2FyZSBwbGF0Zm9ybXMKKiBSZXBvIFF1YWxpdHkKICAtIFJlcG8gcmVtYWlucyBpbiBoZWFsdGh5IHN0YXRlIHdpdGggYWxsIHRlc3RzIHBhc3NpbmcgYW5kIGdvb2QtcXVhbGl0eSwgY29uc2lzdGVudCBjb2RlYmFzZQogIC0gQ29udGludW91cyBJbnRlZ3JhdGlvbjogQWxvbmcgd2l0aCBHaXRodWIsIEhXIHRlc3QgZmFybXMgb3BlcmF0ZWQgYnkgR29vZ2xlIGFuZCBMdW5hckcgcGVyZm9ybSBwcmUtY29tbWl0IGNsb3VkIHRlc3RpbmcKb24gcHVsbC1yZXF1ZXN0cwoKIyAqKlJvbGVzIGFuZCBEZWZpbml0aW9ucyoqCiogQ29udHJpYnV0b3IsIENvbW1lbnRlciwgVXNlcgogIC0gU3VibWl0dGluZyBjb250cmlidXRpb25zLCBjcmVhdGluZyBpc3N1ZXMsIG9yIHVzaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3NpdG9yeQoqIEFwcHJvdmVyCiAgLSBFeHBlcmllbmNlZCBwcm9qZWN0IG1lbWJlcnMgd2hvIGhhdmUgbWFkZSBzaWduaWZpY2FudCB0ZWNobmljYWwgY29udHJpYnV0aW9ucwogIC0gV3JpdGUgY29udHJvbDogQXBwcm92ZSBwdWxsL21lcmdlIHJlcXVlc3RzICh2ZXJpZnkgc3VibWlzc2lvbnMgdnMuIGFjY2VwdGFuY2UgY3JpdGVyaWEpCiogVGVjaG5pY2FsIFByb2plY3QgTGVhZHMKICAtIExlYWQgdGhlIHByb2plY3QgaW4gdGVybXMgb2YgdmVyc2lvbmluZywgcXVhbGl0eSBhc3N1cmFuY2UsIGFuZCBvdmVyYXJjaGluZyBvYmplY3RpdmVzCiAgLSBNb25pdG9yIGdpdGh1YiBpc3N1ZXMgYW5kIGRyaXZlIHRpbWVseSByZXNvbHV0aW9uCiAgLSBEZXNpZ25hdGUgbmV3IGFwcHJvdmVycwogIC0gRW5zdXJlIHByb2plY3QgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgUmVhZG1lLCBDb250cmlidXRpbmcgZG9jcywgd2lraSwgZXRjLiwga2VwdCB1cC10by1kYXRlCiAgLSBBY3QgYXMgYSBmYWNpbGl0YXRvciBpbiByZXNvbHZpbmcgdGVjaG5pY2FsIGNvbmZsaWN0cwogIC0gSXMgYSBwb2ludC1vZi1jb250YWN0IGZvciBwcm9qZWN0LXJlbGF0ZWQgcXVlc3Rpb25zCgpUaGUgdGVjaG5pY2FsIHByb2plY3QgbGVhZHMgZm9yIHRoaXMgcmVwb3NpdG9yeSBhcmU6CiogKipKZXJlbXkgS25pYWdlcioqIFtqZXJlbXlrQGx1bmFyZy5jb21dKG1haWx0bzpqZXJlbXlrQGx1bmFyZy5jb20pCgojICoqQWNjZXB0YW5jZSBDcml0ZXJpYSBhbmQgUHJvY2VzcyoqCiAgLSBBbGwgc291cmNlIGNvZGUgdG8gaW5jbHVkZSBLaHJvbm9zIGNvcHlyaWdodCBhbmQgbGljZW5zZSAoQXBhY2hlIDIuMCkuCiAgICAtIEFkZGl0aW9uYWwgY29weXJpZ2h0cyBvZiBjb250cmlidXRvcnMgYXBwZW5kZWQKICAtIENvbnRyaWJ1dGlvbnMgYXJlIHZpYSBwdWxsIHJlcXVlc3RzCiAgICAtIFByb2plY3QgbGVhZHMgd2lsbCBhc3NpZ25pbmcgYXBwcm92ZXJzIHRvIGNvbnRyaWJ1dG9yIHB1bGwgcmVxdWVzdHMKICAgIC0gQXBwcm92ZXJzIGNhbiBzZWxmLWFzc2lnbiB0aGVpciByZXZpZXdlcnMKICAgIC0gRm9yIGNvbXBsZXggb3IgaW52YXNpdmUgY29udHJpYnV0aW9ucywgUHJvamVjdCBMZWFkcyBtYXkgcmVxdWVzdCBhcHByb3ZhbCBmcm9tIHNwZWNpZmljIHJldmlld2VycwogICAgLSBBdCBsZWFzdCBvbmUgcmV2aWV3IGFwcHJvdmFsIGlzIHJlcXVpcmVkIHRvIGNvbXBsZXRlIGEgcHVsbCByZXF1ZXN0CiAgICAtIFRoZSBnb2FsIGlzIHRvIGJlIHJlc3BvbnNpdmUgdG8gY29udHJpYnV0b3JzIHdoaWxlIGVuc3VyaW5nIGFjY2VwdGFuY2UgY3JpdGVyaWEgaXMgbWV0IGFuZCB0byBmYWNpbGl0YXRlIHRoZWlyIHN1Ym1pc3Npb25zCiAgICAtIEFwcHJvdmFsIGlzIGRlcGVuZGVudCB1cG9uIGFkaGVyZW5jZSB0byB0aGUgZ3VpZGVsaW5lcyBpbiBbQ09OVFJJQlVUSU5HLm1kXShDT05UUklCVVRJTkcubWQpLCBhbmQgYWxpZ25tZW50IHdpdGgKcmVwb3NpdG9yeSBnb2FscyBvZiBtYWludGFpbmFiaWxpdHksIGNvbXBsZXRlbmVzcywgYW5kIHF1YWxpdHkKICAgIC0gQ29uZmxpY3RzIG9yIHF1ZXN0aW9ucyB3aWxsIHVsdGltYXRlbHkgYmUgcmVzb2x2ZWQgYnkgdGhlIHByb2plY3QgbGVhZHMK