bGlic3NoMiAtIFNTSDIgbGlicmFyeQo9PT09PT09PT09PT09PT09PT09PT09CgpWZXJzaW9uIDAuMTEKLS0tLS0tLS0tLS0tCgogIEFkZGVkIGxpYnNzaDJfY2hhbm5lbF9yZWNlaXZlX3dpbmRvd19hZGp1c3QoKSB0byBiZSBhYmxlIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIHdpbmRvdy4KCiAgQWRkZWQgcXVldWVpbmcgZm9yIHNtYWxsIHdpbmRvd19hZGp1c3QgcGFja2V0cyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwYWNrZXQgY29udmVyc2F0aW9uLgoKVmVyc2lvbiAwLjEwCi0tLS0tLS0tLS0tLQoKICBBZGRlZCBkZXZlbG9wZXIgZGVidWdnaW5nIGhvb2tzLiAgU2VlIC0tZW5hYmxlLWRlYnVnLSogb3B0aW9ucyB0byAuL2NvbmZpZ3VyZQoKICBJZ25vcmUgZXh0ZW5kZWQgZGF0YSBpbiB0aGUgU0ZUUCBsYXllci4gIFdpdGggbm8gb3RoZXIgbWVjaGFuaXNtIHRvIGRlYWwgd2l0aCB0aGF0IGRhdGEgaXQnZCBqdXN0IGZpbGwgdXAgYW5kIGdldCBzdHVjay4KCiAgKFJlKUZpeGVkIGNoYW5uZWxfd3JpdGUoKSB0byBwcm92aWRlIGFuIG9wcG9ydHVuaXR5IGZvciB3aW5kb3cgc3BhY2UgdG8gYmVjb21lIGF2YWlsYWJsZSBhZ2Fpbi4KCiAgKFJlKUZpeGVkIFNGVFAgSU5JVCB0byBzZW5kIHRoZSBjb3JyZWN0IFNGVFAgcGFja2V0IGxlbmd0aC4KCiAgRml4ZWQgc2VnZmF1bHQgd2hlbiBjbGllbnQgYW5kIGhvc3QgY2FuJ3QgYWdyZWUgb24gYSBob3N0a2V5L2NyeXB0L21hYy9jb21wIG1ldGhvZC4gKFRoYW5rcyBwdXVkZWxpKQoKICBGaXhlZCBtYWpvciBpc3N1ZSB3aXRoIHNmdHAgcGFja2V0IGJ1ZmZlcmluZyBtZWNoYW5pc20uICBVc2luZyB3cm9uZyBibG9ja2luZyBzZW1hbnRpY3MuIChObyBwdXVkZWxpLCBZT1UgdGhlIG1hbikKCiAgUmVkdWNlZCBidXN5LWxvb3Bpbmcgb2YgbGlic3NoMl9zZnRwX3BhY2tldF9yZXF1aXJldi4KClZlcnNpb24gMC45Ci0tLS0tLS0tLS0tCgogIENoYW5nZWQgYmxvY2tpbmdfcmVhZCB0byBvbmx5IGJsb2NrIGFzIG11Y2ggYXMgbmVjZXNzYXJ5IGFuZCBub3QgYW4gYXJiaXRyYXJ5IGxlbmd0aCBvZiB0aW1lLiAoVGhhbmtzIEZlbGl4KQoKICBGaXhlZCBTRlRQIElOSVQvVkVSU0lPTiB0byBleGNsdWRlIHJlcXVlc3RfaWQgYW5kIHNlbmQgY29ycmVjdCBtYXhpbXVtIHZlcnNpb24gbnVtYmVyLgoKICBGaXhlZCBTRlRQIHRvIGJlIHByb3Blcmx5IEJDIHdpdGggdmVyc2lvbiAxIGFuZCAyIHNlcnZlcnMuCgogIEZpeGVkIGxpYnNzaDJfcG9sbCgpIHRvIHJlY29nbml6ZWQgY2xvc2VkIHNlc3Npb25zL2NoYW5uZWxzLgoKICBGaXhlZCBsaWJzc2gyX2NoYW5uZWxfd3JpdGVfZXgoKSB0byBmdWxseSBibG9jayB3aGVuIHNldCB0byBibG9ja2luZyBtb2RlLiAgUmV0dXJuIGFjdHVhbCBieXRlcyB3cml0dGVuIGFzIHdlbGwuICAoVGhhbmtzIGRlYWRlbSkKCiAgQWRkZWQgdGVzdHMgZm9yIC1sbSBhbmQgLWxzb2NrZXQgYW5kIGFkZCB0aGVtIHdoZW4gbmVjZXNzYXJ5LgoKICBBZGRlZCBsaWJzc2gyX2NoYW5uZWxfd2luZG93X3JlYWRfZXgoKSBhbmQgbGlic3NoMl9jaGFubmVsX3dpbmRvd193cml0ZV9leCgpCiAgZm9yIGV4YW1pbmluZyB0aGUgc3NoIHRyYW5zcG9ydCB3aW5kb3dpbmcgc3RhdGVzLgoKVmVyc2lvbiAwLjgKLS0tLS0tLS0tLS0KCiAgRml4IHBvdGVudGlhbCBzZWdmYXVsdCBpbiBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uLgoKICBGaXggY29tcGF0YWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5TU0wKCiAgU3dhcHBlZCBvcmRlciBvZiBub25lLHpsaWIgY29tcHJlc3Npb24gbW9kZXMgdG8gcHJlZmVyIG5vIGNvbXByZXNzaW9uIGJ5IGRlZmF1bHQuCgogIEFkZGVkIHN5cy91aW8uaCBmb3IgcGxhdGZvcm1zIChGQlNEKSB3aGljaCBuZWVkIGl0IGluIG9yZGVyIHRvIGRlZmluZSBzdHJ1Y3QgaW92ZWMuCgogIEFkZGVkIGxpYnNzaDJfcG9sbCgpIHRvIGNoZWNrIHN0YXR1cyBvZiBzb2NrZXRzL2NoYW5uZWxzL2xpc3RlbmVycy4KCiAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBpbmNsdXNpb24gb2Ygc3RkaW8uaCAoaG9sZG92ZXIgZnJvbSBkZWJ1Z2dpbmcpCgpWZXJzaW9uIDAuNwotLS0tLS0tLS0tLQoKICBBZGRlZCBsaWJzc2gyX3VzZXJhdXRoX2hvc3RiYXNlZF9mcm9tZmlsZV9leCgpIGZvciBhdXRoZW50aWNhdGluZyBmcm9tIGhvc3RrZXkuCgogIEFkZGVkIGNvbmZpZ3VyZSByZWNvZ25pdGlvbiBmb3IgTWFjT1NYIChEYXJ3aW4pIChUaGFua3MgR2FiZSkKCiAgRml4ZWQgZXh0ZW5kZWQgZGF0YSBpZGVudGlmaWNhdGlvbiBpbiBsaWJzc2gyX2NoYW5uZWxfcmVhZCgpLgoKICBGaXhlZCB3aW5kb3cgYWRqdXN0IGNvZGUuICBIYWRuJ3QgYWNrbm93bGVkZ2VkIGFkanVzdG1lbnRzIGNvcnJlY3RseS4KCiAgUmVtb3ZlZCBpbml0aWFsX3dpbmRvd19zaXplIHJlcXVpcmVtZW50IGZvciBzZW5kaW5nIHdpbmRvdyBhZGp1c3QgcGFja2V0LgoKClZlcnNpb24gMC42Ci0tLS0tLS0tLS0tCgogIEFkZGVkIExJQlNTSDJfRkxBR19TSUdQSVBFIHRvIGVuYWJsZS9kaXNhYmxlIFNJR1BJUEUgZ2VuZXJhdGVkIGJ5IHNlbmQoKS9yZWN2KCkgY2FsbHMuIERlZmF1bHQgb2ZmLgoKICBBZGRlZCBsaWJzc2gyX3Nlc3Npb25fZmxhZygpIHRvIHNldCBvcHRpb25hbCBzZXNzaW9uIGZsYWdzLgoKICBDb2xsYXBzZWQgZXhjaGFuZ2luZ19rZXlzL25ld2tleXMvYXV0aGVudGljYXRlZCBmbGFncyBpbnRvIHNpbmdsZSBzdGF0ZSBhdHRyaWJ1dGUuCgogIEZpeCB6bGliIGNvbXByZXNzaW9uIGlzc3VlIHdoZW4gaW50ZXJuYWwgYnVmZmVyIHN0YXRlIG1pc3NlcyBwYXJ0aWFsIHN5bmMuCgogIEZpeCBzZWdmYXVsdCB3aGVuIGxpYnNzaDJfc2Vzc2lvbl9tZXRob2RzKCkgaXMgY2FsbGVkIHByaW9yIHRvIHNlc3Npb25fc3RhcnR1cCgpLgoKICBGaXhlZCBjbGllbnQgdG8gc2VydmVyIGNoYW5uZWwgd2luZG93aW5nLiAgUGVydmVudCBzZW5kIHF1ZXVlIG92ZXJydW5zLgoKICBTd2FwcGVkIGJhbm5lciBzZW5kL3JlY2VpdmUgb3JkZXIgKHNlbmQgZmlyc3QsIHRoZW4gd2FpdCBmb3IgcmVzcG9uc2UpLgoKVmVyc2lvbiAwLjUKLS0tLS0tLS0tLS0KCiAgKioqIEJDIEJyZWFrICoqKgogIFJlaW1wbGVtZW50ZWQgbGlic3NoMl9zZXNzaW9uX21ldGhvZHMoKSB0byBtYXRjaCBsaWJzc2gyX3Nlc3Npb25fbWV0aG9kX3ByZWYoKSBzdHlsZQoKICBGaXhlZCBsaWJzc2gyX2F0dHIyYmluKCkgKGVmZmVjdHMgYW55IHNldHN0YXQgc3R5bGUgY2FsbCkuCgogIEZpeGVkIGF1dGhlbnRpY2F0aW5nIHdpdGggZW5jcnlwdGVkIHByaXZhdGUga2V5LgoKICBGaXhlZCBhdXRoZW50aWNhdGluZyB2aWEgc3NoLWRzcyBwdWJsaWMga2V5LgoKICBGaXhlZCBLRVhfSU5JVCBjb29raWUgYW5kIHBhY2tldCBwYWRkaW5nIHRvIHVzZSBhY3R1YWwgcmFuZG9tIGRhdGEKCiAgQWRkZWQgREVTVERJUiBzdXBwb3J0IHRvIG1ha2VmaWxlcyAoQWRhbSBHb7PqYmlvd3NraSAtLSBJIGhvcGUgdGhhdCBjaGFyYWN0ZXIgc2V0IHRyYW5zbGF0ZXMgcmlnaHQpCgogIEFkZGVkIGxpYnNzaDJfY2hhbm5lbF9mb3J3YXJkX2xpc3Rlbl9leCgpLCBsaWJzc2gyX2NoYW5uZWxfZm9yd2FyZF9jYW5jZWwoKSwgYW5kIGxpYnNzaDJfY2hhbm5lbF9mb3J3YXJkX2FjY2VwdCgpLgoKICBBZGRlZCAuL2NvbmZpZ3VyZSBvcHRpb24gJy0tZGlzYWJsZS1nZXgtbmV3JyB0byBhbGxvdyB1c2luZyB0aGUgb2xkZXIgZ3JvdXAtZXhjaGFuZ2UgZm9ybWF0CgogIEFkZGVkIE1BQyBtZXRob2RzIGhtYWMtbWQ1IGFuZCBobWFjLW1kNS05Ni4KClZlcnNpb24gMC40Ci0tLS0tLS0tLS0tCgogIEZpeGVkIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIGZyZWUgc2Z0cF9kaXJoYW5kbGUgZGF0YSBmcm9tIGEgZmlsZWhhbmRsZSBzdHJ1Y3QuCgogIEZpeGVkIGxlYWsgaW4gc2Z0cF9vcGVuX2V4KCksIGhhbmRsZS0+aGFuZGxlIG5vdCBmcmVlZCBpbiBoYW5kbGVfY2xvc2UoKS4KCiAgRml4ZWQgbGVhayBpbiBzZnRwX3N5bWxpbmtfZXgoKSwgcmVzdWx0IGZvciBSRUFETElOSyBhbmQgUkVBTFBBVEggbm90IGZyZWVkIHVubGVzcyB0aGVyZSB3YXMgYW4gZXJyb3IuCgogIEFkZGVkIGxpYnNzaDJfYmFubmVyX3NldCgpLCBzcGVjaWZ5IGFuIGFyYml0cmFyeSBiYW5uZXIgdG8gc2VuZCBvbiBpbnRyb2R1Y3Rpb24uCgpWZXJzaW9uIDAuMwotLS0tLS0tLS0tLQoKICBGaXhlZCBsaWJzc2gyX2NoYW5uZWxfcmVhZF9leCgpLiAgUGFja2V0IGxvb3AgaW5pdGlhbGl6ZWQgQkVGT1JFIHRyYW5zcG9ydCBwb2xsZWQgZm9yIG5ldyBwYWNrZXRzIChzaG91bGQgaGF2ZSBiZWVuIGFmdGVyKS4KCiAgRml4ZWQgYmxvY2tpbmcgaXNzdWVzIGluIHNjcF9zZW5kKCkvc2NwX3JlY3YoKS4KCiAgRml4ZWQgZGVncmVlIG9mIGluZGlyZWN0aW9uIGluIG1hY2Vycm9yIGNhbGxiYWNrLgoKICBDaGFuZ2VkIHBhY2tldCByZWFkIG1lY2hhbmlzbSB0byB1c2UgYSBmaXhlZCBidWZmZXIgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IGFsbG9jL2ZyZWUgY2FsbHMuIChlc3BlY2lhbGx5IHdoaWxlIG5vbi1ibG9jayBsb29waW5nKQoKICBBZGRlZCBjaGFubmVsIGNsb3NlIGNhbGxiYWNrLgoKICBBZGRlZCBTRlRQIHN1cHBvcnQgKFVzaW5nIGl0cyBvd24gaGVhZGVyIGZpbGU6IGxpYnNzaDJfc2Z0cC5oKQoKVmVyc2lvbiAwLjIKLS0tLS0tLS0tLS0KCiAgQ2hhbmdlZCBleHRlbmRlZCBkYXRhIGlnbm9yYW5jZSBtZWNoYW5pc206CiAgICBsaWJzc2gyX2NoYW5uZWxfaWdub3JlX2V4dGVuZGVkX2RhdGEoKSBjaGFuZ2VkIHRvIGxpYnNzaDJfY2hhbm5lbF9oYW5kbGVfZXh0ZW5kZWRfZGF0YSgpCiAgICBNYWNybyBpbnRyb2R1Y2VkIGZvciBiYWNrd2FyZCBjb21wYXRhYmlsaXR5IGR1cmluZyBiZXRhIHBoYXNlLgogICAgKioqIFRIRSBMSUJTU0gyX0NIQU5ORUxfSUdOT1JFX0VYVEVOREVEX0RBVEEoKSBNQUNSTyBXSUxMIEJFIFJFTU9WRUQgUFJJT1IgVE8gMS4wIFJFTEVBU0UgKioqCiAgICBsaWJzc2gyX2NoYW5uZWxfaGFuZGxlX2V4dGVuZGVkX2RhdGEoKSBtYXkgYmUgcGFzc2VkIG9uZSBvZiB0aHJlZSAiaWdub3JlX21vZGUiIGNvbnN0YW50cwogICAgICBMSUJTU0gyX0NIQU5ORUxfRVhURU5ERURfREFUQV9OT05FICAgICAgIERlZmF1bHQgYmVoYXZpb3IsIHF1ZXVlIEVEIHBhY2tldHMgYW5kIHJldHVybiB0aGVtIHdpdGggcmVhZF9leAogICAgICBMSUJTU0gyX0NIQU5ORUxfRVhURU5ERURfREFUQV9JR05PUkUgICAgIEVxdWl2YWxlbnQgdG8gbGlic3NoMl9jaGFubmVsX2lnbm9yZV9leHRlbmRlZF9kYXRhKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR05PUkUgd2lsbCBpbXBsaWNpdGx5IGZsdXNoIHRoZSBleHRlbmRlZCBkYXRhIHN0cmVhbShzKQogICAgICBMSUJTU0gyX0NIQU5ORUxfRVhURU5ERURfREFUQV9NRVJHRSAgICAgIENhbGxzIHRvIGNoYW5uZWxfcmVhZCgpIHdpbGwgY2hlY2sgYm90aCB0aGUgc3RhbmRhcmQgZGF0YSBzdHJlYW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGV4dGVuZGVkIGRhdGEgc3RyZWFtKHMpIGZvciB0aGUgZmlyc3QgYXZhaWxhYmxlIHBhY2tldAoKICBDaGFuZ2VkIGxpYnNzaDJfc2Vzc2lvbl9kaXNjb25uZWN0X2V4KCkgdG8gcmV0dXJuIGFuIGVycm9yIGNvZGUgd2hlbiBhbGxvYyBmYWlscwoKICBBZGRlZCBsaWJzc2gyX2NoYW5uZWxfZmx1c2hfZXgoKSBhbmQgYmFzaWMgbWFjcm9zOiAuLi5fZmx1c2goKSAuLi5fZmx1c2hfc3RkZXJyKCkKICAgIGZsdXNoX2V4IGFjY2VwdHMgZWl0aGVyIHRoZSBzdHJlYW1pZCAoMCBmb3Igc3RhbmRhcmQgZGF0YSwgMSBmb3Igc3RkZXJyKSBvciBvbmUgb2YgdGhlIHR3byBmb2xsb3dpbmcgY29uc3RhbnRzOgogICAgICBMSUJTU0gyX0NIQU5ORUxfRkxVU0hfQUxMICAgICAgICAgICAgICAgIEZsdXNoIGFsbCBzdHJlYW1zCiAgICAgIExJQlNTSDJfQ0hBTk5FTF9GTFVTSF9FWFRFTkRFRF9EQVRBICAgICAgRmx1c2ggYWxsIHN0cmVhbXMgRVhDRVBUIHRoZSBzdGFuZGFyZCBkYXRhIHN0cmVhbQoKICBBZGRlZCBsaWJzc2gyX3Nlc3Npb25fY2FsbGJhY2tfc2V0KCkgZm9yIHNldHRpbmcgaWdub3JlL2RlYnVnL2Rpc2Nvbm5lY3QvbWFjZXJyb3IgY2FsbGJhY2tzCgogIEFkZGVkIGxpYnNzaDJfc2Vzc2lvbl9tZXRob2RfcHJlZigpIHRvIHNlbGVjdGl2ZWx5IHNldCBtZXRob2RzIGFuZCBtZXRob2QgcHJlZmVyZW5jZXMuCgogIEFkZGVkIGxpYnNzaDJfc2Vzc2lvbl9tZXRob2RzKCkgdG8gZGV0ZXJtaW5lIHdoYXQgbWV0aG9kcyB3ZXJlIG5lZ290aWF0ZWQuCgogIEFkZGVkIGxpYnNzaDJfc2Vzc2lvbl9hYnN0cmFjdCgpIGZvciByZXRyZWl2aW5nICZzZXNzaW9uLT5hYnN0cmFjdAoKICBBZGRlZCBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcigpIGZvciByZXRyZWl2aW5nIGVycm9yIGNvZGVzL21lc3NhZ2VzCgpWZXJzaW9uIDAuMQotLS0tLS0tLS0tLQoKICBJbml0aWFsIFJlbGVhc2U6CiAgICBLRVggbWV0aG9kczogZGlmZmllLWhlbGxtYW4tZ3JvdXAxNC1zaGExLCBkaWZmaWUtaGVsbG1hbi1ncm91cC1leGNoYW5nZS1zaGExLCBkaWZmaWUtaGVsbG1hbi1ncm91cDEtc2hhMQogICAgSG9zdGtleSBtZXRob2RzOiBzc2gtcnNhLCBzc2gtZHNzCiAgICBDaXBoZXIgbWV0aG9kczogYWVzMjU2LWNiYywgcmlqbmRhZWwtY2JjQGx5c2F0b3IubGl1LnNlLCBhZXMxOTItY2JjLCBhZXMxMjgtY2JjLCBibG93ZmlzaC1jYmMsIGFyY2ZvdXIsIGNhc3QxMjgtY2JjLCAzZGVzLWNiYywgbm9uZSoKICAgIENvbXByZXNzaW9uIG1ldGhvZHM6IHpsaWIsIG5vbmUKICAgIE1BQyBtZXRob2RzOiBobWFjLXNoYTEsIGhtYWMtc2hhMS05NiwgaG1hYy1yaXBlbWQxNjAsIGhtYWMtcmlwZW1kMTYwQG9wZW5zc2guY29tIG5vbmUqCiAgICAqQ2lwaGVyL01BQyAibm9uZSIgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3Igc2VjdXJpdHkgcHVycG9zZXMsCiAgICAgVXNlIC0tZW5hYmxlLWNyeXB0LW5vbmUgYW5kL29yIC0tZW5hYmxlLW1hYy1ub25lIHdpdGggLi9jb25maWd1cmUgdG8gZW5hYmxlCg==