CkFwYWNoZSBDb21tb25zIElPIApWZXJzaW9uIDIuNApSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT046CgpDb21tb25zIElPIGlzIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBsaWtlIGphdmEuaW8uICAKQ2xhc3NlcyBpbiB0aGlzIHBhY2thZ2UgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28gc3RhbmRhcmQgYW5kIG9mIHN1Y2ggaGlnaCAKcmV1c2UgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5pby4KClRoZSBDb21tb25zIElPIGxpYnJhcnkgY29udGFpbnMgdXRpbGl0eSBjbGFzc2VzLCBzdHJlYW0gaW1wbGVtZW50YXRpb25zLCBmaWxlIGZpbHRlcnMsIApmaWxlIGNvbXBhcmF0b3JzLCBlbmRpYW4gdHJhbnNmb3JtYXRpb24gY2xhc3NlcywgYW5kIG11Y2ggbW9yZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDIuNAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KTmV3IGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIElPLTI2OTogIFRhaWxlciBsb2NrcyBmaWxlIGZyb20gZGVsZXRpb24vcmVuYW1lIG9uIFdpbmRvd3MuIFRoYW5rcyB0byBzZWJiLiAKbyBJTy0zMzM6ICBFeHBvcnQgT1NHaSBwYWNrYWdlcyBhdCB2ZXJzaW9uIDEueCBpbiBhZGRpdGlvbiB0byAyLnguIFRoYW5rcyB0byBmbWVzY2hiZS4gCm8gSU8tMzIwOiAgQWRkIFhtbFN0cmVhbVJlYWRlciBzdXBwb3J0IGZvciBVVEYtMzIuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gSU8tMzMxOiAgQk9NSW5wdXRTdHJlYW0gd3JvbmdseSBkZXRlY3RzIFVURi0zMkxFX0JPTSBmaWxlcyBhcyBVVEYtMTZMRV9CT00gZmlsZXMgaW4gbWV0aG9kIGdldEJPTSgpLiBUaGFua3MgdG8gZ2dyZWdvcnkuIApvIElPLTMyNzogIEFkZCBieXRlQ291bnRUb0Rpc3BsYXlTaXplKEJpZ0ludGVnZXIpLiBUaGFua3MgdG8gZ2dyZWdvcnkuIApvIElPLTMyNjogIEFkZCBuZXcgRmlsZVV0aWxzLnNpemVPZltEaXJlY3RvcnldIEFQSXMgdG8gcmV0dXJuIEJpZ0ludGVnZXIuIFRoYW5rcyB0byBnZ3JlZ29yeSwga2lub3cuIApvIElPLTMyNTogIEFkZCBJT1V0aWxzLnRvQnl0ZUFycmF5IG1ldGhvZHMgdG8gd29yayB3aXRoIFVSTCBhbmQgVVJJLiBUaGFua3MgdG8gcmF2aXByYWsuIApvIElPLTMyNDogIEFkZCBtaXNzaW5nIENoYXJzZXQgc2lzdGVyIEFQSXMgdG8gbWV0aG9kIHRoYXQgdGFrZSBhIFN0cmluZyBjaGFyc2V0IG5hbWUuIFRoYW5rcyB0byByYXZpcHJhay4gCgpGaXhlZCBCdWdzOgpvIElPLTMzNjogIFlvdHRhYnl0ZSAoWUIpIGluY29ycmVjdGx5IGRlZmluZWQgaW4gRmlsZVV0aWxzLiBUaGFua3MgdG8gcmxlYXZlbGxlLiAKbyBJTy0yNzk6ICBUYWlsZXIgZXJyb25lb3VzbHkgY29uc2lkZXJzIGZpbGUgYXMgbmV3LiBUaGFua3MgdG8gU2VyZ2lvIEJvc3NhLCBDaHJpcyBCYXJvbi4gCm8gSU8tMzM1OiAgVGFpbGVyI3JlYWRMaW5lcyAtIGluY29ycmVjdCBDUiBoYW5kbGluZy4gCm8gSU8tMzM0OiAgRmlsZVV0aWxzLnRvVVJMcyB0aHJvd3MgTlBFIGZvciBudWxsIHBhcmFtZXRlcjsgZG9jdW1lbnQgdGhlIGJlaGF2aW9yLiAKbyBJTy0zMzI6ICBJbXByb3ZlIHRhaWxlcidzIHJlYWRpbmcgcGVyZm9ybWFuY2UuIFRoYW5rcyB0byBsaWFuZ2x5LiAKbyBJTy0yNzk6ICBJbXByb3ZlIFRhaWxlciBwZXJmb3JtYW5jZSB3aXRoIGJ1ZmZlcmVkIHJlYWRzIChzZWUgSU8tMzMyKS4gCm8gSU8tMzI5OiAgRmlsZVV0aWxzLndyaXRlTGluZXMgdXNlcyB1bmJ1ZmZlcmVkIElPLiBUaGFua3MgdG8gdGl2di4gCm8gSU8tMzE5OiAgRmlsZVV0aWxzLnNpemVPZkRpcmVjdG9yeSBmb2xsb3dzIHN5bWJvbGljIGxpbmtzLiBUaGFua3MgdG8gcmF2aXByYWsuIAoKCkNvbXBhdGliaWxpdHkgd2l0aCAyLjM6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBZZXMuClNlbWFudGljIGNvbXBhdGlibGU6IFllcy4KCkNvbXBhdGliaWxpdHkgd2l0aCAyLjIgYW5kIDEuNDoKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KU2VtYW50aWMgY29tcGF0aWJsZTogTm8sIHNlZSB0aGUgcmFyZSBjYXNlIGluIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8tMzE4LgoKQ29tbW9ucyBJTyAyLjQgcmVxdWlyZXMgSkRLIDEuNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSkRLIDEuNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjIgcmVxdWlyZXMgSkRLIDEuNSBvciBsYXRlci4KQ29tbW9ucyBJTyAxLjQgcmVxdWlyZXMgSkRLIDEuMyBvciBsYXRlci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDIuMwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gSU8tMzIyOiAgQWRkIGFuZCB1c2UgY2xhc3MgQ2hhcnNldHMuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gSU8tMzIxOiAgQnl0ZU9yZGVyTWFyayBVVEZfMzJMRSBpcyBpbmNvcnJlY3QuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gSU8tMzE4OiAgQWRkIENoYXJzZXQgc2lzdGVyIEFQSXMgdG8gbWV0aG9kIHRoYXQgdGFrZSBhIFN0cmluZyBjaGFyc2V0IG5hbWUuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCgpDb21wYXRpYmlsaXR5IHdpdGggMi4yIGFuZCAxLjQ6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBObywgc2VlIHRoZSByYXJlIGNhc2UgaW4gaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy0zMTguClNlbWFudGljIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KCkNvbW1vbnMgSU8gMi4zIHJlcXVpcmVzIEpESyAxLjYgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMi4yIHJlcXVpcmVzIEpESyAxLjUgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIEpESyAxLjMgb3IgbGF0ZXIuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIEFkZCBJT1VUaWxzLnRvQnVmZmVyZWRSZWFkZXIoUmVhZGVyKSAgSXNzdWU6IElPLTMxMy4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBBbGxvdyBhcHBsaWNhdGlvbnMgdG8gcHJvdmlkZSBidWZmZXIgKG9yIHNpemUpIGZvciBjb3B5TGFyZ2UgbWV0aG9kcy4gIElzc3VlOiBJTy0zMDguIFRoYW5rcyB0byBNYW5vaiBNb2thc2hpLiAKbyBOZXcgY29weUxhcmdlKCkgbWV0aG9kIGluIElPVXRpbHMgdGhhdCB0YWtlcyBhZGRpdGlvbmFsIG9mZnNldCwgbGVuZ3RoIGFyZ3VtZW50cyAgSXNzdWU6IElPLTMwNS4gVGhhbmtzIHRvIE1hbm9qIE1va2FzaGkuIApvIFVzZSB0ZXJhYnl0ZSAoVEIpLCBwZXRhYnl0ZSAoUEIpIGFuZCBleGFieXRlIChFQikgaW4gRmlsZVV0aWxzLmJ5dGVDb3VudFRvRGlzcGxheVNpemUobG9uZyBzaXplKSAgSXNzdWU6IElPLTI4Ny4gVGhhbmtzIHRvIFJvbiBLdXJpcywgR2FyeSBHcmVnb3J5LiAKbyBGaWxlVXRpbHMubGlzdEZpbGVzKCkgZG9lc24ndCByZXR1cm4gZGlyZWN0b3JpZXMgIElzc3VlOiBJTy0xNzMuIFRoYW5rcyB0byBNYXJjb3MgVmlu7WNpdXMgZGEgU2lsdmEuIApvIENoYXJTZXF1ZW5jZUlucHV0U3RyZWFtIHRvIGVmZmljaWVudGx5IHN0cmVhbSBjb250ZW50IG9mIGEgQ2hhclNlcXVlbmNlICBJc3N1ZTogSU8tMjk3LiBUaGFua3MgdG8gT2xlZyBLYWxuaWNoZXZza2kuIApvIFRoZSBzZWNvbmQgY29uc3RydWN0b3Igb2YgVGFpbGVyIGNsYXNzIGRvZXMgbm90IHBhc3MgJ2RlbGF5JyB0byB0aGUgdGhpcmQgb25lICBJc3N1ZTogSU8tMzA0LiBUaGFua3MgdG8gbGlhbmdseS4gCm8gVGVlT3V0cHV0U3RyZWFtIGRvZXMgbm90IGNhbGwgYnJhbmNoLmNsb3NlKCkgd2hlbiBtYWluLmNsb3NlKCkgdGhyb3dzIGFuIGV4Y2VwdGlvbiAgSXNzdWU6IElPLTMwMy4gVGhhbmtzIHRvIGZhYmlhbi5iYXJuZXkuIApvIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpbiBCT01JbnB1dFN0cmVhbSB3aGVuIHJlYWRpbmcgYSBmaWxlIHdpdGhvdXQgQk9NIG11bHRpcGxlIHRpbWVzICBJc3N1ZTogSU8tMzAyLiBUaGFua3MgdG8ganN0ZXVlcndhbGQsIGRldGluaG8uIApvIEFkZCBJT1V0aWxzLmNsb3NlUXVpZXRseShTZWxlY3RvcikgbmVjZXNzYXJ5ICBJc3N1ZTogSU8tMzAxLiBUaGFua3MgdG8ga2F5a2F5LnVuaXF1ZS4gCm8gSU9VdGlscy5jbG9zZVF1aWV0bHkoKSBzaG91bGQgdGFrZSBhIFNlcnZlclNvY2tldCBhcyBhIHBhcmFtZXRlciAgSXNzdWU6IElPLTI5Mi4gVGhhbmtzIHRvIHNlYmIuIApvIEFkZCByZWFkL3JlYWRGdWxseSBtZXRob2RzIHRvIElPVXRpbHMgIElzc3VlOiBJTy0yOTAuIFRoYW5rcyB0byBzZWJiLiAKbyBTdXBwbHkgYSBSZXZlcnNlZExpbmVzRmlsZVJlYWRlciAgSXNzdWU6IElPLTI4OC4gVGhhbmtzIHRvIEdlb3JnIEhlbnpsZXIuIApvIEFkZCBuZXcgZnVuY3Rpb24gRmlsZVV0aWxzLmRpcmVjdG9yeUNvbnRhaW5zLiAgSXNzdWU6IElPLTI5MS4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBGaWxlVXRpbHMuY29udGVudEVxdWFscyBhbmQgSU9VdGlscy5jb250ZW50RXF1YWxzIC0gQWRkIG9wdGlvbiB0byBpZ25vcmUgImxpbmUgZW5kaW5ncyIKICAgICAgICBBZGRlZCBjb250ZW50RXF1YWxzSWdub3JlRU9MIG1ldGhvZHMgdG8gYm90aCBjbGFzc2VzICBJc3N1ZTogSU8tMjc1LiBUaGFua3MgdG8gQ0ogQXNwcm9tZ29zLiAKCkZpeGVkIEJ1Z3M6Cm8gSU9VdGlscy5yZWFkKElucHV0U3RyZWFtL1JlYWRlcikgaWdub3JlcyB0aGUgb2Zmc2V0IHBhcmFtZXRlciAgSXNzdWU6IElPLTMxMS4gVGhhbmtzIHRvIFJvYmVydCBNdWlyLiAKbyBDaGFyU2VxdWVuY2VJbnB1dFN0cmVhbShDaGFyU2VxdWVuY2UgcywgQ2hhcnNldCBjaGFyc2V0LCBpbnQgYnVmZmVyU2l6ZSkgaWdub3JlcyBidWZmZXJTaXplICBJc3N1ZTogSU8tMzEyLiAKbyBGaWxlVXRpbHMubW92ZURpcmVjdG9yeVRvRGlyZWN0b3J5IHJlbW92ZXMgc291cmNlIGRpcmVjdG9yeSBpZiBkZXN0aW5hdGlvbiBpcyBhIHN1YmRpcmVjdG9yeSAgSXNzdWU6IElPLTMwMC4gCm8gUmVhZGVySW5wdXRTdHJlYW0jcmVhZChieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgc2hvdWxkIGNoZWNrIGZvciB2YWxpZCBwYXJhbWV0ZXJzICBJc3N1ZTogSU8tMzA3LiAKbyBSZWFkZXJJbnB1dFN0cmVhbSNyZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSBzaG91bGQgYWx3YXlzIHJldHVybiAwIGZvciBsZW5ndGggPT0gMCAgSXNzdWU6IElPLTMwNi4gCm8gIkZpbGVVdGlscyNkZWxldGVEaXJlY3RvcnlPbkV4aXQoRmlsZSkiIGRvZXMgbm90IHdvcmsgIElzc3VlOiBJTy0yNzYuIFRoYW5rcyB0byBua2FtaS4gCm8gQm91bmRlZElucHV0U3RyZWFtLnJlYWQoKSB0cmVhdHMgbWF4IGRpZmZlcmVudGx5IGZyb20gQm91bmRlZElucHV0U3RyZWFtLnJlYWQoYnl0ZVtdLi4uKSAgSXNzdWU6IElPLTI3My4gVGhhbmtzIHRvIHNlYmIuIApvIFZhcmlvdXMgbWV0aG9kcyBvZiBjbGFzcyAnb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlscycgaW5jb3JyZWN0bHkgc3VwcHJlc3MgJ2phdmEuaW8uSU9FeGNlcHRpb24nICBJc3N1ZTogSU8tMjk4LiBUaGFua3MgdG8gQ2hyaXN0aWFuIFNjaHVsdGUuIAoKQ2hhbmdlczoKbyBSZWFkZXJJbnB1dFN0cmVhbSBvcHRpbWl6YXRpb246IG1vcmUgZWZmaWNpZW50IHJlYWRpbmcgb2Ygc21hbGwgY2h1bmtzIG9mIGRhdGEgIElzc3VlOiBJTy0yOTYuIFRoYW5rcyB0byBPbGVnIEthbG5pY2hldnNraS4gCgoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuMSBhbmQgMS40OgpCaW5hcnkgY29tcGF0aWJsZTogWWVzClNvdXJjZSBjb21wYXRpYmxlOiBZZXMKU2VtYW50aWMgY29tcGF0aWJsZTogWWVzLiBDaGVjayB0aGUgYnVnIGZpeGVzIHNlY3Rpb24gZm9yIHNlbWFudGljIGJ1ZyBmaXhlcwoKQ29tbW9ucyBJTyAyLjIgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIEpESyAxLjUuIApDb21tb25zIElPIDEuNCByZXF1aXJlcyBhIG1pbmltdW0gb2YgSkRLIDEuMy4gCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpOZXcgZmVhdHVyZXM6Cm8gVXNlIHN0YW5kYXJkIE1hdmVuIGRpcmVjdG9yeSBsYXlvdXQgIElzc3VlOiBJTy0yODUuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gQWRkIElPVXRpbHMgQVBJIHRvU3RyaW5nIGZvciBVUkwgYW5kIFVSSSB0byBnZXQgY29udGVudHMgIElzc3VlOiBJTy0yODQuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gQWRkIEFQSSBGaWxlVXRpbHMuY29weUZpbGUoRmlsZSBpbnB1dCwgT3V0cHV0U3RyZWFtIG91dHB1dCkgIElzc3VlOiBJTy0yODIuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gRmlsZUFsdGVyYXRpb25PYnNlcnZlciBoYXMgbm8gZ2V0dGVyIGZvciBGaWxlRmlsdGVyICBJc3N1ZTogSU8tMjYyLiAKbyBBZGQgRmlsZVV0aWxzLmdldEZpbGUgQVBJIHdpdGggdmFyYXJncyBwYXJhbWV0ZXIgIElzc3VlOiBJTy0yNjEuIApvIEFkZCBuZXcgQVBQRU5EIHBhcmFtZXRlciBmb3Igd3JpdGluZyBzdHJpbmcgaW50byBmaWxlcyAgSXNzdWU6IElPLTE4Mi4gCm8gQWRkIG5ldyByZWFkIG1ldGhvZCAidG9CeXRlQXJyYXkiIHRvIGhhbmRsZSBJbnB1dFN0cmVhbSB3aXRoIGtub3duIHNpemUuICBJc3N1ZTogSU8tMjUxLiBUaGFua3MgdG8gTWFyY28gQWxiaW5pLiAKCkZpeGVkIEJ1Z3M6Cm8gRHViaW91cyB1c2Ugb2YgbWtkaXJzKCkgcmV0dXJuIGNvZGUgIElzc3VlOiBJTy0yODAuIFRoYW5rcyB0byBzZWJiLiAKbyBSZWFkZXJJbnB1dFN0cmVhbSBlbnRlcnMgaW5maW5pdGUgbG9vcCB3aGVuIGl0IGVuY291bnRlcnMgYW4gdW5tYXBwYWJsZSBjaGFyYWN0ZXIgIElzc3VlOiBJTy0yNzcuIApvIEZpbGVVdGlscy5tb3ZlRmlsZSgpIEphdmFEb2Mgc2hvdWxkIHNwZWNpZnkgRmlsZUV4aXN0c0V4Y2VwdGlvbiB0aHJvd24gIElzc3VlOiBJTy0yNjQuIApvIENsYXNzTG9hZGVyT2JqZWN0SW5wdXRTdHJlYW0gZG9lcyBub3QgaGFuZGxlIFByb3h5IGNsYXNzZXMgIElzc3VlOiBJTy0yNjAuIApvIFRhaWxlciByZXR1cm5pbmcgcGFydGlhbCBsaW5lcyB3aGVuIHJlYWNoaW5nIEVPRiBiZWZvcmUgRU9MICBJc3N1ZTogSU8tMjc0LiBUaGFua3MgdG8gRnJhbmsgR3JpbWVzLiAKbyBGaWxlVXRpbHMuY29weUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gd2hlbiBjb3B5aW5nIGxhcmdlIGZpbGVzIHRvIGEgc2hhcmVkIGRpcmVjdG9yeSAob24gV2luZG93cykgIElzc3VlOiBJTy0yNjYuIFRoYW5rcyB0byBJZ29yIFNtZXJla2EuIApvIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2VLYiB0aHJvd3MgZXhjZXB0aW9uIGZvciBXaW5kb3dzIHZvbHVtZXMgd2l0aCBubyB2aXNpYmxlIGZpbGVzLgogICAgICAgIEltcHJvdmUgY292ZXJhZ2UgYnkgYWxzbyBsb29raW5nIGZvciBoaWRkZW4gZmlsZXMuICBJc3N1ZTogSU8tMjYzLiBUaGFua3MgdG8gR2lsIEFkYW0uIAoKQ2hhbmdlczoKbyBGaWxlQWx0ZXJhdGlvbk1vbml0b3Iuc3RvcChib29sZWFuIGFsbG93SW50ZXJ2YWxUb0ZpbmlzaCkgIElzc3VlOiBJTy0yNTkuIAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFBhY2thZ2UgMi4wLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMi4wIGFuZCAxLjQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwogIENoZWNrIHRoZSBidWcgZml4ZXMgc2VjdGlvbiBmb3Igc2VtYW50aWMgYnVnIGZpeGVzCgpDb21tb25zIElPIDIuMC4xIHJlcXVpcmVzIGEgbWluaW11bSBvZiBKREsgMS41CiAoQ29tbW9ucyBJTyAxLjQgaGFkIGEgbWluaW11bSBvZiBKREsgMS4zKSAKCkVuaGFuY2VtZW50cyBmcm9tIDIuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICogW0lPLTI1Nl0gLSBQcm92aWRlIHRocmVhZCBmYWN0b3J5IGZvciBGaWxlQWx0ZXJuYXRpb25Nb25pdG9yCgpCdWcgZml4ZXMgZnJvbSAyLjAKLS0tLS0tLS0tLS0tLS0tLS0tCgogICAqIFtJTy0yNTddIC0gQk9NSW5wdXRTdHJlYW0ucmVhZChieXRlW10pIGNhbiByZXR1cm4gMCB3aGljaCBpdCBzaG91bGQgbm90CiAgICogW0lPLTI1OF0gLSBYbWxTdHJlYW1SZWFkZXIgY29uc3VtZXMgdGhlIHN0cmVhbSBkdXJpbmcgZW5jb2RpbmcgZGV0ZWN0aW9uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gUGFja2FnZSAyLjAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkNvbW1vbnMgSU8gMi4wIHJlcXVpcmVzIGEgbWluaW11bSBvZiBKREsgMS41CiAoQ29tbW9ucyBJTyAxLjQgaGFkIGEgbWluaW11bSBvZiBKREsgMS4zKSAKCkRlcHJlY2F0aW9ucyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0gSU9VdGlscwogIC0gd3JpdGUoU3RyaW5nQnVmZmVyLCBXcml0ZXIpIGluIGZhdm91ciBvZiB3cml0ZShDaGFyU2VxdWVuY2UsIFdyaXRlcikKICAtIHdyaXRlKFN0cmluZ0J1ZmZlciwgT3V0cHV0U3RyZWFtKSAgaW4gZmF2b3VyIG9mIHdyaXRlKENoYXJTZXF1ZW5jZSwgT3V0cHV0U3RyZWFtKQogIC0gd3JpdGUoU3RyaW5nQnVmZmVyLCBPdXRwdXRTdHJlYW0sIFN0cmluZykgaW4gZmF2b3VyIG9mIHdyaXRlKENoYXJTZXF1ZW5jZSwgT3V0cHV0U3RyZWFtLCBTdHJpbmcpCgotIEZpbGVGaWx0ZXJVdGlscwogIC0gYW5kRmlsZUZpbHRlcihJT0ZpbGVGaWx0ZXIsIElPRmlsZUZpbHRlcikgaW4gZmF2b3VyIG9mIGFuZChJT0ZpbGVGaWx0ZXIuLi4pIAogIC0gb3JGaWxlRmlsdGVyKElPRmlsZUZpbHRlciwgSU9GaWxlRmlsdGVyKSAgaW4gZmF2b3VyIG9mIG9yKElPRmlsZUZpbHRlci4uLikKCkVuaGFuY2VtZW50cyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgKiBbSU8tMTQwXSBNb3ZlIG1pbmltdW0gSmF2YSByZXF1aXJlbWVudCBmcm9tIEpESyAxLjMgdG8gSkRLIDEuNQogICAgICAgICAgICAgLSB1c2UgR2VuZXJpY3MKICAgICAgICAgICAgIC0gYWRkIG5ldyBDaGFyU2VxdWVuY2Ugd3JpdGUoKSBmbGF2b3VyIG1ldGhvZHMgdG8gSU9VdGlscyBhbmQgRmlsZVV0aWxzCiAgICAgICAgICAgICAtIHJlcGxhY2UgU3RyaW5nQnVmZmVyIHdpdGggU3RyaW5nQnVpbGRlciwgd2hlcmUgYXBwcm9wcmlhdGUKICAgICAgICAgICAgIC0gYWRkIG5ldyBSZWFkZXIvV3JpdGVyIG1ldGhvZHMgdG8gUHJveHlSZWFkZXIgYW5kIFByb3h5V3JpdGVyCiAgICAgICAgICAgICAtIEFubm90YXRlIHdpdGggQE92ZXJyaWRlIGFuZCBARGVwcmVjYXRlZAoKICAqIFtJTy0xNzhdIE5ldyBCT01JbnB1dFN0cmVhbSBhbmQgQnl0ZU9yZGVyTWFyayBpbXBsZW1lbnRhdGlvbnMgLSB0byBkZXRlY3QgYW5kIG9wdGlvbmFsbHkgZXhjbHVkZSBhbiBpbml0aWFsIEJ5dGUgT3JkZXIgbWFyayAoQk9NKQogICogW0lPLTE5N10gTmV3IEJvdW5kZWRJbnB1dFN0cmVhbSAoY29waWVkIGZyb20gZnJvbSBBcGFjaGUgSmFja1JhYmJpdCkKICAqIFtJTy0xOTNdIE5ldyBCcm9rZW4gSW5wdXQgYW5kIE91dHB1dCBzdHJlYW1zCiAgKiBbSU8tMTMyXSBOZXcgRmlsZSBMaXN0ZW5lci9Nb25pdG9yIGZhY2lsaXR5CiAgKiBbSU8tMTU4XSBOZXcgUmVhZGVySW5wdXRTdHJlYW0gYW5kIFdyaXRlck91dHB1dFN0cmVhbSBpbXBsZW1lbnRhdGlvbnMKICAqIFtJTy0xMzldIE5ldyBTdHJpbmdCdWlsZGVyIFdyaXRlciBpbXBsZW1lbnRhdGlvbgogICogW0lPLTE5Ml0gTmV3IFRhZ2dlZCBJbnB1dCBhbmQgT3V0cHV0IHN0cmVhbXMKICAqIFtJTy0xNzddIE5ldyBUYWlsZXIgY2xhc3MgLSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFVuaXggInRhaWwgLWYiIGZ1bmN0aW9uYWxpdHkKICAqIFtJTy0xNjJdIE5ldyBYTUwgU3RyZWFtIFJlYWRlci9Xcml0ZXIgaW1wbGVtZW50YXRpb25zIChmcm9tIFJPTUUgdmlhIHBsZXh1cy11dGlscykKCiAgKiBbSU8tMTQyXSBDb21wYXJhdG9ycyAtIGFkZCBmYWNpbGl0eSB0byBzb3J0IGZpbGUgbGlzdHMvYXJyYXlzCiAgKiBbSU8tMTg2XSBDb21wYXJhdG9ycyAtIG5ldyBDb21wb3NpdGUgYW5kIERpcmVjdG9yeSBGaWxlIENvbXBhcmF0b3IgaW1wbGVtZW50YXRpb25zCiAgKiBbSU8tMTc2XSBEaXJlY3RvcnlXYWxrZXIgLSBhZGQgZmlsdGVyRGlyZWN0b3J5Q29udGVudHMoKSBjYWxsYmFjayBtZXRob2QgZm9yIGZpbHRlcmluZyBkaXJlY3RvcnkgY29udGVudHMKICAqIFtJTy0yMTBdIEZpbGVGaWx0ZXIgLSBuZXcgTWFnaWMgTnVtYmVyIEZpbGVGaWx0ZXIKICAqIFtJTy0yMjFdIEZpbGVGaWx0ZXJVdGlscyAtIGFkZCBtZXRob2RzIGZvciBzdWZmaXggYW5kIHByZWZpeCBmaWx0ZXJzIHdoaWNoIHRha2UgYW4gSU9DYXNlIG9iamVjdAogICogW0lPLTIzMl0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIG1ldGhvZCBmb3IgbmFtZSBmaWx0ZXJzIHdoaWNoIHRha2UgYW4gSU9DYXNlIG9iamVjdAogICogW0lPLTIyOV0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIHZhcmFyZ3MgYW5kKCkgYW5kIG9yKCkgbWV0aG9kcwogICogW0lPLTE5OF0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIGFiaWxpdHkgdG8gYXBwbHkgZmlsZSBmaWx0ZXJzIHRvIGNvbGxlY3Rpb25zIGFuZCBhcnJheXMKICAqIFtJTy0xNTZdIEZpbGVuYW1lVXRpbHMgLSBhZGQgbm9ybWFsaXplKCkgYW5kIG5vcm1hbGl6ZU5vRW5kU2VwYXJhdG9yKCkgbWV0aG9kcyB3aGljaCBhbGxvdyB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciB0byBiZSBzcGVjaWZpZWQKICAqIFtJTy0xOTRdIEZpbGVTeXN0ZW1VdGlscyAtIGFkZCBmcmVlU3BhY2VLYigpIG1ldGhvZCB3aXRoIG5vIGlucHV0IGFyZ3VtZW50cwogICogW0lPLTE4NV0gRmlsZVN5c3RlbVV0aWxzIC0gYWRkIGZyZWVTcGFjZUtiKCkgbWV0aG9kcyB0aGF0IHRha2UgYSB0aW1lb3V0IHBhcmFtZXRlciAtIGZpeGVzIGZyZWVTcGFjZVdpbmRvd3MoKSBibG9ja3MKICAqIFtJTy0xNTVdIEZpbGVVdGlscyAtIHVzZSBOSU8gdG8gY29weSBmaWxlcwogICogW0lPLTE2OF0gRmlsZVV0aWxzIC0gYWRkIG5ldyBpc1N5bWxpbmsoKSBtZXRob2QKICAqIFtJTy0yMTldIEZpbGVVdGlscyAtIHRocm93IEZpbGVFeGlzdHNFeGNlcHRpb24gd2hlbiBtb3ZpbmcgYSBmaWxlIG9yIGRpcmVjdG9yeSBpZiB0aGUgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMKICAqIFtJTy0yMzRdIEZpbGVVdGlscyAtIGFkZCBNZXRob2RzIGZvciByZXRyaWV2aW5nIFN5c3RlbSBVc2VyL1RlbXAgZGlyZWN0b3JpZXMvcGF0aHMKICAqIFtJTy0yMDhdIEZpbGVVdGlscyAtIGFkZCB0aW1lb3V0IChjb25uZWN0aW9uIGFuZCByZWFkKSBzdXBwb3J0IGZvciBjb3B5VVJMVG9GaWxlKCkgbWV0aG9kIAogICogW0lPLTIzOF0gRmlsZVV0aWxzIC0gYWRkIHNpemVPZihGaWxlKSBtZXRob2QKICAqIFtJTy0xODFdIExpbmVJdGVyYXRvciBub3cgaW1wbGVtZW50cyBJdGVyYWJsZQogICogW0lPLTIyNF0gSU9VdGlscyAtIGFkZCBjbG9zZVF1aWV0bHkoQ2xvc2VhYmxlKSBhbmQgY2xvc2VRdWlldGx5KFNvY2tldCkgbWV0aG9kcwogICogW0lPLTIwM10gSU9VdGlscyAtIGFkZCBza2lwRnVsbHkoKSBtZXRob2QgZm9yIElucHV0U3RyZWFtcwogICogW0lPLTEzN10gSU9VdGlscyBhbmQgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIC0gYWRkIHRvQnVmZmVyZWRJbnB1dFN0cmVhbSgpIG1ldGhvZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBhcnJheSBhbGxvY2F0aW9uL2NvcHkKICAqIFtJTy0xOTVdIFByb3h5IHN0cmVhbXMvUmVhZGVyL1dyaXRlciAtIHByb3ZpZGUgZXhjZXB0aW9uIGhhbmRsaW5nIG1ldGhvZHMKICAqIFtJTy0yMTFdIFByb3h5IElucHV0L091dHB1dCBzdHJlYW1zIC0gYWRkIHByZS9wb3N0IHByb2Nlc3Npbmcgc3VwcG9ydAogICogW0lPLTI0Ml0gUHJveHkgUmVhZGVyL1dyaXRlciAtIGFkZCBwcmUvcG9zdCBwcm9jZXNzaW5nIHN1cHBvcnQKCkJ1ZyBmaXhlcyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0KICAqIFtJTy0yMTRdIEJ5dGVBcnJheU91dHB1dFN0cmVhbSAtIGZpeCBpbmNvbnNpc3RlbnQgc3luY2hyb25pemF0aW9uIG9mIGZpZWxkcwogICogW0lPLTIwMV0gQ291bnRpbmcgSW5wdXQvT3V0cHV0IHN0cmVhbXMgLSBmaXggaW5jb25zaXN0ZW50IHN5bmNocm9uaXphdGlvbgogICogW0lPLTE1OV0gRmlsZUNsZWFuaW5nVHJhY2tlciAtIGZpeCByZW1vdmUoKSBuZXZlciByZXR1cm5zIG51bGwKICAqIFtJTy0yMjBdIEZpbGVDbGVhbmluZ1RyYWNrZXIgLSBmaXggVmVjdG9yIHBlcmZvcm1zIGJhZGx5IHVuZGVyIGxvYWQKICAqIFtJTy0xNjddIEZpbGVuYW1lVXRpbHMgLSBmaXggY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgaGFuZGxpbmcgaW4gRmlsZW5hbWVVdGlscyBhbmQgRmlsZXN5c3RlbVV0aWxzCiAgKiBbSU8tMTc5XSBGaWxlbmFtZVV0aWxzIC0gZml4IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHMgZXhjZXB0aW9uIGluIGdldFBhdGhOb0VuZFNlcGFyYXRvcigpCiAgKiBbSU8tMjQ4XSBGaWxlbmFtZVV0aWxzIC0gZml4IGdldEZ1bGxQYXRoTm9FbmRTZXBhcmF0b3IoKSByZXR1cm5zIGVtcHR5IHdoaWxlIHBhdGggaXMgYSBvbmUgbGV2ZWwgZGlyZWN0b3J5CiAgKiBbSU8tMjQ2XSBGaWxlbmFtZVV0aWxzIC0gZml4IHdpbGRjYXJkTWF0Y2ggZ2l2ZXMgaW5jb3JyZWN0IHJlc3VsdHMgCiAgKiBbSU8tMTg3XSBGaWxlU3lzdGVtVXRpbHMgLSBmaXggZnJlZVNwYWNlS2IoKSBkb2Vzbid0IHdvcmsgd2l0aCByZWxhdGl2ZSBwYXRocyBvbiBMaW51eAogICogW0lPLTE2MF0gRmlsZVN5c3RlbVV0aWxzIC0gZml4IGZyZWVTcGFjZSgpIGZhaWxzIG9uIHNvbGFyaXMKICAqIFtJTy0yMDldIEZpbGVTeXN0ZW1VdGlscyAtIGZpeCBmcmVlU3BhY2VLYigpIGZhaWxzIHRvIHJldHVybiBjb3JyZWN0IHNpemUgZm9yIGEgd2luZG93cyBtb3VudCBwb2ludAogICogW0lPLTE2M10gRmlsZVV0aWxzIC0gZml4IHRvVVJMcygpIHVzaW5nIGRlcHJlY2F0ZWQgbWV0aG9kIG9mIGNvbnZlcnNpb24gdG8gVVJMCiAgKiBbSU8tMTY4XSBGaWxlVXRpbHMgLSBmaXggU3ltYm9saWMgbGlua3MgZm9sbG93ZWQgd2hlbiBkZWxldGluZyBkaXJlY3RvcnkKICAqIFtJTy0yMzFdIEZpbGVVdGlscyAtIGZpeCB3cm9uZyBleGNlcHRpb24gbWVzc2FnZSBnZW5lcmF0ZWQgaW4gaXNGaWxlTmV3ZXIoKSBtZXRob2QKICAqIFtJTy0yMDddIEZpbGVVdGlscyAtIGZpeCByYWNlIGNvbmRpdGlvbiBpbiBmb3JjZU1rZGlyKCkgbWV0aG9kCiAgKiBbSU8tMjE3XSBGaWxlVXRpbHMgLSBmaXggY29weURpcmVjdG9yeVRvRGlyZWN0b3J5KCkgbWFrZXMgaW5maW5pdGUgbG9vcHMKICAqIFtJTy0xNjZdIEZpbGVVdGlscyAtIGZpeCBVUkwgZGVjb2RpbmcgaW4gdG9GaWxlKFVSTCkKICAqIFtJTy0xOTBdIEZpbGVVdGlscyAtIGZpeCBjb3B5RGlyZWN0b3J5IG5vdCBwcmVzZXJ2aW5nIGxhc3Rtb2RpZmllZCBkYXRlIG9uIHN1Yi1kaXJlY3RvcmllcwogICogW0lPLTI0MF0gRmlsZUZpbHRlclV0aWxzIC0gZW5zdXJlIGN2c0ZpbHRlciBhbmQgc3ZuRmlsdGVyIGFyZSBvbmx5IGNyZWF0ZWQgb25jZS4KICAqIFtJTy0xNzVdIElPVXRpbHMgLSBmaXggY29weUZpbGUoKSBpc3N1ZXMgd2l0aCB2ZXJ5IGxhcmdlIGZpbGVzCiAgKiBbSU8tMTkxXSBJbXByb3ZlbWVudHMgZnJvbSBzdGF0aWMgYW5hbHlzaXMKICAqIFtJTy0yMTZdIExvY2thYmxlRmlsZVdyaXRlciAtIGRlbGV0ZSBmaWxlcyBxdWlldGx5IHdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93biBkdXJpbmcgaW5pdGlhbGl6YXRpb24KICAqIFtJTy0yNDNdIFN3YXBwZWREYXRhSW5wdXRTdHJlYW0gLSBmaXggcmVhZEJvb2xlYW4gaXMgaW52ZXJ0ZWQKICAqIFtJTy0yMzVdIFRlc3RzIC0gcmVtb3ZlIHVudXNlZCBZZWxsT25GbHVzaEFuZENsb3NlT3V0cHV0U3RyZWFtIGZyb20gQ29weVV0aWxzVGVzdAogICogW0lPLTE2MV0gVGVzdHMgLSBmaXggRmlsZUNsZWFuaW5nVHJhY2tlclRlc3RDYXNlIGhhbmdpbmcKCkRvY3VtZW50YXRpb24gY2hhbmdlcyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFtJTy0xODMgRmlsZW5hbWVVdGlscy5nZXRFeHRlbnNpb24oKSBtZXRob2QgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKICAqIFtJTy0yMjYgRmlsZVV0aWxzLmJ5dGVDb3VudFRvRGlzcGxheVNpemUoKSBkb2N1bWVudGF0aW9uIGNvcnJlY3Rpb25zCiAgKiBbSU8tMjA1IEZpbGVVdGlscy5mb3JjZU1rZGlyKCkgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKICAqIFtJTy0yMTUgRmlsZVV0aWxzIGNvcHkgZmlsZS9kaXJlY3RvcnkgaW1wcm92ZSBkb2N1bWVudGF0aW9uIHJlZ2FyZGluZyBwcmVzZXJ2aW5nIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUKICAqIFtJTy0xODkgSGV4RHVtcC5kdW1wKCkgbWV0aG9kIGRvY3VtZW50YXRpb24gaW1wcm92ZW1lbnRzCiAgKiBbSU8tMTcxIElPQ2FzZSBkb2N1bWVudCB0aGF0IGl0IGFzc3VtZXMgdGhlcmUgYXJlIG9ubHkgdHdvIE9TZXM6IFdpbmRvd3MgYW5kIFVuaXgKICAqIFtJTy0yMjMgSU9VdGlscy5jb3B5KCkgZG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucwogICogW0lPLTI0NyBJT1V0aWxzLmNsb3NlUXVpZXRseSgpIGltcHJvdmUgZG9jdW1lbnRhdGlvbiB3aXRoIGV4YW1wbGVzCiAgKiBbSU8tMjAyIE5vdEZpbGVGaWx0ZXIgZG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucwogICogW0lPLTIwNiBQcm94eUlucHV0U3RyZWFtIC0gZml4IG1pc2xlYWRpbmcgcGFyYW1ldGVyIG5hbWVzCiAgKiBbSU8tMjEyIFByb3h5SW5wdXRTdHJlYW0uc2tpcCgpIGRvY3VtZW50YXRpb24gY29ycmVjdGlvbnMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDEuNAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjMuMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkNvbW1vbnMgSU8gMS40IGludHJvZHVjZXMgZm91ciBuZXcgaW1wbGVtZW50YXRpb25zIHdoaWNoIGRlcGVuZCBvbiBKREsgMS40IGZlYXR1cmVzCihDaGFyU2VxdWVuY2VSZWFkZXIsIEZpbGVXcml0ZXJXaXRoRW5jb2RpbmcsIElPRXhjZXB0aW9uV2l0aENhdXNlIGFuZCBSZWdleEZpbGVGaWx0ZXIpLgpJdCBoYXMgYmVlbiBidWlsdCB3aXRoIHRoZSBKREsgc291cmNlIGFuZCB0YXJnZXQgb3B0aW9ucyBzZXQgdG8gSkRLIDEuMyBhbmQsIGV4Y2VwdCBmb3IKdGhvc2UgaW1wbGVtZW50YXRpb25zLCBjYW4gYmUgdXNlZCB3aXRoIEpESyAxLjMgKHNlZSBJTyBJTy0xMjcpLgoKRGVwcmVjYXRpb25zIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlQ2xlYW5lciBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBGaWxlQ2xlYW5pbmdUcmFja2VyIFtzZWUgSU8tMTE2XQoKQnVnIGZpeGVzIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlVXRpbHMKICAtIGZvcmNlRGVsZXRlIG9mIG9ycGhhbmVkIFNvZnRsaW5rcyBkb2VzIG5vdCB3b3JrIFtJTy0xNDddCiAgLSBJbmZpbml0ZSBsb29wIG9uIEZpbGVVdGlscy5jb3B5RGlyZWN0b3J5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBpcyB3aXRoaW4KICAgIHRoZSBzb3VyY2UgZGlyZWN0b3J5IFtJTy0xNDFdCiAgLSBBZGQgYSBjb3B5RGlyZWN0b3J5KCkgbWV0aG9kIHRoYXQgbWFrZXMgdXNlIG9mIEZpbGVGaWx0ZXIgW0lPLTEwNV0KICAtIEFkZCBtb3ZlRGlyZWN0b3J5KCkgYW5kIG1vdmVGaWxlKCkgbWV0aG9kcyBbSU8tNzddCgotIEhleER1bXAKICAtIEhleER1bXAncyB1c2Ugb2Ygc3RhdGljIFN0cmluZ0J1ZmZlcnMgaXNuJ3QgdGhyZWFkLXNhZmUgW0lPLTEzNl0KCkVuaGFuY2VtZW50cyBmcm9tIDEuMy4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZVV0aWxzCiAgLSBBZGQgYSBkZWxldGVRdWlldGx5IG1ldGhvZCBbSU8tMTM1XQoKLSBGaWxlbmFtZVV0aWxzCiAgLSBBZGQgZmlsZSBuYW1lIGV4dGVuc2lvbiBzZXBhcmF0b3IgY29uc3RhbnRzW0lPLTE0OV0KCi0gSU9FeGNlcHRpb25XaXRoQ2F1c2UgW0lPLTE0OF0KICAtIEFkZCBhIG5ldyBJT0V4Y2VwdGlvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIGNvbnN0cnVjdG9ycyB3aGljaCB0YWtlIGEgY2F1c2UKCi0gVGVlSW5wdXRTdHJlYW0gW0lPLTEyOV0KICAtIEFkZCBuZXcgVGVlIGlucHV0IHN0cmVhbSBpbXBsZW1lbnRhdGlvbgoKLSBGaWxlV3JpdGVyV2l0aEVuY29kaW5nIFtJTy0xNTNdCiAgLSBBZGQgbmV3IEZpbGUgV3JpdGVyIGltcGxlbWVudGF0aW9uIHRoYXQgYWNjZXB0cyBhbiBlbmNvZGluZwoKLSBDaGFyU2VxdWVuY2VSZWFkZXIgW0lPLTEzOF0KICAtIEFkZCBuZXcgUmVhZGVyIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBhbnkgQ2hhclNlcXVlbmNlIChTdHJpbmcsCiAgICBTdHJpbmdCdWZmZXIsIFN0cmluZ0J1aWxkZXIgb3IgQ2hhckJ1ZmZlcikgCgotIFRoZXNob2xkaW5nT3VwdXRTdHJlYW0gW0lPLTEyMV0KICAtIEFkZCBhIHJlc2V0KCkgbWV0aG9kIHdoaWNoIHNldHMgdGhlIGNvdW50IG9mIHRoZSBieXRlcyB3cml0dGVuIGJhY2sgdG8gemVyby4KCi0gRGVmZXJyZWRGaWxlT3V0cHV0U3RyZWFtIFtJTy0xMzBdCiAgLSBBZGQgc3VwcG9ydCBmb3IgdGVtcG9yYXJ5IGZpbGVzCgotIEJ5dGVBcnJheU91dHB1dFN0cmVhbQogIC0gQWRkIGEgbmV3IHdyaXRlKElucHV0U3RyZWFtKSBtZXRob2QgW0lPLTE1Ml0KCi0gTmV3IENsb3NlZCBJbnB1dC9PdXRwdXQgc3RyZWFtIGltcGxlbWVudGF0aW9ucyBbSU8tMTIyXQogIC0gQXV0b0Nsb3NlSW5wdXRTdHJlYW0gLSBhdXRvbWF0aWNhbGx5IGNsb3NlcyBhbmQgZGlzY2FyZHMgdGhlIHVuZGVybHlpbmcgaW5wdXQgc3RyZWFtCiAgLSBDbG9zZWRJbnB1dFN0cmVhbSAtIHJldHVybnMgLTEgZm9yIGFueSByZWFkIGF0dGVtcHRzCiAgLSBDbG9zZWRPdXRwdXRTdHJlYW0gLSB0aHJvd3MgYW4gSU9FeGNlcHRpb24gZm9yIGFueSB3cml0ZSBhdHRlbXB0cwogIC0gQ2xvc2VTaGllbGRJbnB1dFN0cmVhbSAtIHByZXZlbnRzIHRoZSB1bmRlcmx5aW5nIGlucHV0IHN0cmVhbSBmcm9tIGJlaW5nIGNsb3NlZC4KICAtIENsb3NlU2hpZWxkT3V0cHV0U3RyZWFtIC0gcHJldmVudHMgdGhlIHVuZGVybHlpbmcgb3V0cHV0IHN0cmVhbSBmcm9tIGJlaW5nIGNsb3NlZC4KCi0gQWRkIFNpbmdsZXRvbiBDb25zdGFudHMgdG8gc2V2ZXJhbCBzdHJlYW0gY2xhc3NlcyBbSU8tMTQzXQoKLSBQcmVmaXhGaWxlRmlsdGVyIFtJTy0xMjZdCiAgLSBBZGQgZmFjaWx0aXkgdG8gc3BlY2lmeSBjYXNlIHNlbnNpdGl2aXR5IG9uIHByZWZpeCBtYXRjaGluZwoKLSBTdWZmaXhGaWxlRmlsdGVyIFtJTy0xMjZdCiAgLSBBZGQgZmFjaWx0aXkgdG8gc3BlY2lmeSBjYXNlIHNlbnNpdGl2aXR5IG9uIHN1ZmZpeCBtYXRjaGluZwoKLSBSZWdleEZpbGVGaWx0ZXIgW0lPLTc0XQogIC0gQWRkIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gZmlsZSBmaWx0ZXIgaW1wbGVtZW50YXRpb24KCi0gTWFrZSBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb25zIFNlcmlhbGl6YWJsZSBbSU8tMTMxXQoKLSBJbXByb3ZlIElPRmlsZUZpbHRlciB0b1N0cmluZygpIG1ldGhvZHMgW0lPLTEyMF0KCi0gTWFrZSBmaWVsZHMgZmluYWwgc28gY2xhc3NlcyBhcmUgaW1tdXRhYmxlL3RocmVhZHNhZmUgW0lPLTEzM10KICAtIGNoYW5nZXMgdG8gQWdlLCBEZWxlZ2F0ZSwgTmFtZSwgTm90LCBQcmVmaXgsIFJlZ2V4LCBTaXplLCBTdWZmaXggYW5kIFdpbGRjYXJkIElPRmlsZUZpbHRlcgogICAgaW1wbGVtZW50YXRpb25zLgoKLSBJT0Nhc2UKICAtIEFkZCBhIGNvbXBhcmUgbWV0aG9kIHRvIElPQ2FzZSBbSU8tMTQ0XQoKLSBBZGQgYSBwYWNrYWdlIG9mIGphdmEudXRpbC5Db21wYXJhdG9yIGltcGxlbWVudGF0aW9ucyBmb3IgZmlsZXMgW0lPLTE0NV0KICAtIERlZmF1bHRGaWxlQ29tcGFyYXRvciAtIGNvbXBhcmUgZmlsZXMgdXNpbmcgdGhlIGRlZmF1bHQgRmlsZS5jb21wYXJlVG8oRmlsZSkgbWV0aG9kLgogIC0gRXh0ZW5zaW9uRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyBmaWxlIG5hbWUgZXh0ZW5zaW9ucy4KICAtIExhc3RNb2RpZmllZEZpbGVDb21wYXJhdG9yIC0gY29tcGFyZXMgZmlsZXMgdXNpbmcgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZS90aW1lLgogIC0gTmFtZUZpbGVDb21wYXJhdG9yIC0gY29tcGFyZXMgZmlsZXMgdXNpbmcgZmlsZSBuYW1lcy4KICAtIFBhdGhGaWxlQ29tcGFyYXRvciAtIGNvbXBhcmVzIGZpbGVzIHVzaW5nIGZpbGUgcGF0aHMuCiAgLSBTaXplRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyBmaWxlIHNpemVzLgogIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAxLjMuMgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjMuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKQ29tcGF0aWJpbGl0eSB3aXRoIDEuMwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gTm8KICBTZWUgW0lPLTExM10KClNvdXJjZSBjb21wYXRpYmxlIC0gTm8KICBTZWUgW0lPLTExM10KClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKCkVuaGFuY2VtZW50cyBzaW5jZSAxLjMuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0gQ3JlYXRlZCB0aGUgRmlsZUNsZWFuaW5nVHJhY2tlciwgYmFzaWNhbGx5IGEgbm9uLXN0YXRpYyB2ZXJzaW9uIG9mIHRoZQogIEZpbGVDbGVhbmVyLCB3aGljaCBjYW4gYmUgY29udHJvbGxlZCBieSB0aGUgdXNlci4gW0lPLTExNl0KLSBUaGUgRmlsZUNsZWFuZXIgaXMgZGVwcmVjYXRlZC4KCkJ1ZyBmaXhlcyBmcm9tIDEuMy4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgotIFNvbWUgdGVzdHMsIHdoaWNoIGFyZSBpbXBsaWNpdGx5IGFzc3VtaW5nIGEgVW5peC1saWtlIGZpbGUgc3lzdGVtLCBhcmUKICBub3cgc2tpcHBlZCBvbiBXaW5kb3dzLiBbSU8tMTE1XQotIEVuZGlhblV0aWxzCiAgLSBCb3RoIHJlYWRTd2FwcGVkVW5zaWduZWRJbnRlZ2VyKC4uLikgbWV0aG9kcyBjb3VsZCByZXR1cm4gbmVnYXRpdmUgCiAgICBudW1iZXJzIGR1ZSB0byBpbnQvbG9uZyBjYXN0aW5nLiBbSU8tMTE3XQoKQnVnIGZpeGVzIGZyb20gMS4zCi0tLS0tLS0tLS0tLS0tLS0tLQoKLSBGaWxlVXRpbHMKICAtIE5QRSBpbiBvcGVuT3V0cHV0U3RyZWFtKEZpbGUpIHdoZW4gZmlsZSBoYXMgbm8gcGFyZW50IGluIHBhdGggW0lPLTExMl0KICAtIHJlYWRGaWxlVG9TdHJpbmcoRmlsZSkgaXMgbm90IHN0YXRpYyBbSU8tMTEzXQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMS4zLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBObwogIFNlZSBbSU8tMTEzXQoKU291cmNlIGNvbXBhdGlibGUgLSBObwogIFNlZSBbSU8tMTEzXQoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKQnVnIGZpeGVzIGZyb20gMS4zCi0tLS0tLS0tLS0tLS0tLS0tLQoKLSBGaWxlVXRpbHMKICAtIE5QRSBpbiBvcGVuT3V0cHV0U3RyZWFtKEZpbGUpIHdoZW4gZmlsZSBoYXMgbm8gcGFyZW50IGluIHBhdGggW0lPLTExMl0KICAtIHJlYWRGaWxlVG9TdHJpbmcoRmlsZSkgaXMgbm90IHN0YXRpYyBbSU8tMTEzXQogIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAxLjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkRlcHJlY2F0aW9ucyBmcm9tIDEuMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBXaWxkY2FyZEZpbHRlciBkZXByZWNhdGVkLCByZXBsYWNlZCBieSBXaWxkY2FyZEZpbGVGaWx0ZXIKICAtIG9sZCBjbGFzcyBvbmx5IGFjY2VwdGVkIGZpbGVzLCB0aHVzIGhhZCBhIGNvbmZ1c2luZyBkdWFsIHB1cnBvc2UKCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZSBkZXByZWNhdGVkLCByZXBsYWNlZCBieSBmcmVlU3BhY2VLYgogIC0gZnJlZVNwYWNlIHJldHVybnMgYSByZXN1bHQgdGhhdCB2YXJpZXMgYnkgb3BlcmF0aW5nIHN5c3RlbSBhbmQKICAgIHRodXMgaXNuJ3QgdGhhdCB1c2VmdWwKICAtIGZyZWVTcGFjZUtiIHJldHVybnMgbXVjaCBiZXR0ZXIgYW5kIG1vcmUgY29uc2lzdGVudCByZXN1bHRzCiAgLSBmcmVlU3BhY2VLYiBleGlzdGVkIGluIHYxLjIsIHNvIHRoaXMgaXMgYSBnZW50bGUgY3V0b3ZlcgoKQnVnIGZpeGVzIGZyb20gMS4yCi0tLS0tLS0tLS0tLS0tLS0tLQotIExpbmVJdGVyYXRvciBub3cgaW1wbGVtZW50cyBJdGVyYXRvcgogIC0gSXQgd2FzIGFsd2F5cyBzdXBwb3NlZCB0by4uLgoKLSBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlL2ZyZWVTcGFjZUtiIFtJTy04M10KICAtIFRoZXNlIHNob3VsZCBub3cgd29yayBvbiBBSVggYW5kIEhQLVVYCgotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2UvZnJlZVNwYWNlS2IgW0lPLTkwXQogIC0gQXZvaWQgaW5maW5pdGUgbG9vcGluZyBpbiBXaW5kb3dzCiAgLSBDYXRjaCBtb3JlIGVycm9ycyB3aXRoIG5pY2UgbWVzc2FnZXMKCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZSBbSU8tOTFdCiAgLSBUaGlzIGlzIG5vdyBkb2N1bWVudGVkIG5vdCB0byB3b3JrIG9uIFN1bk9TIDUKCi0gRmlsZVN5c3RlbVV0aWxzIFtJTy05M10KICAtIEZpeGVkIHJlc291cmNlIGxlYWsgbGVhZGluZyB0byAnVG9vIG1hbnkgb3BlbiBmaWxlcycgZXJyb3IKICAtIFByZXZpb3VzbHkgZGlkIG5vdCBkZXN0cm95IFByb2Nlc3MgaW5zdGFuY2VzIChhcyBKREsgSmF2YWRvYyBpcyBzbyBwb29yKQogIC0gaHR0cDovL2J1Z3Muc3VuLmNvbS9idWdkYXRhYmFzZS92aWV3X2J1Zy5kbz9idWdfaWQ9NDgwMTAyNwoKLSBGaWxlVXRpbHMudG91Y2ggW0lPLTEwMF0KICAtIFRoZSB0b3VjaCBtZXRob2QgcHJldmlvdXNseSBnYXZlIG5vIGluZGljYXRpb24gd2hlbiB0aGUgZmlsZSBjb3VsZCBub3QKICAgIGJlIHRvdWNoZWQgc3VjY2Vzc2Z1bGx5IChzdWNoIGFzIGR1ZSB0byBhY2Nlc3MgcmVzdHJpY3Rpb25zKSAtIGl0IG5vdwogICAgdGhyb3dzIGFuIElPRXhjZXB0aW9uIGlmIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgY2Fubm90IGJlIGNoYW5nZWQKCi0gRmlsZUNsZWFuZXIKICAtIFRoaXMgbm93IGhhbmRsZXMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhbiBlcnJvciBvY2N1cnMgd2hlbiBkZWxldGluZyB0aGUgZmlsZQoKLSBJT1V0aWxzLmNvcHkgW0lPLTg0XQogIC0gQ29weSBtZXRob2RzIGNvdWxkIHJldHVybiBpbmFjY3VyYXRlIGJ5dGUvY2hhciBjb3VudCBmb3IgbGFyZ2Ugc3RyZWFtcwogIC0gVGhlIGNvcHkoSW5wdXRTdHJlYW0sIE91dHB1dFN0cmVhbSkgbWV0aG9kIG5vdyByZXR1cm5zIC0xIGlmIHRoZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gYW4gaW50CiAgLSBUaGUgY29weShSZWFkZXIsIFdyaXRlcikgbWV0aG9kIG5vdyB0aHJvd3Mgbm93IHJldHVybnMgLTEgaWYgdGhlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiBhbiBpbnQKICAtIEFkZGVkIGEgbmV3IGNvcHlMYXJnZShJbnB1dFN0cmVhbSwgT3V0cHV0U3RyZWFtKSBtZXRob2QgdGhhdCByZXR1cm5zIGEgbG9uZwogIC0gQWRkZWQgYSBuZXcgY29weUxhcmdlKFJlYWRlciwgV3JpdGVyKSBtZXRob2QgdGhhdCByZXR1cm5zIGEgbG9uZwoKLSBDb3VudGluZ0lucHV0U3RyZWFtL0NvdW50aW5nT3V0cHV0U3RyZWFtIFtJTy04NF0KICAtIE1ldGhvZHMgd2VyZSBkZWNsYXJlZCBhcyBpbnQgdGh1cyB0aGUgY291bnQgd2FzIGlubmFjdXJhdGUgZm9yIGxhcmdlIHN0cmVhbXMKICAtIG5ldyBsb25nIGJhc2VkIG1ldGhvZHMgZ2V0Qnl0ZUNvdW50KCkvcmVzZXRCeXRlQ291bnQoKSBhZGRlZAogIC0gZXhpc3RpbmcgbWV0aG9kcyBjaGFuZ2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgY291bnQgaXMgZ3JlYXRlciB0aGFuIGFuIGludAoKLSBGaWxlQmFzZWRUZXN0Q2FzZQogIC0gRml4ZWQgYnVnIGluIGNvbXBhcmUgY29udGVudCBtZXRob2RzIGlkZW50aWZpZWQgYnkgR05VIGNsYXNzcGF0aAoKLSBFbmRpYW5VdGlscy53cml0ZVN3YXBwZWRMb25nKGJ5dGVbXSwgaW50KSBbSU8tMTAxXQogIC0gQW4gaW50IG92ZXJydW4gaW4gdGhlIGJpdCBzaGlmdGluZyB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gYSBsb25nCgotIEVuZGlhblV0aWxzLndyaXRlU3dhcHBlZExvbmcoSW5wdXRTdHJlYW0pIFtJTy0xMDJdCiAgLSBUaGUgcmV0dXJuIG9mIGlucHV0LnJlYWQoYnl0ZVtdKSB3YXMgbm90IGJlaW5nIGNoZWNrZWQgdG8gZW5zdXJlIGFsbCA4IGJ5dGVzIHdlcmUgcmVhZAoKRW5oYW5jZW1lbnRzIGZyb20gMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIERpcmVjdG9yeVdhbGtlciBbSU8tODZdCiAgLSBOZXcgY2xhc3MgZGVzaWduZWQgZm9yIHN1YmNsYXNzaW5nIHRvIHdhbGsgdGhyb3VnaCBhIHNldCBvZiBmaWxlcy4KICAgIERpcmVjdG9yeVdhbGtlciBwcm92aWRlcyB0aGUgd2FsayBvZiB0aGUgZGlyZWN0b3JpZXMsIGZpbHRlcmluZyBvZgogICAgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLCBhbmQgY2FuY2VsbGF0aW9uIHN1cHBvcnQuIFRoZSBzdWJjbGFzcyBtdXN0IHByb3ZpZGUKICAgIHRoZSBzcGVjaWZpYyBiZWhhdmlvdXIsIHN1Y2ggYXMgdGV4dCBzZWFyY2hpbmcgb3IgaW1hZ2UgcHJvY2Vzc2luZy4KCi0gSU9DYXNlCiAgLSBOZXcgY2xhc3MvZW51bWVyYXRpb24gZm9yIGNhc2Utc2Vuc2l0aXZpdHkgY29udHJvbAoKLSBGaWxlbmFtZVV0aWxzCiAgLSBOZXcgbWV0aG9kcyB0byBoYW5kbGUgY2FzZS1zZW5zaXRpdml0eQogIC0gd2lsZGNhcmRNYXRjaCAtIG5ldyBtZXRob2QgdGhhdCBoYXMgSU9DYXNlIGFzIGEgcGFyYW1ldGVyCiAgLSBlcXVhbHMgLSBuZXcgbWV0aG9kIHRoYXQgaGFzIElPQ2FzZSBhcyBhIHBhcmFtZXRlcgoKLSBGaWxlVXRpbHMgW0lPLTEwOF0gLSBuZXcgZGVmYXVsdCBlbmNvZGluZyBtZXRob2RzIGZvcjoKICAtIHJlYWRGaWxlVG9TdHJpbmcoRmlsZSkKICAtIHJlYWRMaW5lcyhGaWxlKQogIC0gbGluZUl0ZXJhdG9yKEZpbGUpCiAgLSB3cml0ZVN0cmluZ1RvRmlsZShGaWxlLCBTdHJpbmcpCiAgLSB3cml0ZUxpbmVzKEZpbGUsIENvbGxlY3Rpb24pCiAgLSB3cml0ZUxpbmVzKEZpbGUsIENvbGxlY3Rpb24sIFN0cmluZykKCi0gRmlsZVV0aWxzLm9wZW5PdXRwdXRTdHJlYW0gIFtJTy0xMDddCiAgLSBuZXcgbWV0aG9kIHRvIG9wZW4gYSBGaWxlT3V0cHV0U3RyZWFtLCBjcmVhdGluZyBwYXJlbnQgZGlyZWN0b3JpZXMgaWYgcmVxdWlyZWQKLSBGaWxlVXRpbHMudG91Y2gKLSBGaWxlVXRpbHMuY29weVVSTFRvRmlsZQotIEZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZQotIEZpbGVVdGlscy53cml0ZUJ5dGVBcnJheVRvRmlsZQotIEZpbGVVdGlscy53cml0ZUxpbmVzCiAgLSBlbmhhbmNlZCB0byBjcmVhdGUgcGFyZW50IGRpcmVjdG9yaWVzIGlmIHJlcXVpcmVkCi0gRmlsZVV0aWxzLm9wZW5JbnB1dFN0cmVhbSAgW0lPLTEwN10KICAtIG5ldyBtZXRob2QgdG8gb3BlbiBhIEZpbGVJbnB1dFN0cmVhbSwgcHJvdmlkaW5nIGJldHRlciBlcnJvciBtZXNzYWdlcyB0aGFuIHRoZSBKREsKCi0gRmlsZVV0aWxzLmlzRmlsZU9sZGVyCiAgLSBuZXcgbWV0aG9kcyB0byBjaGVjayBpZiBhIGZpbGUgaXMgb2xkZXIgKGkuZS4gaXNGaWxlT2xkZXIoKSkgLSBjb3VudGVycGFydHMKICAgIHRvIHRoZSBleGlzdGluZyBpc0ZpbGVOZXdlcigpIG1ldGhvZHMuCgotIEZpbGVVdGlscy5jaGVja3N1bSwgRmlsZVV0aWxzLmNoZWNrc3VtQ1JDMzIKICAtIG5ldyBtZXRob2RzIHRvIGNyZWF0ZSBhIGNoZWNrc3VtIG9mIGEgZmlsZQoKLSBGaWxlVXRpbHMuY29weUZpbGVUb0RpcmVjdG9yeSAgW0lPLTEwNF0KICAtIG5ldyB2YXJpYW50IHRoYXQgb3B0aW9uYWxseSByZXRhaW5zIHRoZSBmaWxlIGRhdGUKCi0gRmlsZURlbGV0ZVN0cmF0ZWd5Ci0gRmlsZUNsZWFuZXIgICAgW0lPLTU2LElPLTcwXQogIC0gRmlsZURlbGV0ZVN0cmF0ZWd5IGlzIGEgc3RyYXRlZ3kgZm9yIGhhbmRsaW5nIGZpbGUgZGVsZXRpb24KICAtIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBjYWxiYWNrIGluIEZpbGVDbGVhbmVyCiAgLSBUb2dldGhlciB0aGVzZSBhbGxvdyBGaWxlQ2xlYW5lciB0byBkbyBhIGZvcmNlRGVsZXRlIHRvIGtpbGwgZGlyZWN0b3JpZXMKCi0gRmlsZUNsZWFuZXIuZXhpdFdoZW5GaW5pc2hlZCBbSU8tOTldCiAgLSBBIG5ldyBtZXRob2QgdGhhdCBhbGxvd3MgdGhlIGludGVybmFsIGNsZWFuZXIgdGhyZWFkIHRvIGJlIGNsZWFubHkgdGVybWluYXRlZAoKLSBXaWxkY2FyZEZpbGVGaWx0ZXIKICAtIFJlcGxhY2VtZW50IGZvciBXaWxkY2FyZEZpbHRlcgogIC0gQWNjZXB0cyBib3RoIGZpbGVzIGFuZCBkaXJlY3RvcmllcwogIC0gQWJpbGl0eSB0byBjb250cm9sIGNhc2Utc2Vuc2l0aXZpdHkKCi0gTmFtZUZpbGVGaWx0ZXIKICAtIEFiaWxpdHkgdG8gY29udHJvbCBjYXNlLXNlbnNpdGl2aXR5CgotIEZpbGVGaWxlRmlsdGVyCiAgLSBOZXcgSU9GaWxlRmlsdGVyIGltcGxlbWVudGF0aW9uCiAgLSBBY2NlcHRzIGZpbGVzIHdoZXJlIEZpbGUuaXNGaWxlKCkgaXMgdHJ1ZQogIC0gSW4gb3RoZXIgd29yZHMgaXQgZmlsdGVycyBvdXQgZGlyZWN0b3JpZXMKICAtIFNpbmdsZXRvbiBpbnN0YW5jZSBwcm92aWRlZCAoRklMRSkKCi0gQ2FuUmVhZEZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5jYW5SZWFkKCkgaXMgdHJ1ZQogIC0gU2luZ2xldG9uIGluc3RhbmNlcyBwcm92aWRlZCAoQ0FOX1JFQUQvQ0FOTk9UX1JFQUQvUkVBRF9PTkxZKQoKLSBDYW5Xcml0ZUZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5jYW5Xcml0ZSgpIGlzIHRydWUKICAtIFNpbmdsZXRvbiBpbnN0YW5jZXMgcHJvdmlkZWQgKENBTl9XUklURS9DQU5OT1RfV1JJVEUpCgotIEhpZGRlbkZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5pc0hpZGRlbigpIGlzIHRydWUKICAtIFNpbmdsZXRvbiBpbnN0YW5jZXMgcHJvdmlkZWQgKEhJRERFTi9WSVNJQkxFKQoKLSBFbXB0eUZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdGhhdCBhcmUgZW1wdHkKICAtIFNpbmdsZXRvbiBpbnN0YW5jZXMgcHJvdmlkZWQgKEVNUFRZL05PVF9FTVBUWSkKCi0gVHJ1ZUZpbGVGaWx0ZXIvRmFsc2VGaWxlRmlsdGVyL0RpcmVjdG9yeUZpbGVGaWx0ZXIKICAtIE5ldyBzaW5nbGV0b24gaW5zdGFuY2UgY29uc3RhbnRzIChUUlVFL0ZBTFNFL0RJUkVDVE9SWSkKICAtIFRoZSBuZXcgY29uc3RhbnRzIGFyZSBtb3JlIEpESyAxLjUgZnJpZW5kbHkgd2l0aCByZWdhcmRzIHRvIHN0YXRpYyBpbXBvcnRzCiAgICAod2hlcmVhcyBpZiBldmVyeXRoaW5nIHVzZXMgSU5TVEFOQ0UsIHRoZW4gdGhleSBqdXN0IGNsYXNoKQogIC0gVGhlIG9sZCBJTlNUQU5DRSBjb25zdGFudHMgYXJlIHN0aWxsIHByZXNlbnQgYW5kIGhhdmUgbm90IGJlZW4gZGVwcmVjYXRlZAoKLSBGaWxlRmlsdGVyVXRpbHMuc2l6ZVJhbmdlRmlsZUZpbHRlcgogIC0gbmV3IHNpemVSYW5nZUZpbGVGaWx0ZXIobG9uZyBtaW5pbXVtU2l6ZSwgbG9uZyBtYXhpbXVtU2l6ZSkgbWV0aG9kIHdoaWNoIAogICAgY3JlYXRlcyBhIGZpbHRlciB0aGF0IGFjY2VwdHMgZmlsZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgc2l6ZSByYW5nZS4KCi0gRmlsZUZpbHRlclV0aWxzLm1ha2VEaXJlY3RvcnlPbmx5L21ha2VGaWxlT25seQogIC0gdHdvIG5ldyBtZXRob2RzIHRoYXQgZGVjb3JhdGUgYSBmaWxlIGZpbHRlciB0byBtYWtlIGl0IGFwcGx5IHRvCiAgICBkaXJlY3RvcmllcyBvbmx5IG9yIGZpbGVzIG9ubHkKCi0gTnVsbFdyaXRlcgogIC0gTmV3IHdyaXRlciB0aGF0IGFjdHMgYXMgYSBzaW5rIGZvciBhbGwgZGF0YSwgYXMgcGVyIC9kZXYvbnVsbAoKLSBOdWxsSW5wdXRTdHJlYW0KICAtIE5ldyBpbnB1dCBzdHJlYW0gdGhhdCBlbXVsYXRlcyBhIHN0cmVhbSBvZiBhIHNwZWNpZmllZCBzaXplCgotIE51bGxSZWFkZXIKICAtIE5ldyByZWFkZXIgdGhhdCBlbXVsYXRlcyBhIHJlYWRlciBvZiBhIHNwZWNpZmllZCBzaXplCgotIEJ5dGVBcnJheU91dHB1dFN0cmVhbSAgW0lPLTk3XQogIC0gUGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAxLjIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCgpEZXByZWNhdGlvbnMgZnJvbSAxLjEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpCdWcgZml4ZXMgZnJvbSAxLjEKLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZShkcml2ZSkKICBGaXggdG8gYWxsb3cgV2luZG93cyBiYXNlZCBjb21tYW5kIHRvIGZ1bmN0aW9uIGluIEZyZW5jaCBsb2NhbGUKCi0gRmlsZVV0aWxzLnJlYWQqCiAgSW5jcmVhc2UgY2VydGFpbnR5IHRoYXQgZmlsZXMgYXJlIGNsb3NlZCBpbiBjYXNlIG9mIGVycm9yCgotIExvY2thYmxlRmlsZVdyaXRlcgogIExvY2tpbmcgbWVjaGFuaXNtIHdhcyBicm9rZW4gYW5kIG9ubHkgcHJvdmlkZWQgbGltaXRlZCBwcm90ZWN0aW9uIFszODk0Ml0KICBGaWxlIGRlbGV0aW9uIGFuZCBsb2NraW5nIGluIGNhc2Ugb2YgY29uc3RydWN0b3IgZXJyb3Igd2FzIGJyb2tlbgoKRW5oYW5jZW1lbnRzIGZyb20gMS4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEFnZUZpbGVGaWx0ZXIvU2l6ZUZpbGVGaWx0ZXIKICBOZXcgZmlsZSBmaWx0ZXJzIHRoYXQgY29tcGFyZXMgYWdhaW5zdCB0aGUgYWdlIGFuZCBzaXplIG9mIHRoZSBmaWxlCgotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2VLYihkcml2ZSkKICBOZXcgbWV0aG9kIHRoYXQgdW5pZmllcyByZXN1bHQgdG8gYmUgaW4ga2lsb2J5dGVzIFszODU3NF0KCi0gRmlsZVV0aWxzLmNvbnRlbnRFcXVhbHMoRmlsZSxGaWxlKQogIFBlcmZvcm1hbmNlIGltcHJvdmVkIGJ5IGFkZGluZyBsZW5ndGggYW5kIGZpbGUgbG9jYXRpb24gY2hlY2tpbmcKCi0gRmlsZVV0aWxzLml0ZXJhdGVGaWxlcwogIFR3byBuZXcgbWV0aG9kIHRvIHByb3ZpZGUgZGlyZWN0IGFjY2VzcyB0byBpdGVyYXRvcnMgb3ZlciBmaWxlcwoKLSBGaWxlVXRpbHMubGluZUl0ZXJhdG9yCiAgSU9VdGlscy5saW5lSXRlcmF0b3IKICBOZXcgbWV0aG9kcyB0byBwcm92aWRlIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGxpbmVzIGluIGEgZmlsZSBbMzgwODNdCgotIEZpbGVVdGlscy5jb3B5RGlyZWN0b3J5VG9EaXJlY3RvcnkKICBOZXcgbWV0aG9kIHRvIGNvcHkgYSBkaXJlY3RvcnkgdG8gd2l0aGluIGFub3RoZXIgZGlyZWN0b3J5IFszNjMxNV0KICAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMS4xCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKSW5jb21wYXRpYmxlIGNoYW5nZXMgZnJvbSAxLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzLCBleGNlcHQ6Ci0gRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKCkKICAgIEEgbnVsbCBlbmNvZGluZyBwcmV2aW91c2x5IHVzZWQgJ0lTTy04ODU5LTEnLCBub3cgaXQgdXNlcyB0aGUgcGxhdGZvcm0gZGVmYXVsdAogICAgR2VuZXJhbGx5IHRoaXMgd2lsbCBtYWtlIG5vIGRpZmZlcmVuY2UKCi0gTG9ja2FibGVGaWxlV3JpdGVyCiAgICBJbXByb3ZlZCB2YWxpZGF0aW9uIGFuZCBub3cgY3JlYXRlIGRpcmVjdG9yaWVzIGlmIG5lY2Vzc3NhcnkKCnBsdXMgdGhlc2UgYnVnIGZpeGVzIG1heSBhZmZlY3QgeW91IHNlbWFudGljYWxseToKLSBGaWxlVXRpbHMudG91Y2goKSAgKEJ1ZyBmaXggMjk4MjEpCiAgICBOb3cgY3JlYXRlcyB0aGUgZmlsZSBpZiBpdCBkaWQgbm90IHByZXZpb3VzbHkgZXhpc3QKCi0gRmlsZVV0aWxzLnRvRmlsZShVUkwpIChCdWcgZml4IDMyNTc1KQogICAgTm93IGhhbmRsZXMgZXNjYXBlIHN5bnRheCBzdWNoIGFzICUyMAoKLSBGaWxlVXRpbHMuc2l6ZU9mRGlyZWN0b3J5KCkgIChCdWcgZml4IDM2ODAxKQogICAgTWF5IG5vdyByZXR1cm4gYSBzaXplIG9mIDAgaWYgdGhlIGRpcmVjdG9yeSBpcyBzZWN1cml0eSByZXN0cmljdGVkCgpEZXByZWNhdGlvbnMgZnJvbSAxLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQ29weVV0aWxzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCiAgICBJdHMgbWV0aG9kcyBoYXZlIGJlZW4gbW92ZWQgdG8gSU9VdGlscy4KICAgIFRoZSBuZXcgSU9VdGlscyBtZXRob2RzIGhhbmRsZSBudWxscyBiZXR0ZXIsIGFuZCBoYXZlIGNsZWFyZXIgbmFtZXMuCgotIElPVXRpbHMudG9CeXRlQXJyYXkoU3RyaW5nKSAtIFVzZSB7QGxpbmsgU3RyaW5nI2dldEJ5dGVzKCl9Ci0gSU9VdGlscy50b1N0cmluZyhieXRlW10pIC0gVXNlIHtAbGluayBTdHJpbmcjU3RyaW5nKGJ5dGVbXSl9Ci0gSU9VdGlscy50b1N0cmluZyhieXRlW10sU3RyaW5nKSAtIFVzZSB7QGxpbmsgU3RyaW5nI1N0cmluZyhieXRlW10sU3RyaW5nKX0KCkJ1ZyBmaXhlcyBmcm9tIDEuMAotLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlVXRpbHMgLSB0b3VjaCgpICBbMjk4MjFdCiAgICBOb3cgY3JlYXRlcyB0aGUgZmlsZSBpZiBpdCBkaWQgbm90IHByZXZpb3VzbHkgZXhpc3QKCi0gRmlsZVV0aWxzIC0gdG9GaWxlKFVSTCkgIFszMjU3NV0KICAgIE5vdyBoYW5kbGVzIGVzY2FwZSBzeW50YXggc3VjaCBhcyAlMjAKCi0gRmlsZUZpbHRlclV0aWxzIC0gbWFrZUNWU0F3YXJlKElPRmlsZUZpbHRlcikgIFszMzAyM10KICAgIEZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCBtZXRob2QgdG8gYmUgY29tcGxldGVseSBicm9rZW4KCi0gQ291bnRpbmdJbnB1dFN0cmVhbSAgWzMzMzM2XQogICAgRml4ZWQgYnVnIHRoYXQgY2F1c2VkIHRoZSBjb3VudCB0byByZWR1Y2UgYnkgb25lIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbQoKLSBDb3VudGluZ0lucHV0U3RyZWFtIC0gc2tpcChsb25nKSAgWzM0MzExXQogICAgQnl0ZXMgZnJvbSBjYWxscyB0byB0aGlzIG1ldGhvZCB3ZXJlIG5vdCBwcmV2aW91c2x5IGNvdW50ZWQKCi0gTnVsbE91dHB1dFN0cmVhbSAgWzMzNDgxXQogICAgUmVtb3ZlIHVuZWNlc3Nhcnkgc3luY2hyb25pemF0aW9uCgotIEFic3RyYWN0RmlsZUZpbHRlciAtIGFjY2VwdChGaWxlLCBTdHJpbmcpICBbMzA5OTJdCiAgICBGaXhlZCBicm9rZW4gaW1wbGVtZW50YXRpb24KCi0gRmlsZVV0aWxzICBbMzY4MDFdCiAgICBQcmV2aW91c2x5IHRocmV3IE5QRSB3aGVuIGxpc3RpbmcgZmlsZXMgaW4gYSBzZWN1cml0eSByZXN0cmljdGVkIGRpcmVjdG9yeQogICAgTm93IHRocm93IElPRXhjZXB0aW9uIHdpdGggYSBiZXR0ZXIgbWVzc2FnZQoKLSBGaWxlVXRpbHMgLSB3cml0ZVN0cmluZ1RvRmlsZSgpCiAgICBOdWxsIGVuY29kaW5nIG5vdyBjb3JyZWN0bHkgdXNlcyB0aGUgcGxhdGZvcm0gZGVmYXVsdAoKRW5oYW5jZW1lbnRzIGZyb20gMS4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEZpbGVuYW1lVXRpbHMgLSBuZXcgY2xhc3MgIFszMzMwMywyOTM1MV0KICAgIEEgc3RhdGljIHV0aWxpdHkgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBmaWxlbmFtZXMKICAgIFNlZWtzIHRvIGVhc2UgdGhlIHBhaW4gb2YgZGV2ZWxvcGluZyBvbiBXaW5kb3dzIGFuZCBkZXBsb3lpbmcgb24gVW5peAoKLSBGaWxlU3lzdGVtVXRpbHMgLSBuZXcgY2xhc3MgIFszMjk4MiwzNjMyNV0KICAgIEEgc3RhdGljIHV0aWxpdHkgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBmaWxlIHN5c3RlbXMKICAgIFByb3ZpZGVzIG9uZSBtZXRob2QgYXQgcHJlc2VudCwgdG8gZ2V0IHRoZSBmcmVlIHNwYWNlIG9uIHRoZSBmaWxpbmcgc3lzdGVtCgotIElPVXRpbHMgLSBuZXcgcHVibGljIGNvbnN0YW50cwogICAgQ29uc3RhbnRzIGZvciBkaXJlY3RvcnkgYW5kIGxpbmUgc2VwYXJhdG9ycyBvbiBXaW5kb3dzIGFuZCBVbml4CgotIElPVXRpbHMgLSB0b0J5dGVBcnJheShSZWFkZXIsZW5jb2RpbmcpCiAgICBIYW5kbGVzIGVuY29kaW5ncyB3aGVuIHJlYWRpbmcgdG8gYSBieXRlIGFycmF5CgotIElPVXRpbHMgLSB0b0NoYXJBcnJheShJbnB1dFN0cmVhbSkgIFsyODk3OV0KICAgICAgICAgIC0gdG9DaGFyQXJyYXkoSW5wdXRTdHJlYW0sZW5jb2RpbmcpCiAgICAgICAgICAtIHRvQ2hhckFycmF5KFJlYWRlcikKICAgIFJlYWRzIGEgc3RyZWFtL3JlYWRlciBpbnRvIGEgY2hhcmF0Y3RlciBhcnJheQoKLSBJT1V0aWxzIC0gcmVhZExpbmVzKElucHV0U3RyZWFtKSAgWzM2MjE0XQogICAgICAgICAgLSByZWFkTGluZXMoSW5wdXRTdHJlYW0sZW5jb2RpbmcpCiAgICAgICAgICAtIHJlYWRMaW5lcyhSZWFkZXIpCiAgICBSZWFkcyBhIHN0cmVhbS9yZWFkZXIgbGluZSBieSBsaW5lIGludG8gYSBMaXN0IG9mIFN0cmluZ3MKCi0gSU9VdGlscyAtIHRvSW5wdXRTdHJlYW0oU3RyaW5nKSAgWzMyOTU4XQogICAgICAgICAgLSB0b0lucHV0U3RyZWFtKFN0cmluZyxlbmNvZGluZykKICAgIENyZWF0ZXMgYW4gaW5wdXQgc3RyZWFtIHRoYXQgdXNlcyB0aGUgc3RyaW5nIGFzIGEgc291cmNlIG9mIGRhdGEKCi0gSU9VdGlscyAtIHdyaXRlTGluZXMoQ29sbGVjdGlvbixsaW5lRW5kaW5nLE91dHB1dFN0cmVhbSkgIFszNjIxNF0KICAgICAgICAgIC0gd3JpdGVMaW5lcyhDb2xsZWN0aW9uLGxpbmVFbmRpbmcsT3V0cHV0U3RyZWFtLGVuY29kaW5nKQogICAgICAgICAgLSB3cml0ZUxpbmVzKENvbGxlY3Rpb24sbGluZUVuZGluZyxXcml0ZXIpCiAgICBXcml0ZXMgYSBjb2xsZWN0aW9uIHRvIGEgc3RyZWFtL3dyaXRlciBsaW5lIGJ5IGxpbmUKCi0gSU9VdGlscyAtIHdyaXRlKC4uLikKICAgIFdyaXRlIGRhdGEgdG8gYSBzdHJlYW0vd3JpdGVyIChtb3ZlZCBmcm9tIENvcHlVdGlscyB3aXRoIGJldHRlciBudWxsIGhhbmRsaW5nKQoKLSBJT1V0aWxzIC0gY29weSguLi4pCiAgICBDb3B5IGRhdGEgYmV0d2VlbiBzdHJlYW1zIChtb3ZlZCBmcm9tIENvcHlVdGlscyB3aXRoIGJldHRlciBudWxsIGhhbmRsaW5nKQoKLSBJT1V0aWxzIC0gY29udGVudEVxdWFscyhSZWFkZXIsUmVhZGVyKQogICAgTWV0aG9kIHRvIGNvbXBhcmUgdGhlIGNvbnRlbnRzIG9mIHR3byByZWFkZXJzCgotIEZpbGVVdGlscyAtIHRvRmlsZXMoVVJMW10pCiAgICBDb252ZXJ0cyBhbiBhcnJheSBvZiBVUkxzIHRvIGFuIGFycmF5IG9mIEZpbGVzCgotIEZpbGVVdGlscyAtIGNvcHlEaXJlY3RvcnkoKSAgWzMyOTQ0XQogICAgTmV3IG1ldGhvZHMgdG8gY29weSBhIGRpcmVjdG9yeQoKLSBGaWxlVXRpbHMgLSByZWFkRmlsZVRvQnl0ZUFycmF5KEZpbGUpCiAgICBSZWFkcyBhbiBlbnRpcmUgZmlsZSBpbnRvIGEgYnl0ZSBhcnJheQoKLSBGaWxlVXRpbHMgLSB3cml0ZUJ5dGVBcnJheVRvRmlsZShGaWxlLGJ5dGVbXSkKICAgIFdyaXRlcyBhIGJ5dGUgYXJyYXkgdG8gYSBmaWxlCgotIEZpbGVVdGlscyAtIHJlYWRMaW5lcyhGaWxlLGVuY29kaW5nKSAgWzM2MjE0XQogICAgUmVhZHMgYSBmaWxlIGxpbmUgYnkgbGluZSBpbnRvIGEgTGlzdCBvZiBTdHJpbmdzCgotIEZpbGVVdGlscyAtIHdyaXRlTGluZXMoRmlsZSxlbmNvZGluZyxMaXN0KQogICAgICAgICAgICAgIHdyaXRlTGluZXMoRmlsZSxlbmNvZGluZyxMaXN0LGxpbmVFbmRpbmcpCiAgICBXcml0ZXMgYSBjb2xsZWN0aW9uIHRvIGEgZmlsZSBsaW5lIGJ5IGxpbmUKCi0gRmlsZVV0aWxzIC0gRU1QVFlfRklMRV9BUlJBWQogICAgQ29uc3RhbnQgZm9yIGFuIGVtcHR5IGFycmF5IG9mIEZpbGUgb2JqZWN0cwoKLSBDb25kaXRpb25hbEZpbGVGaWx0ZXIgLSBuZXcgaW50ZXJmYWNlICBbMzA3MDVdCiAgICBEZWZpbmVzIHRoZSBiZWhhdmlvdXIgb2YgbGlzdCBiYXNlZCBmaWx0ZXJzCgotIEFuZEZpbGVGaWx0ZXIsIE9yRmlsZUZpbHRlciAgWzMwNzA1XQogICAgTm93IHN1cHBvcnQgYSBsaXN0IG9mIGZpbHRlcnMgdG8gYW5kL29yCgotIFdpbGRjYXJkRmlsdGVyICBbMzExMTVdCiAgICBOZXcgZmlsdGVyIHRoYXQgY2FuIG1hdGNoIHVzaW5nIHdpbGRjYXJkIGZpbGUgbmFtZXMKCi0gRmlsZUZpbHRlclV0aWxzIC0gbWFrZVNWTkF3YXJlKElPRmlsZUZpbHRlcikKICAgIE5ldyBtZXRob2QsIGxpa2UgbWFrZUNWU0F3YXJlLCB0aGF0IGlnbm9yZXMgU3VidmVyc2lvbiBzb3VyY2UgY29udHJvbCBkaXJlY3RvcmllcwoKLSBDbGFzc0xvYWRlck9iamVjdElucHV0U3RyZWFtCiAgICBBbiBPYmplY3RJbnB1dFN0cmVhbSB0aGF0IHN1cHBvcnRzIGEgQ2xhc3NMb2FkZXIKCi0gQ291bnRpbmdJbnB1dFN0cmVhbSxDb3VudGluZ091dHB1dFN0cmVhbSAtIHJlc2V0Q291bnQoKSAgWzI4OTc2XQogICAgQWRkcyB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY291bnQgcGFydCB3YXkgdGhyb3VnaCByZWFkaW5nL3dyaXRpbmcgdGhlIHN0cmVhbQoKLSBEZWZlcnJlZEZpbGVPdXRwdXRTdHJlYW0gLSB3cml0ZVRvKE91dHB1dFN0cmVhbSkgIFszNDE3M10KICAgIE5ldyBtZXRob2QgdG8gYWxsb3cgY3VycmVudCBjb250ZW50cyB0byBiZSB3cml0dGVuIHRvIGEgc3RyZWFtCgotIERlZmVycmVkRmlsZU91dHB1dFN0cmVhbSAgWzM0MTQyXQogICAgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBhdm9pZGluZyBkb3VibGUgYnVmZmVyaW5nCgotIExvY2thYmxlRmlsZVdyaXRlciAtIGVuY29kaW5nIHN1cHBvcnQgWzM2ODI1XQogICAgQWRkIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBlbmNvZGluZ3MgdG8gTG9ja2FibGVGaWxlV3JpdGVyCiAgICBJbXByb3ZlIHRoZSB2YWxpZGF0aW9uCiAgICBDcmVhdGUgZGlyZWN0b3JpZXMgaWYgbmVjZXNzc2FyeQoKLSBJT1V0aWxzIGFuZCBFbmRpYW5VdGlscyBhcmUgbm8gbG9uZ2VyIGZpbmFsICBbMjg5NzhdCiAgICBBbGxvd3MgZGV2ZWxvcGVycyB0byBoYXZlIHN1YmNsYXNzZXMgaWYgZGVzaXJlZCAgIAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkZlZWRiYWNrCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3BlbiBzb3VyY2Ugd29ya3MgYmVzdCB3aGVuIHlvdSBnaXZlIGZlZWRiYWNrOgpodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2lvLwoKUGxlYXNlIGRpcmVjdCBhbGwgYnVnIHJlcG9ydHMgdG8gSklSQQpodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8KCk9yIHN1YnNjcmliZSB0byB0aGUgY29tbW9ucy11c2VyIG1haWxpbmcgbGlzdCAocHJlZml4IGVtYWlscyBieSBbaW9dKQpodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL21haWwtbGlzdHMuaHRtbAoKVGhlIENvbW1vbnMtSU8gVGVhbQo=