MC40OC4xIC0gU2F0IDExIE1hcmNoIDIwMDYKCi0gQ29tcGlsZSBmaXggZm9yIHNjcAoKMC40OCAtIFRodXJzIDkgTWFyY2ggMjAwNgoKLSBDaGVjayB0aGF0IHRoZSBjaXJjdWxhciBidWZmZXIgaXMgcHJvcGVybHkgZW1wdHkgYmVmb3JlCiAgY2xvc2luZyBhIGNoYW5uZWwsIHdoaWNoIGNvdWxkIGNhdXNlIHRydW5jYXRlZCB0cmFuc2ZlcnMKICAodGhhbmtzIHRvIFRvbWFzIFZhbmVrIGZvciBoZWxwaW5nIHRyYWNrIGl0IGRvd24pCgotIEltcGxlbWVudCBwZXItSVAgcHJlLWF1dGhlbnRpY2F0aW9uIGNvbm5lY3Rpb24gbGltaXRzIAogIChhZnRlciBzb21lIHBva2luZyBmcm9tIFBhYmxvIEZlcm5hbmRleikKCi0gRXhpdCBncmFjZWZ1bGx5IGlmIHRyeWluZyB0byBjb25uZWN0IHRvIGFzIFNTSCB2MSBzZXJ2ZXIgCiAgKHJlcG9ydGVkIGJ5IFJ1c2hpIExhbGEpCgotIE9ubHkgcmVhZCAvZGV2L3JhbmRvbSBvbmNlIGF0IHN0YXJ0dXAgd2hlbiBpbiBub24taW5ldGQgbW9kZQoKLSBBbGxvdyBjdHJsLWMgdG8gY2xvc2UgYSBkYmNsaWVudCBwYXNzd29yZCBwcm9tcHQgKG1heQogIHN0aWxsIGhhdmUgdG8gcHJlc3MgZW50ZXIgb24gc29tZSBwbGF0Zm9ybXMpCgotIE1lcmdlZCBpbiB1Q2xpbnV4IHBhdGNoIGZvciBpbmV0ZCBtb2RlCgotIFVwZGF0ZWQgdG8gc2NwIGZyb20gT3BlblNTSCA0LjNwMiAtIGZpeGVzIGEgc2VjdXJpdHkgaXNzdWUKICB3aGVyZSB1c2Ugb2Ygc3lzdGVtKCkgY291bGQgY2F1c2UgdXNlcnMgdG8gZXhlY3V0ZSBhcmJpdHJhcnkKICBjb2RlIHRocm91Z2ggbWFsZm9ybWVkIGZpbGVuYW1lcywgcmVmIENWRS0yMDA2LTAyMjUKCjAuNDcgLSBUaHVycyBEZWMgOCAyMDA1CgotIFNFQ1VSSVRZOiBmaXggZm9yIGJ1ZmZlciBhbGxvY2F0aW9uIGVycm9yIGluIHNlcnZlciBjb2RlLCBjb3VsZCBwb3RlbnRpYWxseQogIGFsbG93IGF1dGhlbnRpY2F0ZWQgdXNlcnMgdG8gZ2FpbiBlbGV2YXRlZCBwcml2aWxlZ2VzLiBBbGwgbXVsdGktdXNlciBzeXN0ZW1zCiAgcnVubmluZyB0aGUgc2VydmVyIHNob3VsZCB1cGdyYWRlIChvciBhcHBseSB0aGUgcGF0Y2ggYXZhaWxhYmxlIG9uIHRoZQogIERyb3BiZWFyIHdlYnBhZ2UpLgoKLSBGaXggY2hhbm5lbCBoYW5kbGluZyBjb2RlIHNvIHRoYXQgcmVkaXJlY3RpbmcgdG8gL2Rldi9udWxsIGRvZXNuJ3QgdXNlCiAgMTAwJSBDUFUuCgotIFR1cm4gb24gemxpYiBjb21wcmVzc2lvbiBmb3IgZGJjbGllbnQuCgotIFNldCAibG93IGRlbGF5IiBUT1MgYml0LCBjYW4gc2lnbmlmaWNhbnRseSBpbXByb3ZlIGludGVyYWN0aXZpdHkKICBvdmVyIHNvbWUgbGlua3MuCgotIEFkZGVkIGNsaWVudCBrZXlib2FyZC1pbnRlcmFjdGl2ZSBtb2RlIHN1cHBvcnQsIGFsbG93cyBvcGVyYXRpb24gd2l0aAogIG5ld2VyIE9wZW5TU0ggc2VydmVycyBpbiBkZWZhdWx0IGNvbmZpZy4KCi0gTG9nIHdoZW4gcHVia2V5IGF1dGggZmFpbHMgYmVjYXVzZSBvZiBiYWQgfi8uc3NoL2F1dGhvcml6ZWRfa2V5cyBwZXJtaXNzaW9ucwoKLSBJbXByb3ZlIGxvZ2dpbmcgb2YgYXNzZXJ0aW9ucwoKLSBBZGRlZCBhZXMtMjU2IGNpcGhlciBhbmQgc2hhMS05NiBobWFjLgoKLSBGaXggdHdvZmlzaCBzbyB0aGF0IGl0IGFjdHVhbGx5IHdvcmtzLgoKLSBJbXByb3ZlIFBBTSBwcm9tcHQgY29tcGFyaXNvbi4KCi0gQWRkZWQgLWcgKGRiY2xpZW50KSBhbmQgLWEgKGRyb3BiZWFyIHNlcnZlcikgb3B0aW9ucyB0byBhbGxvdwogIGNvbm5lY3Rpb25zIHRvIGxpc3RlbmluZyBmb3J3YXJkZWQgcG9ydHMgZnJvbSByZW1vdGUgbWFjaGluZXMuCgotIFZhcmlvdXMgb3RoZXIgbWlub3IgZml4ZXMKCi0gQ29tcGlsZSBmaXhlcyBmb3IgZ2xpYmMgMi4xIChzc19mYW1pbHkgdnMgX19zc19mYW1pbHkpIGFuZCBOZXRCU0QKICAobmV0aW5ldC9pbl9zeXN0bS5oIG5lZWRzIHRvIGJlIGluY2x1ZGVkKS4KCjAuNDYgLSBTYXQgSnVseSA5IDIwMDUKCi0gRml4IGxvbmctc3RhbmRpbmcgYnVnIHdoaWNoIGNhdXNlZCBjb25uZWN0aW9ucyB0byBiZSBjbG9zZWQgaWYgYW4gc3NoLWFnZW50CiAgc29ja2V0IHdhcyBubyBsb25nZXIgYXZhaWxhYmxlCgotIFByaW50IGEgd2FybmluZyBpZiB3ZSBzZWVtIHRvIGJlIGJsb2NraW5nIG9uIC9kZXYvcmFuZG9tIAogIChzdWdnZXN0ZWQgYnkgUGF1bCBGb3gpCgotIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gRFNTIGNvZGUgKHRoYW5rcyB0byBCb3JpcyBCZXJlem92c2t5IGZvciB0aGUgcGF0Y2gpCgotIGRiY2xpZW50IC1MIG5vIGxvbmdlciBzZWdmYXVsdHMsIGFsbG9jYXRlIGNvcnJlY3QgYnVmZmVyIHNpemUgKHRoYW5rcwogIHRvIERhdmlkIENvb2sgZm9yIHJlcG9ydGluZyBpdCwgYW5kIENocmlzdG9waGVyIEZheWxvciBmb3IgaW5kZXBlbmRlbnRseQogIHNlbmRpbmcgaW4gYSBwYXRjaCkKCi0gQWRkZWQgUlNBIGJsaW5kaW5nIHRvIHNpZ25pbmcgY29kZSAoc3VnZ2VzdGVkIGJ5IERhbiBLYW1pbnNreSkKCi0gUmVhcnJhbmdlZCBiaWdudW0gcmVhZGluZy9yYW5kb20gZ2VuZXJhdGlvbiBjb2RlCgotIFJlc2V0IHRoZSBub24tYmxvY2tpbmcgc3RhdHVzIG9uIHN0ZGVyciBhbmQgc3Rkb3V0IGFzIHdlbGwgYXMgc3RkaW4sCiAgZml4ZXMgYSBwcm9ibGVtIHdoZXJlIHRoZSBzaGVsbCBydW5uaW5nIGRiY2xpZW50IHdpbGwgZXhpdCAodGhhbmtzIHRvIAogIEJyZW50IFJvbWFuIGZvciByZXBvcnRpbmcgaXQpCgotIEZpeCBzbyB0aGF0IGFsbCBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgc28gdGhlIGNoaWxkIHNoZWxsIGRvZXNuJ3QKICBpbmhlcml0IGRlc2NyaXB0b3JzICh0aGFua3MgdG8gTGluZGVuIE1heSBmb3IgdGhlIHBhdGNoKQoKLSBDaGFuZ2Ugc2lnbmtleS5jIHRvIGF2b2lkIGdjYyA0IGdlbmVyYXRpbmcgaW5jb3JyZWN0IGNvZGUKCi0gQWZ0ZXIgYm90aCBzaWRlcyBvZiBhIGZpbGUgZGVzY3JpcHRvciBoYXZlIGJlZW4gc2h1dGRvd24oKSwgY2xvc2UoKQogIGl0IHRvIGF2b2lkIGxlYWtpbmcgZGVzY3JpcHRvcnMgKHRoYW5rcyB0byBBcmkgSHl0dGluZW4gZm9yIGEgcGF0Y2gpCgotIFVwZGF0ZSB0byBMaWJUb21DcnlwdCAxLjA1IGFuZCBMaWJUb21NYXRoIDAuMzUKCjAuNDUgLSBNb24gTWFyY2ggNyAyMDA1CgotIE1ha2VmaWxlIG5vIGxvbmdlciBhcHBlbmRzICdzdGF0aWMnIHRvIHN0YXRpY2FsbHkgbGlua2VkIGJpbmFyaWVzCgotIEFkZCBvcHRpb25hbCBTU0hfQVNLUEFTUyBzdXBwb3J0IHRvIHRoZSBjbGllbnQKCi0gUmVzcGVjdCBIT1NUX0xPT0tVUCBvcHRpb24KCi0gRml4IGFjY2lkZW50YWxseSByZW1vdmVkICJyZXR1cm47IiBzdGF0ZW1lbnQgd2hpY2ggd2FzIHJlbW92ZWQgaW4gMC40NAogIChjYXVzaW5nIGNsaWVudHMgd2hpY2ggc2VudCBhbiBlbXB0eSB0ZXJtaW5hbC1tb2RlcyBzdHJpbmcgdG8gZmFpbCB0bwogIGNvbm5lY3QgLSBpbmNsdWRpbmcgcHNzaCwgc3NoLmNvbSwgZGFuZ2VyIGhpcHRvcCkuIChwYXRjaGVzCiAgaW5kZXBlbmRlbnRseSBmcm9tIFBhdWwgRm94LCBEYXZpZCBIb3J3aXR0IGFuZCBTdmVuLU9sYSBUdWVja2UpCgotIFJlYWQgInkvbiIgcmVzcG9uc2UgZm9yIGZpbmdlcnByaW50cyBmcm9tIC9kZXYvdHR5IGRpcmVjdGx5IHNvIHRoYXQgZGJjbGllbnQKICB3aWxsIHdvcmsgd2l0aCBzY3AuCgowLjQ0IC0gTW9uIEphbiAzIDIwMDUKCi0gU0VDVVJJVFk6IEZpeCBmb3IgUEFNIGF1dGggc28gdGhhdCB1c2VybmFtZXMgYXJlIGxvZ2dlZCBhbmQgY29udmVyc2F0aW9uCiAgZnVuY3Rpb24gcmVzcG9uc2VzIGFyZSBhbGxvY2F0ZWQgY29ycmVjdGx5IC0gYWxsIDAuNDR0ZXN0NCB1c2VycyB3aXRoIFBBTQogIGNvbXBpbGVkIGluIChub3QgZGVmYXVsdCkgYXJlIGFkdmlzZWQgdG8gdXBncmFkZS4KCi0gRml4IGNhbGxzIHRvIGdldG5hbWVpbmZvKCkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBTb2xhcmlzCgotIFByaXN0aW5lIGNvbXBpbGF0aW9uIHdvcmtzIChydW4gJ2NvbmZpZ3VyZScgZnJvbSBhIGZyZXNoIGRpciBhbmQgbWFrZSBpdAogIHRoZXJlKQoKLSBGaXhlcyBmb3IgY29tcGlsaW5nIHdpdGggbW9zdCBvcHRpb25zIGRpc2FibGVkLgoKLSBVcGdyYWRlZCB0byBMaWJUb21DcnlwdCAwLjk5IGFuZCBMaWJUb21NYXRoIDAuMzIKCi0gTWFrZSBzdXJlIHRoYXQgemVyb2luZyBvdXQgb2YgdmFsdWVzIGluIExUTSBhbmQgTFRDIHdvbid0IGdldCBvcHRpbWlzZWQgYXdheQoKLSBSZW1vdmVkIHVudXNlZCBmdW5jdGlvbnMgZnJvbSBsb2dpbnJlYy5jCgotIC9kZXYvcmFuZG9tIGlzIG5vdyB0aGUgZGVmYXVsdCBlbnRyb3B5IHNvdXJjZSByYXRoZXIgdGhhbiAvZGV2L3VyYW5kb20KCi0gTG9nZ2luZyBvZiBJUHMgaW4gYXV0aCBzdWNjZXNzL2ZhaWx1cmUgbWVzc2FnZXMgZm9yIGltcHJvdmVkIGdyZXBwYWJpbGl0eQoKLSBGaXggZGJjbGllbnQgc28gdGhhdCAic2NwIC1pIGtleWZpbGUiIHdvcmtzLiAoSXQgY2FuIGhhbmRsZSAiLWlrZXlmaWxlCiAgcHJvcGVybHkpCgotIEF2b2lkIGEgcmFjZSBpbiBzZXJ2ZXIgc2hlbGwtaGFuZGxpbmcgY29kZSB3aGljaCBwcmV2ZW50cyB0aGUgZXhpdC1jb2RlCiAgZnJvbSBiZWluZyByZXR1cm5lZCB0byB0aGUgY2xpZW50IGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KCi0gTWFrZWZpbGUgbW9kaWZpZWQgc28gdGhhdCBpbnN0YWxsIHRhcmdldCB3b3JrcyBjb3JyZWN0bHkgKGRvZXNuJ3QgdHJ5CiAgdG8gaW5zdGFsbCAiYWxsIiBiaW5hcnkpIC0gcGF0Y2ggZnJvbSBKdWVyZ2VuIERhdWJlcnQKCi0gVmFyaW91cyBtaW5vciBmaXhlcyBhbmQgY29tcGlsZSB3YXJuaW5ncy4KCjAuNDR0ZXN0NCAtIFR1ZSBTZXB0IDE0IDIwMDQgMjE6MTU6NTQgKzA4MDAKCi0gRml4IGluZXRkIG1vZGUgc28gaXQgYWN0dWFsbHkgbG9hZHMgdGhlIGhvc3RrZXlzIChvb3BzKQoKLSBDaGFuZ2VkIERST1BCRUFSX0RFRlBPUlQgcHJvcGVybHkgZXZlcnl3aGVyZQoKLSBGaXggYSBzbWFsbCBtZW1vcnkgbGVhayBpbiB0aGUgYXV0aCBjb2RlCgotIFdDT1JFRFVNUCBpcyBvbmx5IHVzZWQgb24gc3lzdGVtcyB3aGljaCBzdXBwb3J0IGl0IChpZSBub3QgY3lnd2luIG9yIEFJWCkKCi0gQ2hlY2sgKGFuZCBmYWlsIGZvcikgY2FzZXMgd2hlbiB3ZSBjYW4ndCBuZWdvdGlhdGUgYWxnb3JpdGhtcyB3aXRoIHRoZQogIHJlbW90ZSBzaWRlIHN1Y2Nlc3NmdWxseSAocmF0aGVyIHRoYW4gYm9tYmluZyBvdXQgdW5ncmFjZWZ1bGx5KQoKLSBIYW5kbGUgYXV0aG9yaXplZF9rZXlzIGZpbGVzIHdpdGhvdXQgYSB0ZXJtaW5hdGluZyBuZXdsaW5lCgotIEZpZGRsZSB0aGUgY2hhbm5lbCByZWNlaXZlIHdpbmRvdyBzaXplIGZvciBwb3NzaWJseSBiZXR0ZXIgcGVyZm9ybWFuY2UKCi0gQWRkZWQgaW4gdGhlIFBBTSBhdXRoZW50aWNhdGlvbiBjb2RlIChmaW5hbGx5ISB0aGFua3MgdG8gTWFydGluIENhcmxzc29uKQoKMC40NHRlc3QzIC0gRnJpIEF1ZyAyNyAyMjoyMDo1NCArMDgwMAoKLSBGaXhlZCBhIGJ1bmNoIG9mIHdhcm5pbmdzLgoKLSBzY3Agd29ya3MgY29ycmVjdGx5IHdoZW4gcGFzc2VkIGEgdXNlcm5hbWUgKGZpeCBmb3IgdGhlIGRiY2xpZW50IHByb2dyYW0KICBpdHNlbGYgYXMgd2VsbCwgIi1sbWF0dCIgd29ya3MgYXMgd2VsbCBhcyAiLWwgbWF0dCIpLgoKLSBSZW1vdmUgdW5yZXF1aXJlZCBkZWJpYW4gZmlsZXMKCi0gRXhpdCB3aXRoIHRoZSByZW1vdGUgcHJvY2VzcydzIHJldHVybiBjb2RlIGZvciBkYmNsaWVudAoKLSBEaXNwbGF5IHN0ZGVyciBtZXNzYWdlcyBmcm9tIHRoZSBzZXJ2ZXIgaW4gdGhlIGNsaWVudAoKLSBBZGQgY2lyY3VsYXIgYnVmZmVyaW5nIHRvIHRoZSBjaGFubmVsIGNvZGUuIFRoaXMgc2hvdWxkIGRyYW1hdGljYWxseSByZWR1Y2UKICB0aGUgYW1vdW50IG9mIGJhY2t0cmFmZmljIHNlbnQgaW4gcmVzcG9uc2UgdG8gdHJhZmZpYyBpbmNvbWluZyB0byB0aGUKICBEcm9wYmVhciBlbmQgLSBpbXByb3ZlcyBoaWdoLWxhdGVuY3kgcGVyZm9ybWFuY2UgKGllIGRpYWx1cCkuCgotIFZhcmlvdXMgb3RoZXIgcmVsYXRlZCBjaGFubmVsLWhhbmRsaW5nIGZpeHVwcy4KCi0gQWxsb3cgbGVhZGluZyBsaW5lcyBpbiB0aGUgYmFubmVyIHdoZW4gY29ubmVjdGluZyB0byBzZXJ2ZXJzCgotIEZpeGVkIHByaW50aW5nIG91dCBlcnJvcnMgb250byB0aGUgbmV0d29yayBzb2NrZXQgd2l0aCBzdGRlcnIgKGZvciBpbmV0ZAogIG1vZGUgd2hlbiB1c2luZyB4aW5ldGQpCgotIFJlbW92ZSBvYnNlbGV0ZSBkb2N1bWVudGF0aW9uCgotIEZpeCBhIG51bGwtcG9pbnRlciBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gZnJlZSBub24tZXhpc3RhbnQgbGlzdGVuZXJzCiAgYXQgY2xlYW51cC4KCi0gREVCVUdfVFJBQ0Ugbm93IG9ubHkgd29ya3MgaWYgeW91IGFkZCAiLXYiIHRvIHRoZSBwcm9ncmFtIGNvbW1hbmRsaW5lCgotIERvbid0IGxlYXZlIHN0ZGluIG5vbi1ibG9ja2luZyBvbiBleGl0IC0gdGhpcyBjYXVzZWQgdGhlIHBhcmVudCBzaGVsbAogIG9mIGRiY2xpZW50IHRvIGNsb3NlIHdoZW4gZGJjbGllbnQgZXhpdGVkLCBmb3Igc29tZSBzaGVsbHMgaW4gQnVzeUJveAoKLSBTZXJ2ZXIgY29ubmVjdGlvbnMgbm8gbG9uZ2VyIHRpbWVvdXQgYWZ0ZXIgNSBtaW51dGVzCgotIEZpeGVkIHN0dXBpZCBEU1MgaG9zdGtleSB0eXBvIChzZXJ2ZXIgY291bGRuJ3QgbG9hZCBob3N0IGtleXMpCgowLjQ0dGVzdDIgLSBUdWVzIEF1ZyAxNyAyMDA0IDE3OjQzOjU0ICswODAwCgotIEZpeCB1cCBkcm9wYmVhcm11bHRpIHRhcmdldHMgaW4gdGhlIE1ha2VmaWxlIC0gc3ltbGlua3MgYXJlIG5vdyBjcmVhdGVkCgotIENvbXBpbGUgZmFrZS1yZmMyNTUzIGV2ZW4gd2l0aCBkcm9wYmVhcmNvbnZlcnQvZHJvcGJlYXJrZXkgLSB0aGlzIAogIGFsbG93cyB0aGVtIHRvIHdvcmsgb24gcGxhdGZvcm1zIHdpdGhvdXQgYSBuYXRpdmUgZ2V0YWRkcmluZm8oKQoKLSBDcmVhdGUgfi8uc3NoL2tub3duX2hvc3RzIHByb3Blcmx5IGlmIGl0IGRvZXNuJ3QgZXhpc3QKCi0gRml4IGJhc2VuYW1lKCkgZnVuY3Rpb24gcHJvdG90eXBlCgotIEJhY2twb3J0IHNvbWUgbG9jYWwgY2hhbmdlcyAobW9yZSAjaWZkZWZzIGZvciB0ZXJtY29kZXMuYywgYSBmaXggZm9yIG1pc3NpbmcKICBkZWZpbmVzIG9uIEFJWCkuCgotIExldCBkYmNsaWVudCBiZSBydW4gYXMgInNzaCIKCi0gSW5pdGlhbGlzZSBtcF9pbnRzIGJ5IGRlZmF1bHQKCjAuNDR0ZXN0MSAtIFN1biBBdWcgMTYgMjAwNSAxNzo0Mzo1NCArMDgwMAoKLSBURVNUSU5HIFJFTEVBU0UgLSB0aGlzIGlzIHRoZSBmaXJzdCBwdWJsaWMgcmVsZWFzZSBvZiB0aGUgY2xpZW50IGNvZGViYXNlLAogIHNvIHRoZXJlIGFyZSBzdXJlIHRvIGJlIGJ1Z3MgdG8gYmUgZm91bmQuIEluIGFkZGl0aW9uLCBpZiB5b3UncmUganVzdCB1c2luZwogIHRoZSBzZXJ2ZXIgcG9ydGlvbiwgdGhlIGZpbmFsIGJpbmFyeSBzaXplIHByb2JhYmx5IHdpbGwgaW5jcmVhc2UgLSBJJ2xsCiAgYmUgdHJ5aW5nIHRvIGdldCBpdCBiYWNrIGRvd24gaW4gZnV0dXJlIHJlbGVhc2VzLgoKLSBEcm9wYmVhciBjbGllbnQgYWRkZWQgLSBsb3RzIG9mIGNoYW5nZXMgdG8gdGhlIHNlcnZlciBjb2RlIGFzIHdlbGwgdG8gCiAgZ2VuZXJhbGlzZSB0aGluZ3MKCi0gSVB2NiBzdXBwb3J0IGFkZGVkIGZvciBjbGllbnQsIHNlcnZlciwgYW5kIGZvcndhcmRpbmcKCi0gTmV3IG1ha2VmaWxlIHdpdGggbW9yZSBnZW5lcmljIHN1cHBvcnQgZm9yIG11bHRpcGxlLXByb2dyYW0gYmluYXJpZXMKCjAuNDMgLSBGcmkgSnVsIDE2IDIwMDQgMTc6NDQ6NTQgKzA4MDAKCi0gU0VDVVJJVFk6IERvbid0IHRyeSB0byBmcmVlKCkgdW5pbml0aWFsaXNlZCB2YXJpYWJsZXMgaW4gRFNTIHZlcmlmaWNhdGlvbgogIGNvZGUuIFRoYW5rcyB0byBBcm5lIEJlcm5pbiBmb3IgcG9pbnRpbmcgb3V0IHRoaXMgYnVnLiBUaGlzIGlzIHBvc3NpYmx5CiAgZXhwbG9pdGFibGUsIGFsbCB1c2VycyB3aXRoIERTUyBhbmQgcHVia2V5LWF1dGggY29tcGlsZWQgaW4gYXJlIGFkdmlzZWQgdG8KICB1cGdyYWRlLgoKLSBDbGVhbiB1cCBhZ2VudCBmb3J3YXJkaW5nIHNvY2tldCBmaWxlcyBjb3JyZWN0bHksIHBhdGNoIGZyb20gR2Vycml0IFBhcGUuCgotIERvbid0IGdvIGludG8gYW4gaW5maW5pdGUgbG9vcCB3aGVuIHBvcnRmb3J3YXJkaW5nIHRvIHNlcnZlcnMgd2hpY2ggZG9uJ3QKICBzZW5kIGFueSBpbml0aWFsIGRhdGEvYmFubmVyLiBQYXRjaCBmcm9tIE5pa29sYSBWbGFkb3YKCi0gRml4IGZvciBuZXR3b3JrIHZzLiBob3N0IGJ5dGUgb3JkZXIgaW4gbG9nZ2luZyByZW1vdGUgVENQIHBvcnRzLCBhbHNvCiAgZnJvbSBHZXJyaXQgUGFwZS4KCi0gSW5pdGlhbGlzZSBtYW55IHBvaW50ZXJzIHRvIE5VTEwsIGZvciBnZW5lcmFsIHNhZmV0eS4gQWxzbyBjaGVja2VkIGNsZWFudXAKICBjb2RlIGZvciBtcF9pbnRzIChyZWxhdGVkIHRvIHNlY3VyaXR5IGlzc3VlcyBhYm92ZSkuCgowLjQyIC0gV2VkIEp1biAxNiAyMDA0IDEyOjQ0OjU0ICswODAwCgotIFVwZGF0ZWQgdG8gR2Vycml0IFBhcGUncyBvZmZpY2lhbCBEZWJpYW4gc3ViZGlyZWN0b3J5CgotIEZpeGVkIGJhZCBjaGVjayB3aGVuIG9wZW5pbmcgL2Rldi91cmFuZG9tIC0gdGhhbmtzIHRvIERhbm55IFN1bmcuCgotIEFkZGVkIC1pIGluZXRkIG1vZGUgZmxhZywgYW5kIGFzc29jaWF0ZWQgb3B0aW9ucyBpbiBvcHRpb25zLmggLiBEcm9wYmVhcgogIGNhbiBiZSBjb21waWxlZCB3aXRoIGVpdGhlciBub3JtYWwgbW9kZSwgaW5ldGQsIG9yIGJvdGggbW9kZXMuIFRoYW5rcwogIHRvIEdlcnJpdCBQYXBlIGZvciBiYXNpYyBwYXRjaCBhbmQgbW90aXZhdGlvbi4KCi0gVXNlIDxkaXJlbnQuaD4gcmF0aGVyIHRoYW4gPHN5cy9kaXIuaD4gZm9yIFBPU0lYIGNvbXBsaWFuY2UuIFRoYW5rcyB0byBCaWxsCiAgU29tbWVyZmllbGQuCgotIEZpeGVkIGEgVENQIGZvcndhcmRpbmcgKGNsaWVudC1sb2NhbCwgLUwgc3R5bGUpIGJ1ZyB3aGljaCBjYXVzZWQgdGhlIHdob2xlCiAgc2Vzc2lvbiB0byBjbG9zZSBpZiB0aGUgVENQIGNvbm5lY3Rpb24gZmFpbGVkLiBUaGFua3MgdG8gQW5kcmV3IEJyYXVuZCBmb3IKICByZXBvcnRpbmcgaXQgYW5kIGhlbHBpbmcgdHJhY2sgaXQgZG93bi4KCi0gUmUtZW5hYmxlIHNpZ3BpcGUgZm9yIGNoaWxkIHByb2Nlc3Nlcy4gVGhhbmtzIHRvIEdlcnJpdCBQYXBlIGZvciBzb21lCiAgc3VnZ2VzdGlvbnMsIGFuZCBCU0QgbWFucGFnZXMgZm9yIGEgY2xlYXJlciBleHBsYW5hdGlvbiBvZiB0aGUgYmVoYXZpb3VyLgoKLSBBZGRlZCBtYW5wYWdlcywgdGhhbmtzIHRvIEdlcnJpdCBQYXBlLgoKLSBDaGFuZ2VkIGxpY2Vuc2UgdGV4dCBmb3IgTGliVG9tQ3J5cHQgYW5kIExpYlRvbU1hdGguCgotIEFkZGVkIHN0cmlwLXN0YXRpYyB0YXJnZXQKCi0gRml4ZWQgYSBidWcgaW4gYWdlbnQtZm9yd2FyZGluZyBjbGVhbnVwIGhhbmRsZXIgLSB3b3VsZCBzZWdmYXVsdAogIChkZXJlZmVyZW5jaW5nIGEgbnVsbCBwb2ludGVyKSBpZiBhZ2VudCBmb3J3YXJkaW5nIGhhZCBmYWlsZWQuCgotIEZpeCBiZWhhdmlvdXIgb2YgYXV0aG9yaXplZF9rZXlzIHBhcnNpbmcsIHNvIGxhcmdlciAoPjEwMjQgYml0KSBEU0Ega2V5cyB3aWxsCiAgd29yay4gVGhhbmtzIHRvIERyLiBNYXJrdXMgV2FsZGVjayBmb3IgdGhlIHJlcG9ydC4gCgotIEZpeGVkIGxvY2FsIHBvcnQgZm9yd2FyZGluZyBjb2RlIHNvIHRoYXQgdGhlICItaiIgb3B0aW9uIHdpbGwgbWFrZSBmb3J3YXJkaW5nCiAgYXR0ZW1wdHMgZmFpbCBtb3JlIGdyYWNlZnVsbHkuCgotIEFsbG93IHJlcGVhdGVkIHJlcXVlc3RzIGluIGEgc2luZ2xlIHNlc3Npb24gaWYgcHJldmlvdXMgb25lcyBmYWlsIC0gdGhpcyBmaXhlcyAgUHVUVFkgYW5kIHNvbWUgb3RoZXIgU0NQIGNsaWVudHMsIHdoaWNoIHRyeSBTRlRQLCB0aGVuIGZhbGwtYmFjayB0byBTQ1AgaWYgaXQKICBpc24ndCBhdmFpbGFibGUuIFRoYW5rcyB0byBTdGlybGluZyBXZXN0cnVwIGZvciB0aGUgcmVwb3J0LgoKLSBVcGRhdGVkIHRvIExpYlRvbUNyeXB0IDAuOTYgYW5kIExpYlRvbU1hdGggMC4zMC4gVGhlIEFFUyBjb2RlIG5vdyB1c2VzCiAgc21hbGxlciBub24tcHJlY29tcHV0ZWQgdGFibGVzIGlmIERST1BCRUFSX1NNQUxMX0NPREUgaXMgZGVmaW5lZCBpbgogIG9wdGlvbnMuaCwgbGVhZGluZyB0byBhIHNpZ25pZmljYW50IHJlZHVjdGlvbiBpbiB0aGUgYmluYXJ5IHNpemUuCgowLjQxIC0gTW9uIEphbiAxOSAyMDA0IDIyOjQwOjE5ICswODAwCgotIEZpeCBpbiBjb25maWd1cmUgc28gdGhhdCBjcm9zcy1jb21waWxpbmcgd29ya3MsIHRoYW5rcyB0byBudW1lcm91cyBwZW9wbGUgZm9yCiAgcmVwb3J0aW5nIGFuZCB0ZXN0aW5nCgotIFRlcm1pbmFsIG1vZGUgcGFyc2luZyBub3cgaGFuZGxlcyBlbXB0eSB0ZXJtaW5hbCBtb2RlIHN0cmluZ3MgKHNlbnQgYnkKICBXaW5kb3dzIHNzaC5jb20gY2xpZW50cyksIHRoYW5rcyB0byBSaWNhcmRvIERlcmJlcyBmb3IgdGhlIHJlcG9ydAoKLSBIYW5kbGluZyBpcyBpbXByb3ZlZCBmb3IgdXNlcnMgd2l0aCBubyBzaGVsbCBzcGVjaWZpZWQgaW4gL2V0Yy9wYXNzd2QsCiAgdGhhbmtzIGFnYWluIHRvIFJpY2FyZG8gRGVyYmVzCgotIEZpeCBmb3IgY29tcGlsaW5nIHdpdGggLS1kaXNhYmxlLXN5c2xvZywgdGhhbmtzIHRvIGdvcmRvbmZoCgotIFZhcmlvdXMgbWlub3IgZml4ZXMgYWxsb3cgc2NwIHRvIHdvcmsgd2l0aCBpcml4LCB0aGFua3MgdG8gUGF1bCBNYXJpbmNldSBmb3IKICBmaXhpbmcgaXQgdXAKCi0gVXNlIDxzdHJvcHRzLmg+IG5vdCA8c3lzL3N0cm9wdHMuaD4sIHNpbmNlIHRoZSBmb3JtZXIgc2VlbXMgbW9yZSBjb21tb24KCjAuNDAgLSBUdWUgSmFuIDEzIDIwMDQgMjE6MDU6MTkgKzA4MDAKCi0gUmVtb3RlIFRDUCBmb3J3YXJkaW5nICgtUikgc3R5bGUgaW1wbGVtZW50ZWQKCi0gTG9jYWwgYW5kIHJlbW90ZSBUQ1AgZm9yd2FyZGluZyBjYW4gZWFjaCBiZSBkaXNhYmxlZCBhdCBydW50aW1lICgtayBhbmQgLWoKICBzd2l0Y2hlcykKCi0gRml4IGZvciBwcm9ibGVtcyBkZXRlY3Rpbmcgb3BlbnB0eSgpIHdpdGggdUNsaWJjIC0gbWFueSB0aGFua3MgdG8gdmFyaW91cwogIHBlb3BsZSBmb3IgcmVwb3J0aW5nIGFuZCB0ZXN0aW5nIGZpeGVzLCBpbmNsdWRpbmcgKGluIHJhbmRvbSBvcmRlcikgQ3Jpc3RpYW4KICBJb25lc2N1LUlkYm9ocm4sIEphbWVzIEV3aW5nLCBTdGV2ZSBEb3ZlciwgVGhvbWFzIEx1bmRxdWlzdCBhbmQgRnJlZGVyaWMKICBMYXZlcm5oZQoKLSBJbXByb3ZlZCBwb3J0YWJpbGl0eSBmb3IgSVJJWCwgdGhhbmtzIHRvIFBhdWwgTWFyaW5jZXUKCi0gQUlYIGFuZCBIUFVYIHBvcnRhYmlsaXR5IGZpeGVzLCB0aGFua3MgdG8gRGFycmVuIFR1Y2tlciBmb3IgcGF0Y2hlcwoKLSBwcm5nZCBzaG91bGQgbm93IHdvcmsgY29ycmVjdGx5LCB0aGFua3MgdG8gRGFycmVuIFR1Y2tlciBmb3IgdGhlIHBhdGNoCgotIHNjcCBjb21waWxhdGlvbiBvbiBzeXN0ZW1zIHdpdGhvdXQgc3RybGNweSgpIGlzIGZpeGVkLCB0aGFua3MgdG8gUGV0ZXIKICBKYW5uZXNlbiBhbmQgRGF2aWQgTXVzZSBmb3IgcmVwb3J0aW5nIGl0IChpbmRlcGVuZGVudGx5IGFuZCBzaW11bHRhbmVvdXNseSA6KQoKLSBNZXJnZWQgaW4gbmV3IExpYlRvbUNyeXB0IDAuOTIgYW5kIExpYlRvbU1hdGggMC4yOAoKMC4zOSAtIFR1ZSBEZWMgMTYgMjAwMyAxNToxOToxOSArMDgwMAoKLSBCZXR0ZXIgY2hlY2tpbmcgb2Yga2V5IGxlbmd0aHMgYW5kIHBhcmFtZXRlcnMgZm9yIERTUyBhbmQgUlNBIGF1dGgKCi0gUHJpbnQgZmluZ2VycHJpbnQgb2Yga2V5cyB1c2VkIGZvciBwdWJrZXkgYXV0aAoKLSBNb3JlIGNvbnNpc3RlbnQgbG9nZ2luZyBvZiB1c2VybmFtZXMgYW5kIElQcwoKLSBBZGRlZCBvcHRpb24gdG8gZGlzYWJsZSBwYXNzd29yZCBhdXRoIChvciBqdXN0IGZvciByb290KSBhdCBydW50aW1lCgotIEF2b2lkIGluY2x1ZGluZyBiaWdudW0gZnVuY3Rpb25zIHdoaWNoIGRvbid0IGdpdmUgbXVjaCBzcGVlZCBiZW5lZml0IGJ1dAogIHRha2UgdXAgYmluYXJ5IHNpemUKCi0gQWRkZWQgYSBzdHJpcHBlZCBkb3duIHZlcnNpb24gb2YgT3BlblNTSCdzIHNjcCBiaW5hcnkKCi0gQWRkZWQgYWRkaXRpb25hbCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBmb3IgSXJpeCwgdGhhbmtzIHRvIFBhdWwgTWFyaW5jZXUKCi0gRG9uJ3QgY2hlY2sgZm9yIHVudXNlZCBsaWJyYXJpZXMgaW4gY29uZmlndXJlIHNjcmlwdAoKLSBSZW1vdmVkIHRyYWlsaW5nIGNvbW1hIGluIGFsZ29yaXRobSBsaXN0cyAodGhhbmtzIHRvIE1paG5lYSBTdG9lbmVzY3UpCgotIEZpeGVkIHVwIGNoYW5uZWwgY2xvc2UgaGFuZGxpbmcsIGFsd2F5cyBzZW5kIGNsb3NlIHBhY2tldCBpbiByZXNwb25zZQogIChhbHNvIHRoYW5rcyB0byBNaWhuZWEgU3RvZW5lc2N1KQoKLSBWYXJpb3VzIG1ha2VmaWxlIGltcHJvdmVtZW50cyBmb3IgY3Jvc3MtY29tcGlsaW5nLCB0aGFua3MgdG8gRnJpZWRyaWNoCiAgTG9iZW5zdG9jayBhbmQgTWlobmVhIFN0b2VuZXNjdQoKLSBVc2UgZGFlbW9uKCkgZnVuY3Rpb24gaWYgYXZhaWxhYmxlIChvciBvdXIgb3duIGNvcHkpIHJhdGhlciB0aGFuIHNlcGFyYXRlCiAgY29kZSAodGhhbmtzIHRvIEZy6WTpcmljIExhdmVybmhlIGZvciB0aGUgcmVwb3J0IGFuZCBkZWJ1Z2dpbmcsIGFuZCBCZXJuYXJkCiAgQmxhY2toYW0gZm9yIGhpcyBzdWdnZXN0aW9uIG9uIHdoYXQgdG8gbG9vayBhdCkKCi0gRml4ZWQgdXAgc3VwcG9ydCBmb3IgZmlyc3Rfa2V4X3BhY2tldF9mb2xsb3dzLCByZXF1aXJlZCB0byB0YWxrIHRvIHNzaC5jb20KICBjbGllbnRzLiBUaGFua3MgdG8gTWFyaWFuIFN0YWdhcmVzY3UgZm9yIHRoZSBidWcgcmVwb3J0LgoKLSBBdm9pZCB1c2luZyBNQVhQQVRITEVOLCBwb2ludGVyIGZyb20gSWFuIE1vcnJpcwoKLSBJbXByb3ZlZCBpbnB1dCBzYW5pdHkgY2hlY2tpbmcKCjAuMzggLSBTYXQgT2N0IDExIDIwMDMgMTY6Mjg6MTMgKzA4MDAKCi0gRGVmYXVsdCBob3N0a2V5IHBhdGggY2hhbmdlZCB0byAvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3tyc2EsZHNzfV9ob3N0X2tleQogIHJhdGhlciB0aGFuIC9ldGMvZHJvcGJlYXJfe3JzYSxkc3N9X2hvc3Rfa2V5CgotIEFkZGVkIFNNQUxMIGFuZCBNVUxUSSB0ZXh0IGZpbGVzIHdoaWNoIGhhdmUgaW5mbyBvbiBjb21waWxpbmcgZm9yIG11bHRpcGxlCiAgYmluYXJpZXMgb3Igc21hbGwgYmluYXJpZXMKCi0gQWxsb3cgZm9yIGNvbW1hbmRsaW5lIGRlZmluaXRpb24gb2Ygc29tZSBvcHRpb25zLmggc2V0dGluZ3MKICAod2l0aG91dCB3YXJuaW5ncykKCi0gQmUgbW9yZSBjYXJlZnVsIGhhbmRsaW5nIEVJTlRSCgotIE1vcmUgZml4ZXMgZm9yIGNoYW5uZWwgY2xvc2luZwoKLSBBZGRlZCBtdWx0aS1iaW5hcnkgc3VwcG9ydAoKLSBJbXByb3ZlZCBsb2dnaW5nIG9mIElQcywgbm93IGdldCBsb2dnZWQgaW4gYWxsIGNhc2VzCgotIERvbid0IGNoZXcgY3B1IHdoZW4gd2FpdGluZyBmb3IgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiBzdHJpbmcsIGFsc28KICBtYWtlIHN1cmUgdGhhdCB3ZSBraWNrIG9mZiBwZW9wbGUgaWYgdGhleSBkb24ndCBhdXRoIHdpdGhpbiA1IG1pbnV0ZXMuCgotIFZhcmlvdXMgc21hbGwgZml4ZXMsIHdhcm5pbmdzIGV0YwoKLSBEaXNwbGF5IE1PVEQgaWYgcmVxdWVzdGVkIC0gc3VnZ2VzdGVkIGJ5CiAgVHJlbnQgTGxveWQgPGxhdGhpYXQgYXQgc2l4bGFicy5vcmc+IGFuZAogIFphY2ggV2hpdGUgPHp3aGl0ZSBhdCBkYXJrc3Rhci5mcm9wLm9yZz4KCi0gc2Z0cCBzdXBwb3J0IHdvcmtzIChyZWxpZXMgb24gT3BlblNTSCBzZnRwIGJpbmFyeSBvciBzaW1pbGFyKQoKLSBBZGRlZCAtLWRpc2FibGUtc2hhZG93IG9wdGlvbiAocmVxdWVzdGVkIGJ5IHRoZSBmbG9wcHlmdyBndXlzKQoKMC4zNyAtIFdlZCBTZXB0IDI0IDIwMDMgMTk6NDI6MTIgKzA4MDAKCi0gVmFyaW91cyBwb3J0YWJpbGl0eSBmaXhlcywgZml4ZXMgZm9yIFNvbGFyaXMgOSwgVHJ1NjQgNS4xLCBNYWMgT1MgWCAxMC4yLAogIEFJWCwgQlNEcwoKLSBVcGRhdGVkIExpYlRvbU1hdGggdG8gMC4yNyBhbmQgTGliVG9tQ3J5cHQgdG8gMC45MAoKLSBSZW5hbWVkIHV0aWwue2MsaH0gdG8gZGJ1dGlsLntjLGh9IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHN5c3RlbSB1dGlsLmgKCi0gQWRkZWQgc29tZSBzbWFsbCBjaGFuZ2VzIHNvIGl0J2xsIHdvcmsgd2l0aCBBSVggKHBsdXMgTGludXggQWZmaW5pdHkpLgogIFRoYW5rcyB0byBTaGlnIGZvciB0aGVtLgoKLSBJbXByb3ZlZCB0aGUgY2xvc2luZyBtZXNzYWdlcywgc28gYSBjbGVhbiBleGl0IGlzICJFeGl0ZWQgbm9ybWFsbHkiCgotIEFkZGVkIHNvbWUgbW9yZSByb2J1c3QgaW50ZWdlci9zaXplIGNoZWNraW5nIGluIGJ1ZmZlci5jIGFzIGEgYmFja3N0b3AgZm9yCiAgaW50ZWdlciBvdmVyZmxvd3MKCi0gWDExIGZvcndhcmRpbmcgZml4ZWQgZm9yIE9TWCwgcGF0aCBmb3IgeGF1dGggY2hhbmdlZCB0byAvdXNyL1gxMVI2L2Jpbi94YXV0aAoKLSBDaGFubmVsIGNvZGUgaGFuZGxlcyBjbG9zaW5nIG1vcmUgbmljZWx5LCBkb2Vzbid0IHNpdCB3YWl0aW5nIGZvciBhbiBleHRyYQogIGtleXN0cm9rZSBvbiBCU0QvT1NYIHBsYXRmb3JtcywgYW5kIGRhdGEgaXMgZmx1c2hlZCBmdWxseSBiZWZvcmUgY2xvc2luZwogIGNoaWxkIHByb2Nlc3NlcyAodGhhbmtzIHRvIAogIENyaXN0aWFuIElvbmVzY3UtSWRib2hybiA8Y3Jpc3RpYW4uaW9uZXNjdS1pZGJvaHJuIGF0IGF4aXMuY29tPiBmb3IKICBwb2ludGluZyB0aGF0IG91dCkuCgotIENoYW5nZWQgIkRJU0FCTEVfVENQRldEIiB0byAiRU5BQkxFX1RDUEZXRCIgKGFuZCBmb3IgeDExL2F1dGgpIHNvCiAgImRpc2FibGUgRElTQUJMRV9UQ1BXRCIgaXNuJ3Qgc28gY29uZnVzaW5nLgoKLSBGaXggYXV0aG9yaXplZF9rZXlzIGhhbmRsaW5nIChkb24ndCBjcmFzaCBvbiB0b28tbG9uZyBrZXlzLCBhbmQKICB1c2UgZmdldGMgbm90IGdldGMgdG8gYXZvaWQgc3RyYW5nZSBtYWNyby1yZWxhdGVkIGlzc3VlcyksIHRoYW5rcyB0bwogIENyaXN0aWFuIElvbmVzY3UtSWRib2hybiA8Y3Jpc3RpYW4uaW9uZXNjdS1pZGJvaHJuIGF0IGF4aXMuY29tPiAKICBhbmQgU3RldmUgUm9kZ2VycyA8aHdzdGFyIGF0IGNveC5uZXQ+IGZvciByZXBvcnRpbmcgYW5kIHRlc3RpbmcuCgotIEZpeGVzIHRvIHRoZSBSRUFETUUgd2l0aCByZWdhcmQgdG8gdUNsaWJjIHN5c3RlbXMsIHRoYW5rcyB0byAKICBDcmlzdGlhbiBJb25lc2N1LUlkYm9ocm4gPGNyaXN0aWFuLmlvbmVzY3UtaWRib2hybiBhdCBheGlzLmNvbT4sCiAgYXMgd2VsbCBhcyBnZW5lcmFsIGltcHJvdmVtZW50cyB0byBkb2N1bWVudGF0aW9uIChzcGxpdCBSRUFETUUvSU5TVEFMTCkKCi0gRml4ZWQgdXAgc29tZSBjb21waWxhdGlvbiBwcm9ibGVtcyB3aXRoIGRyb3BiZWFyY29udmVydC9kcm9wYmVhcmtleSBpZgogIERTUyBvciBSU0Egd2VyZSBkaXNhYmxlZCwgcmVwb3J0ZWQgYnkgUGF0cmlrIEthcmxzc29uIDxwYXRyaWsgYXQgY3F1cmUubmV0PgoKLSBGaXggZG91YmxlLWZyZWUgYnVnIGZvciBob3N0a2V5cywgcmVwb3J0ZWQgYnkKICBWaW5jZW50IFNhbmRlcnMgPHZpbmNlIGF0IGt5bGxpa2tpLm9yZz4KCi0gRml4IHVwIG1pc3NpbmcgXG5zIGZyb20gZHJvcGJlYXJjb252ZXJ0IGhlbHAgbWVzc2FnZSwKICB0aGFua3MgdG8gTW9yZHkgT3ZpdHMgPG1vdml0cyBhdCBibG9vbWJlcmcuY29tPiBmb3IgdGhlIHBhdGNoCgowLjM2IC0gVHVlIEF1Z3VzdCAxOSAyMDAzIDEyOjE2OjIzICswODAwCgotIEZpeCB1bmluaXRpYWxpc2VkIHRlbXBvcmFyeSB2YXJpYWJsZSBpbiBEU1Mgc2lnbmluZyBjb2RlCiAgKHRoYW5rcyB0byBNYXR0aGV3IEZyYW56IDxtZGZyYW56IGF0IGlvLmNvbT4gZm9yIHJlcG9ydGluZywgYW5kIHRoZSBhdXRob3JzCiAgb2YgVmFsZ3JpbmQgZm9yIG1ha2luZyBpdCBlYXN5IHRvIHRyYWNrIGRvd24pCi0gRml4IHJlbW90ZSB2ZXJzaW9uLXN0cmluZyBwYXJzaW5nIGVycm9yCiAgKHRoYW5rcyB0byBCZXJuYXJkIEJsYWNraGFtIDxiZXJuYXJkIGF0IGJsYWNraGFtLmNvbS5hdT4gZm9yIG5vdGljaW5nKQotIEltcHJvdmVkIGhvc3QtYWxnb3JpdGhtLW1hdGNoaW5nIGFsZ29yaXRobSBpbiBhbGdvLmMKLSBEZWNyZWFzZWQgTUFYX1NUUklOR19MRU4gdG8gYSBtb3JlIHJlYWxpc3RpYyB2YWx1ZQotIEZpeCBpbmNvcnJlY3QgdmVyc2lvbiAoMC4zNCkgaW4gdGhpcyBDSEFOR0VTIGZpbGUgZm9yIHRoZSBwcmV2aW91cyByZWxlYXNlLgoKMC4zNSAtIFN1biBBdWd1c3QgMTcgMjAwMyAwNTozNzo0NyArMDgwMAoKLSBGaXggZm9yIHJlbW90ZWx5IGV4cGxvaXRhYmxlIGZvcm1hdCBzdHJpbmcgYnVmZmVyIG92ZXJmbG93LgogICh0aGFua3MgdG8gSm9lbCBFcmlrc3NvbiA8amUgYXQgYml0bnV4LmNvbT4pCgowLjM0IC0gRnJpIEF1Z3VzdCAxNSAyMDAzIDE1OjEwOjAwICswODAwCgotIE1hZGUgc3lzbG9nIG9wdGlvbmFsLCBib3RoIGF0IGNvbXBpbGUgdGltZSBhbmQgYXMgYSBjb21waWxlIG9wdGlvbgogIChzdWdnZXN0ZWQgYnkgTGF1cmVudCBCZXJjb3QgPHNrYSBhdCBza2FybmV0Lm9yZz4pCi0gRml4dXAgZm9yIGJhZCBiYXNlNjQgcGFyc2luZyBpbiBhdXRob3JpemVkX2tleXMKICAobm90aWNlZCBieSBEYXZ5ZCBNYWRlbGV5IDxkYXZ5ZCBhdCB6ZGxjb21wdXRpbmcuY29tPikKLSBBZGRlZCBpbml0aWFsIHRjcCBmb3J3YXJkaW5nIGNvZGUsIG9ubHkgLUwgKGxvY2FsKSBhdCB0aGlzIHN0YWdlCi0gSW1wcm92ZWQgIm1ha2UgaW5zdGFsbCIgd2l0aCBERVNURElSIGFuZCBjaGFuZ2luZyBvd25lcnNoaXAgc2VwZXJhdGVseSwKICBkb24ndCBjaGVjayBmb3Igc2V0cGdycCBvbiBMaW51eCBmb3IgY3Jvc3Njb21waWxpbmcuCiAgKGZyb20gRXJpayBBbmRlcnNlbiA8YW5kZXJzZW4gYXQgY29kZXBvZXQub3JnPikKLSBNb3JlIGNvbW1lbnRpbmcsIGZpeCBtaW5vciBjb21waWxlIHdhcm5pbmdzLCBtYWtlIHJldHVybiB2YWx1ZXMgbW9yZQogIGNvbnNpc3RlbnQgZXRjCi0gVmFyaW91cyBzaWduZWRuZXNzIGZpeGVzCi0gQ2FuIGxpc3RlbiBvbiBtdWx0aXBsZSBwb3J0cwotIGFkZGVkIG9wdGlvbiB0byBkaXNhYmxlIG9wZW5wdHkgd2l0aCBjb25maWd1cmUgc2NyaXB0LAogIChmcm9tIEsuLVAuIEtpcmNoZPZyZmVyIDxrYXBla2EgYXQgZXBvc3QuZGU+KQotIFZhcmlvdXMgY2xlYW51cHMgdG8gYmlnbnVtIGNvZGUKICAodGhhbmtzIHRvIFRvbSBTdCBEZW5pcyA8dG9tc3RkZW5pcyBhdCBpYWh1LmNhPikKLSBGaXggY29tcGlsZSBlcnJvciB3aGVuIGRpc2FibGluZyBSU0EKICAoZnJvbSBNYXJjIEtsZWluZS1CdWRkZSA8a2xlaW5lLWJ1ZGRlIGF0IGdteC5kZT4pCi0gT3RoZXIgY2xlYW51cHMsIHNwbGl0dGluZyBsYXJnZSBmdW5jdGlvbnMgZm9yIHBhY2tldCBhbmQga2V4IGhhbmRsaW5nIGV0YwoKMC4zMyAtIFN1biBKdW5lIDIyIDIwMDMgMjI6MjQ6MTIgKzA4MDAKCi0gRml4ZWQgc29tZSBpbnZhbGlkIGFzc2VydGlvbnMgaW4gdGhlIGNoYW5uZWwgY29kZSwgZml4aW5nIHRoZSBzZXJ2ZXIgZHlpbmcKICB3aGVuIGZvcndhcmRpbmcgWDExIGNvbm5lY3Rpb25zLgotIEFkZCBkcm9wYmVhcmNvbnZlcnQgdG8gY29udmVydCB0by9mcm9tIE9wZW5TU0ggaG9zdCBrZXlzIGFuZCBEcm9wYmVhciBrZXlzCi0gUlNBIGtleXMgbm93IGtlZXAgcCBhbmQgcSBwYXJhbWV0ZXJzIGZvciBjb21wYXRpYmlsaXR5IC0tIG9sZCBEcm9wYmVhciBrZXlzCiAgc3RpbGwgd29yaywgYnV0IGNhbid0IGJlIGNvbnZlcnRlZCB0byBPcGVuU1NIIGV0Yy4KLSBEZWJpYW4gcGFja2FnaW5nIGRpcmVjdG9yeSBhZGRlZCwgdGhhbmtzIHRvIAogIEdyYWhhbWUgKGdyYWhhbWUgYXQgYW5ncnlnb2F0cy5uZXQpCi0gJ2luc3RhbGwnIHRhcmdldCBhZGRlZCB0byB0aGUgbWFrZWZpbGUKLSBnZW5lcmFsIHRpZHlpbmcsIGltcHJvdmUgY29uc2lzdGVuY3kgb2YgZnVuY3Rpb25zIGV0YwotIElmIFJTQSBvciBEU1MgaG9zdGtleXMgZG9uJ3QgZXhpc3QsIHRoYXQgYWxnb3JpdGhtIHdvbid0IGJlIHVzZWQuCi0gSW1wcm92ZWQgUlNBIGFuZCBEU1Mga2V5IGdlbmVyYXRpb24sIG1vcmUgZWZmaWNpZW50IGFuZCBmaXhlZCBzb21lIG1pbm9yIGJ1Z3MKICAodGhhbmtzIHRvIFRvbSBTdCBEZW5pcyBmb3IgdGhlIGFkdmljZSkKLSBNZXJnZWQgbmV3IHZlcnNpb25zIG9mIExpYlRvbUNyeXB0ICgwLjg2KSBhbmQgTGliVG9tTWF0aCAoMC4yMSkKCjAuMzIgLSBTYXQgTWF5IDI0IDIwMDMgMTI6NDQ6MTEgKzA4MDAKCi0gRG9uJ3QgY29tcGlsZSB1bnVzZWQgY29kZSBmcm9tIGxpYnRvbWNyeXB0ICh0ZXN0IHZlY3RvcnMgZXRjKQotIFVwZGF0ZWQgdG8gbGlidG9tbWF0aCAwLjE3IGFuZCBsaWJ0b21jcnlwdCAwLjgzLiBOZXcgbGlidG9tbWF0aCByZXN1bHRzCiAgaW4gc21hbGxlciBiaW5hcnkgc2l6ZSwgZHVlIHRvIG5vdCBsaW5raW5nIHVucmVxdWlyZWQgY29kZQotIFgxMSBmb3J3YXJkaW5nIGFkZGVkCi0gQWdlbnQgZm9yd2FyZGluZyBhZGRlZCAoZm9yIE9wZW5TU0guY29tIHNzaCBjbGllbnQvYWdlbnQpCi0gRml4IGluY29ycmVjdCBidWZmZXIgZnJlZWluZyB3aGVuIGJhbm5lcnMgYXJlIHVzZWQKLSBIb3N0bmFtZSByZXNvbHV0aW9uIHdvcmtzCi0gVmFyaW91cyBtaW5vciBidWdmaXhlcy9jb2RlIHNpemUgaW1wcm92ZW1lbnRzIGV0YwoKMC4zMSAtIEZyaSBNYXkgOSAyMDAzIDE3OjU3OjE2ICswODAwCgotIEltcHJvdmVkIHN5c2xvZyBtZXNzYWdlcyAtIElQIGxvZ2dpbmcgZXRjCi0gU3RyaXAgY29udHJvbCBjaGFyYWN0ZXJzIGZyb20gbG9nIG1lc3NhZ2VzIChzcGVjaWZpZWQgdXNlcm5hbWUgY3VycmVudGx5KQotIExvZ2luIHJlY29yZGluZyAodXRtcC93dG1wKSBzdXBwb3J0LCBzbyBsYXN0L3cvd2hvIHdvcmsgLSB0YWtlbiBmcm9tIE9wZW5TU0gKLSBTaGVsbCBpcyBzdGFydGVkIGFzIGEgcHJvcGVyIGxvZ2luIHNoZWxsLCBzbyAvZXRjL3Byb2ZpbGUgZXRjIGlzIHNvdXJjZWQKLSBQdHlzIHdvcmsgb24gU29sYXJpcyAoMi44IHg4NiB0ZXN0ZWQpIG5vdwotIEZpeGVkIGJ1ZyBpbiBzcGVjaWZ5aW5nIHRoZSByc2EgaG9zdGtleQotIEZpeGVkIGJ1ZyBpbiBjb21wcmVzc2lvbiBjb2RlLCBjb3VsZCB0cmlnZ2VyIGlmIGNvbXByZXNzaW9uIHJlc3VsdGVkIGluCiAgbGFyZ2VyIG91dHB1dCB0aGFuIGlucHV0ICh1bmNvbW1vbiBidXQgcG9zc2libGUpLgoKMC4zMCAtIFRodSBBcHIgMTcgMjAwMyAxODo0NjoxNSArMDgwMAoKLSBTRUNVUklUWTogYnVmZmVyLmMgaGFkIGJhZCBjaGVja2luZyBmb3IgYnVmZmVyIGluY3JlbWVudCBsZW5ndGggLSBmaXhlZAotIGNoYW5uZWwgY29kZSBub3cgY2xvc2VzIHByb3Blcmx5IG9uIEVPRiAtIHNjcCBwcm9jZXNzZXMgZG9uJ3QgaGFuZyBhcm91bmQKLSBzeXNsb2cgc3VwcG9ydCBhZGRlZCAtIGltcHJvdmVkIGF1dGgvbG9naW4vZmFpbHVyZSBtZXNzYWdlcwotIGdlbmVyYWwgY29kZSB0aWR5aW5nLCBtYWRlIHJldHVybiBjb2RlcyBtb3JlIGNvbnNpc3RlbnQKLSBNYWtlZmlsZSBmaXhlZCBmb3IgZGVwZW5kZW5jaWVzIGFuZCBtYWtlcyBsaWJ0b21jcnlwdCBhcyB3ZWxsCi0gSW1wbGVtZW50ZWQgc2VuZGluZyBTU0hfTVNHX1VOSU1QTEVNRU5URUQgOikKCjAuMjkgLSBXZWQgQXByIDkgMjAwMwoKLSBGaXhlZCBhIHN0dXBpZCBidWcgaW4gMC4yOCByZWxlYXNlLCAnbmV3c3RyID0gc3RyZHVwKG9sZHN0ciknLAogIG5vdCAnbmV3c3RyPW9sZHN0cicKCjAuMjggLSBTdW4gQXByIDYgMjAwMwoKLSBJbml0aWFsIHB1YmxpYyByZWxlYXNlCgpEZXZlbG9wbWVudCB3YXMgc3RhcnRlZCBpbiBPY3RvYmVyIDIwMDIK