IwojICAgUGFydHMgb2YgdGhlIGRldmVsb3BtZW50IGVmZm9ydCBmb3IgdGhpcyBwcm9qZWN0IGhhdmUgYmVlbgojICAgc3BvbnNvcmVkIGJ5IFNJRU1FTlMgQUcsIEF1c3RyaWEuIFRoYW5rcyB0byBTSUVNRU5TIGZvcgojICAgc3VwcG9ydGluZyBhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IQojCiMKIyAgIFRoaXMgaXMgYXQgbGVhc3QgYSBwYXJ0aWFsIGNyZWRpdHMtZmlsZSBvZiBpbmRpdmlkdWFsIHBlb3BsZSB0aGF0CiMgICBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoZSBVLUJvb3QgcHJvamVjdC4gSXQgaXMgc29ydGVkIGJ5IG5hbWUgYW5kCiMgICBmb3JtYXR0ZWQgdG8gYWxsb3cgZWFzeSBncmVwcGluZyBhbmQgYmVhdXRpZmljYXRpb24gYnkgc2NyaXB0cy4KIyAgIFRoZSBmaWVsZHMgYXJlOiBuYW1lIChOKSwgZW1haWwgKEUpLCB3ZWItYWRkcmVzcyAoVyksIFBHUCBrZXkgSUQKIyAgIGFuZCBmaW5nZXJwcmludCAoUCksIGRlc2NyaXB0aW9uIChEKSwgYW5kIHNuYWlsLW1haWwgYWRkcmVzcyAoUykuCiMgICBUaGFua3MsCiMKIyAgICAgICAgICAgICAgICAgICAgICAgV29sZmdhbmcgRGVuawojLS0tLS0tLS0tLQoKTjogRHIuIEJydW5vIEFjaGF1ZXIKRTogYnJ1bm9AZXhldC1hZy5kZQpEOiBTdXBwb3J0IGZvciBOZXRCU0QgKGJvdGggYXMgaG9zdCBhbmQgdGFyZ2V0IHN5c3RlbSkKCk46IFN3ZW4gQW5kZXJzb24KRTogc2FuZEBwZXBwZXJjb24uZGUKRDogRVJJQyBTdXBwb3J0CgpOOiBHdWlsbGF1bWUgQWxleGFuZHJlCkU6IGd1aWxsYXVtZS5hbGV4YW5kcmVAZ2VzcGFjLmNoCkQ6IEFkZCBQQ0lQUEM2IGNvbmZpZ3VyYXRpb24KCk46IFBpZXJyZSBBdWJlcnQKRTogPHAuYXViZXJ0QHN0YXVibGkuY29tPgpEOiBTdXBwb3J0IGZvciBSUFhDbGFzc2ljIGJvYXJkCgpOOiBKZXJyeSB2YW4gQmFyZW4KRTogPHZhbmJhcmVuQGNpZGVhcy5jb20+CkQ6IEJlZEJ1ZyBwb3J0IHRvIDYwM2UgY29yZSAoTVBDODJ4eCkuIENvZGUgZm9yIGVuaGFuY2VkIG1lbW9yeSB0ZXN0LgoKTjogQW5kcmUgQmVhdWRpbgpFOiA8YW5kcmUuYmVhdWRpbkBjb2x1YnJpcy5jb20+CkQ6IFBDTUNJQSwgRXRoZXJuZXQsIFRGVFAKCk46IEpvbiBCZW5lZGlrdHNzb24KRTogam9uYkBtYXJlbC5pcwpEOiBTdXBwb3J0IGZvciBNYXJlbCBWMzcgYm9hcmQKCk46IFJhcGhhZWwgQm9zc2VrCkU6IHJhcGhhZWwuYm9zc2VrQHNvbHV0aW9uczRsaW51eC5kZQpEOiA4eHhyb20tMC4zLjAKCk46IFJpY2sgQnJvbnNvbgpFOiByaWNrQGVmbi5vcmcKRDogQXRtZWwgQVQ5MVJNOTIwMERLIGFuZCBOQU5EIHN1cHBvcnQKCk46IERhdmlkIEJyb3duCkU6IERCcm93bjAzQGhhcnJpcy5jb20KRDogRXh0ZW5zaW9ucyB0byA4eHhyb20tMC4zLjAKCk46IE9saXZlciBCcm93bgpFOiBvYnJvd25AYWR2ZW50bmV0d29ya3MuY29tCkQ6IFBvcnQgdG8gdGhlIGd3ODI2MCBib2FyZAoKTjogSm9uYXRoYW4gRGUgQnJ1eW5lCkU6IGpvbmF0aGFuLmRlYnJ1eW5lQHNpZW1lbnMuYXRlYS5iZQpEOiBQb3J0IHRvIFNpZW1lbnMgSUFEMjEwIGJvYXJkCgpOOiBDb25uIENsYXJrCkU6IGNsYXJrQGVzdGVlbS5jb20KRDogRVNURUVNMTkyRSBzdXBwb3J0CgpOOiBNYWdudXMgRGFtbQpFOiBlcmFtZGFtQGtpZXJheTEucC55LmtpLmVyYS5lcmljc3Nvbi5zZQpEOiA4eHhyb20KCk46IEFydW4gRGhhcmFua2FyCkU6IEFEaGFyYW5rYXJAQVRUQkkuQ29tCkQ6IHRocmVhZHMgLyBzY2hlZHVsZXIgZXhhbXBsZSBjb2RlCgpOOiBL4XJpIERhdu3wc3NvbgpFOiBrZEBmbGFnYS5pcwpEOiBGTEFHQSBETSBTdXBwb3J0CgpOOiBXb2xmZ2FuZyBEZW5rCkU6IHdkQGRlbnguZGUKRDogVS1Cb290IGluaXRpYWwgdmVyc2lvbiwgY29udGludWluZyBtYWludGVuYW5jZSwgQVJNQm9vdCBtZXJnZQpXOiBodHRwOi8vd3d3LmRlbnguZGUKCk46IERhbiBBLiBEaWNrZXkKRTogZGRpY2tleUBjaGFydGVyLm5ldApEOiBGQURTIFN1cHBvcnQKCk46IEphbWVzIEYuIERvdWdoZXJ0eQpFOiBqZmRAR2lnYWJpdE5ldHdvcmtzLkNPTQpEOiBQb3J0IHRvIHRoZSBNT1VTU0UgYm9hcmQKCk46IERhdmUgRWxsaXMKRTogREdFQHNpeG5ldGlvLmNvbQpEOiBFRVBST00gU3BlZWR1cCwgU1hOSTg1NVQgcG9ydAoKTjogRGFuaWVsIEVuZ3N0cvZtCkU6IGRhbmllbEBvbWljcm9uLnNlCkQ6IHg4NiBwb3J0LCBTdXBwb3J0IGZvciBzYzUyMF9jZHAgYm9hcmQKCk46IERyLiBXb2xmZ2FuZyBHcmFuZGVnZ2VyCkU6IHdnQGRlbnguZGUKRDogU3VwcG9ydCBmb3IgSW50ZXJwaGFzZSA0NTM5IFQxL0UxL0oxIFBNQywgUE42MiwgQ0NNLCBTQ00gYm9hcmRzClc6IHd3dy5kZW54LmRlCgpOOiBUaG9tYXMgRnJpZWRlbgpFOiBUaG9tYXNGQGh5cGVyaW9uLWVudGVydGFpbm1lbnQuY29tCkQ6IFN1cHBvcnQgZm9yIEFtaWdhT25lCgpOOiBGcmFuayBHb3R0c2NobGluZwpFOiBmZ290dHNjaGxpbmdAZWx0ZWMuZGUKRDogU3VwcG9ydCBmb3IgRUxURUMgTUhQQy9CQUI3eHgvRUxQUEMgYm9hcmRzLCBjZmItY29uc29sZSwgaTgwNDIsIFNNSSBMeW54RU0KVzogd3d3LmVsdGVjLmRlCgpOOiBNYXJpdXMgR3JvZWdlcgpFOiBtZ3JvZWdlckBzeXNnby5kZQpEOiBNQlggU3VwcG9ydCwgYm9hcmQgc3BlY2lmaWMgZnVuY3Rpb24gaW50ZXJmYWNlLCBFU1QgU0JDODI2MCBzdXBwb3J0OyBpbml0aWFsIHN1cHBvcnQgZm9yIFN0cm9uZ0FSTSAoTEFSVCksIEFSTTcyMFRETUkgKGltcGxlbWVudGEgQTcpClc6IHd3dy5lbGlub3MuY29tCgpOOiBLaXJrIEhhZGVybGllCkU6IGtoYWRlcmxpZUB2aXZpZGltYWdlLmNvbQpEOiBBZGRlZCBURlRQIHRvIDh4eHJvbSAoLT4gMC4zLjEpCgpOOiBDaHJpcyBIYWxsaW5hbgpFOiBjbGhAbmV0MXBsdXMuY29tCkQ6IERIQ1AgU3VwcG9ydAoKTjogQW5uZS1Tb3BoaWUgSGFybm9pcwpFOiBBbm5lLVNvcGhpZS5IYXJub2lzQG5leHRyZWFtLmZyCkQ6IFBvcnQgdG8gV2FsbnV0NDA1IGJvYXJkCgpOOiBBbmRyZWFzIEhlcHBlbApFOiBhaGVwcGVsQHN5c2dvLmRlCkQ6IENQVSBTdXBwb3J0IGZvciBNUEMgNzV4OyBib2FyZCBzdXBwb3J0IGZvciBFbHRlYyBCQUI3NTAgW29ic29sZXRlIV0KCk46IEpvc2ggSHViZXIKRTogaHViZXJAYWx1bS53cGkuZWR1CkQ6IFBvcnQgdG8gdGhlIEdhbGlsZW8gRXZhbHVhdGlvbiBCb2FyZCwgYW5kIHRoZSBNUEM3NHh4IGNwdSBzZXJpZXMuClc6IGh0dHA6Ly93d3cubWNseC5jb20vCgpIOiBTdHVhcnQgSHVnaGVzCkU6IHN0dWFydGhAbGluZW8uY29tCkQ6IFBvcnQgdG8gTVBDODI2MEFEUyBib2FyZAoKSDogUmljaCBJcmVsYW5kCkU6IHIuaXJlbGFuZEBjb21wdXRlci5vcmcKRDogRlBHQSBkZXZpY2UgY29uZmlndXJhdGlvbiBkcml2ZXIKCk46IEdhcnkgSmVubmVqb2huCkU6IGdhcnlqQGplbm5lam9obi5vcmcsIGdqQGRlbnguZGUKRDogU3VwcG9ydCBmb3IgU2Ftc3VuZyBBUk05MjBUIFMzQzI0MDBYLCBBUk05MjBUICJUUkFCIgpXOiB3d3cuZGVueC5kZQoKTjogTXVycmF5IEplbnNlbgpFOiBNdXJyYXkuSmVuc2VuQGNtc3QuY3Npcm8uYXUKRDogSW5pdGlhbCA4MjYwIHN1cHBvcnQ7IEdEQiBzdXBwb3J0CkQ6IFBvcnQgdG8gQ29nZW50K0h5bW9kIGJvYXJkczsgSHltb2QgQm9hcmQgRGF0YWJhc2UKVzogaHR0cDovL3d3dy5tc2EuY21zdC5jc2lyby5hdS9vdXJzdGFmZi9NdXJyYXlKZW5zZW4vbWpqLmh0bWwKCk46IFlvby4gSm9uZ2hvb24KRTogeW9vdGhAaXBvbmUuY28ua3IKRDogQWRkZWQgcG9ydCB0byB0aGUgUlBYbGl0ZSBib2FyZAoKTjogQnJhZCBLZW1wCkU6IEJyYWQuS2VtcEBzZXJhbm9hLmNvbQpEOiBQb3J0IHRvIFdpbmRyaXZlciBwcG1jODI2MCBib2FyZAoKTjogVGhvbWFzIEtvZWxsZXIKRTogdGtvZWxsZXJAZ214Lm5ldApEOiBQb3J0IHRvIE1vdG9yb2xhIFNhbmRwb2ludCAzIChNUEM4MjQwKQoKTjogVGhvbWFzIExhbmdlCkU6IHRob21hc0Bjb3JlbGF0dXMuY29tCkQ6IFN1cHBvcnQgZm9yIEdUSCBib2FyZDsgbG90cyBvZiBQQ01DSUEgZml4ZXMKCk46IFRoZSBMRU9YIHRlYW0KRTogdGVhbUBsZW94Lm9yZwpEOiBTdXBwb3J0IGZvciBMRU9YIGJvYXJkcywgRFMxNjR4IFJUQwpXOiBodHRwOi8vd3d3Lmxlb3gub3JnCgpOOiBSYXltb25kIExvCkU6IGxvQHJvdXRlZnJlZS5jb20KRDogU3VwcG9ydCBmb3IgRE9TIHBhcnRpdGlvbnMKCk46IERhbiBNYWxlawpFOiBkYW5AbmV0eDQuY29tCkQ6IEZBRFNST00sIHRoZSBncmFuZGZhdGhlciBvZiBhbGwgb2YgdGhpcwoKTjogUmVpbmhhcmQgTWV5ZXIKRTogci5tZXllckBlbWstZWxla3Ryb25pay5kZQpEOiBQb3J0IHRvIEVNSyBUT1A4NjAgTW9kdWxlCgpOOiBKYXkgTW9ua21hbgpFOiBqdG1Ac21vb3Roc21vb3RoaWUuY29tCkQ6IEVTVCBTQkM4MjYwIHN1cHBvcnQKCk46IEZyYW5rIE1vcmF1ZgpFOiBmcmFuay5tb3JhdWZAc2FsemJyZW5uZXIuY29tCkQ6IFN1cHBvcnQgZm9yIEVtYmVkZGVkIFBsYW5ldCBSUFggU3VwZXIgQm9hcmQKCk46IERhdmlkIE38bGxlcgpFOiBkLm11ZWxsZXJAZWxzb2Z0LmNoCkQ6IFN1cHBvcnQgZm9yIFNhbXN1bmcgQVJNOTIwVCBTTURLMjQxMCBldmFsIGJvYXJkCgpOOiBSb2xmIE9mZmVybWFubnMKRTogcm9mQHN5c2dvLmRlCkQ6IEluaXRpYWwgc3VwcG9ydCBmb3IgU1NWLUROUDExMTAsIFNNQzkxMTExIGRyaXZlcgpXOiB3d3cuZWxpbm9zLmNvbQoKTjogS2VpdGggT3V0d2F0ZXIKRTogS2VpdGhfT3V0d2F0ZXJAbXZpcy5jb20KRDogU3VwcG9ydCBmb3IgR0VOODYwVCBib2FyZAoKTjogS2VpdGggT3V0d2F0ZXIKRToga2VpdGhfb3V0d2F0ZXJAbXZpcy5jb20KRDogU3VwcG9ydCBmb3IgZ2VuZXJpYy9jdXN0b20gTVBDODYwVCBib2FyZCAoR0VOODYwVCkKCk46IEZyYW5rIFBhbm5vCkU6IGZwYW5ub0BkZWxwaGludGVjaC5jb20KRDogU3VwcG9ydCBmb3IgRW1iZWRkZWQgUGxhbmV0IEVQODI2MCBCb2FyZAoKTjogRGVuaXMgUGV0ZXIKRTogZC5wZXRlckBtcGwuY2gKRDogU3VwcG9ydCBmb3IgNHh4IFNDU0ksIGZsb3BweSwgQ0RST00sIENUNjkwMDAgdmlkZW8sIC4uLgpEOiBTdXBwb3J0IGZvciBQSVA0MDUgYm9hcmQKRDogU3VwcG9ydCBmb3IgTUlQNDA1IGJvYXJkCgpOOiBCaWxsIFBpdHRzCkU6IHdscEBtaW5kc3ByaW5nLmNvbQpEOiBCZWRCdWcgZW1iZWRkZWQgZGVidWdnZXIgY29kZQoKTjogU3RlZmFuIFJvZXNlCkU6IHN0ZWZhbi5yb2VzZUBlc2QtZWxlY3Ryb25pY3MuY29tCkQ6IElCTSBQUEM0MDEvNDAzLzQwNUdQIFN1cHBvcnQ7IFdpbmRvd3MgZW52aXJvbm1lbnQgc3VwcG9ydAoKTjogTmVpbCBSdXNzZWxsCkU6IGNhcmV0QGMtc2lkZS5jb20KRDogQXV0aG9yIG9mIExpTW9uLTEuNC4yLCB3aGljaCBjb250cmlidXRlZCBzb21lIGlkZWFzCgpOOiBQYW9sbyBTY2FmZmFyZGkKRTogYXJzZW5pb0B0aW4uaXQKRDogRkFEUzgyMyBjb25maWd1cmF0aW9uLCBNUEM4MjMgdmlkZW8gc3VwcG9ydCwgSTJDLCB3aXJlbGVzcyBrZXlib2FyZCwgbG90cyBtb3JlCgpOOiBSb2JlcnQgU2Nod2ViZWwKRTogci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZQpEOiBTdXBwb3J0IGZvciBjc2IyMjYgYW5kIGlubm9rb20gYm9hcmRzICh4c2NhbGUpCgpOOiBSb2IgVGF5bG9yCkU6IHJvYnRAZmx5aW5ncGlnLmNvbQpEOiBQb3J0IHRvIE1CWDg2MFQgYW5kIFNhbmRwb2ludDgyNDAKCk46IEVyaWsgVGhlaXNlbgpFOiBldGhlaXNlbkBtaW5kc3ByaW5nLmNvbQpEOiBNQlg4eHggYW5kIG1hbnkgb3RoZXIgcGF0Y2hlcwoKTjogSmltIFRob21wc29uCkU6IGppbUBtdXNlbmtpLmNvbQpEOiBTdXBwb3J0IGZvciBNVVNFTktJIGJvYXJkCgpOOiBSdW5lIFRvcmdlcnNlbgpFOiA8cnVuZXRAaW5ub3ZzeXMuY29tPgpEOiBTdXBwb3J0IGZvciBNb3Rvcm9sYSBNUEM4MjY2QURTIGJvYXJkCgpOOiBEYXZpZCBVcGRlZ3JhZmYKRTogZGF2ZUBjcmF5LmNvbQpEOiBQb3J0IHRvIENyYXkgTDEgYm9hcmQ7IERIQ1AgdmVuZG9yIGV4dGVuc2lvbnMKCk46IE1hcnRpbiBXaW5pc3RvZXJmZXIKRTogbWFydGlud2luaXN0b2VyZmVyQGdteC5jaApEOiBQb3J0IHRvIE1QQzU1NS81NTYgbWljcm9jb250cm9sbGVycyBhbmQgc3VwcG9ydCBmb3IgY21pIGJvYXJkCgpOOiBDaHJpc3RpYW4gVmVqbGJvCkU6IGNocmlzdGlhbi52ZWpsYm9AdGVsbGFicy5jb20KRDogRkFEUzg2MFQgZXRoZXJuZXQgc3VwcG9ydAoKTjogSm9obiBaaGFuCkU6IHpoYW56QHNpbm92ZWUuY29tCkQ6IFN1cHBvcnQgZm9yIFNpbm9WZWUgTWljcm9zeXN0ZW1zIFNDOHh4IFNCQwoKTjogQWxleCBadWVwa2UKRTogYXp1QHN5c2dvLmRlCkQ6IE92ZXJhbGwgaW1wcm92ZW1lbnRzIG9uIFN0cm9uZ0FSTSwgQVJNNzIwVERNSTsgU3VwcG9ydCBmb3IgVHV4c2NyZWVuOyBpbml0aWFsIFBDTUNJQSBzdXBwb3J0IGZvciBBUk0KVzogd3d3LmVsaW5vcy5jb20K