VGhpcyBmaWxlIGRlc2NyaWJlcyB3aGVyZSB0byBzdGFydCBkZWJ1Z2dpbmcgV2luZS4gSWYgYXQgYW55IHBvaW50CnlvdSBnZXQgc3R1Y2sgYW5kIHdhbnQgdG8gYXNrIGZvciBoZWxwLCBwbGVhc2UgcmVhZCB0aGUgZmlsZQpkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3cml0ZSB1c2VmdWwgYnVnIApyZXBvcnRzLgoKQ3Jhc2hlcwo9PT09PT09CgogIFRoZXNlIHVzdWFsbHkgc2hvdyB1cCBsaWtlIHRoaXM6Cgp8VW5leHBlY3RlZCBXaW5kb3dzIHByb2dyYW0gc2VnZmF1bHQgLSBvcGNvZGUgPSA4Ygp8U2VnbWVudGF0aW9uIGZhdWx0IGluIFdpbmRvd3MgcHJvZ3JhbSAxYjc6YzQxLgp8TG9hZGluZyBzeW1ib2xzIGZyb20gRUxGIGZpbGUgL3Jvb3Qvd2luZS93aW5lLi4uCnwuLi4ubW9yZSBMb2FkaW5nIHN5bWJvbHMgZnJvbSAuLi4KfEluIDE2IGJpdCBtb2RlLgp8UmVnaXN0ZXIgZHVtcDoKfCBDUzowMWI3IFNTOjAxNmYgRFM6MDI4NyBFUzowMDAwCnwgSVA6MGM0MSBTUDo4NzhhIEJQOjg3OTYgRkxBR1M6MDI0Ngp8IEFYOjgxMWUgQlg6MDAwMCBDWDowMDAwIERYOjAwMDAgU0k6MDAwMSBESTpmZmZmCnxTdGFjayBkdW1wOgp8MHgwMTZmOjB4ODc4YTogIDAwMDEgMDE2ZiBmZmVkIDAwMDAgMDAwMCAwMjg3IDg5MGIgMWU1Ygp8MHgwMTZmOjB4ODc5YTogIDAxYjcgMDAwMSAwMDBkIDEwNTAgMDhiNyAwMTZmIDAwMDEgMDAwZAp8MHgwMTZmOjB4ODdhYTogIDAwMGEgMDAwMyAwMDA0IDAwMDAgMDAwNyAwMDA3IDAxOTAgMDAwMAp8MHgwMTZmOjB4ODdiYToKfAp8MDA1MDogc2VsPTAyODcgYmFzZT00MDIxMWQzMCBsaW1pdD0wYjkzZiAoYnl0ZXMpIDE2LWJpdCBydy0KfEJhY2t0cmFjZToKfDAgMHgwMWI3OjB4MGM0MSAoUFhTUlZfRk9OR0VURkFDRU5BTUUrMHg3YykKfDEgMHgwMWI3OjB4MWU1YiAoUFhTUlZfRk9OUFVUQ0FURk9OVCsweDJjZCkKfDIgMHgwMWE3OjB4MDVhYQp8MyAweDAxYjc6MHgwNzY4IChQWFNSVl9GT05JTklURk9OVFMrMHg4MSkKfDQgMHgwMTRmOjB4MDNlZCAoUERPWFdJTl9AU1FMQ1VSQ0IkUTZDQlRZUEVVTE44Q0JTQ1RZUEUrMHgxYjEpCnw1IDB4MDEzZjoweDAwYWMKfAp8MHgwMWI3OjB4MGM0MSAoUFhTUlZfRk9OR0VURkFDRU5BTUUrMHg3Yyk6ICBtb3Z3ICAgICAgICAlZXM6MHgzOCglYngpLCVkeAoKU3RlcHMgdG8gZGVidWcgYSBjcmFzaC4gWW91IG1heSBzdG9wIGF0IGFueSBzdGVwLCBidXQgcGxlYXNlIHJlcG9ydCB0aGUgYnVnCmFuZCBwcm92aWRlIGFzIG11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGdhdGhlcmVkIHRvIHRoZSBuZXdzZ3JvdXAgb3IgdGhlCnJlbGV2YW50IGRldmVsb3BlciBhcyBmZWFzb25hYmxlLgogIAogMS4gR2V0IHRoZSByZWFzb24gZm9yIHRoZSBjcmFzaC4gVGhpcyBpcyB1c3VhbGx5IGFuIGFjY2VzcyB0byBhbiBpbnZhbGlkCiAgICBzZWxlY3RvciwgYW4gYWNjZXNzIHRvIGFuIG91dCBvZiByYW5nZSBhZGRyZXNzIGluIGEgdmFsaWQgc2VsZWN0b3IsCiAgICBwb3BwaW5nIGEgc2VnbWVudHJlZ2lzdGVyIGZyb20gdGhlIHN0YWNrIG9yIHRoZSBsaWtlLiBXaGVuIHJlcG9ydGluZyBhCiAgICBjcmFzaCwgcmVwb3J0IHRoaXMgV0hPTEUgY3Jhc2hkdW1wIGV2ZW4gaWYgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHlvdS4KCiAgICAoSW4gdGhpcyBjYXNlIGl0IGlzIGFjY2VzcyB0byBhbiBpbnZhbGlkIHNlbGVjdG9yLCBmb3IgJWVzIGlzIDAwMDAsIGFzCiAgICBzZWVuIGluIHRoZSByZWdpc3RlciBkdW1wKS4KICAgIAogMi4gRGV0ZXJtaW5lIHdoZXJlIHRoZSByZWFzb24gY2FtZSBmcm9tLgogICAgU2luY2UgdGhpcyBpcyB1c3VhbGx5IGEgcHJpbWFyeS9zZWNvbmRhcnkgcmVhY3Rpb24gdG8gYSBmYWlsZWQgb3IKICAgIG1pc2JlaGF2aW5nIFdpbmUgZnVuY3Rpb24sIHJlcnVuIFdpbmUgd2l0aCAiLWRlYnVnbXNnICtyZWxheSIgKHdpdGhvdXQgIikKICAgIGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZS4gVGhpcyB3aWxsIGdldCByYXRoZXIgbXVjaCBvdXRwdXQsIGJ1dCB1c3VhbGx5CiAgICB0aGUgcmVhc29uIGlzIGxvY2F0ZWQgaW4gdGhlIGxhc3QgY2FsbChzKS4gIFRob3NlIGxpbmVzIHVzdWFsbHkgbG9vayBsaWtlCiAgICB0aGlzOgoKfENhbGwgS0VSTkVMLjkwOiBMU1RSTEVOKDAyMjc6MDY5MiAidGV4dCIpIHJldD0wMWU3OjJjZTcgZHM9MDIyNwogICAgICBeXl5eXl5eXl4gIF4gICAgICAgXl5eXl5eXl5eIF5eXl5eXiAgICAgIF5eXl5eXl5eXiAgICBeXl5eCiAgICAgIHwgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHxEYXRhc2VnbWVudAogICAgICB8ICAgICAgICAgIHwgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHxSZXR1cm4gYWRkcmVzcwogICAgICB8ICAgICAgICAgIHwgICAgICAgfCAgICAgICAgIHx0ZXh0dWFsIHBhcmFtZXRlcgogICAgICB8ICAgICAgICAgIHwgICAgICAgfAogICAgICB8ICAgICAgICAgIHwgICAgICAgfEFyZ3VtZW50KHMpLiBUaGlzIG9uZSBpcyBhIHdpbjE2IHNlZ21lbnRlZCBwb2ludGVyLgogICAgICB8ICAgICAgICAgIHxGdW5jdGlvbiBjYWxsZWQuCiAgICAgIHxUaGUgbW9kdWxlLCB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGluLiBJbiB0aGlzIGNhc2UgaXQgaXMgS0VSTkVMLgoJCSAgICAgICAgCnxSZXQgIEtFUk5FTC45MDogTFNUUkxFTigpIHJldHZhbD0weDAwMDQgcmV0PTAxZTc6MmNlNyBkcz0wMjI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KCQkJCSAgfFJldHVybnZhbHVlIGlzIDE2IGJpdCBhbmQgaGFzIHRoZSB2YWx1ZSA0LgoKCiAzLiBJZiB5b3UgaGF2ZSBmb3VuZCBhIG1pc2JlaGF2aW5nIGZ1bmN0aW9uLCB0cnkgdG8gZmluZCBvdXQgd2h5IGl0CiAgICBtaXNiZWhhdmVzLiBGaW5kIHRoZSBmdW5jdGlvbiBpbiB0aGUgc291cmNlIGNvZGUuIFRyeSB0byBtYWtlIHNlbnNlIG9mCiAgICB0aGUgYXJndW1lbnRzIHBhc3NlZC4gVXN1YWxseSB0aGVyZSBpcyBhICdUUkFDRSg8Y2hhbm5lbD4sIiguLi4pXG4iKTsnIAogICAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFJlcnVuIHdpbmUgd2l0aCAKICAgICItZGVidWdtc2cgK3h5eiwrcmVsYXkiIGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZS4KCiA0LiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWJ1ZyB1c2luZyB0aGUgaW50ZXJuYWwgZGVidWdnZXIgY2FuIGJlIAogICAgZm91bmQgaW4gZGVidWdnZXIvUkVBRE1FLgoKIDUuIElmIHRob3NlIGluZm9ybWF0aW9uIGlzbid0IGNsZWFyIGVub3VnaCBvciBpZiB5b3Ugd2FudCB0byBrbm93IG1vcmUgYWJvdXQKICAgIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiwgdHJ5IHJ1bm5pbmcgd2luZSB3aXRoICItZGVidWdtc2cKICAgICthbGwiLCB3aGljaCBkdW1wcyBBTEwgaW5jbHVkZWQgZGVidWcgaW5mb3JtYXRpb24gaW4gd2luZS4KCiA2LiBJZiB0aGF0IGlzbid0IGVub3VnaCBhZGQgbW9yZSBkZWJ1ZyBvdXRwdXQgZm9yIHlvdXJzZWxmIGludG8gdGhlCiAgICBmdW5jdGlvbnMgeW91IGZpbmQgcmVsZXZhbnQuICBTZWUgZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzLgogICAgWW91IG1pZ2h0IGFsc28gdHJ5IHRvIHJ1biB0aGUgcHJvZ3JhbSBpbiBnZGIgaW5zdGVhZCBvZiB1c2luZyB0aGUKICAgIFdJTkUtZGVidWdnZXIuIElmIHlvdSBkbyB0aGF0LCB1c2UgImhhbmRsZSBTSUdTRUdWIG5vc3RvcCBub3ByaW50IgogICAgdG8gZGlzYWJsZSB0aGUgaGFuZGxpbmcgb2Ygc2VnIGZhdWx0cyBpbnNpZGUgZ2RiIChuZWVkZWQgZm9yIFdpbjE2KS4KICAgIElmIHlvdSBkb24ndCB1c2UgdGhlICItZGVza3RvcCIgb3IgIi1tYW5hZ2VkIiBvcHRpb24sCiAgICBzdGFydCB0aGUgV0lORSBwcm9jZXNzIHdpdGggIi1zeW5jIiwgb3IgY2hhbmNlcyBhcmUgZ29vZCB0byBnZXQgWCBpbnRvCiAgICBhbiB1bnVzYWJsZSBzdGF0ZS4KICAKIDcuIFlvdSBjYW4gYWxzbyBzZXQgYSBicmVha3BvaW50IGZvciB0aGF0IGZ1bmN0aW9uLiBTdGFydCB3aW5lIHdpdGggdGhlCiAgICAiLWRlYnVnIiBvcHRpb24gYWRkZWQgdG8gdGhlIGNvbW1hbmRsaW5lLiBBZnRlciBsb2FkaW5nIHRoZSBleGVjdXRhYmxlCiAgICB3aW5lIHdpbGwgZW50ZXIgdGhlIGludGVybmFsIGRlYnVnZ2VyLiBVc2UgImJyZWFrIEtFUk5FTF9MU1RSTEVOIgogICAgKHJlcGxhY2UgYnkgZnVuY3Rpb24geW91IHdhbnQgdG8gZGVidWcsIENBU0UgSVMgUkVMRVZBTlQuKSB0byBzZXQgYQogICAgYnJlYWtwb2ludC4gIFRoZW4gdXNlICJjb250aW51ZSIgdG8gc3RhcnQgbm9ybWFsIHByb2dyYW0tZXhlY3V0aW9uLiBXaW5lCiAgICB3aWxsIHN0b3AgaWYgaXQgcmVhY2hlcyB0aGUgYnJlYWtwb2ludC4gSWYgdGhlIHByb2dyYW0gaXNuJ3QgeWV0IGF0IHRoZQogICAgY3Jhc2hpbmcgY2FsbCBvZiB0aGF0IGZ1bmN0aW9uLCB1c2UgImNvbnRpbnVlIiBhZ2FpbiB1bnRpbCB5b3UgYXJlIGFib3V0CiAgICB0byBlbnRlciB0aGF0IGZ1bmN0aW9uLiBZb3UgbWF5IG5vdyBwcm9jZWVkIHdpdGggc2luZ2xlLXN0ZXBwaW5nIHRoZQogICAgZnVuY3Rpb24gdW50aWwgeW91IHJlYWNoIHRoZSBwb2ludCBvZiBjcmFzaC4gVXNlIHRoZSBvdGhlciBkZWJ1Z2dlcgogICAgY29tbWFuZHMgdG8gcHJpbnQgcmVnaXN0ZXJzIGFuZCB0aGUgbGlrZS4KCgpQcm9ncmFtIGhhbmdzLCBub3RoaW5nIGhhcHBlbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIFN3aXRjaCB0byBVTklYIHNoZWxsLCBnZXQgdGhlIHByb2Nlc3MtSUQgdXNpbmcgInBzIC1hfGdyZXAgd2luZSIsIGFuZCBkbyBhCiAgImtpbGwgLUhVUCA8cGlkPiIgKHdpdGhvdXQgIiBhbmQgPD4pLiBXaW5lIHdpbGwgdGhlbiBlbnRlciBpdHMgaW50ZXJuYWwKICBkZWJ1Z2dlciBhbmQgeW91IGNhbiBwcm9jZWVkIGFzIGV4cGxhaW5lZCBhYm92ZS4gQWxzbywgeW91IGNhbiB1c2UgLWRlYnVnCiAgc3dpdGNoIGFuZCB0aGVuIHlvdSBjYW4gZ2V0IGludG8gaW50ZXJuYWwgZGVidWdnZXIgYnkgcHJlc3NpbmcgQ3RybC1DIGluIAogIHRoZSB0ZXJtaW5hbCB3aGVyZSB5b3UgcnVuIFdpbmUuCgpQcm9ncmFtIHJlcG9ydHMgYW4gZXJyb3Igd2l0aCBhIE1lc3NhZ2Vib3gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIFNvbWV0aW1lcyBwcm9ncmFtcyBhcmUgcmVwb3J0aW5nIGZhaWx1cmUgdXNpbmcgYSBtb3JlIG9yIGxlc3Mgbm9uZGVzY3JpcHQKICBtZXNzYWdlYm94ZXMuIFdlIGNhbiBkZWJ1ZyB0aGlzIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBhcyBDcmFzaGVzLCBidXQgdGhlcmUKICBpcyBvbmUgcHJvYmxlbS4uLiBGb3Igc2V0dGluZyB1cCBhIG1lc3NhZ2UgYm94IHRoZSBwcm9ncmFtIGFsc28gY2FsbHMgV2luZQogIHByb2R1Y2luZyBodWdlIGNodW5rcyBvZiBkZWJ1ZyBjb2RlLgoKICBTaW5jZSB0aGUgZmFpbHVyZSBoYXBwZW5zIHVzdWFsbHkgZGlyZWN0bHkgYmVmb3JlIHNldHRpbmcgdXAgdGhlIE1lc3NhZ2Vib3gKICB5b3UgY2FuIHN0YXJ0IHdpbmUgd2l0aCAiLWRlYnVnIiBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUsIHNldCBhIGJyZWFrcG9pbnQKICBhdCAiTWVzc2FnZUJveDMyQSIgKGNhbGxlZCBieSB3aW4xNiBhbmQgd2luMzIgcHJvZ3JhbXMpIGFuZCBwcm9jZWVkIHdpdGgKICAiY29udGludWUiLiBXaXRoICItZGVidWdtc2cgK2FsbCIgV2luZSB3aWxsIG5vdyBzdG9wIGRpcmVjdGx5IGJlZm9yZSAKICBzZXR0aW5nIHVwIHRoZSBNZXNzYWdlYm94LiAgUHJvY2VlZCBhcyBleHBsYWluZWQgYWJvdmUuCgogIFlvdSBjYW4gYWxzbyBydW4gd2luZSB1c2luZyAid2luZSAtZGVidWdtc2cgK3JlbGF5IHByb2dyYW0uZXhlIDI+JjF8bGVzcyAtaSIKICBhbmQgaW4gbGVzcyBzZWFyY2ggZm9yIG1lc3NhZ2Vib3guCgpEaXNhc3NlbWJsaW5nIHByb2dyYW1zOgo9PT09PT09PT09PT09PT09PT09PT09PQogIFlvdSBtYXkgYWxzbyB0cnkgdG8gZGlzYXNzZW1ibGUgdGhlIG9mZmVuZGluZyBwcm9ncmFtIHRvIGNoZWNrIGZvciAKICB1bmRvY3VtZW50ZWQgZmVhdHVyZXMgYW5kL29yIHVzZSBvZiB0aGVtLgoKICBUaGUgYmVzdCwgZnJlZWx5IGF2YWlsYWJsZSwgZGlzYXNzZW1ibGVyIGZvciBXaW4xNiBwcm9ncmFtcyBpcwogIFdpbmRvd3MgQ29kZWJhY2ssIGFyY2hpdmVuYW1lIHdjYnh4eC56aXAsIHdoaWNoIHVzdWFsbHkgY2FuIGJlIGZvdW5kCiAgaW4gdGhlIENpY2EtTWlycm9yIHN1YmRpcmVjdG9yeSBvbiB0aGUgV0lORSBmdHBzaXRlcy4gKFNlZSBBTk5PVU5DRSkuCgogIERpc2Fzc2VtYmxpbmcgd2luMzIgcHJvZ3JhbXMgaXMgcG9zc2libGUgdXNpbmcgdGhlIFdpbmRvd3MgRGlzYXNzZW1ibGVyIDMyLAogIGFyY2hpdmVuYW1lIHNvbWV0aGluZyBsaWtlIHczMmRzbTg3LnppcCAob3Igc2ltaWxhcikgb24gZnRwLndpbnNpdGUuY29tCiAgYW5kIG1pcnJvcnMuICBUaGUgc2hhcmV3YXJlIHZlcnNpb24gZG9lcyBub3QgYWxsb3cgc2F2aW5nIG9mIGRpc2Fzc2VtYmx5CiAgbGlzdGluZ3MuCiAgWW91IGNhbiBhbHNvIHVzZSB0aGUgbmV3ZXIgKGFuZCBpbiB0aGUgZnVsbCB2ZXJzaW9uIGJldHRlcikgSW50ZXJhY3RpdmUKICBEaXNhc3NlbWJsZXIgKElEQSkgZnJvbSB0aGUgZnRwIHNpdGVzIG1lbnRpb25lZCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KCiAgVW5kZXJzdGFuZGluZyBkaXNhc3NlbWJsZWQgY29kZSBpcyBtb3N0bHkgYSBxdWVzdGlvbiBvZiBleGVyY2lzZS4KCiAgTW9zdCBjb2RlIG91dCB0aGVyZSB1c2VzIHN0YW5kYXJkIEMgZnVuY3Rpb24gZW50cmllcyAoZm9yIGl0IGlzIHVzdWFsbHkgCiAgd3JpdHRlbiBpbiBDKS4gV2luMTYgZnVuY3Rpb24gZW50cmllcyB1c3VhbGx5IGxvb2sgbGlrZSB0aGF0Ogp8ICAJcHVzaCBicAp8CW1vdiBicCwgc3AKfAkuLi4gZnVuY3Rpb24gY29kZSAuLgp8CXJldGYgWFhYWCAJPC0tLS0tLS0tLSBYWFhYIGlzIG51bWJlciBvZiBieXRlcyBvZiBhcmd1bWVudHMKCiAgVGhpcyBpcyBhIEZBUiBmdW5jdGlvbiB3aXRoIG5vIGxvY2FsIHN0b3JhZ2UuIFRoZSBhcmd1bWVudHMgdXN1YWxseSBzdGFydAogIGF0IFticCs2XSB3aXRoIGluY3JlYXNpbmcgb2Zmc2V0cy4gTm90ZSwgdGhhdCBbYnArNl0gYmVsb25ncyB0byB0aGUgUklHSFRNT1NUIAogIGFyZ3VtZW50LCBmb3IgZXhwb3J0ZWQgd2luMTYgZnVuY3Rpb25zIHVzZSB0aGUgUEFTQ0FMIGNhbGxpbmcgY29udmVudGlvbi4KICBTbywgaWYgd2UgdXNlIHN0cmNtcChhLGIpIHdpdGggYSBhbmQgYiBib3RoIDMyIGJpdCB2YXJpYWJsZXMgYiB3b3VsZCBiZSBhdAogIFticCs2XSBhbmQgYSBhdCBbYnArMTBdLgogIE1vc3QgZnVuY3Rpb25zIG1ha2UgYWxzbyB1c2Ugb2YgbG9jYWwgc3RvcmFnZSBpbiB0aGUgc3RhY2tmcmFtZToKfAllbnRlciAwMDg2LCAwMAp8CS4uLiBmdW5jdGlvbiBjb2RlIC4uLgp8CWxlYXZlCnwJcmV0ZiBYWFhYCiAgVGhpcyBkb2VzIG1vc3RseSB0aGUgc2FtZSBhcyBhYm92ZSwgYnV0IGFsc28gYWRkcyAweDg2IGJ5dGVzIG9mCiAgc3RhY2tzdG9yYWdlLCB3aGljaCBpcyBhY2Nlc3NlZCB1c2luZyBbYnAteHhdLgogIEJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24sIGFyZ3VtZW50cyBhcmUgcHVzaGVkIG9uIHRoZSBzdGFjayB1c2luZyBzb21ldGhpbmcKICBsaWtlIHRoaXM6CnwJcHVzaCB3b3JkIHB0ciBbYnAtMDJdCTwtIHdpbGwgYmUgYXQgW2JwKzhdCnwJcHVzaCBkaQkJCTwtIHdpbGwgYmUgYXQgW2JwKzZdCnwJY2FsbCBLRVJORUwuTFNUUkxFTgogIEhlcmUgZmlyc3QgdGhlIHNlbGVjdG9yIGFuZCB0aGVuIHRoZSBvZmZzZXQgdG8gdGhlIHBhc3NlZCBzdHJpbmcgYXJlIHB1c2hlZC4KClNhbXBsZSBkZWJ1Z2dpbmcgc2Vzc2lvbjoKPT09PT09PT09PT09PT09PT09PT09PT09PQoKICBMZXQncyBkZWJ1ZyB0aGUgaW5mYW1vdXMgV29yZCBTSEFSRS5FWEUgbWVzc2FnZWJveDogCgp8bWFyY3VzQGpldCAkIHdpbmUgd2lud29yZC5leGUKfCAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgICAgICAgICAgICB8ICEgIFlvdSBtdXN0IGxlYXZlIFdpbmRvd3MgYW5kIGxvYWQgU0hBUkUuRVhFfAp8ICAgICAgICAgICAgfCAgICBiZWZvcmUgc3RhcnRpbmcgV29yZC4gICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKfG1hcmN1c0BqZXQgJCB3aW5lIHdpbndvcmQuZXhlIC1kZWJ1Z21zZyArcmVsYXkgLWRlYnVnCnxDYWxsVG8zMih3bmRwcm9jPTB4NDAwNjViYzAsaHduZD0wMDAwMDFhYyxtc2c9MDAwMDAwODEsd3A9MDAwMDAwMDAsbHA9MDAwMDAwMDApCnxXaW4xNiB0YXNrICd3aW53b3JkJzogQnJlYWtwb2ludCAxIGF0IDB4MDFkNzoweDAwMWEKfENhbGxUbzE2KGZ1bmM9MDEyNzowMDcwLGRzPTA5MjcpCnxDYWxsIFdQUk9DUy4yNDogVEFTS19SRVNDSEVEVUxFKCkgcmV0PTAwYjc6MTQ1NiBkcz0wOTI3CnxSZXQgIFdQUk9DUy4yNDogVEFTS19SRVNDSEVEVUxFKCkgcmV0dmFsPTB4ODY3MiByZXQ9MDBiNzoxNDU2IGRzPTA5MjcKfENhbGxUbzE2KGZ1bmM9MDFkNzowMDFhLGRzPTA5MjcpCnwgICAgIEFYPTAwMDAgQlg9M2NiNCBDWD0xZjQwIERYPTAwMDAgU0k9MDAwMCBEST0wOTI3IEJQPTAwMDAgRVM9MTFmNwp8TG9hZGluZyBzeW1ib2xzOiAvaG9tZS9tYXJjdXMvd2luZS93aW5lLi4uCnxTdG9wcGVkIG9uIGJyZWFrcG9pbnQgMSBhdCAweDAxZDc6MHgwMDFhCnxJbiAxNiBiaXQgbW9kZS4KfFdpbmUtZGJnPmJyZWFrIE1lc3NhZ2VCb3gzMkEgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tIFNldCBCcmVha3BvaW50CnxCcmVha3BvaW50IDIgYXQgMHg0MDE4OTEwMCAoTWVzc2FnZUJveDMyQSBbbXNnYm94LmM6MTkwXSkKfFdpbmUtZGJnPmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tIENvbnRpbnVlCnxDYWxsIEtFUk5FTC45MTogSU5JVFRBU0soKSByZXQ9MDE1NzowMDIyIGRzPTA4YTcKfCAgICAgQVg9MDAwMCBCWD0zY2I0IENYPTFmNDAgRFg9MDAwMCBTST0wMDAwIERJPTA4YTcgRVM9MTFkNyBFRkw9MDAwMDAyODYKfENhbGxUbzE2KGZ1bmM9MDkwZjowODVjLGRzPTBkY2YsMHgwMDAwLDB4MDAwMCwweDAwMDAsMHgwMDAwLDB4MDgwMCwweDAwMDAsMHgwMDAwLDB4MGRjZikKfC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tLSBNdWNoIGRlYnVnb3V0cHV0CnxDYWxsIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgweDAwMDApIHJldD0wNjBmOjA5N2IgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIERyaXZlIDAgKEE6KQp8UmV0ICBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoKSByZXR2YWw9MHgwMDAyIHJldD0wNjBmOjA5N2IgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eICBEUklWRV9SRU1PVkVBQkxFCgkJCQkJCShJdCBpcyBhIGZsb3BweSBkaXNrZHJpdmUuKQoKfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMSkgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gRHJpdmUgMSAoQjopCnxSZXQgIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgpIHJldHZhbD0weDAwMDAgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gIERSSVZFX0NBTk5PVERFVEVSTUlORQoJCQkJCQkoSSBkb24ndCBoYXZlIGRyaXZlIEI6IGFzc2lnbmVkKQoKfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMikgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eIERyaXZlIDIgKEM6KQp8UmV0ICBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoKSByZXR2YWw9MHgwMDAzIHJldD0wNjBmOjA5N2IgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIERSSVZFX0ZJWEVECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwZWNpZmllZCBhcyBhIGhhcmRkaXNrKQoKfENhbGwgS0VSTkVMLjk3OiBHRVRURU1QRklMRU5BTUUoMHgwMGMzLDB4MDkyNzgzNjQiZG9jIiwweDAwMDAsMDkyNzo4MjQ4KSByZXQ9MDYwZjowOWIxIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eICAgICAgICAgICBeXl5eXiAgICAgICAgXl5eXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxidWZmZXIgZm9yIGZuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfHRlbXBvcmFyeSBuYW1lIH5kb2NYWFhYLnRtcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Rm9yY2UgdXNlIG9mIERyaXZlIEM6LgoKfFdhcm5pbmc6IEdldFRlbXBGaWxlTmFtZSByZXR1cm5zICdDOn5kb2M5MjgxLnRtcCcsIHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBiZSB3cml0ZWFibGUuCnxQbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgaWYgdGhpcyBnZW5lcmF0ZXMgYSBmYWlsdXJlLgoKV2hvb3BzLCBpdCBldmVuIGRldGVjdHMgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmchCgp8UmV0ICBLRVJORUwuOTc6IEdFVFRFTVBGSUxFTkFNRSgpIHJldHZhbD0weDkyODEgcmV0PTA2MGY6MDliMSBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBUZW1wb3Jhcnkgc3RvcmFnZSBJRAoKfENhbGwgS0VSTkVMLjc0OiBPUEVORklMRSgweDA5Mjc4MjQ4IkM6fmRvYzkyODEudG1wIiwwOTI3OjgyZGEsMHgxMDEyKSByZXQ9MDYwZjowOWQ4IGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXiBeXl5eXl5eXl4gXl5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ZmlsZW5hbWUgICAgICAgIHxPRlNUUlVDVCB8b3BlbiBtb2RlOgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZfQ1JFQVRFfE9GX1NIQVJFX0VYQ0xVU0lWRXxPRl9SRUFEV1JJVEUKClRoaXMgZmFpbHMsIHNpbmNlIG15IEM6IGRyaXZlIGlzIGluIHRoaXMgY2FzZSBtb3VudGVkIHJlYWRvbmx5LgoKfFJldCAgS0VSTkVMLjc0OiBPUEVORklMRSgpIHJldHZhbD0weGZmZmYgcmV0PTA2MGY6MDlkOCBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIEhGSUxFX0VSUk9SMTYsIHllcywgaXQgZmFpbGVkLgoKfENhbGwgVVNFUi4xOiBNRVNTQUdFQk9YKDB4MDAwMCwweDA5Mjc4Mzc2IlNpZSBt/HNzZW4gV2luZG93cyB2ZXJsYXNzZW4gdW5kIFNIQVJFLkVYRSBsYWRlbiBiZXZvciBTaWUgV29yZCBzdGFydGVuLiIsMHgwMDAwMDAwMCwweDEwMzApIHJldD0wNjBmOjA4NGYgZHM9MDkyNwogICAgICAgICAgIApBbmQgTWVzc2FnZUJveCdlZC4KCnxTdG9wcGVkIG9uIGJyZWFrcG9pbnQgMiBhdCAweDQwMTg5MTAwIChNZXNzYWdlQm94MzJBIFttc2dib3guYzoxOTBdKQp8MTkwICAgICB7CQk8LSB0aGUgc291cmNlbGluZQpJbiAzMiBiaXQgbW9kZS4KV2luZS1kYmc+CgoJVGhlIGNvZGUgc2VlbXMgdG8gZmluZCBhIHdyaXRlYWJsZSBoYXJkZGlzayBhbmQgdHJpZXMgdG8gY3JlYXRlIGEgZmlsZQoJdGhlcmUuIFRvIHdvcmsgYXJvdW5kIHRoaXMgYnVnLCB5b3UgY2FuIGRlZmluZSBDOiBhcyBhIG5ldHdvcmtkcml2ZSwKCXdoaWNoIGlzIGlnbm9yZWQgYnkgdGhlIGNvZGUgYWJvdmUuCgpXcml0dGVuIGJ5IE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPiwKYWRkaXRpb25zIHdlbGNvbWUuCi0tLS0tLS0KCkhlcmUgYXJlIHNvbWUgdXNlZnVsIGRlYnVnZ2luZyB0aXBzLCBhZGRlZCBieSBBbmRyZWFzIE1vaHI6CgoKYSkgSWYgeW91IGhhdmUgYSBwcm9ncmFtIGNyYXNoaW5nIGF0IHN1Y2ggYW4gZWFybHkgbG9hZGVyIHBoYXNlIHRoYXQgeW91IGNhbid0CnVzZSB0aGUgV2luZSBkZWJ1Z2dlciBub3JtYWxseSwgYnV0IFdpbmUgYWxyZWFkeSBleGVjdXRlcyB0aGUgcHJvZ3JhbSdzCnN0YXJ0IGNvZGUsIHRoZW4geW91IG1heSB1c2UgYSBzcGVjaWFsIHRyaWNrOgpZb3Ugc2hvdWxkIGRvIGEKd2luZSAtZGVidWdtc2cgK3JlbGF5IHByb2dyYW0KdG8gZ2V0IGEgbGlzdGluZyBvZiB0aGUgZnVuY3Rpb25zIHRoZSBwcm9ncmFtIGNhbGxzIGluIGl0cyBzdGFydCBmdW5jdGlvbi4KTm93IHlvdSBkbyBhCndpbmUgLWRlYnVnIHdpbmZpbGUuZXhlClRoaXMgd2F5LCB5b3UgZ2V0IGludG8gV2luZS1kYmcuIE5vdyB5b3UgY2FuIHNldCBhIGJyZWFrcG9pbnQgb24gYW55CmZ1bmN0aW9uIHRoZSBwcm9ncmFtIGNhbGxzIGluIHRoZSBzdGFydCBmdW5jdGlvbiBhbmQganVzdCB0eXBlICJjIiB0byBieXBhc3MKdGhlIGV2ZW50dWFsIGNhbGxzIG9mIFdpbmZpbGUgdG8gdGhpcyBmdW5jdGlvbiB1bnRpbCB5b3UgYXJlIGZpbmFsbHkgYXQgdGhlCnBsYWNlIHdoZXJlIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgdGhlIGNyYXNoaW5nIHN0YXJ0IGZ1bmN0aW9uLgpOb3cgeW91IGNhbiBwcm9jZWVkIHdpdGggeW91ciBkZWJ1Z2dpbmcgYXMgdXN1YWwuCgoKYikgSWYgeW91IHRyeSB0byBydW4gYSBwcm9ncmFtIGFuZCBpdCBxdWl0cyBhZnRlciBzaG93aW5nIGFuIGVycm9yIG1lc3NhZ2Vib3gsCnRoZSBwcm9ibGVtIGNhbiB1c3VhbGx5IGJlIGlkZW50aWZpZWQgaW4gdGhlIHJldHVybiB2YWx1ZSBvZiBvbmUgb2YgdGhlCmZ1bmN0aW9ucyBleGVjdXRlZCBiZWZvcmUgTWVzc2FnZUJveCgpLgpUaGF0J3Mgd2h5IHlvdSBzaG91bGQgcmUtcnVuIHRoZSBwcm9ncmFtIHdpdGggZS5nLgp3aW5lIC1kZWJ1Z21zZyArcmVsYXkgPHByb2dyYW0gbmFtZT4gJj5yZWxtc2cKVGhlbiBkbyBhICJtb3JlIHJlbG1zZyIgYW5kIHNlYXJjaCBmb3IgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIGNhbGwgdG8gdGhlIHN0cmluZyAiTUVTU0FHRUJPWCIuClRoaXMgaXMgYSBsaW5lIGxpa2UKQ2FsbCBVU0VSLjE6IE1FU1NBR0VCT1goMHgwMDAwLDB4MDFmZjEyNDYgIlJ1bnRpbWUgZXJyb3IgMjE5IGF0IDAwMDQ6MTA1Ni4iLDB4MDAwMDAwMDAsMHgxMDEwKSByZXQ9MDFmNzoyMTYwIGRzPTAxZmYKCkluIG15IGV4YW1wbGUgdGhlIGxpbmVzIGJlZm9yZSB0aGUgY2FsbCB0byBNZXNzYWdlQm94KCkgbG9vayBsaWtlIHRoYXQ6CgpDYWxsIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoMHgwMzQ3KSByZXQ9MDFjZjoxMDMzIGRzPTAxZmYKQ2FsbFRvMTYoZnVuYz0wMzNmOjAwNzIsZHM9MDFmZiwweDAwMDApClJldCAgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgpIHJldHZhbD0weDAwMDEgcmV0PTAxY2Y6MTAzMyBkcz0wMWZmCkNhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAzNmYpIHJldD0wMWNmOjEwNDMgZHM9MDFmZgpDYWxsVG8xNihmdW5jPTAzNjc6MDA3Mixkcz0wMWZmLDB4MDAwMCkKUmV0ICBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKCkgcmV0dmFsPTB4MDAwMSByZXQ9MDFjZjoxMDQzIGRzPTAxZmYKQ2FsbCBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKDB4MDMxZikgcmV0PTAxY2Y6MTA1YyBkcz0wMWZmCkNhbGxUbzE2KGZ1bmM9MDMxNzowMDcyLGRzPTAxZmYsMHgwMDAwKQpSZXQgIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoKSByZXR2YWw9MHgwMDAxIHJldD0wMWNmOjEwNWMgZHM9MDFmZgpDYWxsIFVTRVIuMTcxOiBXSU5IRUxQKDB4MDJhYywweDAxZmYwNWI0ICJDT01FVC5ITFAiLDB4MDAwMiwweDAwMDAwMDAwKSByZXQ9MDFjZjoxMDcwIGRzPTAxZmYKQ2FsbFRvMTYoZnVuYz0wMTE3OjAwODAsZHM9MDFmZikKQ2FsbCBXUFJPQ1MuMjQ6IFRBU0tfUkVTQ0hFRFVMRSgpIHJldD0wMGE3OjBhMmQgZHM9MDAyYgpSZXQgIFdQUk9DUy4yNDogVEFTS19SRVNDSEVEVUxFKCkgcmV0dmFsPTB4MDAwMCByZXQ9MDBhNzowYTJkIGRzPTAwMmIKUmV0ICBVU0VSLjE3MTogV0lOSEVMUCgpIHJldHZhbD0weDAwMDEgcmV0PTAxY2Y6MTA3MCBkcz0wMWZmCkNhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAxYmUpIHJldD0wMWRmOjNlMjkgZHM9MDFmZgpSZXQgIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoKSByZXR2YWw9MHgwMDAwIHJldD0wMWRmOjNlMjkgZHM9MDFmZgpDYWxsIEtFUk5FTC41MjogRlJFRVBST0NJTlNUQU5DRSgweDAyY2YwMGJhKSByZXQ9MDFmNzoxNDYwIGRzPTAxZmYKUmV0ICBLRVJORUwuNTI6IEZSRUVQUk9DSU5TVEFOQ0UoKSByZXR2YWw9MHgwMDAxIHJldD0wMWY3OjE0NjAgZHM9MDFmZgpDYWxsIFVTRVIuMTogTUVTU0FHRUJPWCgweDAwMDAsMHgwMWZmMTI0NiAiUnVudGltZSBlcnJvciAyMTkgYXQgMDAwNDoxMDU2LiIsMHgwMDAwMDAwMCwweDEwMTApIHJldD0wMWY3OjIxNjAgZHM9MDFmZgoKSSB0aGluayB0aGF0IHRoZSBjYWxsIHRvIE1lc3NhZ2VCb3goKSBpbiB0aGlzIGV4YW1wbGUgaXMgX25vdF8gY2F1c2VkCmJ5IGEgd3JvbmcgcmVzdWx0IHZhbHVlIG9mIHNvbWUgcHJldmlvdXNseSBleGVjdXRlZCBmdW5jdGlvbiAoaXQncwpoYXBwZW5pbmcgcXVpdGUgb2Z0ZW4gbGlrZSB0aGF0KSwgYnV0IGluc3RlYWQgdGhlIG1lc3NhZ2Vib3ggY29tcGxhaW5zCmFib3V0IGEgcnVudGltZSBlcnJvciBhdCAweDAwMDQ6MHgxMDU2LgoKQXMgdGhlIHNlZ21lbnQgdmFsdWUgb2YgdGhlIGFkZHJlc3MgaXMgb25seSAiNCIsIEkgdGhpbmsgdGhhdCB0aGF0IGlzCm9ubHkgYW4gaW50ZXJuYWwgcHJvZ3JhbSB2YWx1ZS4gQnV0IHRoZSBvZmZzZXQgYWRkcmVzcyByZXZlYWxzIHNvbWV0aGluZwpxdWl0ZSBpbnRlcmVzdGluZzoKCk9mZnNldCAxMDU2IGlzIF92ZXJ5XyBjbG9zZSB0byB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgRlJFRUxJQlJBUlkoKToKCkNhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAzMWYpIHJldD0wMWNmOjEwNWMgZHM9MDFmZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eClByb3ZpZGVkIHRoYXQgc2VnbWVudCAweDAwMDQgaXMgaW5kZWVkCnNlZ21lbnQgMHgxY2YsIHdlIG5vdyB3ZSBjYW4gdXNlIElEQSAoYXZhaWxhYmxlIGF0CmZ0cDovL2Z0cC51bmkta29lbG4uZGUvcGMvbXNkb3MvcHJvZ3JhbW1pbmcvYXNzZW1ibGVyL2lkYTM1YnguemlwKQp0byBkaXNhc3NlbWJsZSB0aGUgcGFydCB0aGF0IGNhdXNlZCB0aGUgZXJyb3IuIFdlIGp1c3QgaGF2ZSB0byBmaW5kCnRoZSBhZGRyZXNzIG9mIHRoZSBjYWxsIHRvIEZyZWVMaWJyYXJ5KCkuIFNvbWUgbGluZXMgYmVmb3JlIHRoYXQgdGhlCnJ1bnRpbWUgZXJyb3Igb2NjdXJyZWQuICBCdXQgYmUgY2FyZWZ1bCAhIEluIHNvbWUgY2FzZXMgeW91IGRvbid0IGhhdmUKdG8gZGlzYXNzZW1ibGUgdGhlIG1haW4gcHJvZ3JhbSwgYnV0IGluc3RlYWQgc29tZSBETEwgY2FsbGVkIGJ5IGl0IGluCm9yZGVyIHRvIGZpbmQgdGhlIGNvcnJlY3QgcGxhY2Ugd2hlcmUgdGhlIHJ1bnRpbWUgZXJyb3Igb2NjdXJyZWQuIFRoYXQKY2FuIGJlIGRldGVybWluZWQgYnkgZmluZGluZyB0aGUgb3JpZ2luIG9mIHRoZSBzZWdtZW50IHZhbHVlIChpbiB0aGlzCmNhc2UgMHgxY2YpLgoKYykgSWYgeW91IGhhdmUgY3JlYXRlZCBhIHJlbGF5IGZpbGUgb2Ygc29tZSBjcmFzaGluZyBwcm9ncmFtIGFuZCB3YW50IHRvIHNldCBhCmJyZWFrcG9pbnQgYXQgYSBjZXJ0YWluIGxvY2F0aW9uIHdoaWNoIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGFzIHRoZQpwcm9ncmFtIGxvYWRzIHRoZSBicmVha3BvaW50J3Mgc2VnbWVudCBkdXJpbmcgZXhlY3V0aW9uLAp5b3UgbWF5IHNldCBhIGJyZWFrcG9pbnQgdG8gR2V0VmVyc2lvbjE2LzMyIGFzIHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkCnZlcnkgb2Z0ZW4uClRoZW4gZG8gYSAiYyIgdW50aWwgeW91IGFyZSBhYmxlIHRvIHNldCB0aGlzIGJyZWFrcG9pbnQgd2l0aG91dCBlcnJvciBtZXNzYWdlLgoKZCkgU29tZSB1c2VmdWwgcHJvZ3JhbXM6CklEQTogZnRwOi8vZnRwLnVuaS1rb2Vsbi5kZS9wYy9tc2Rvcy9wcm9ncmFtbWluZy9hc3NlbWJsZXIvaWRhMzVieC56aXAKKlZlcnkqIGdvb2QgRE9TIGRpc2Fzc2VtYmxlciAhIEl0J3MgYmFkbHkgbmVlZGVkIGZvciBkZWJ1Z2dpbmcgV2luZSBzb21ldGltZXMuCgpYUkFZOiBmdHA6Ly9mdHAudGgtZGFybXN0YWR0LmRlL3B1Yi9tYWNoaW5lcy9tcy1kb3MvU2ltVGVsL21zZG9zL2FzbXV0aWwveHJheTE1LnppcApUcmFjZXMgRE9TIGNhbGxzIChJbnQgMjFoLCBEUE1JLCAuLi4pLiBVc2UgaXQgd2l0aCBXaW5kb3dzIHRvIGNvcnJlY3QKZmlsZSBtYW5hZ2VtZW50IHByb2JsZW1zIGV0Yy4KCnBlZHVtcDogaHR0cDovL29hay5vYWtsYW5kLmVkdS9wdWIvc2ltdGVsbmV0L3dpbjk1L3Byb2cvcGVkdW1wLnppcApEdW1wcyB0aGUgaW1wb3J0cyBhbmQgZXhwb3J0cyBvZiBhIFBFIChQb3J0YWJsZSBFeGVjdXRhYmxlKSBETEwuCgoKU29tZSBiYXNpYyBkZWJ1Z2dlciB1c2FnZXM6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQWZ0ZXIgc3RhcnRpbmcgeW91IHByb2dyYW0gd2l0aAogIHdpbmUgLWRlYnVnIG15cHJvZy5leGUKdGhlIHByb2dyYW0gbG9hZHMgYW5kIHlvdSBnZXQgYSBwcm9tcHQgYXQgdGhlIHByb2dyYW0gc3RhcnRpbmcgcG9pbnQuClRoZW4geW91IGNhbiBzZXQgYnJlYWtwb2ludHM6CiAgYiBSb3V0aW5lTmFtZSAgICAgIChieSBvdXRpbmUgbmFtZSkgT1IKICBiICoweDgxMjU3NSAgICAgICAgKGJ5IGFkZHJlc3MpClRoZW4geW91IGhpdCAnYycgKGNvbnRpbnVlKSB0byBydW4gdGhlIHByb2dyYW0uIEl0IHN0b3BzIGF0CnRoZSBicmVha3BvaW50LiBZb3UgY2FuIHR5cGUKICBzdGVwICAgICAgICAgICAgICAgKHRvIHN0ZXAgb25lIGxpbmUpIE9SCiAgc3RlcGkgICAgICAgICAgICAgICh0byBzdGVwIG9uZSBtYWNoaW5lIGluc3RydWN0aW9uIGF0IGEgdGltZTsKICAgICAgICAgICAgICAgICAgICAgIGhlcmUsIGl0IGhlbHBzIHRvIGtub3cgdGhlIGJhc2ljIDM4NgogICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gc2V0KQogIGluZm8gcmVnICAgICAgICAgICAodG8gc2VlIHJlZ2lzdGVycykKICBpbmZvIHN0YWNrICAgICAgICAgKHRvIHNlZSBoZXggdmFsdWVzIGluIHRoZSBzdGFjaykKICBpbmZvIGxvY2FsICAgICAgICAgKHRvIHNlZSBsb2NhbCB2YXJpYWJsZXMpCiAgbGlzdCA8bGluZSBudW1iZXI+ICh0byBsaXN0IHNvdXJjZSBjb2RlKQogIHggPHZhcmlhYmxlIG5hbWU+ICAodG8gZXhhbWluZSBhIHZhcmlhYmxlOyBvbmx5IHdvcmtzIGlmIGNvZGUKICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBjb21waWxlZCB3aXRoIG9wdGltaXphdGlvbikKICB4IDB4NDI2OTk3OCAgICAgICAgKHRvIGV4YW1pbmUgYSBtZW1vcnkgbG9jYXRpb24pCiAgPyAgICAgICAgICAgICAgICAgIChoZWxwKQogIHEgICAgICAgICAgICAgICAgICAocXVpdCkKQnkgaGl0dGluZyBFbnRlciwgeW91IHJlcGVhdCB0aGUgbGFzdCBjb21tYW5kLgo=