TGlzdCBvZiBrbm93biBGcmVlVHlwZSAyIEJ1Z3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiJJZGVudGlmaWVyIiBpcyBhIHN0cmluZyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgYnVnLiAgQSBtb3JlIGRldGFpbGVkCmRlc2NyaXB0aW9uIG9mIHRoZSBidWcgaXMgZm91bmQgYmVsb3cgdGhlIHRhYmxlIG9mIG9wZW5lZCBidWdzLgoKIkRhdGUiIGlzIHRoZSBkYXRlIHdoZW4gdGhlIGJ1ZyB3YXMgZmlyc3QgcmVwb3J0ZWQgb3IgZW50ZXJlZCBpbiB0aGlzCmRvY3VtZW50LiAgRGF0ZXMgYXJlIGluIF9FdXJvcGVhbl8gZm9ybWF0LCBpLmUgZGF5L21vbnRoL3llYXIuCgoiT3BlbmVkIEJ5IiBpcyB0aGUgbmFtZSBvZiB0aGUgcGVyc29uIHdobyBmaXJzdCBzcG90dGVkIHRoZSBidWcuICBOb3RlIHRoYXQKd2UgY2FuIHVzZSBhYmJyZXZpYXRpb25zIGhlcmUsIGxpa2U6CgogICJEYXZpZCIgZm9yIERhdmlkIFR1cm5lcgogICJXZXJuZXIiIGZvciBXZXJuZXIgTGVtYmVyZwogIGV0Yy4KCiJSZXByb2R1Y2VhYmxlIiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYnVnIGNvdWxkIGJlIHJlcHJvZHVjZWQgYnkgdGhlCmRldmVsb3BtZW50IHRlYW0gb3Igbm90IChpdCBjYW4gYmUgc3BlY2lmaWMgdG8gYSBnaXZlbiBwbGF0Zm9ybSksIHdoZXRoZXIgaXQKYWx3YXlzIGhhcHBlbnMsIG9yIG9ubHkgc3BvcmFkaWNhbGx5LCBldGMuCgoKCkkuIE9wZW4gYnVncwo9PT09PT09PT09PT0KCgpJZGVudGlmaWVyICAgICAgICAgICAgICAgICBEYXRlICAgICAgIE9wZW5lZCBieSAgICAgICAgICAgICAgICBSZXByb2R1Y2VhYmxlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpOTy1DSUQtQ01BUFMgICAgICAgICAgICAxMy0wOS0yMDAxICAgICBEYXZpZCAgICAgICAgICAgICAgICAgICAgIGFsd2F5cwpCQUQtVFQtUkVOREVSSU5HICAgICAgICAxMi0wOS0yMDAxICAgICBQYXVsIFBlZHJpYW5hICAgICAgICAgICAgID8KQkFELVRISU4tTElORVMgICAgICAgICAgMTMtMDktMjAwMSAgICAgRGF2aWQgICAgICAgICAgICAgICAgICAgICA/Ck5PVC1XSU5ET1dTLU1FVFJJQ1MgICAgIDA3LTEwLTIwMDEgICAgIERhdmlkICAgICAgICAgICAgICAgICAgICAgYWx3YXlzCkFEVkFOQ0VELUNPTVBPU0lURVMgICAgIDI1LTEwLTIwMDEgICAgIEdlb3JnZSBXaWxsaWFtcyAgICAgICAgICAgYWx3YXlzCgotLS0tLS0tLS0tLS0tLS0tLS0tLUVORC1PRi1PUEVORUQtQlVHUy1UQUJMRS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKSUkuIENsb3NlZCBidWdzCj09PT09PT09PT09PT09PQoKCklkZW50aWZpZXIgICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgIENsb3NlZCBieSAgICAgICAgICAgICAgICBDbG9zdXJlIGRhdGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJBRC1UVE5BTUVJRC5IICAgICAgICAgIDEyLTA5LTIwMDEgICAgIEFudG9pbmUgICAgICAgICAgICAgICAgICAgTi9BCkJBRC1UMS1DSEFSTUFQICAgICAgICAgIDE1LTA2LTIwMDEgICAgIERhdmlkICAgICAgICAgICAgICAgICAgICAgMi4wLjUKQkFELVVOSVhYWFgtTkFNRVMgICAgICAgMzAtMDctMjAwMSAgICAgRGF2aWQgICAgICAgICAgICAgICAgICAgICAyLjAuNQpHTFlQSF9UT19CSVRNQVAtQlVHICAgICAwNS0xMi0yMDAxICAgICBEYXZpZCAgICAgICAgICAgICAgICAgICAgIDA1LTEyLTIwMDEKQVVUT0hJTlQtTk8tU0JJVFMgICAgICAgMTMtMDktMjAwMSAgICAgRGF2aWQgICAgICAgICAgICAgICAgICAgICAyLjAuNgpUVC1HTFlQSC1DUkFTSCAgICAgICAgICAwMS0wMS0yMDAyICAgICBEYXZpZCAgICAgICAgICAgICAgICAgICAgIDIuMC42ClQxLUZPTlQtQ1JBU0ggICAgICAgICAgIDAxLTAxLTIwMDIgICAgIERhdmlkICAgICAgICAgICAgICAgICAgICAgMi4wLjYKQkFELUFEVkFOQ0VTICAgICAgICAgICAgMzAtMTEtMjAwMSAgICAgRGF2aWQgICAgICAgICAgICAgICAgICAgICAyLjAuNgpHTFlQSC1UTy1CSVRNQVAtQlVHICAgICAxNS0xMi0yMDAxICAgICBEYXZpZCAgICAgICAgICAgICAgICAgICAgIDIuMC42Ci0tLS0tLS0tLS0tLS0tLS0tLS0tRU5ELU9GLUNMT1NFRC1CVUdTLVRBQkxFLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgpJSUkuIEJ1ZyBkZXNjcmlwdGlvbnMKPT09PT09PT09PT09PT09PT09PT09CgoKLS0tIFNUQVJUIE9GIE9QRU4gQlVHUyAtLS0KCgpOTy1DSUQtQ01BUFMKCiAgTm90IGV4YWN0bHkgYSBidWcsIGJ1dCB0aGUgQ0ZGIGZvbnQgZHJpdmVyIGRvZXNuJ3QgYnVpbGQgYSBVbmljb2RlIGNoYXJtYXAKICBmcm9tIHRoZSBjb250ZW50cyBvZiBmb250IGZpbGVzLCB3aGljaCBwcmV2ZW50cyBlZmZpY2llbnRseSB1c2luZyBmb250cyBpbgogIHRoaXMgZm9ybWF0LgoKCgpCQUQtVFQtUkVOREVSSU5HCgogIEFjY29yZGluZyB0byBQYXVsIFBlZHJpYW5hIDxQUGVkcmlhbmFAbWF4aXMuY29tPiwgdGhlcmUgaXMgYSByYXRoZXIKICBpbXBvcnRhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJpbmcgb2YgVHJ1ZVR5cGUtaGludGVkIGdseXBocyBvZgogIGN1cnJlbnQgRlQyIGFuZCBvbGQgYmV0YXMuCgogIFRlc3RzIGFuZCBjb21wYXJpc29ucyBzaG93IGEgX21ham9yXyBkaXNjcmVwYW5jeSBvZiBtb25vY2hyb21lIHRydWV0eXBlCiAgYnl0ZWNvZGUtaGludGVkIGdseXBocyEgIFNvbWV0aGluZyBzZWVtcyB0byBiZSByZWFsbHkgYnJva2VuIGhlcmUhCgogIFNvbWUgb2YgdGhpcyBoYXMgYmVlbiBmaXhlZCBpbiAyLjAuNjsgdGhlcmUgd2FzIGEgYnVnIGluIHRoZSBUcnVlVHlwZQogIGxvYWRlciB0aGF0IHByZXZlbnRlZCBpdCBmcm9tIGxvYWRpbmcgY29tcG9zaXRlcyBjb3JyZWN0bHkuICBIb3dldmVyLAogIHRoZXJlIGFyZSBzdGlsbCBfc3VidGxlXyBkaWZmZXJlbmNlcyBiZXR3ZWVuIEZUMSBhbmQgRlQyIHdoZW4gaXQgY29tZXMgdG8KICBtb25vY2hyb21lIFRydWVUeXBlLWhpbnRlZCBnbHlwaHMgKHRoZSBtYWpvciBkaWZmZXJlbmNlcyBhcmUgZ29uZSB0aG91Z2gpLgoKCgpCQUQtVEhJTi1MSU5FUwoKICBJdCBzZWVtcyB0aGF0IHRoZSBhbnRpLWFsaWFzZWQgcmVuZGVyZXIgaW4gRnJlZVR5cGUgaGFzIHByb2JsZW1zIHJlbmRlcmluZwogIGV4dHJlbWVseSB0aGluIHN0cmFpZ2h0IGxpbmVzIGNvcnJlY3RseSwgYXQgbGVhc3Qgd2hlbiB1c2luZyB0aGUKICBGVF9PdXRsaW5lX1JlbmRlcigpIGZ1bmN0aW9uLgoKCgpOT1QtV0lORE9XUy1NRVRSSUNTCgogIEZyZWVUeXBlIGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBtZXRyaWNzIGFzIFdpbmRvd3MgZm9yIGFzY2VuZGVyLAogIGRlc2NlbmRlciwgYW5kIHRleHQgaGVpZ2h0LCBkZXBlbmRpbmcgb24gY2hhcmFjdGVyIHBpeGVsIHNpemVzLiAgQSBsb3Qgb2YKICB0ZXN0aW5nIG9uIFdpbmRvd3MgaXMgbmVlZGVkIHRvIGRlYnVnIHRoaXMgcHJvcGVybHkuICBJdCBtaWdodCBiZSBkdWUgdG8gYQogIHJvdW5kaW5nIGJ1ZyB3aGVuIGNvbXB1dGluZyB0aGUgInhfc2NhbGUiIGFuZCAieV9zY2FsZSIgdmFsdWVzLgoKCgpBRFZBTkNFRC1DT01QT1NJVEVTCgogIFByb3ZpZGVkIGJ5IEdlb3JnZSBXaWxsaWFtcyA8cGZhZWRpdEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+OgoKICAgIEkgbm90aWNlIHRoYXQgdHJ1ZXR5cGUvdHRnbG9hZC5jIG9ubHkgc3VwcG9ydHMgQXBwbGUncyBkZWZpbml0aW9uIG9mCiAgICBvZmZzZXRzIGZvciBjb21wb3NpdGUgZ2x5cGhzLiAgQXBwbGUgYW5kIE1pY3Jvc29mdCBiZWhhdmUgZGlmZmVyZW50bHkgaWYKICAgIHRoZXJlIGlzIGEgc2NhbGUgZmFjdG9yLiAgT3BlblR5cGUgZGVmaW5lcyBzb21lIGJpdHMgdG8gZGlzYW1iaWd1YXRlLgogICAgCiAgICAoQSBwcm9ibGVtIGluIGJvdGggMi4wLjQgYW5kIDIuMC41LikKICAgIAogICAgQXBwbGUgc2F5cyAoaHR0cDovL2ZvbnRzLmFwcGxlLmNvbS9UVFJlZk1hbi9STTA2L0NoYXA2Z2x5Zi5odG1sKSB0aGF0IGlmCiAgICBmbGFncyZBUkdTX0FSRV9YWSBpcyBzZXQgdGhlbiB0aGUgb2Zmc2V0cyBzaG91bGQgYmUgc2NhbGVkIGJ5IHRoZSBzY2FsZQogICAgZmFjdG9ycyAoYXMgeW91IGhhdmUgZG9uZSksIGJ1dCB0aGV5IGFsc28gc2F5IHNvbWV0aGluZyB2ZXJ5IGNyeXB0aWMKICAgIGFib3V0IHdoYXQgaGFwcGVucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgcm90YXRlZCBhdCA0NbAgKHdoaWNoIHlvdSBkbwogICAgbm90IHN1cHBvcnQpIC0tIFNlZSB0aGUgIkltcG9ydGFudCIgbm90ZSBhdCB0aGUgYm90dG9tLgogICAgCiAgICBUaGUgb2xkIHRydWV0eXBlIHNwZWMgZnJvbSBNaWNyb3NvZnQgZGlkIG5vdCBtZW50aW9uIHRoaXMuICBUaGUgT3BlblR5cGUKICAgIHNwZWMgKGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9nbHlmLmh0bSwKICAgIGh0dHA6Ly9wYXJ0bmVycy5hZG9iZS5jb20vYXNuL2RldmVsb3Blci9vcGVudHlwZS9nbHlmLmh0bWwpIGRlZmluZXMgdHdvCiAgICBuZXcgYml0cyB0byBkaXNhbWJpZ3VhdGU6CgogICAgICBTQ0FMRURfQ09NUE9ORU5UX09GRlNFVCAxMSAKICAgICAgQ29tcG9zaXRlIGRlc2lnbmVkIHRvIGhhdmUgdGhlIGNvbXBvbmVudCBvZmZzZXQgc2NhbGVkIChkZXNpZ25lZCBmb3IKICAgICAgQXBwbGUgcmFzdGVyaXplcikKCiAgICAgIFVOU0NBTEVEX0NPTVBPTkVOVF9PRkZTRVQgMTIgCiAgICAgIENvbXBvc2l0ZSBkZXNpZ25lZCBub3QgdG8gaGF2ZSB0aGUgY29tcG9uZW50IG9mZnNldCBzY2FsZWQgKGRlc2lnbmVkCiAgICAgIGZvciB0aGUgTWljcm9zb2Z0IFRydWVUeXBlIHJhc3Rlcml6ZXIpCiAgICAKICAgIFBlcmhhcHMgeW91IGNvdWxkIGFkZCBhIGxvYWRfZmxhZyB0byBhbGxvdyB0aGUgdXNlciB0byBkZWZpbmUgdGhlCiAgICBkZWZhdWx0IHNldHRpbmc/CgogIERhdmlkIHNheXM6CiAgCiAgICBXb3csIEkgd2FzIG5vdCBldmVuIGF3YXJlIG9mIHRoaXMsIGl0IHdpbGwgcHJvYmFibHkgdGFrZSBhIGxpdHRsZSB0aW1lCiAgICB0byBpbXBsZW1lbnQgc2luY2UgSSBkb24ndCBoYXZlIGFueSBmb250IHRoYXQgaW1wbGVtZW50IHRoZXNlCiAgICAiZmVhdHVyZXMiLCBhbmQgYWxzbyBiZWNhdXNlIEkgYmVsaWV2ZSB0aGF0IHdlJ3JlIHJ1bm5pbmcgb3V0IG9mIGJpdHMKICAgIGZvciAibG9hZF9mbGFnIiwgc29tZSBvdGhlciB3YXkgdG8gc2V0IHByZWZlcmVuY2VzIGlzIHByb2JhYmx5IG5lZWRlZC4KCgoKLS0tIEVORCBPRiBPUEVOIEJVR1MgLS0tCgoKCkJBRC1UVE5BTUVJRC5ICgogIFRoZSBmaWxlICJ0dG5hbWVpZC5oIiBjb250YWlucyB2YXJpb3VzIGNvbnN0YW50IG1hY3JvIGRlZmluaXRpb25zCiAgY29ycmVzcG9uZGluZyB0byBpbXBvcnRhbnQgdmFsdWVzIGRlZmluZWQgYnkgdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24uCgogIEpvZSBNYW4gPHRybWV0YWxAeWFob28uY29tLmhrPiByZXBvcnRzIHRoYXQ6CgogICAgQWNjb3JkaW5nIHRvIHRoZSBpbmZvcm1hdGlvbiBmcm9tIFRydWVUeXBlIHYxLjY2OgoKICAgICAgUGxhdGZvcm0gSUQgPSAzIChNaWNyb3NvZnQpCiAgICAgIHRoZSBFbmNvZGluZyBJRCBvZiBHQjIzMTIgPSA0CiAgICAgIHRoZSBFbmNvZGluZyBJRCBvZiBiaWc1ID0gMwoKICAgIEhvd2V2ZXIsIEkgaGF2ZSBmb3VuZCB0aGF0IGluIHR0bmFtZWlkLmg6CgogICAgICBUVF9NU19JRF9HQjIzMTIgPSAzCiAgICAgIFRUX01TX0lEX0JJR181ID0gNAoKICAgIFdoaWNoIG9uZSBpcyBjb3JyZWN0PwoKICBBbnRvaW5lIHJlcGxpZWQgdGhhdCB0aGlzIHdhcyBhIGJ1ZyBpbiB0aGUgVFQgMS42NiBzcGVjaWZpY2F0aW9uLCBhbmQgdGhhdAogIEZyZWVUeXBlIGZvbGxvd2VkIHRoZSBtb3N0IHJlY2VudCBUcnVlVHlwZS9PcGVuVHlwZSBzcGVjaWZpY2F0aW9uIGhlcmUuCgoKCkFVVE9ISU5ULVNCSVRTCgogIFdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBnbHlwaCwgd2l0aCB0aGUgYXV0by1oaW50ZXIgYWN0aXZhdGVkIChpLmUuLCB3aGVuCiAgdXNpbmcgRlRfTE9BRF9GT1JDRV9BVVRPSElOVCwgb3Igd2hlbiB0aGUgZm9udCBkcml2ZXIgZG9lc24ndCBwcm92aWRlIGl0cwogIG93biBoaW50ZXIpLCBlbWJlZGRlZCBiaXRtYXBzIGFyZSBfbmV2ZXJfIGxvYWRlZCwgdW5saWtlIHRoZSBkZWZhdWx0CiAgYmVoYXZpb3VyIGRlc2NyaWJlZCBieSB0aGUgQVBJIHNwZWNpZmljYXRpb24uCgogIFRoaXMgc2VlbXMgdG8gYmUgYSBidWcgaW4gRlRfTG9hZF9HbHlwaCgpLCBidXQgdGhlcmUgaXMgbm8gd2F5IHRvIHNvbHZlIGl0CiAgZWZmaWNpZW50bHkgd2l0aG91dCBtYWtpbmcgYSBmZXcgaW1wb3J0YW50IGludGVybmFsIGNoYW5nZXMgdG8gdGhlCiAgbGlicmFyeSdzIGRlc2lnbiAobW9yZSBpbXBvcnRhbnRseSwgdG8gdGhlIGZvbnQgZHJpdmVyIGludGVyZmFjZSkuCgogIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIHdpdGggYSBoYWNrIGluIEZUX0xvYWRfR2x5cGgoKS4gIE1vcmUgaW1wb3J0YW50CiAgaW50ZXJuYWwgY2hhbmdlcyBzaG91bGQgaGVscCBnZXQgcmlkIG9mIGl0IHdpdGggYSBjbGVhbiBzb2x1dGlvbiBpbiBhCiAgZnVydGhlciByZWxlYXNlIGxpa2UgRnJlZVR5cGUgMi4xLgoKCgpCQUQtVDEtQ0hBUk1BUAoKICBUeXBlMSBkcml2ZXIgZG9lc24ndCByZWFkICJjYWN1dGUiIGFuZCAibHNsYXNoIiBjaGFyYWN0ZXJzIGZyb20gaXNvODg1OS0yCiAgY2hhcnNldC4gIFRob3NlIGNoYXJhY3RlcnMgYXJlIG1hcHBlZCBhcyBNQUMtb25lIGluIGdsbmFtZXMucHksIHNvIHRoZXkKICBjYW5ub3QgYmUgc2hvd24gaW4gQWRvYmUgVHlwZTEgZm9udHMuCgogIChUaGlzIHdhcyBkdWUgdG8gYSBidWcgaW4gdGhlICJnbG5hbWVzLnB5IiBzY3JpcHQgdXNlZCB0byBnZW5lcmF0ZSB0aGUKICB0YWJsZSBvZiBnbHlwaCBuYW1lcyBpbiAnc3JjL3BzYXV4L3BzdGFibGVzLmgnLikKCgoKQkFELVVOSVhYWFgtTkFNRVMKCiAgR2x5cGggbmFtZXMgbGlrZSB1bmlYWFhYIGFyZSBub3QgcmVjb2duaXplZCBhcyB0aGV5IHNob3VsZCBiZS4gIEl0IHNlZW1zCiAgdGhhdCBjb2RlIGluIHBzbW9kdWxlLmMgZm9yIHVuaVhYWFggZ2x5cGggbmFtZXMgd2FzIG5ldmVyIHRlc3RlZC4gIFRoZQogIHBhdGNoIGlzIHZlcnkgc2ltcGxlLgogIAogIChBIHNpbXBsZSBidWcgdGhhdCB3YXMgbGVmdCB1bi1ub3RpY2VkIGR1ZSB0byB0aGUgZmFjdCB0aGF0IEkgZG9uJ3QgaGF2ZQogIGFueSBQb3N0c2NyaXB0IGZvbnQgdGhhdCB1c2UgdGhpcyBjb252ZW50aW9uLCB1bmZvcnR1bmF0ZWx5LikKCgoKR0xZUEhfVE9fQklUTUFQLUJVRwoKICBDYWxsaW5nIEZUX0dseXBoX1RvX0JpdG1hcCgpIHNvbWV0aW1lcyBtb2RpZmllcyB0aGUgb3JpZ2luYWwgZ2x5cGgKICBvdXRsaW5lLCBjcmVhdGluZyB3ZWlyZCBhbGlnbm1lbnQgYXJ0ZWZhY3RzLgogIAogIFRoaXMgc3VidGxlIGJ1ZyB3YXMgcmVhbGx5IGluIHRoZSBmaWxlIGBzcmMvc21vb3RoL2Z0c21vb3RoLmMnLiAKICBCYXNpY2FsbHksIHRoZSBvdXRsaW5lIHdhcyBzaGlmdGVkIGJlZm9yZSByZW5kZXJpbmcgaXQgaW50byBhIG5ldyBiaXRtYXAKICBidWZmZXIuICBIb3dldmVyLCBpdCB3YXNuJ3QgcHJvcGVybHkgdW4tc2hpZnRlZCBhZnRlciB0aGF0IG9wZXJhdGlvbi4KCiAgVGhpcyB3YXMgb25seSBub3RpY2VhYmxlIHdpdGggY2VydGFpbiBnbHlwaHMgb3IgY2VydGFpbiBmb250czsgaXQgY3JlcHQgaW4KICBhIGxvbmcgdGltZSBhZ28uCiAgICAgICAgICAgICAgICAgIAogIFRoZSBzYW1lIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBzcmMvcmFzdGVyL2Z0cmVuZGVyMS5jIGFsc28uCiAgICAgICAgICAgICAgICAgIAoKClRULUdMWVBILUNSQVNICgogIFRoZSBsaWJyYXJ5IGNyYXNoZWQgd2hlbiB0cnlpbmcgdG8gbG9hZCBjZXJ0YWluIGdseXBocyBmcm9tIGFuCiAgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgVHJ1ZVR5cGUgZmlsZSAodHQxMDk1bV8udHRmIHN1Ym1pdHRlZCBieSBTY290dAogIExvbmcpLgogIAogIEl0IHR1cm5lZCBvdXQgdGhhdCB0aGUgZm9udCBjb250YWluZWQgaW52YWxpZCBnbHlwaCBkYXRhIChpLmUuIHdhcwogIGJyb2tlbiksIGJ1dCB0aGUgVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyIGluIEZyZWVUeXBlIHdhc24ndCBwYXJhbm9pZCBlbm91Z2gsCiAgd2hpY2ggcmVzdWx0ZWQgaW4gbmFzdHkgbWVtb3J5IG92ZXJ3cml0ZXMgYWxsIG92ZXIgdGhlIHBsYWNlLgoKCgpUMS1GT05ULUNSQVNICgogIFRoZSBsaWJyYXJ5IGNyYXNoZWQgd2hlbiB0cnlpbmcgdG8gbG9hZCB0aGUgIlN0YWxpbmdyYWQgUmVndWxhciIgZmFjZSBmcm9tCiAgdGhlICJzYWRuLnBmYiIgZm9udCBmaWxlIHByb3ZpZGVkIGJ5IEFudGhvbnkgRm9rIChhbmQgdGhlIEdub21lLVByaW50IHRlYW0KICBJIGJlbGlldmUpLgogIAogIFRoaXMgd2FzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBmb250IG1pc3NlZCBhIGZ1bGwgZm9udCBuYW1lIGVudHJ5LAogIHRob3VnaCBib2FzdGVkIGEgZmFtaWx5IG5hbWUgYW5kIHBvc3RzY3JpcHQgbmFtZS4gIFRoZSBUeXBlIDEgZmFjZSBsb2FkZXIKICBkaWRuJ3QgY2hlY2sgZm9yIHRoZXNlIHBhdGhldGljIGNhc2VzIGFuZCBzZWctZmF1bHRlZC4KCgoKQkFELUFEVkFOQ0VTCgogIEFsbCBzY2FsYWJsZSBmb250IGRyaXZlcnMgcmV0dXJuZWQgdW4tZml0dGVkIGdseXBoIGFkdmFuY2VzIHdoZW4KICBGVF9MT0FEX0RFRkFVTFQgd2FzIHVzZWQsIHdoaWNoIHdhcyBpbmNvcnJlY3QuICBUaGlzIHByb2JsZW0gd2FzIHByZXR0eQogIG9sZCBidXQgaGFkbid0IGJlZW4gc3BvdHRlZCBiZWNhdXNlIGFsbCB0ZXN0IHByb2dyYW1zIGFjdHVhbGx5IGV4cGxpY2l0bHkKICBvciBpbXBsaWNpdGx5IChpLmUuIHRocm91Z2ggdGhlIGNhY2hlKSByb3VuZGVkIHRoZSBhZHZhbmNlIHdpZHRocyBvZgogIGdseXBocy4KICAKICBUaGlzIHJlc3VsdGVkIGluIHBvb3IgcmVuZGVyaW5nIG9mIGEgbnVtYmVyIG9mIGNsaWVudCBhcHBsaWNhdGlvbnMgaG93ZXZlcgogIChpdCBpcyBzdHJhbmdlIHRvIHNlZSB0aGV5IHRvb2sgc28gbG9uZyB0byBub3RpZnkgdGhlIEZyZWVUeXBlIHRlYW0pLgoKCgpHTFlQSC1UTy1CSVRNQVAtQlVHCgogIEZUX0dseXBoX1RvX0JpdG1hcCgpIGRpZCBpbmNvcnJlY3RseSBtb2RpZnkgdGhlIHNvdXJjZSBnbHlwaCBpbiBjZXJ0YWluCiAgY2FzZXMsIHdoaWNoIHJlc3VsdGVkIGluIHJhbmRvbSBiZWhhdmlvdXIgYW5kIGJhZCB0ZXh0IHJlbmRlcmluZy4gIFRoaXMKICB3YXMgc3BvdHRlZCB0byBidWdzIGluIGJvdGggdGhlIG1vbm9jaHJvbWUgYW5kIHNtb290aCByYXN0ZXJpemVyLgoKCj09PSBlbmQgb2YgZmlsZSA9PT0K