VGhpcyBmaWxlIGRlc2NyaWJlcyB3aGVyZSB0byBzdGFydCBkZWJ1Z2dpbmcgV2luZSBhbmQgaG93IHRvIHdyaXRlCnVzZWZ1bCBidWcgcmVwb3J0cy4KCkNyYXNoZXMKPT09PT09PQoKICBUaGVzZSB1c3VhbGx5IHNob3cgdXAgbGlrZSB0aGlzOgoKfFVuZXhwZWN0ZWQgV2luZG93cyBwcm9ncmFtIHNlZ2ZhdWx0IC0gb3Bjb2RlID0gOGIKfFNlZ21lbnRhdGlvbiBmYXVsdCBpbiBXaW5kb3dzIHByb2dyYW0gMWI3OmM0MS4KfExvYWRpbmcgc3ltYm9scyBmcm9tIEVMRiBmaWxlIC9yb290L3dpbmUvd2luZS4uLgp8Li4uLm1vcmUgTG9hZGluZyBzeW1ib2xzIGZyb20gLi4uCnxJbiAxNiBiaXQgbW9kZS4KfFJlZ2lzdGVyIGR1bXA6CnwgQ1M6MDFiNyBTUzowMTZmIERTOjAyODcgRVM6MDAwMAp8IElQOjBjNDEgU1A6ODc4YSBCUDo4Nzk2IEZMQUdTOjAyNDYKfCBBWDo4MTFlIEJYOjAwMDAgQ1g6MDAwMCBEWDowMDAwIFNJOjAwMDEgREk6ZmZmZgp8U3RhY2sgZHVtcDoKfDB4MDE2ZjoweDg3OGE6ICAwMDAxIDAxNmYgZmZlZCAwMDAwIDAwMDAgMDI4NyA4OTBiIDFlNWIKfDB4MDE2ZjoweDg3OWE6ICAwMWI3IDAwMDEgMDAwZCAxMDUwIDA4YjcgMDE2ZiAwMDAxIDAwMGQKfDB4MDE2ZjoweDg3YWE6ICAwMDBhIDAwMDMgMDAwNCAwMDAwIDAwMDcgMDAwNyAwMTkwIDAwMDAKfDB4MDE2ZjoweDg3YmE6CnwKfDAwNTA6IHNlbD0wMjg3IGJhc2U9NDAyMTFkMzAgbGltaXQ9MGI5M2YgKGJ5dGVzKSAxNi1iaXQgcnctCnxCYWNrdHJhY2U6CnwwIDB4MDFiNzoweDBjNDEgKFBYU1JWX0ZPTkdFVEZBQ0VOQU1FKzB4N2MpCnwxIDB4MDFiNzoweDFlNWIgKFBYU1JWX0ZPTlBVVENBVEZPTlQrMHgyY2QpCnwyIDB4MDFhNzoweDA1YWEKfDMgMHgwMWI3OjB4MDc2OCAoUFhTUlZfRk9OSU5JVEZPTlRTKzB4ODEpCnw0IDB4MDE0ZjoweDAzZWQgKFBET1hXSU5fQFNRTENVUkNCJFE2Q0JUWVBFVUxOOENCU0NUWVBFKzB4MWIxKQp8NSAweDAxM2Y6MHgwMGFjCnwKfDB4MDFiNzoweDBjNDEgKFBYU1JWX0ZPTkdFVEZBQ0VOQU1FKzB4N2MpOiAgbW92dyAgICAgICAgJWVzOjB4MzgoJWJ4KSwlZHgKClN0ZXBzIHRvIGRlYnVnIGEgY3Jhc2guIFlvdSBtYXkgc3RvcCBhdCBhbnkgc3RlcCwgYnV0IHBsZWFzZSByZXBvcnQgdGhlIGJ1ZwphbmQgcHJvdmlkZSBhcyBtdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBnYXRoZXJlZCB0byB0aGUgbmV3c2dyb3VwIG9yIHRoZQpyZWxldmFudCBkZXZlbG9wZXIgYXMgZmVhc29uYWJsZS4KICAKIDEuIEdldCB0aGUgcmVhc29uIGZvciB0aGUgY3Jhc2guIFRoaXMgaXMgdXN1YWxseSBhbiBhY2Nlc3MgdG8gYW4gaW52YWxpZAogICAgc2VsZWN0b3IsIGFuIGFjY2VzcyB0byBhbiBvdXQgb2YgcmFuZ2UgYWRkcmVzcyBpbiBhIHZhbGlkIHNlbGVjdG9yLAogICAgcG9wcGluZyBhIHNlZ21lbnRyZWdpc3RlciBmcm9tIHRoZSBzdGFjayBvciB0aGUgbGlrZS4gV2hlbiByZXBvcnRpbmcgYQogICAgY3Jhc2gsIHJlcG9ydCB0aGlzIFdIT0xFIGNyYXNoZHVtcCBldmVuIGlmIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB5b3UuCgogICAgKEluIHRoaXMgY2FzZSBpdCBpcyBhY2Nlc3MgdG8gYW4gaW52YWxpZCBzZWxlY3RvciwgZm9yICVlcyBpcyAwMDAwLCBhcwogICAgc2VlbiBpbiB0aGUgcmVnaXN0ZXIgZHVtcCkuCiAgICAKIDIuIERldGVybWluZSB3aGVyZSB0aGUgcmVhc29uIGNhbWUgZnJvbS4KICAgIFNpbmNlIHRoaXMgaXMgdXN1YWxseSBhIHByaW1hcnkvc2Vjb25kYXJ5IHJlYWN0aW9uIHRvIGEgZmFpbGVkIG9yCiAgICBtaXNiZWhhdmluZyBXaW5lIGZ1bmN0aW9uLCByZXJ1biBXaW5lIHdpdGggIi1kZWJ1Z21zZyArcmVsYXkiICh3aXRob3V0ICIpCiAgICBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUuIFRoaXMgd2lsbCBnZXQgcmF0aGVyIG11Y2ggb3V0cHV0LCBidXQgdXN1YWxseQogICAgdGhlIHJlYXNvbiBpcyBsb2NhdGVkIGluIHRoZSBsYXN0IGNhbGwocykuICBUaG9zZSBsaW5lcyB1c3VhbGx5IGxvb2sgbGlrZQogICAgdGhpczoKCnxDYWxsIEtFUk5FTC45MDogTFNUUkxFTigwMjI3OjA2OTIgInRleHQiKSByZXQ9MDFlNzoyY2U3IGRzPTAyMjcKICAgICAgXl5eXl5eXl5eICBeICAgICAgIF5eXl5eXl5eXiBeXl5eXl4gICAgICBeXl5eXl5eXl4gICAgXl5eXgogICAgICB8ICAgICAgICAgIHwgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8RGF0YXNlZ21lbnQKICAgICAgfCAgICAgICAgICB8ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICB8UmV0dXJuIGFkZHJlc3MKICAgICAgfCAgICAgICAgICB8ICAgICAgIHwgICAgICAgICB8dGV4dHVhbCBwYXJhbWV0ZXIKICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKICAgICAgfCAgICAgICAgICB8ICAgICAgIHxBcmd1bWVudChzKS4gVGhpcyBvbmUgaXMgYSB3aW4xNiBzZWdtZW50ZWQgcG9pbnRlci4KICAgICAgfCAgICAgICAgICB8RnVuY3Rpb24gY2FsbGVkLgogICAgICB8VGhlIG1vZHVsZSwgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbi4gSW4gdGhpcyBjYXNlIGl0IGlzIEtFUk5FTC4KCQkgICAgICAgIAp8UmV0ICBLRVJORUwuOTA6IExTVFJMRU4oKSByZXR2YWw9MHgwMDA0IHJldD0wMWU3OjJjZTcgZHM9MDIyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCgkJCQkgIHxSZXR1cm52YWx1ZSBpcyAxNiBiaXQgYW5kIGhhcyB0aGUgdmFsdWUgNC4KCgogMy4gSWYgeW91IGhhdmUgZm91bmQgYSBtaXNiZWhhdmluZyBmdW5jdGlvbiwgdHJ5IHRvIGZpbmQgb3V0IHdoeSBpdAogICAgbWlzYmVoYXZlcy4gRmluZCB0aGUgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiBUcnkgdG8gbWFrZSBzZW5zZSBvZgogICAgdGhlIGFyZ3VtZW50cyBwYXNzZWQuIFVzdWFsbHkgdGhlcmUgaXMgYSAnVFJBQ0UoPGNoYW5uZWw+LCIoLi4uKVxuIik7JyAKICAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBSZXJ1biB3aW5lIHdpdGggCiAgICAiLWRlYnVnbXNnICt4eXosK3JlbGF5IiBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUuCgogNC4gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZGVidWcgdXNpbmcgdGhlIGludGVybmFsIGRlYnVnZ2VyIGNhbiBiZSAKICAgIGZvdW5kIGluIGRlYnVnZ2VyL1JFQURNRS4KCiA1LiBJZiB0aG9zZSBpbmZvcm1hdGlvbiBpc24ndCBjbGVhciBlbm91Z2ggb3IgaWYgeW91IHdhbnQgdG8ga25vdyBtb3JlIGFib3V0CiAgICB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZSBmdW5jdGlvbiBpdHNlbGYsIHRyeSBydW5uaW5nIHdpbmUgd2l0aCAiLWRlYnVnbXNnCiAgICArYWxsIiwgd2hpY2ggZHVtcHMgQUxMIGluY2x1ZGVkIGRlYnVnIGluZm9ybWF0aW9uIGluIHdpbmUuCgogNi4gSWYgdGhhdCBpc24ndCBlbm91Z2ggYWRkIG1vcmUgZGVidWcgb3V0cHV0IGZvciB5b3Vyc2VsZiBpbnRvIHRoZQogICAgZnVuY3Rpb25zIHlvdSBmaW5kIHJlbGV2YW50LiAgU2VlIGRvY3VtZW50YXRpb24vZGVidWctbXNncy4KICAgIFlvdSBtaWdodCBhbHNvIHRyeSB0byBydW4gdGhlIHByb2dyYW0gaW4gZ2RiIGluc3RlYWQgb2YgdXNpbmcgdGhlCiAgICBXSU5FLWRlYnVnZ2VyLiBJZiB5b3UgZG9uJ3QgdXNlIHRoZSAiLWRlc2t0b3AiIG9yICItbWFuYWdlZCIgb3B0aW9uLAogICAgc3RhcnQgdGhlIFdJTkUgcHJvY2VzcyB3aXRoICItc3luYyIsIG9yIGNoYW5jZXMgYXJlIGdvb2QgdG8gZ2V0IFggaW50bwogICAgYW4gdW51c2FibGUgc3RhdGUuCiAgCiA3LiBZb3UgY2FuIGFsc28gc2V0IGEgYnJlYWtwb2ludCBmb3IgdGhhdCBmdW5jdGlvbi4gU3RhcnQgd2luZSB3aXRoIHRoZQogICAgIi1kZWJ1ZyIgb3B0aW9uIGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZS4gQWZ0ZXIgbG9hZGluZyB0aGUgZXhlY3V0YWJsZQogICAgd2luZSB3aWxsIGVudGVyIHRoZSBpbnRlcm5hbCBkZWJ1Z2dlci4gVXNlICJicmVhayBLRVJORUxfTFNUUkxFTiIKICAgIChyZXBsYWNlIGJ5IGZ1bmN0aW9uIHlvdSB3YW50IHRvIGRlYnVnLCBDQVNFIElTIFJFTEVWQU5ULikgdG8gc2V0IGEKICAgIGJyZWFrcG9pbnQuICBUaGVuIHVzZSAiY29udGludWUiIHRvIHN0YXJ0IG5vcm1hbCBwcm9ncmFtLWV4ZWN1dGlvbi4gV2luZQogICAgd2lsbCBzdG9wIGlmIGl0IHJlYWNoZXMgdGhlIGJyZWFrcG9pbnQuIElmIHRoZSBwcm9ncmFtIGlzbid0IHlldCBhdCB0aGUKICAgIGNyYXNoaW5nIGNhbGwgb2YgdGhhdCBmdW5jdGlvbiwgdXNlICJjb250aW51ZSIgYWdhaW4gdW50aWwgeW91IGFyZSBhYm91dAogICAgdG8gZW50ZXIgdGhhdCBmdW5jdGlvbi4gWW91IG1heSBub3cgcHJvY2VlZCB3aXRoIHNpbmdsZS1zdGVwcGluZyB0aGUKICAgIGZ1bmN0aW9uIHVudGlsIHlvdSByZWFjaCB0aGUgcG9pbnQgb2YgY3Jhc2guIFVzZSB0aGUgb3RoZXIgZGVidWdnZXIKICAgIGNvbW1hbmRzIHRvIHByaW50IHJlZ2lzdGVycyBhbmQgdGhlIGxpa2UuCgoKUHJvZ3JhbSBoYW5ncywgbm90aGluZyBoYXBwZW5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBTd2l0Y2ggdG8gVU5JWCBzaGVsbCwgZ2V0IHRoZSBwcm9jZXNzLUlEIHVzaW5nICJwcyAtYXxncmVwIHdpbmUiLCBhbmQgZG8gYQogICJraWxsIC1IVVAgPHBpZD4iICh3aXRob3V0ICIgYW5kIDw+KS4gV2luZSB3aWxsIHRoZW4gZW50ZXIgaXRzIGludGVybmFsCiAgZGVidWdnZXIgYW5kIHlvdSBjYW4gcHJvY2VlZCBhcyBleHBsYWluZWQgYWJvdmUuIEFsc28sIHlvdSBjYW4gdXNlIC1kZWJ1ZwogIHN3aXRjaCBhbmQgdGhlbiB5b3UgY2FuIGdldCBpbnRvIGludGVybmFsIGRlYnVnZ2VyIGJ5IHByZXNzaW5nIEN0cmwtQyBpbiAKICB0aGUgdGVybWluYWwgd2hlcmUgeW91IHJ1biBXaW5lLgoKUHJvZ3JhbSByZXBvcnRzIGFuIGVycm9yIHdpdGggYSBNZXNzYWdlYm94Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICBTb21ldGltZXMgcHJvZ3JhbXMgYXJlIHJlcG9ydGluZyBmYWlsdXJlIHVzaW5nIGEgbW9yZSBvciBsZXNzIG5vbmRlc2NyaXB0CiAgbWVzc2FnZWJveGVzLiBXZSBjYW4gZGVidWcgdGhpcyB1c2luZyB0aGUgc2FtZSBtZXRob2QgYXMgQ3Jhc2hlcywgYnV0IHRoZXJlCiAgaXMgb25lIHByb2JsZW0uLi4gRm9yIHNldHRpbmcgdXAgYSBtZXNzYWdlIGJveCB0aGUgcHJvZ3JhbSBhbHNvIGNhbGxzIFdpbmUKICBwcm9kdWNpbmcgaHVnZSBjaHVua3Mgb2YgZGVidWcgY29kZS4KCiAgU2luY2UgdGhlIGZhaWx1cmUgaGFwcGVucyB1c3VhbGx5IGRpcmVjdGx5IGJlZm9yZSBzZXR0aW5nIHVwIHRoZSBNZXNzYWdlYm94CiAgeW91IGNhbiBzdGFydCB3aW5lIHdpdGggIi1kZWJ1ZyIgYWRkZWQgdG8gdGhlIGNvbW1hbmRsaW5lLCBzZXQgYSBicmVha3BvaW50CiAgYXQgIk1lc3NhZ2VCb3gzMkEiIChjYWxsZWQgYnkgd2luMTYgYW5kIHdpbjMyIHByb2dyYW1zKSBhbmQgcHJvY2VlZCB3aXRoCiAgImNvbnRpbnVlIi4gV2l0aCAiLWRlYnVnbXNnICthbGwiIFdpbmUgd2lsbCBub3cgc3RvcCBkaXJlY3RseSBiZWZvcmUgCiAgc2V0dGluZyB1cCB0aGUgTWVzc2FnZWJveC4gIFByb2NlZWQgYXMgZXhwbGFpbmVkIGFib3ZlLgoKICBZb3UgY2FuIGFsc28gcnVuIHdpbmUgdXNpbmcgIndpbmUgLWRlYnVnbXNnICtyZWxheSBwcm9ncmFtLmV4ZSAyPiYxfGxlc3MgLWkiCiAgYW5kIGluIGxlc3Mgc2VhcmNoIGZvciBtZXNzYWdlYm94LgoKRGlzYXNzZW1ibGluZyBwcm9ncmFtczoKPT09PT09PT09PT09PT09PT09PT09PT0KICBZb3UgbWF5IGFsc28gdHJ5IHRvIGRpc2Fzc2VtYmxlIHRoZSBvZmZlbmRpbmcgcHJvZ3JhbSB0byBjaGVjayBmb3IgCiAgdW5kb2N1bWVudGVkIGZlYXR1cmVzIGFuZC9vciB1c2Ugb2YgdGhlbS4KCiAgVGhlIGJlc3QsIGZyZWVseSBhdmFpbGFibGUsIGRpc2Fzc2VtYmxlciBmb3IgV2luMTYgcHJvZ3JhbXMgaXMKICBXaW5kb3dzIENvZGViYWNrLCBhcmNoaXZlbmFtZSB3Y2J4eHguemlwLCB3aGljaCB1c3VhbGx5IGNhbiBiZSBmb3VuZAogIGluIHRoZSBDaWNhLU1pcnJvciBzdWJkaXJlY3Rvcnkgb24gdGhlIFdJTkUgZnRwc2l0ZXMuIChTZWUgQU5OT1VOQ0UpLgogIERpc2Fzc2VtYmxpbmcgd2luMzIgcHJvZ3JhbXMgaXMgcG9zc2libGUgdXNpbmcgdGhlIFdpbmRvd3MgRGlzYXNzZW1ibGVyIDMyLAogIGFyY2hpdmVuYW1lIHNvbWV0aGluZyBsaWtlIHczMmRhc20uemlwIG9uIGZ0cC53aW5zaXRlLmNvbSBhbmQgbWlycm9ycy4KICBUaGUgc2hhcmV3YXJlIHZlcnNpb24gZG9lcyBub3QgYWxsb3cgc2F2aW5nIG9mIGRpc2Fzc2VtYmx5IGxpc3RpbmdzLgoKICBbSXQgYWxzbyBoYXMgYSBidWcsIGl0IGRpc2Fzc2VtYmxlcyB0aGUgZGxsIGFuZCBpbW1lZGlhdGVseSBhZnRlciB0aGF0CiAgIGNyYXNoZXMsIGxlYXZpbmcgYSB2ZXJ5IGxhcmdlIGZpbGUgY2FsZWQgJ3dpbnN5cycgaW4gdGhlIGRpcmVjdG9yeSBvZiB0aGUKICAgZGlzYXNzZW1ibGVkIGZpbGUuIFRoaXMgZmlsZSBjb250YWlucyBub3RoaW5nIG9mIHZhbHVlIChqdXN0IHRoZSBkaXNhc3NlbWJseSkKICAgYW5kIGNhbiBiZSBzYWZlbHkgZGVsZXRlZC5dCgogIFVuZGVyc3RhbmRpbmcgZGlzYXNzZW1ibGVkIGNvZGUgaXMganVzdCBhIHF1ZXN0aW9uIG9mIGV4ZXJjaXNlLgoKICBNb3N0IGNvZGUgb3V0IHRoZXJlIHVzZXMgc3RhbmRhcmQgQyBmdW5jdGlvbiBlbnRyaWVzIChmb3IgaXQgaXMgdXN1YWxseSAKICB3cml0dGVuIGluIEMpLiBXaW4xNiBmdW5jdGlvbiBlbnRyaWVzIHVzdWFsbHkgbG9vayBsaWtlIHRoYXQ6CnwgIAlwdXNoIGJwCnwJbW92IGJwLCBzcAp8CS4uLiBmdW5jdGlvbiBjb2RlIC4uCnwJcmV0ZiBYWFhYIAk8LS0tLS0tLS0tIFhYWFggaXMgbnVtYmVyIG9mIGJ5dGVzIG9mIGFyZ3VtZW50cwoKICBUaGlzIGlzIGEgRkFSIGZ1bmN0aW9uIHdpdGggbm8gbG9jYWwgc3RvcmFnZS4gVGhlIGFyZ3VtZW50cyB1c3VhbGx5IHN0YXJ0CiAgYXQgW2JwKzZdIHdpdGggaW5jcmVhc2luZyBvZmZzZXRzLiBOb3RlLCB0aGF0IFticCs2XSBiZWxvbmdzIHRvIHRoZSBSSUdIVE1PU1QgCiAgYXJndW1lbnQsIGZvciBleHBvcnRlZCB3aW4xNiBmdW5jdGlvbnMgdXNlIHRoZSBQQVNDQUwgY2FsbGluZyBjb252ZW50aW9uLgogIFNvLCBpZiB3ZSB1c2Ugc3RyY21wKGEsYikgd2l0aCBhIGFuZCBiIGJvdGggMzIgYml0IHZhcmlhYmxlcyBiIHdvdWxkIGJlIGF0CiAgW2JwKzZdIGFuZCBhIGF0IFticCsxMF0uCiAgTW9zdCBmdW5jdGlvbnMgbWFrZSBhbHNvIHVzZSBvZiBsb2NhbCBzdG9yYWdlIGluIHRoZSBzdGFja2ZyYW1lOgp8CWVudGVyIDAwODYsIDAwCnwJLi4uIGZ1bmN0aW9uIGNvZGUgLi4uCnwJbGVhdmUKfAlyZXRmIFhYWFgKICBUaGlzIGRvZXMgbW9zdGx5IHRoZSBzYW1lIGFzIGFib3ZlLCBidXQgYWxzbyBhZGRzIDB4ODYgYnl0ZXMgb2YKICBzdGFja3N0b3JhZ2UsIHdoaWNoIGlzIGFjY2Vzc2VkIHVzaW5nIFticC14eF0uCiAgQmVmb3JlIGNhbGxpbmcgYSBmdW5jdGlvbiwgYXJndW1lbnRzIGFyZSBwdXNoZWQgb24gdGhlIHN0YWNrIHVzaW5nIHNvbWV0aGluZwogIGxpa2UgdGhpczoKfAlwdXNoIHdvcmQgcHRyIFticC0wMl0JPC0gd2lsbCBiZSBhdCBbYnArOF0KfAlwdXNoIGRpCQkJPC0gd2lsbCBiZSBhdCBbYnArNl0KfAljYWxsIEtFUk5FTC5MU1RSTEVOCiAgSGVyZSBmaXJzdCB0aGUgc2VsZWN0b3IgYW5kIHRoZW4gdGhlIG9mZnNldCB0byB0aGUgcGFzc2VkIHN0cmluZyBhcmUgcHVzaGVkLgoKU2FtcGxlIGRlYnVnZ2luZyBzZXNzaW9uOgo9PT09PT09PT09PT09PT09PT09PT09PT09CgogIExldCdzIGRlYnVnIHRoZSBpbmZhbW91cyBXb3JkIFNIQVJFLkVYRSBtZXNzYWdlYm94OiAKCnxtYXJjdXNAamV0ICQgd2luZSB3aW53b3JkLmV4ZQp8ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCAgICAgICAgICAgIHwgISAgWW91IG11c3QgbGVhdmUgV2luZG93cyBhbmQgbG9hZCBTSEFSRS5FWEV8CnwgICAgICAgICAgICB8ICAgIGJlZm9yZSBzdGFydGluZyBXb3JkLiAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgp8bWFyY3VzQGpldCAkIHdpbmUgd2lud29yZC5leGUgLWRlYnVnbXNnICtyZWxheSAtZGVidWcKfENhbGxUbzMyKHduZHByb2M9MHg0MDA2NWJjMCxod25kPTAwMDAwMWFjLG1zZz0wMDAwMDA4MSx3cD0wMDAwMDAwMCxscD0wMDAwMDAwMCkKfFdpbjE2IHRhc2sgJ3dpbndvcmQnOiBCcmVha3BvaW50IDEgYXQgMHgwMWQ3OjB4MDAxYQp8Q2FsbFRvMTYoZnVuYz0wMTI3OjAwNzAsZHM9MDkyNykKfENhbGwgV1BST0NTLjI0OiBUQVNLX1JFU0NIRURVTEUoKSByZXQ9MDBiNzoxNDU2IGRzPTA5MjcKfFJldCAgV1BST0NTLjI0OiBUQVNLX1JFU0NIRURVTEUoKSByZXR2YWw9MHg4NjcyIHJldD0wMGI3OjE0NTYgZHM9MDkyNwp8Q2FsbFRvMTYoZnVuYz0wMWQ3OjAwMWEsZHM9MDkyNykKfCAgICAgQVg9MDAwMCBCWD0zY2I0IENYPTFmNDAgRFg9MDAwMCBTST0wMDAwIERJPTA5MjcgQlA9MDAwMCBFUz0xMWY3CnxMb2FkaW5nIHN5bWJvbHM6IC9ob21lL21hcmN1cy93aW5lL3dpbmUuLi4KfFN0b3BwZWQgb24gYnJlYWtwb2ludCAxIGF0IDB4MDFkNzoweDAwMWEKfEluIDE2IGJpdCBtb2RlLgp8V2luZS1kYmc+YnJlYWsgTWVzc2FnZUJveDMyQSAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0gU2V0IEJyZWFrcG9pbnQKfEJyZWFrcG9pbnQgMiBhdCAweDQwMTg5MTAwIChNZXNzYWdlQm94MzJBIFttc2dib3guYzoxOTBdKQp8V2luZS1kYmc+YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0gQ29udGludWUKfENhbGwgS0VSTkVMLjkxOiBJTklUVEFTSygpIHJldD0wMTU3OjAwMjIgZHM9MDhhNwp8ICAgICBBWD0wMDAwIEJYPTNjYjQgQ1g9MWY0MCBEWD0wMDAwIFNJPTAwMDAgREk9MDhhNyBFUz0xMWQ3IEVGTD0wMDAwMDI4Ngp8Q2FsbFRvMTYoZnVuYz0wOTBmOjA4NWMsZHM9MGRjZiwweDAwMDAsMHgwMDAwLDB4MDAwMCwweDAwMDAsMHgwODAwLDB4MDAwMCwweDAwMDAsMHgwZGNmKQp8Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0tIE11Y2ggZGVidWdvdXRwdXQKfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMCkgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gRHJpdmUgMCAoQTopCnxSZXQgIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgpIHJldHZhbD0weDAwMDIgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gIERSSVZFX1JFTU9WRUFCTEUKCQkJCQkJKEl0IGlzIGEgZmxvcHB5IGRpc2tkcml2ZS4pCgp8Q2FsbCBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoMHgwMDAxKSByZXQ9MDYwZjowOTdiIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBEcml2ZSAxIChCOikKfFJldCAgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKCkgcmV0dmFsPTB4MDAwMCByZXQ9MDYwZjowOTdiIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiAgRFJJVkVfQ0FOTk9UREVURVJNSU5FCgkJCQkJCShJIGRvbid0IGhhdmUgZHJpdmUgQjogYXNzaWduZWQpCgp8Q2FsbCBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoMHgwMDAyKSByZXQ9MDYwZjowOTdiIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl4gRHJpdmUgMiAoQzopCnxSZXQgIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgpIHJldHZhbD0weDAwMDMgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gRFJJVkVfRklYRUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BlY2lmaWVkIGFzIGEgaGFyZGRpc2spCgp8Q2FsbCBLRVJORUwuOTc6IEdFVFRFTVBGSUxFTkFNRSgweDAwYzMsMHgwOTI3ODM2NCJkb2MiLDB4MDAwMCwwOTI3OjgyNDgpIHJldD0wNjBmOjA5YjEgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gICAgICAgICAgIF5eXl5eICAgICAgICBeXl5eXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfGJ1ZmZlciBmb3IgZm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8dGVtcG9yYXJ5IG5hbWUgfmRvY1hYWFgudG1wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxGb3JjZSB1c2Ugb2YgRHJpdmUgQzouCgp8V2FybmluZzogR2V0VGVtcEZpbGVOYW1lIHJldHVybnMgJ0M6fmRvYzkyODEudG1wJywgd2hpY2ggZG9lc24ndCBzZWVtIHRvIGJlIHdyaXRlYWJsZS4KfFBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpZiB0aGlzIGdlbmVyYXRlcyBhIGZhaWx1cmUuCgpXaG9vcHMsIGl0IGV2ZW4gZGV0ZWN0cyB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZyEKCnxSZXQgIEtFUk5FTC45NzogR0VUVEVNUEZJTEVOQU1FKCkgcmV0dmFsPTB4OTI4MSByZXQ9MDYwZjowOWIxIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIFRlbXBvcmFyeSBzdG9yYWdlIElECgp8Q2FsbCBLRVJORUwuNzQ6IE9QRU5GSUxFKDB4MDkyNzgyNDgiQzp+ZG9jOTI4MS50bXAiLDA5Mjc6ODJkYSwweDEwMTIpIHJldD0wNjBmOjA5ZDggZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eIF5eXl5eXl5eXiBeXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxmaWxlbmFtZSAgICAgICAgfE9GU1RSVUNUIHxvcGVuIG1vZGU6CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRl9DUkVBVEV8T0ZfU0hBUkVfRVhDTFVTSVZFfE9GX1JFQURXUklURQoKVGhpcyBmYWlscywgc2luY2UgbXkgQzogZHJpdmUgaXMgaW4gdGhpcyBjYXNlIG1vdW50ZWQgcmVhZG9ubHkuCgp8UmV0ICBLRVJORUwuNzQ6IE9QRU5GSUxFKCkgcmV0dmFsPTB4ZmZmZiByZXQ9MDYwZjowOWQ4IGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gSEZJTEVfRVJST1IxNiwgeWVzLCBpdCBmYWlsZWQuCgp8Q2FsbCBVU0VSLjE6IE1FU1NBR0VCT1goMHgwMDAwLDB4MDkyNzgzNzYiU2llIG38c3NlbiBXaW5kb3dzIHZlcmxhc3NlbiB1bmQgU0hBUkUuRVhFIGxhZGVuIGJldm9yIFNpZSBXb3JkIHN0YXJ0ZW4uIiwweDAwMDAwMDAwLDB4MTAzMCkgcmV0PTA2MGY6MDg0ZiBkcz0wOTI3CiAgICAgICAgICAgCkFuZCBNZXNzYWdlQm94J2VkLgoKfFN0b3BwZWQgb24gYnJlYWtwb2ludCAyIGF0IDB4NDAxODkxMDAgKE1lc3NhZ2VCb3gzMkEgW21zZ2JveC5jOjE5MF0pCnwxOTAgICAgIHsJCTwtIHRoZSBzb3VyY2VsaW5lCkluIDMyIGJpdCBtb2RlLgpXaW5lLWRiZz4KCglUaGUgY29kZSBzZWVtcyB0byBmaW5kIGEgd3JpdGVhYmxlIGhhcmRkaXNrIGFuZCB0cmllcyB0byBjcmVhdGUgYSBmaWxlCgl0aGVyZS4gVG8gd29yayBhcm91bmQgdGhpcyBidWcsIHlvdSBjYW4gZGVmaW5lIEM6IGFzIGEgbmV0d29ya2RyaXZlLAoJd2hpY2ggaXMgaWdub3JlZCBieSB0aGUgY29kZSBhYm92ZS4KCldyaXR0ZW4gYnkgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+LAphZGRpdGlvbnMgd2VsY29tZS4K