Km9zX3Ztcy50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjQuICBMYXN0IGNoYW5nZTogMjAxNCBGZWIgMjQKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwKCgoJCQkJCQkJKlZNUyogKnZtcyoKVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFyaXRpZXMgZm9yIHRoZSBWTVMgdmVyc2lvbiBvZiBWaW0uCllvdSBjYW4gcmVhY2ggdGhpcyBpbmZvcm1hdGlvbiBmaWxlIGJ5IHR5cGluZyA6aGVscCBWTVMgaW4gVmltIGNvbW1hbmQKcHJvbXB0LgoKIDEuIEdldHRpbmcgc3RhcnRlZAl8dm1zLXN0YXJ0ZWR8CiAyLiBEb3dubG9hZCBmaWxlcwl8dm1zLWRvd25sb2FkfAogMy4gQ29tcGlsaW5nCQl8dm1zLWNvbXBpbGluZ3wKIDQuIFByb2JsZW1zCQl8dm1zLXByb2JsZW1zfAogNS4gRGVwbG95CQl8dm1zLWRlcGxveXwKIDYuIFByYWN0aWNhbCB1c2FnZQl8dm1zLXVzYWdlfAogNy4gR1VJIG1vZGUgcXVlc3Rpb25zCXx2bXMtZ3VpfAogOC4gVXNlZnVsIG5vdGVzCXx2bXMtbm90ZXN8CiA5LiBWTVMgcmVsYXRlZCBjaGFuZ2VzCXx2bXMtY2hhbmdlc3wKMTAuIEF1dGhvcnMJCXx2bXMtYXV0aG9yc3wKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMS4gR2V0dGluZyBzdGFydGVkCQkJCQkqdm1zLXN0YXJ0ZWQqCgpWaW0gKFZpIElNcHJvdmVkKSBpcyBhIFZpLWNvbXBhdGlibGUgdGV4dCBlZGl0b3IgdGhhdCBydW5zIG9uIG5lYXJseSBldmVyeQpvcGVyYXRpbmcgc3lzdGVtIGtub3duIHRvIGh1bWFuaXR5LiAgTm93IHVzZSBWaW0gb24gT3BlblZNUyB0b28sIGluIGNoYXJhY3RlcgpvciBYL01vdGlmIGVudmlyb25tZW50LiAgSXQgaXMgZnVsbHkgZmVhdHVyZWQgYW5kIGFic29sdXRlbHkgY29tcGF0aWJsZSB3aXRoClZpbSBvbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMi4gRG93bmxvYWQgZmlsZXMJCQkJCSp2bXMtZG93bmxvYWQqCgpZb3UgY2FuIGRvd25sb2FkIHRoZSBWaW0gc291cmNlIGNvZGUgYnkgZnRwIGZyb20gdGhlIG9mZmljaWFsIFZpbSBzaXRlOgoJZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS8KT3IgdXNlIG9uZSBvZiB0aGUgbWlycm9yczoKCWZ0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vTUlSUk9SUwoKWW91IGNhbiBkb3dubG9hZCBwcmVjb21waWxlZCBleGVjdXRhYmxlcyBmcm9tOgoJaHR0cDovL3d3dy5wb2xhcmhvbWUuY29tL3ZpbS8KCWZ0cDovL2Z0cC5wb2xhcmhvbWUuY29tL3B1Yi92aW0vCgpUbyB1c2UgdGhlIHByZWNvbXBpbGVkIGJpbmFyeSB2ZXJzaW9uLCB5b3UgbmVlZCBvbmUgb2YgdGhlc2UgYXJjaGl2ZXM6CgogIHZpbS1YWC1leGUtaWE2NC1ndWkuemlwICAgICAgIElBNjQgR1VJL01vdGlmIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1pYTY0LWd0ay56aXAgICAgICAgSUE2NCBHVUkvR1RLIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1pYTY0LXRlcm0uemlwICAgICAgSUE2NCBjb25zb2xlIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1heHAtZ3VpLnppcAlBbHBoYSBHVUkvTW90aWYgZXhlY3V0YWJsZXMKICB2aW0tWFgtZXhlLWF4cC1ndGsuemlwCUFscGhhIEdVSS9HVEsgZXhlY3V0YWJsZXMKICB2aW0tWFgtZXhlLWF4cC10ZXJtLnppcCAgICAgICBBbHBoYSBjb25zb2xlIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS12YXgtZ3VpLnppcAlWQVggR1VJIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS12YXgtdGVybS56aXAgICAgICAgVkFYIGNvbnNvbGUgZXhlY3V0YWJsZXMKCmFuZCBvZiBjb3Vyc2UgKG9wdGlvbmFsKQogIHZpbS1YWC1ydW50aW1lLnppcAkJcnVudGltZSBmaWxlcwoKVGhlIGJpbmFyeSBhcmNoaXZlcyBjb250YWluOiB2aW0uZXhlLCBjdGFncy5leGUsIHh4ZC5leGUgZmlsZXMuCgpGb3IgR1RLIGV4ZWN1dGFibGVzIHlvdSB3aWxsIG5lZWQgR1RLTElCIHRoYXQgaXMgYXZhaWxhYmxlIGZvcgpBbHBoYSBhbmQgSUE2NCBwbGF0Zm9ybS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMy4gQ29tcGlsaW5nCQkJCQkJKnZtcy1jb21waWxpbmcqCgpTZWUgdGhlIGZpbGUgWy5TUkNdSU5TVEFMTFZNUy5UWFQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjQuIFByb2JsZW1zCQkJCQkJKnZtcy1wcm9ibGVtcyoKClRoZSBjb2RlIGhhcyBiZWVuIHRlc3RlZCB1bmRlciBPcGVuIFZNUyA2LjIgLSA4LjIgb24gQWxwaGEsIFZBWCBhbmQgSUE2NApwbGF0Zm9ybXMgd2l0aCB0aGUgREVDIEMgY29tcGlsZXIuICBJdCBzaG91bGQgd29yayB3aXRob3V0IGJpZyBwcm9ibGVtcy4KSWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBzb21lIGluY2x1ZGUgbGlicmFyaWVzIHlvdSBjYW4gdHVuZSB1cCBpbgpPU19WTVNfQ09ORi5IIGZpbGUuCgpJZiB5b3UgZGVjaWRlZCB0byBidWlsZCBWaW0gd2l0aCArcGVybCwgK3B5dGhvbiwgZXRjLiBvcHRpb25zLCBmaXJzdCB5b3UgbmVlZAp0byBkb3dubG9hZCBPcGVuVk1TIGRpc3RyaWJ1dGlvbnMgb2YgUGVybCBhbmQgUHl0aG9uLiAgQnVpbGQgYW5kIGRlcGxveSB0aGUKbGlicmFyaWVzIGFuZCBjaGFuZ2UgYWRlcXVhdGUgbGluZXMgaW4gTUFLRV9WTVMuTU1TIGZpbGUuICBUaGVyZSBzaG91bGQgbm90IGJlCmEgcHJvYmxlbSBmcm9tIFZpbSBzaWRlLgoKQWxzbyBHVEssIFhQTSBsaWJyYXJ5IHBhdGhzIHNob3VsZCBiZSBjb25maWd1cmVkIGluIE1BS0VfVk1TLk1NUwoKTm90ZTogVW5kZXIgVkFYIGl0IHNob3VsZCB3b3JrIHdpdGggdGhlIERFQyBDIGNvbXBpbGVyIHdpdGhvdXQgcHJvYmxlbXMuICBUaGUKVkFYIEMgY29tcGlsZXIgaXMgbm90IGZ1bGx5IEFOU0kgQyBjb21wYXRpYmxlIGluIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlcwpzZW1hbnRpY3MsIHRoZXJlZm9yZSB5b3UgaGF2ZSB0byB1c2UgYSBjb252ZXJ0ZXIgcHJvZ3JhbSB0aGF0IHdpbGwgZG8gdGhlIGxpb24KcGFydCBvZiB0aGUgam9iLiAgRm9yIGRldGFpbGVkIGluc3RydWN0aW9ucyByZWFkIGZpbGUgSU5TVEFMTHZtcy50eHQKCk1NU19WSU0uRVhFIGlzIGJ1aWxkIHRvZ2V0aGVyIHdpdGggVklNLkVYRSwgYnV0IGZvciBYWEQuRVhFIHlvdSBzaG91bGQKY2hhbmdlIHRvIGEgc3ViZGlyZWN0b3J5IGFuZCBidWlsZCBpdCBzZXBhcmF0ZWx5LgoKQ1RBR1MgaXMgbm90IHBhcnQgb2YgdGhlIFZpbSBzb3VyY2UgZGlzdHJpYnV0aW9uIGFueW1vcmUsIGhvd2V2ZXIgdGhlIE9wZW5WTVMKc3BlY2lmaWMgc291cmNlIG1pZ2h0IGNvbnRhaW4gQ1RBR1Mgc291cmNlIGZpbGVzIGFzIGRlc2NyaWJlZCBhYm92ZS4KWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ1RBR1Mgb24gVk1TIGF0Cmh0dHA6Ly93d3cucG9sYXJob21lLmNvbS9jdGFncy8KCkFkdmFuY2VkIHVzZXJzIG1heSB0cnkgc29tZSBhY3JvYmF0aWNzIGluIEZFQVRVUkUuSCBmaWxlIGFzIHdlbGwuCgpJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggK3hmb250c2V0ICt4aW0gb3B0aW9ucyB0b28sIGJ1dCB0aGVuIHlvdSBoYXZlCnRvIHNldCB1cCBHVUkgZm9udHMgZXRjLiBjb3JyZWN0bHkuICBTZWUgOmhlbHAgeGltIGZyb20gVmltIGNvbW1hbmQgcHJvbXB0LgoKWW91IG1heSB3YW50IHRvIHVzZSBHVUkgd2l0aCBHVEsgaWNvbnMsIHRoZW4geW91IGhhdmUgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwKR1RLIGZvciBPcGVuVk1TIG9yIGF0IGxlYXN0IHJ1bnRpbWUgc2hhcmVhYmxlIGltYWdlcyAtIExJQkdUSyBmcm9tCnBvbGFyaG9tZS5jb20KCkZvciBtb3JlIGFkdmFuY2VkIHF1ZXN0aW9ucywgcGxlYXNlIHNlbmQgeW91ciBwcm9ibGVtIHRvIFZpbSBvbiBWTVMgbWFpbGluZwpsaXN0IDx2aW0tdm1zQHBvbGFyaG9tZS5jb20+Ck1vcmUgYWJvdXQgdGhlIHZpbS12bXMgbGlzdCBjYW4gYmUgZm91bmQgYXQ6Cmh0dHA6Ly93d3cucG9sYXJob21lLmNvbS9tYWlsbWFuL2xpc3RpbmZvL3ZpbS12bXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKNS4gRGVwbG95CQkJCQkJKnZtcy1kZXBsb3kqCgpWaW0gdXNlcyBhIHNwZWNpYWwgZGlyZWN0b3J5IHN0cnVjdHVyZSB0byBob2xkIHRoZSBkb2N1bWVudCBhbmQgcnVudGltZSBmaWxlczoKCiAgIHZpbSAob3Igd2hlcmV2ZXIpCiAgICB8LSB0bXAKICAgIHwtIHZpbTU3CiAgICB8LS0tLS0gZG9jCiAgICB8LS0tLS0gc3ludGF4CiAgICB8LSB2aW02MgogICAgfC0tLS0tIGRvYwogICAgfC0tLS0tIHN5bnRheAogICAgfC0gdmltNjQKICAgIHwtLS0tLSBkb2MKICAgIHwtLS0tLSBzeW50YXgKICAgIHZpbXJjICAgIChzeXN0ZW0gcmMgZmlsZXMpCiAgICBndmltcmMKClVzZTogPgoKCWRlZmluZS9ub2xvZyBWSU0JZGV2aWNlOltwYXRoLnZpbV0KCWRlZmluZS9ub2xvZyBWSU1SVU5USU1FIGRldmljZTpbcGF0aC52aW0udmltNjBdCglkZWZpbmUvbm9sb2cgVE1QCWRldmljZTpbcGF0aC50bXBdCgpUbyBnZXQgdmltLmV4ZSB0byBmaW5kIGl0cyBkb2N1bWVudCwgZmlsZXR5cGUsIGFuZCBzeW50YXggZmlsZXMsIGFuZCB0bwpzcGVjaWZ5IGEgZGlyZWN0b3J5IHdoZXJlIHRlbXBvcmFyeSBmaWxlcyB3aWxsIGJlIGxvY2F0ZWQuICBDb3B5IHRoZSAicnVudGltZSIKc3ViZGlyZWN0b3J5IG9mIHRoZSBWaW0gZGlzdHJpYnV0aW9uIHRvIHZpbXJ1bnRpbWUuCgpMb2dpY2FscyAkVklNUlVOVElNRSBhbmQgJFRNUCBhcmUgb3B0aW9uYWwuCgpJZiAkVklNUlVOVElNRSBpcyBub3Qgc2V0LCBWaW0gd2lsbCBndWVzcyBhbmQgdHJ5IHRvIHNldCB1cCBhdXRvbWF0aWNhbGx5LgpSZWFkIG1vcmUgYWJvdXQgaXQgYXQgOmhlbHAgcnVudGltZQoKSWYgJFRNUCBpcyBub3Qgc2V0LCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byB1c2Ugc29tZSBmdW5jdGlvbnMgYXMgQ1RBR1MsClhYRCwgcHJpbnRpbmcgZXRjLiB0aGF0IHVzZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBub3JtYWwgb3BlcmF0aW9uLgpUaGUgJFRNUCBkaXJlY3Rvcnkgc2hvdWxkIGJlIHJlYWRhYmxlIGFuZCB3cml0YWJsZSBieSB0aGUgdXNlcihzKS4KVGhlIGVhc2llc3Qgd2F5IHRvIHNldCB1cCAkVE1QIGlzIHRvIGRlZmluZSBhIGxvZ2ljYWw6ID4KCglkZWZpbmUvbm9sb2cgVE1QIFNZUyRTQ1JBVENICm9yIGFzOiA+CglkZWZpbmUvbm9sb2cgVE1QIFNZUyRMT0dJTgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo2LiBQcmFjdGljYWwgdXNhZ2UJCQkJCSp2bXMtdXNhZ2UqCgpVc3VhbGx5LCB5b3Ugd2FudCB0byBydW4ganVzdCBvbmUgdmVyc2lvbiBvZiBWaW0gb24geW91ciBzeXN0ZW0sIHRoZXJlZm9yZQppdCBpcyBlbm91Z2ggdG8gZGVkaWNhdGUgb25lIGRpcmVjdG9yeSBmb3IgVmltLgpDb3B5IHRoZSB3aG9sZSBWaW0gcnVudGltZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIHRoZSBkZXBsb3ltZW50IHBvc2l0aW9uLgpBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyIExPR0lOLkNPTSAoaW4gU1lTJExPR0lOIGRpcmVjdG9yeSkuClNldCB1cCB0aGUgbG9naWNhbCAkVklNIGFzOiA+CgoJJCBkZWZpbmUgVklNIGRldmljZTo8cGF0aD4KClNldCB1cCBzb21lIHN5bWJvbHM6ID4KCgkkICEgdmkgc3RhcnRzIFZpbSBpbiBjaHIuIG1vZGUuCgkkIHZpKm0gIDo9PSBtY3IgVklNOlZJTS5FWEUKCgkkICFndmkgc3RhcnRzIFZpbSBpbiBHVUkgbW9kZS4KCSQgZ3YqaW0gOj09IHNwYXduL25vd2FpdCBtY3IgVklNOlZJTS5FWEUgLWcKClBsZWFzZSwgY2hlY2sgdGhlIG5vdGVzIGZvciBjdXN0b21pemF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHN5bWJvbHMuCgpZb3UgbWF5IHdhbnQgdG8gY3JlYXRlIC52aW1yYyBhbmQgLmd2aW1yYyBmaWxlcyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5CihTWVMkTE9HSU4pIHRvIG92ZXJ3cml0ZSBkZWZhdWx0IHNldHRpbmdzLgoKVGhlIGVhc2llc3Qgd2F5IGlzIGp1c3QgcmVuYW1lIGV4YW1wbGUgZmlsZXMuICBZb3UgbWF5IGxlYXZlIHRoZSBtZW51IGZpbGUKKE1FTlUuVklNKSBhbmQgZmlsZXMgdmltcmMgYW5kIGd2aW1yYyBpbiB0aGUgb3JpZ2luYWwgJFZJTSBkaXJlY3RvcnkuICBJdCB3aWxsCmJlIHRoZSBkZWZhdWx0IHNldHVwIGZvciBhbGwgdXNlcnMsIGFuZCBmb3IgdXNlcnMgaXQgaXMgZW5vdWdoIHRvIGp1c3QgaGF2ZQp0aGVpciBvd24gYWRkaXRpb25zIG9yIHJlc2V0dGluZyBpbiB0aGVpciBob21lIGRpcmVjdG9yeSBpbiBmaWxlcyAudmltcmMgYW5kCi5ndmltcmMuICBJdCBzaG91bGQgd29yayB3aXRob3V0IHByb2JsZW1zLgoKTm90ZTogUmVtZW1iZXIsIHN5c3RlbSByYyBmaWxlcyAoZGVmYXVsdCBmb3IgYWxsIHVzZXJzKSBkb24ndCBoYXZlIGEgbGVhZGluZwoiLiIuICBTbywgc3lzdGVtIHJjIGZpbGVzIGFyZTogPgoKCSRWSU06dmltcmMKCSRWSU06Z3ZpbXJjCgkkVklNOm1lbnUudmltCgphbmQgdXNlciBjdXN0b21pemVkIHJjIGZpbGVzIGFyZTogPgoKCXN5cyRsb2dpbjoudmltcmMKCXN5cyRsb2dpbjouZ3ZpbXJjCgpZb3UgY2FuIGNoZWNrIHRoYXQgZXZlcnl0aGluZyBpcyBhdCB0aGUgcmlnaHQgcGxhY2Ugd2l0aCB0aGUgOnZlcnNpb24gY29tbWFuZC4KCkV4YW1wbGUgTE9HSU4uQ09NOiA+CgoJJCBkZWZpbmUvbm9sb2cgVklNIFJGMTA6W1VUSUwuVklNXQoJJCB2aSptIDo9PSBtY3IgVklNOlZJTS5FWEUKCSQgZ3YqaW06PT0gc3Bhd24vbm93YWl0L2lucHV0PU5MQTAgbWNyIFZJTTpWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMjIzL3RyYW5zPXRjcGlwCgpOb3RlOiBUaGlzIHNldC11cCBzaG91bGQgYmUgZW5vdWdoLCBpZiB5b3UgYXJlIHdvcmtpbmcgb24gYSBzdGFuZGFsb25lIHNlcnZlciBvcgpjbHVzdGVyZWQgZW52aXJvbm1lbnQsIGJ1dCBpZiB5b3Ugd2FudCB0byB1c2UgVmltIGFzIGFuIGludGVybm9kZSBlZGl0b3IgaW4KREVDTkVUIGVudmlyb25tZW50LCBpdCB3aWxsIHNhdGlzZnkgYXMgd2VsbC4KWW91IGp1c3QgaGF2ZSB0byBkZWZpbmUgdGhlICJ3aG9sZSIgcGF0aDogPgoKCSQgZGVmaW5lIFZJTSAiPHNlcnZlcl9uYW1lPlsiInVzZXIgcGFzc3dvcmQiIl06OmRldmljZTo8cGF0aD4iCgkkIHZpKm0gOj09ICJtY3IgVklNOlZJTS5FWEUiCgpGb3IgZXhhbXBsZTogPgoKCSQgZGVmaW5lIFZJTSAiUExVVE86OlJGMTA6W1VUSUwuVklNXSIKCSQgZGVmaW5lIFZJTSAiUExVVE8iIlpBWSBteXBhc3MiIjo6UkYxMDpbVVRJTC5WSU1dIiAhIGlmIHBhc3N3ZCByZXF1aXJlZAoKWW91IGNhbiBhbHNvIHVzZSB0aGUgJFZJTVJVTlRJTUUgbG9naWNhbCB0byBwb2ludCB0byB0aGUgcHJvcGVyIHZlcnNpb24gb2YgVmltCmlmIHlvdSBoYXZlIGluc3RhbGxlZCBtb3JlIHZlcnNpb25zIGF0IHRoZSBzYW1lIHRpbWUuICBJZiAkVklNUlVOVElNRSBpcyBub3QKZGVmaW5lZCBWaW0gd2lsbCBib3Jyb3cgaXRzIHZhbHVlIGZyb20gdGhlICRWSU0gbG9naWNhbC4gIFlvdSBjYW4gZmluZCBtb3JlCmluZm9ybWF0aW9uIGFib3V0IHRoZSAkVklNUlVOVElNRSBsb2dpY2FsIGJ5IHR5cGluZyA6aGVscCBydW50aW1lIGFzIGEgVmltCmNvbW1hbmQuCgpTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWlnaHQgd2FudCB0byBzZXQgdXAgYSBzeXN0ZW0gd2lkZSBWaW0gaW5zdGFsbGF0aW9uLAp0aGVuIGFkZCB0byB0aGUgU1lTJFNUQVJUVVA6U1lMT0dJQ0FMUy5DT00gPgoKCSQgZGVmaW5lL25vbG9nL3N5cyBWSU0gZGV2aWNlOjxwYXRoPgoJJCBkZWZpbmUvbm9sb2cvc3lzIFRNUCBTWVMkU0NSQVRDSAoKQW5kIHRvIHRoZSBTWVMkU1RBUlRVUDpTWUxPR0lOLkNPTSA+CgoJJCB2aSptIDo9PSBtY3IgVklNOlZJTS5FWEUKCSQgZ3YqaW06PT0gc3Bhd24vbm93YWl0L2lucHV0PU5MQTAgbWNyIFZJTTpWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAoKCkl0IHdpbGwgc2V0IHVwIGEgbm9ybWFsIFZpbSB3b3JrIGVudmlyb25tZW50IGZvciBldmVyeSB1c2VyIG9uIHRoZSBzeXN0ZW0uCgpJTVBPUlRBTlQ6IFZpbSBvbiBPcGVuVk1TIChhbmQgb24gb3RoZXIgY2FzZSBpbnNlbnNpdGl2ZSBzeXN0ZW0pIGNvbW1hbmQgbGluZQpwYXJhbWV0ZXJzIGFyZSBhc3N1bWVkIHRvIGJlIGxvd2VyY2FzZS4gSW4gb3JkZXIgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbW1hbmQKbGluZSBwYXJhbWV0ZXIgaXMgdXBwZXJjYXNlICIvIiBzaWduIG11c3QgYmUgdXNlZC4KCkV4YW1wbGVzOgogID4KCXZpbSAtUiAgZmlsZW5hbWUgICEgbWVhbnM6IC1yIExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdAoJdmltIC0vciBmaWxlbmFtZSAgISBtZWFuczogLVIgUmVhZG9ubHkgbW9kZSAobGlrZSAidmlldyIpCgl2aW0gLXUJPHZpbXJjPiAgICEgbWVhbnM6IC11IFVzZSA8dmltcmM+IGluc3RlYWQgb2YgYW55IC52aW1yYwoJdmltIC0vdSA8Z3ZpbXJjPiAgISBtZWFuczogLVUgVXNlIDxndmltcmM+IGluc3RlYWQgb2YgYW55IC5ndmltcmMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKNy4gR1VJIG1vZGUgcXVlc3Rpb25zCQkJCQkqdm1zLWd1aSoKCk9wZW5WTVMgaXMgYSByZWFsIG1haW5mcmFtZSBPUywgdGhlcmVmb3JlIGV2ZW4gaWYgaXQgaGFzIGEgR1VJIGNvbnNvbGUsIG1vc3QKb2YgdGhlIHVzZXJzIGRvIG5vdCB1c2UgYSBuYXRpdmUgWC9XaW5kb3cgZW52aXJvbm1lbnQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24uCkl0IGlzIG5vdCBwb3NzaWJsZSB0byBzdGFydCBWaW0gaW4gR1VJIG1vZGUgImp1c3QgbGlrZSB0aGF0Ii4gIEJ1dCBhbnlob3cgaXQKaXMgbm90IHRvbyBjb21wbGljYXRlZCBlaXRoZXIuCgpGaXJzdCBvZiBhbGw6IHlvdSB3aWxsIG5lZWQgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGJ1aWx0IHdpdGggdGhlIEdVSSBlbmFibGVkLgoKU2Vjb25kOiB5b3UgbmVlZCB0byBoYXZlIGluc3RhbGxlZCBERUNXL01vdGlmIG9uIHlvdXIgVk1TIHNlcnZlciwgb3RoZXJ3aXNlCnlvdSB3aWxsIGdldCBlcnJvcnMgdGhhdCBzb21lIHNoYXJlYWJsZSBsaWJyYXJpZXMgYXJlIG1pc3NpbmcuCgpUaGlyZDogSWYgeW91IGNob29zZSB0byBydW4gVmltIHdpdGggZXh0cmEgZmVhdHVyZXMgc3VjaCBhcyBHVUkvR1RLIHRoZW4geW91Cm5lZWQgYSBHVEsgaW5zdGFsbGF0aW9uIHRvbyBvciBhdCBsZWFzdCBhIEdUSyBydW50aW1lIGVudmlyb25tZW50IChMSUJHVEsKY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vdmltLykuCgoxKSBJZiB5b3UgYXJlIHdvcmtpbmcgb24gdGhlIFZNUyBYL01vdGlmIGNvbnNvbGU6CiAgIFN0YXJ0IFZpbSB3aXRoIHRoZSBjb21tYW5kOiA+CgoJJCBtYyBkZXZpY2U6PHBhdGg+VklNLkVYRSAtZwo8CiAgIG9yIHR5cGUgOmd1aSBhcyBhIGNvbW1hbmQgdG8gdGhlIFZpbSBjb21tYW5kIHByb21wdC4gIEZvciBtb3JlIGluZm8gOmhlbHAKICAgZ3VpCgoyKSBJZiB5b3UgYXJlIHdvcmtpbmcgb24gc29tZSBvdGhlciBYL1dpbmRvdyBlbnZpcm9ubWVudCBsaWtlIFVuaXggb3IgYSByZW1vdGUKICAgWCBWTVMgY29uc29sZS4gIFNldCB1cCBkaXNwbGF5IHRvIHlvdXIgaG9zdCB3aXRoOiA+CgoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT08eW91ciBJUCBhZGRyZXNzPi90cmFucz08dHJhbnNwb3J0LW5hbWU+CjwKICAgYW5kIHN0YXJ0IFZpbSBhcyBpbiBwb2ludCAxLiAgWW91IGNhbiBmaW5kIG1vcmUgaGVscCBpbiBWTVMgZG9jdW1lbnRhdGlvbiBvcgogICB0eXBlOiBoZWxwIHNldCBkaXNwIGluIFZNUyBwcm9tcHQuCiAgIEV4YW1wbGVzOiA+CgoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMTU5CQkgISBkZWZhdWx0IHRyYW5zIGlzIERFQ25ldAoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMTU5L3RyYW5zPXRjcGlwICEgVENQL0lQIG5ldHdvcmsKCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9MTkyLjE2OC41LjE1OS90cmFucz1sb2NhbCAhIGRpc3BsYXkgb24gdGhlIHNhbWUgbm9kZQoKTm90ZTogeW91IHNob3VsZCBkZWZpbmUganVzdCBvbmUgb2YgdGhlc2UuCkZvciBtb3JlIGluZm9ybWF0aW9uIHR5cGUgJGhlbHAgc2V0IGRpc3AgaW4gVk1TIHByb21wdC4KCjMpIEFub3RoZXIgZWxlZ2FudCBzb2x1dGlvbiBpcyBYRE0gaWYgeW91IGhhdmUgaW5zdGFsbGVkIG9uIE9wZW5WTVMgYm94LgogICBJdCBpcyBwb3NzaWJsZSB0byB3b3JrIGZyb20gWERNIGNsaWVudCBhcyBmcm9tIEdVSSBjb25zb2xlLgoKNCkgSWYgeW91IGFyZSB3b3JraW5nIG9uIE1TLVdpbmRvd3Mgb3Igc29tZSBvdGhlciBub24gWC9XaW5kb3cgZW52aXJvbm1lbnQKICAgeW91IG5lZWQgdG8gc2V0IHVwIG9uZSBYIHNlcnZlciBhbmQgcnVuIFZpbSBhcyBpbiBwb2ludCAyLgogICBGb3IgTVMtV2luZG93cyB0aGVyZSBhcmUgYXZhaWxhYmxlIGZyZWUgWCBzZXJ2ZXJzIGFzIE1JWCwgT21uaSBYIGV0Yy4sCiAgIGFzIHdlbGwgYXMgZXhjZWxsZW50IGNvbW1lcmNpYWwgcHJvZHVjdHMgYXMgZVhjdXJzaW9uIG9yIFJlZmxlY3Rpb25YIHdpdGgKICAgYnVpbHQtaW4gREVDIHN1cHBvcnQuCgpQbGVhc2Ugbm90ZSwgdGhhdCBleGVjdXRhYmxlcyB3aXRob3V0IEdVSSBhcmUgc2xpZ2h0bHkgZmFzdGVyIGR1cmluZyBzdGFydHVwCnRoYW4gd2l0aCBlbmFibGVkIEdVSSBpbiBjaGFyYWN0ZXIgbW9kZS4gVGhlcmVmb3JlLCBpZiB5b3UgZG8gbm90IHVzZSBHVUkKZmVhdHVyZXMsIGl0IGlzIHdvcnRoIHRvIGNob29zZSBub24gR1VJIGV4ZWN1dGFibGVzLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo4LiBVc2VmdWwgbm90ZXMJCQkJCQkqdm1zLW5vdGVzKgoKOC4xIEJhY2tzcGFjZS9kZWxldGUKOC4yIEZpbHRlcnMKOC4zIFZNUyBmaWxlIHZlcnNpb24gbnVtYmVycwo4LjQgRGlyZWN0b3J5IGNvbnZlcnNpb24KOC41IFJlbW90ZSBob3N0IGludm9jYXRpb24KOC42IFRlcm1pbmFsIHByb2JsZW1zCjguNyBIZXgtZWRpdGluZyBhbmQgb3RoZXIgZXh0ZXJuYWwgdG9vbHMKOC44IFNvdXJjaW5nIHZpbXJjIGFuZCBndmltcmMKOC45IFByaW50aW5nIGZyb20gVmltCjguMTAgU2V0dGluZyB1cCB0aGUgc3ltYm9scwo4LjExIGRpZmYgYW5kIG90aGVyIEdOVSBwcm9ncmFtcwo4LjEyIGRpZmYtbW9kZQo4LjEzIEFsbG93ICckJyBpbiBDIGtleXdvcmRzCjguMTQgVklNVFVUT1IgZm9yIGJlZ2lubmVycwo4LjE1IFNsb3cgc3RhcnQgaW4gY29uc29sZSBtb2RlIGlzc3VlCjguMTYgQ29tbW9uIFZJTSBkaXJlY3RvcnkgLSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcwoKOC4xIEJhY2tzcGFjZS9kZWxldGUKClRoZXJlIGFyZSBiYWNrc3BhY2UvZGVsZXRlIGtleSBpbmNvbnNpc3RlbmNpZXMgd2l0aCBWTVMuCjpmaXhkZWwgZG9lc24ndCBkbyB0aGUgdHJpY2ssIGJ1dCB0aGUgc29sdXRpb24gaXM6ID4KCgk6aW5vcmVtYXAgXj8gXkgJCSIgZm9yIHRlcm1pbmFsIG1vZGUKCTppbm9yZW1hcCA8RGVsPiBeSAkiIGZvciBndWkgbW9kZQoKUmVhZCBtb3JlIGluIGNoOiA4LjYgKFRlcm1pbmFsIHByb2JsZW1zKS4KKEJydWNlIEh1bnNha2VyIDxCTkh1bnNha2VyQGNocS5ieXUuZWR1PiBWaW0gNS4zKQoKCjguMiBGaWx0ZXJzCgpWaW0gc3VwcG9ydHMgZmlsdGVycywgaS5lLiwgaWYgeW91IGhhdmUgYSBzb3J0IHByb2dyYW0gdGhhdCBjYW4gaGFuZGxlCmlucHV0L291dHB1dCByZWRpcmVjdGlvbiBsaWtlIFVuaXggKDxpbmZpbGUgPm91dGZpbGUpLCB5b3UgY291bGQgdXNlID4KCgk6bWFwIFxzIDAhJ2Fxc29ydDxDUj4KCihDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gPGNlY0BncnlwaG9uLmdzZmMubmFzYS5nb3Y+IFZpbSA1LjQpCgoKOC4zIFZNUyBmaWxlIHZlcnNpb24gbnVtYmVycwoKVmltIGlzIHNhdmluZyBmaWxlcyBpbnRvIGEgbmV3IGZpbGUgd2l0aCB0aGUgbmV4dCBoaWdoZXIgZmlsZSB2ZXJzaW9uCm51bWJlciwgdHJ5IHRoZXNlIHNldHRpbmdzLiA+CgoJOnNldCBub2JhY2t1cAkgICAgICIgZG9lcyBub3QgY3JlYXRlICouKl8gYmFja3VwIGZpbGVzCgk6c2V0IG5vd3JpdGViYWNrdXAgICAiIGRvZXMgbm90IGhhdmUgYW55IHB1cnBvc2Ugb24gVk1TLiAgSXQncyB0aGUKCQkJICAgICAiIGRlZmF1bHQuCgpSZWNvdmVyeSBpcyB3b3JraW5nIHBlcmZlY3RseSBhcyB3ZWxsIGZyb20gdGhlIGRlZmF1bHQgc3dhcCBmaWxlLgpSZWFkIG1vcmUgd2l0aCA6aGVscCBzd2FwZmlsZQoKKENsYXVkZSBNYXJpbmllciA8Q2xhdWRlTWFyaW5pZXJAeHdhdmVzb2x1dGlvbnMuY29tPiBWaW0gNS41LCBab2x0YW4gQXJwYWRmZnkKVmltIDUuNikKCgo4LjQgRGlyZWN0b3J5IGNvbnZlcnNpb24KClZpbSB3aWxsIGludGVybmFsbHkgY29udmVydCBhbnkgdW5peC1zdHlsZSBwYXRocyBhbmQgZXZlbiBtaXhlZCB1bml4L1ZNUwpwYXRocyBpbnRvIFZNUyBzdHlsZSBwYXRocy4gIFNvbWUgdHlwaWNhbCBjb252ZXJzaW9ucyByZXNlbWJsZToKCgkvYWJjL2RlZi9naGkJCS0+IGFiYzpbZGVmXWdoaS4KCS9hYmMvZGVmL2doaS5qCQktPiBhYmM6W2RlZl1naGkuagoJL2FiYy9kZWYvZ2hpLmo7MgktPiBhYmM6W2RlZl1naGkuajsyCgkvYWJjL2RlZi9naGkvamtsL21ubwktPiBhYmM6W2RlZi5naGkuamtsXW1uby4KCWFiYzpbZGVmLmdoaV1qa2wvbW5vCS0+IGFiYzpbZGVmLmdoaS5qa2xdbW5vLgoJICAuLwkJCS0+IGN1cnJlbnQgZGlyZWN0b3J5CgkgIC4uLwkJCS0+IHJlbGF0aXZlIHBhcmVudCBkaXJlY3RvcnkKCSAgWy5kZWYuZ2hpXQkJLT4gcmVsYXRpdmUgY2hpbGQgZGlyZWN0b3J5CgkgICAuL2RlZi9naGkJCS0+IHJlbGF0aXZlIGNoaWxkIGRpcmVjdG9yeQoKTm90ZTogWW91IG1heSB1c2UgPCw+IGJyYWNrZXRzIGFzIHdlbGwgKGRldmljZTo8cGF0aD5maWxlLmV4dDt2ZXJzaW9uKSBhcwpyZjEwOjx1c2VyLnpheS53b3JrPnRlc3QuYzsxCgooRGF2aWQgRWxpbnMgPGRlbGluc0Bmb2xpYWdlLmNvbT4sIEplcm9tZSBMYXVyZXQKPEpMQVVSRVRAbWFpbC5jaGVtLnN1bnlzYi5lZHU+IFZpbSA1LjYpCgoKOC41IFJlbW90ZSBob3N0IGludm9jYXRpb24KCkl0IGlzIHBvc3NpYmxlIHRvIHVzZSBWaW0gYXMgYW4gaW50ZXJub2RlIGVkaXRvci4KMS4gRWRpdCBzb21lIGZpbGUgZnJvbSByZW1vdGUgbm9kZTogPgoKCXZpICI8c2VydmVyPiIidXNlcm5hbWUgcGFzc3dkIiI6OjxkZXZpY2U+OjxwYXRoPjxmaWxlbmFtZT47PHZlcnNpb24+IgoKRXhhbXBsZTogPgoJdmkgInBsdXRvIiJ6YXkgcGFzc3dkIiI6OlJGMTA6PFVTRVIuWkFZLldPUks+VEVTVC5DOzEiCgpOb3RlOiBzeW50YXggaXMgdmVyeSBpbXBvcnRhbnQsIG90aGVyd2lzZSBWTVMgd2lsbCByZWNvZ25pemUgbW9yZSBwYXJhbWV0ZXJzCmluc3RlYWQgb2Ygb25lIChyZXN1bHRpbmcgd2l0aDogZmlsZSBub3QgZm91bmQpCgoyLiAgU2V0IHVwIFZpbSBhcyB5b3VyIGludGVybm9kZSBlZGl0b3IuICBJZiBWaW0gaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyCmhvc3QsIGp1c3Qgc2V0IHVwIHlvdXIgSVAgYWRkcmVzcywgdGhlIGZ1bGwgVmltIHBhdGggaW5jbHVkaW5nIHRoZSBzZXJ2ZXIgbmFtZQphbmQgcnVuIHRoZSBjb21tYW5kIHByb2NlZHVyZSBiZWxvdzogPgoKCSQgaWYgKHAxIC5lcXMuICIiKSAuT1IuIChwMiAuZXFzLiAiIikgdGhlbiBnb3RvIHVzYWdlCgkkIHNldCBkaXNwL2NyZWF0ZS9ub2RlPTx5b3VyX0lQX2hlcmU+L3RyYW5zPXRjcGlwCgkkIGRlZmluZSAiVklNICI8dmltX3NlcnZlcj4iIicncDEnICcncDInIiI6OjxkZXZpY2U+Ojx2aW1fcGF0aD4iCgkkICB2aSptIDo9PSAibWNyIFZJTTpWSU0uRVhFIgoJJCBndippbSA6PT0gInNwYXduL25vd2FpdCBtY3IgVklNOlZJTS5FWEUgLWciCgkkIGdvdG8gZW5kCgkkIHVzYWdlOgoJJCB3cml0ZSBzeXMkb3V0cHV0ICIgUGxlYXNlIGVudGVyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcyBhIHBhcmFtZXRlci4iCgkkIHdyaXRlIHN5cyRvdXRwdXQgIiBFeGFtcGxlOiBAU0VUVklNLkNPTSB1c2VybmFtZSBwYXNzd2QiCgkkIGVuZDoKCk5vdGU6IE5ldmVyIHVzZSBpdCBpbiBhIGNsdXN0ZXJlZCBlbnZpcm9ubWVudCAoeW91IGRvIG5vdCBuZWVkIGl0KSwgbG9hZGluZwpjb3VsZCBiZSB2ZXJ5LXZlcnkgc2xvdywgYnV0IGV2ZW4gZmFzdGVyIHRoYW4gYSBsb2NhbCBFbWFjcy4gOi0pCgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNS42KQoKCjguNiBUZXJtaW5hbCBwcm9ibGVtcwoKSWYgeW91ciB0ZXJtaW5hbCBuYW1lIGlzIG5vdCBrbm93biB0byBWaW0gYW5kIGl0IGlzIHRyeWluZyB0byBmaW5kIHRoZSBkZWZhdWx0Cm9uZSB5b3Ugd2lsbCBnZXQgdGhlIGZvbGxvd2luZyBtZXNzYWdlIGR1cmluZyBzdGFydC11cDoKLS0tClRlcm1pbmFsIGVudHJ5IG5vdCBmb3VuZCBpbiB0ZXJtY2FwCid1bmtub3duLXRlcm1pbmFsJyBub3Qga25vd24uICBBdmFpbGFibGUgYnVpbHQtaW4gdGVybWluYWxzIGFyZToKICAgIGJ1aWx0aW5fZ3VpCiAgICBidWlsdGluX3Jpc2NvcwogICAgYnVpbHRpbl9hbWlnYQogICAgYnVpbHRpbl9iZW9zLWFuc2kKICAgIGJ1aWx0aW5fYW5zaQogICAgYnVpbHRpbl92dDMyMAogICAgYnVpbHRpbl92dDUyCiAgICBidWlsdGluX3BjYW5zaQogICAgYnVpbHRpbl93aW4zMgogICAgYnVpbHRpbl94dGVybQogICAgYnVpbHRpbl9pcmlzLWFuc2kKICAgIGJ1aWx0aW5fZGVidWcKICAgIGJ1aWx0aW5fZHVtYgpkZWZhdWx0aW5nIHRvICd2dDMyMCcKLS0tClRoZSBzb2x1dGlvbiBpcyB0byBkZWZpbmUgdGhlIGRlZmF1bHQgdGVybWluYWwgbmFtZTogPgoKCSQgISB1bmtub3duIHRlcm1pbmFsIG5hbWUuICBMZXQgdXMgdXNlIHZ0MzIwIG9yIGFuc2kgaW5zdGVhZC4KCSQgISBOb3RlOiBpdCdzIGNhc2Ugc2Vuc2l0aXZlCgkkIGRlZmluZSB0ZXJtICJ2dDMyMCIKClRlcm1pbmFscyBmcm9tIFZUMTAwIHRvIFZUMzIwIChhcyBWMzAwLCBWVDIyMCwgVlQyMDApIGRvIG5vdCBuZWVkIGFueSBleHRyYQprZXlib2FyZCBtYXBwaW5ncy4gIFRoZXkgc2hvdWxkIHdvcmsgcGVyZmVjdGx5IGFzIHRoZXkgYXJlLCBpbmNsdWRpbmcgYXJyb3dzLApJbnMsIERlbCBidXR0b25zIGV0Yy4sIGV4Y2VwdCBCYWNrc3BhY2UgaW4gR1VJIG1vZGUuICBUbyBzb2x2ZSBpdCwgYWRkIHRvCi5ndmltcmM6ID4KCglpbm9yZW1hcCA8RGVsPiA8QlM+CgpWaW0gd2lsbCBhbHNvIHJlY29nbml6ZSB0aGF0IHRoZXkgYXJlIGZhc3QgdGVybWluYWxzLgoKSWYgeW91IGhhdmUgc29tZSBhbm5veWluZyBsaW5lIGp1bXBpbmcgb24gdGhlIHNjcmVlbiBiZXR3ZWVuIHdpbmRvd3MgYWRkIHRvCnlvdXIgLnZpbXJjIGZpbGU6ID4KCglzZXQgdHR5ZmFzdAkiIHNldCBmYXN0IHRlcm1pbmFsCgpOb3RlOiBpZiB5b3UncmUgdXNpbmcgVmltIG9uIHJlbW90ZSBob3N0IG9yIHRocm91Z2ggYSB2ZXJ5IHNsb3cgY29ubmVjdGlvbiwgaXQncwpyZWNvbW1lbmRlZCB0byBhdm9pZCB0aGUgZmFzdCB0ZXJtaW5hbCBvcHRpb24gd2l0aDogPgoKCXNldCBub3R0eWZhc3QgICAiIHNldCB0ZXJtaW5hbCB0byBzbG93IG1vZGUKCihab2x0YW4gQXJwYWRmZnksIFZpbSA1LjYpCgoKOC43IEhleC1lZGl0aW5nIGFuZCBvdGhlciBleHRlcm5hbCB0b29scwoKQSB2ZXJ5IGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW4gT3BlblZNUyBhbmQgb3RoZXIgc3lzdGVtcyBpcyB0aGF0IFZNUyB1c2VzCnNwZWNpYWwgY29tbWFuZHMgdG8gZXhlY3V0ZSBleGVjdXRhYmxlczogPgoKCVJVTiA8cGF0aD5maWxlbmFtZQoJTUNSIDxwYXRoPmZpbGVuYW1lIDxwYXJhbWV0ZXJzPgoKT3BlblZNUyB1c2VycyBhbHdheXMgaGF2ZSB0byBiZSBhd2FyZSB0aGF0IHRoZSBWaW0gY29tbWFuZCA6ISAianVzdCIgZHJvcCB0aGVtCnRvIERDTCBwcm9tcHQuICBUaGlzIGZlYXR1cmUgaXMgcG9zc2libGUgdG8gdXNlIHdpdGhvdXQgYW55IHByb2JsZW0gd2l0aCBhbGwKRENMIGNvbW1hbmRzLCBidXQgaWYgd2Ugd2FudCB0byBleGVjdXRlIHNvbWUgcHJvZ3JhbXMgc3VjaCBhcyBYWEQsIENUQUdTLCBKVEFHUywKZXRjLiAgd2UncmUgcnVubmluZyBpbnRvIHRyb3VibGUgaWYgd2UgZm9sbG93IHRoZSBWaW0gZG9jdW1lbnRhdGlvbiAoc2VlOiBoZWxwCnh4ZCkuCgpTb2x1dGlvbjogRXhlY3V0ZSB3aXRoIHRoZSBNQyBjb21tYW5kIGFuZCBhZGQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS4KRXhhbXBsZTogSW5zdGVhZCBvZiA6JSF4eGQgY29tbWFuZCB1c2U6ID4KCgk6JSFtYyB2aW06eHhkCgouLi4gb3IgaW4gZ2VuZXJhbDogPgoJOiFtYyA8cGF0aD5maWxlbmFtZSA8cGFyYW1ldGVycz4KCk5vdGU6IFlvdSBjYW4gdXNlIFhYRCBhbmQgQ1RBR1MgZnJvbSBHVUkgbWVudS4KClRvIGN1c3RvbWl6ZSBjdGFncyBpdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgdGhlIGxvZ2ljYWwgJENUQUdTIHdpdGggc3RhbmRhcmQKcGFyYW1ldGVycyBhczogPgoKCWRlZmluZS9ub2xvZyBDVEFHUyAiLS10b3RhbHMgLW8gc3lzJGxvZ2luOnRhZ3MiCgpGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlYWQgOmhlbHAgdGFnc2VhcmNoIGFuZCBDVEFHUwpkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly9jdGFncy5zb3VyY2Vmb3JnZS5uZXQvY3RhZ3MuaHRtbC4KCihab2x0YW4gQXJwYWRmZnksIFZpbSA1LjYtNzApCgoKOC44IFNvdXJjaW5nIHZpbXJjIGFuZCBndmltcmMKCklmIHlvdSB3YW50IHRvIHVzZSB5b3VyIC52aW1yYyBhbmQgLmd2aW1yYyBmcm9tIG90aGVyIHBsYXRmb3JtcyAoZS5nLiBXaW5kb3dzKQp5b3UgY2FuIGdldCBpbiB0cm91YmxlIGlmIHlvdSBmdHAgdGhhdCBmaWxlKHMpOiBWTVMgaGFzIGRpZmZlcmVudCBlbmQtb2YtbGluZQppbmRpY2F0aW9uLgpUaGUgc3ltcHRvbSBpcyB0aGF0IFZpbSBpcyBub3Qgc291cmNpbmcgeW91ciAudmltcmMvLmd2aW1yYywgZXZlbiBpZiB5b3Ugc2F5Ogo+Cgk6c28gc3lzJGxvZ2luOi52aW1yYwoKT25lIHRyaWNrIGlzIHRvIGNvbXByZXNzIChlLmcuIHppcCkgdGhlIGZpbGVzIG9uIHRoZSBvdGhlciBwbGF0Zm9ybSBhbmQKdW5jb21wcmVzcyBpdCBvbiBWTVM7IGlmIHlvdSBoYXZlIHRoZSBzYW1lIHN5bXB0b20sIHRyeSB0byBjcmVhdGUgdGhlIGZpbGVzCndpdGggY29weS1wYXN0ZSAoZm9yIHRoaXMgeW91IG5lZWQgYm90aCBvcC4gc3lzdGVtcyByZWFjaGFibGUgZnJvbSBvbmUKbWFjaGluZSwgZS5nLiBhbiBYdGVybSBvbiBXaW5kb3dzIG9yIHRlbG5ldCB0byBXaW5kb3dzIGZyb20gVk1TKS4KCihTYW5kb3IgS29wYW55aSwgPHNhbmRvci5rb3BhbnlpQG1haWxib3guaHU+IFZpbSA2LjBhKQoKCjguOSBQcmludGluZyBmcm9tIFZpbQoKVG8gYmUgYWJsZSB0byBwcmludCBmcm9tIFZpbSAocnVubmluZyBpbiBHVUkgbW9kZSkgdW5kZXIgVk1TIHlvdSBoYXZlIHRvIHNldAp1cCAkVE1QIGxvZ2ljYWwgd2hpY2ggc2hvdWxkIHBvaW50IHRvIHNvbWUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgbG9naWNhbApTWVMkUFJJTlQgdG8geW91ciBkZWZhdWx0IHByaW50IHF1ZXVlLgpFeGFtcGxlOiA+CgoJJGRlZmluZSBTWVMkUFJJTlQgSFA1QU5TSQoKWW91IGNhbiBwcmludCBvdXQgdGhlIHdob2xlIGJ1ZmZlciBvciBqdXN0IHRoZSBtYXJrZWQgYXJlYS4KTW9yZSBpbmZvIHVuZGVyIDpoZWxwIGhhcmRjb3B5CgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNi4wYykKCgo4LjEwIFNldHRpbmcgdXAgdGhlIHN5bWJvbHMKCldoZW4gSSB1c2UgR1ZJTSB0aGlzIHdheSBhbmQgcHJlc3MgQ1RSTC1ZIGluIHRoZSBwYXJlbnQgdGVybWluYWwsIGd2aW0gZXhpdHMuCkkgbm93IHVzZSBhIGRpZmZlcmVudCBzeW1ib2wgdGhhdCBzZWVtcyB0byB3b3JrIE9LIGFuZCBmaXhlcyB0aGUgcHJvYmxlbS4KSSBzdWdnZXN0IHRoaXMgaW5zdGVhZDogPgoKCSQgR1YqSU06PT1TUEFXTi9OT1dBSVQvSU5QVVQ9TkxBMDogTUNSIFZJTTpWSU0uRVhFIC1HIC1HRU9NRVRSWSA4MFg0MAoKVGhlIC9JTlBVVD1OTEEwOiBzZXBhcmF0ZXMgdGhlIHN0YW5kYXJkIGlucHV0IG9mIHRoZSBndmltIHByb2Nlc3MgZnJvbSB0aGUKcGFyZW50IHRlcm1pbmFsLCB0byBibG9jayBzaWduYWxzIGZyb20gdGhlIHBhcmVudCB3aW5kb3cuCldpdGhvdXQgdGhlIC1HRU9NRVRSWSwgdGhlIEdWSU0gd2luZG93IHNpemUgd2lsbCBiZSBtaW5pbWFsIGFuZCB0aGUgbWVudQp3aWxsIGJlIGNvbmZ1c2VkIGFmdGVyIGEgd2luZG93LXJlc2l6ZS4KCihDYXJsbyBNZWtlbmthbXAsIENvZW4gRW5nZWxiYXJ0cywgVmltIDYuMGFjKQoKCjguMTEgZGlmZiBhbmQgb3RoZXIgR05VIHByb2dyYW1zCgpGcm9tIDYuMCBkaWZmIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW1wbGVtZW50ZWQsIGJ1dCBPcGVuVk1TIGRvZXMgbm90IHVzZQpHTlUvVW5peCBsaWtlIGRpZmYgdGhlcmVmb3JlIGJ1aWx0IGluIGRpZmYgZG9lcyBub3Qgd29yay4KVGhlcmUgaXMgYSBzaW1wbGUgc29sdXRpb24gdG8gc29sdmUgdGhpcyBhbm9tYWx5LiAgSW5zdGFsbCBhIFVuaXggbGlrZSBkaWZmCmFuZCBWaW0gd2lsbCB3b3JrIHBlcmZlY3RseSBpbiBkaWZmIG1vZGUgdG9vLiAgWW91IGp1c3QgaGF2ZSB0byByZWRlZmluZSB5b3VyCmRpZmYgcHJvZ3JhbSBhczogPgoKCWRlZmluZSAvbm9sb2cgZGlmZiA8R05VX1BBVEg+ZGlmZi5leGUKCkFub3RoZXIsIG1vcmUgc29waGlzdGljYXRlZCBzb2x1dGlvbiBpcyBkZXNjcmliZWQgYmVsb3cgKDguMTIgZGlmZi1tb2RlKQpUaGVyZSBhcmUgb3RoZXIgcHJvZ3JhbXMgc3VjaCBhcyBwYXRjaCwgbWFrZSBldGMgdGhhdCBtYXkgY2F1c2UgdGhlIHNhbWUKcHJvYmxlbXMuICBBdCB3d3cucG9sYXJob21lLmNvbSBpcyBwb3NzaWJsZSB0byBkb3dubG9hZCBhbiBHTlUgcGFja2FnZSBmb3IKQWxwaGEgYW5kIFZBWCBib3hlcyB0aGF0IGlzIG1lYW50IHRvIHNvbHZlIEdOVSBwcm9ibGVtcyBvbiBPcGVuVk1TLgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNi4xKQoKCjguMTIgZGlmZi1tb2RlCgpWaW0gNi4wIGFuZCBoaWdoZXIgc3VwcG9ydHMgVmltIGRpZmYtbW9kZSAoU2VlIHxuZXctZGlmZi1tb2RlfCwgfGRpZmYtbW9kZXwKYW5kIHwwOC43fCkuICBUaGlzIHVzZXMgdGhlIGV4dGVybmFsIHByb2dyYW0gJ2RpZmYnIGFuZCBleHBlY3RzIGEgVW5peC1saWtlCm91dHB1dCBmb3JtYXQgZnJvbSBkaWZmLiAgVGhlIHN0YW5kYXJkIFZNUyBkaWZmIGhhcyBhIGRpZmZlcmVudCBvdXRwdXQKZm9ybWF0LiAgVG8gdXNlIFZpbSBvbiBWTVMgaW4gZGlmZi1tb2RlLCB5b3UgbmVlZCB0bzoKICAgIDEgSW5zdGFsbCBhIFVuaXgtbGlrZSBkaWZmIHByb2dyYW0sIGUuZy4gR05VIGRpZmYKICAgIDIgVGVsbCBWaW0gdG8gdXNlIHRoZSBVbml4LWxpa2UgZGlmZiBmb3IgZGlmZi1tb2RlLgoKWW91IGNhbiBkb3dubG9hZCBHTlUgZGlmZiBmcm9tIHRoZSBWSU0tVk1TIHdlYnNpdGUsIGl0IGlzIG9uZSBvZiB0aGUgR05VCnRvb2xzIGluIGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vZmlsZXMvZ251X3Rvb2xzLnppcC4gIEkgc3VnZ2VzdCB0bwp1bnBhY2sgaXQgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkgIkdOVSIgYW5kIGNyZWF0ZSBhIGxvZ2ljYWwgR05VOiB0aGF0CnBvaW50cyB0byB0aGF0IGRpcmVjdG9yeSwgZS5nOiA+CgogICBERUZJTkUgR05VICAgIDxESVNLPjpbPERJUkVDVE9SWT4uQklOLkdOVV0KCllvdSBtYXkgYWxzbyB3YW50IHRvIGRlZmluZSBhIHN5bWJvbCBHRElGRiwgdG8gdXNlIHRoZSBHTlUgZGlmZiBmcm9tIHRoZSBEQ0wKcHJvbXB0OiA+CgogICBHRElGRiA6PT0gICAgICRHTlU6RElGRi5FWEUKCk5vdyB5b3UgbmVlZCB0byB0ZWxsIFZpbSB0byB1c2UgdGhlIG5ldyBkaWZmIHByb2dyYW0uICBUYWtlIHRoZSBleGFtcGxlCnNldHRpbmdzIGZyb20gfGRpZmYtZGlmZmV4cHJ8IGFuZCBjaGFuZ2UgdGhlIGNhbGwgdG8gdGhlIGV4dGVybmFsIGRpZmYKcHJvZ3JhbSB0byB0aGUgbmV3IGRpZmYgb24gVk1TLiAgQWRkIHRoaXMgdG8geW91ciAudmltcmMgZmlsZTogPgoKICAgICAiIFNldCB1cCB2aW1kaWZmIG9wdGlvbnMKICAgICAgIGlmIHY6dmVyc2lvbiA+PSA2MDAKCSIgVXNlIEdOVSBkaWZmIG9uIFZNUwoJc2V0IGRpZmZleHByPU15RGlmZigpCglmdW5jdGlvbiBNeURpZmYoKQoJICAgbGV0IG9wdCA9ICIiCgkgICBpZiAmZGlmZm9wdCA9fiAiaWNhc2UiCgkgICAgIGxldCBvcHQgPSBvcHQgLiAiLWkgIgoJICAgZW5kaWYKCSAgIGlmICZkaWZmb3B0ID1+ICJpd2hpdGUiCgkgICAgIGxldCBvcHQgPSBvcHQgLiAiLWIgIgoJICAgZW5kaWYKCSAgIHNpbGVudCBleGVjdXRlICIhbWMgR05VOmRpZmYuZXhlIC1hICIgLiBvcHQgLiB2OmZuYW1lX2luIC4gIiAiIC4gIHY6Zm5hbWVfbmV3IC4KCQlcICAiID4gIiAuIHY6Zm5hbWVfb3V0CgllbmRmdW5jdGlvbgogICAgICBlbmRpZgoKWW91IGNhbiBub3cgdXNlIFZpbSBpbiBkaWZmLW1vZGUsIGUuZy4gdG8gY29tcGFyZSB0d28gZmlsZXMgaW4gcmVhZC1vbmx5Cm1vZGU6ID4KCiAgICAkIFZJTSAtRC9SIDxGSUxFMT4gPEZJTEUyPgoKWW91IGNhbiBhbHNvIGRlZmluZSBuZXcgc3ltYm9scyBmb3IgdmltZGlmZiwgZS5nLjogPgoKICAgICQgVklNRElGRiAgICAgOj09ICdWSU0nIC1EL1IKICAgICQgR1ZJTURJRkYgICAgOj09ICdHVklNJyAtRC9SCgpZb3UgY2FuIG5vdyBjb21wYXJlIGZpbGVzIGluIDQgd2F5czogPgoKICAgIDEuIFZNUyAgZGlmZjogICQgRElGRiAgICAgPEZJTEUxPiA8RklMRTI+CiAgICAyLiBHTlUgIGRpZmY6ICAkIEdESUZGICAgIDxGSUxFMT4gPEZJTEUyPgogICAgMy4gVklNICBkaWZmOiAgJCBWSU1ESUZGICA8RklMRTE+IDxGSUxFMj4KICAgIDQuIEdWSU0gZGlmZjogICQgR1ZJTURJRkYgPEZJTEUxPiA8RklMRTI+CgooQ29lbiBFbmdlbGJhcnRzLCBWaW0gNi4xKQoKCjguMTMgQWxsb3cgJyQnIGluIEMga2V5d29yZHMKCkRFQyBDIHVzZXMgbWFueSBpZGVudGlmaWVycyB3aXRoICckJyBpbiB0aGVtLiAgVGhpcyBpcyBub3QgYWxsb3dlZCBpbiBBTlNJIEMsCmFuZCBWaW0gcmVjb2duaXNlcyB0aGUgJyQnIGFzIHRoZSBlbmQgb2YgdGhlIGlkZW50aWZpZXIuICBZb3UgY2FuIGNoYW5nZSB0aGlzCndpdGggdGhlICdpc2tleXdvcmQnIG9wdGlvbi4KQWRkIHRoaXMgY29tbWFuZCB0byB5b3VyIC52aW1yYyBmaWxlOiA+CgogICAgYXV0b2NtZCBGaWxlVHlwZSBjLGNwcCxjcyAgc2V0IGlza2V5d29yZCs9JAoKWW91IGNhbiBhbHNvIGNyZWF0ZSB0aGUgZmlsZShzKSAkVklNL0ZUUExVR0lOL0MuVklNIChhbmQvb3IgQ1BQLlZJTSBhbmQKQ1MuVklNKSBhbmQgYWRkIHRoaXMgY29tbWFuZDogPgoKCXNldCBpc2tleXdvcmQrPSQKCk5vdyB3b3JkLWJhc2VkIGNvbW1hbmRzLCBlLmcuIHRoZSAnKictc2VhcmNoLWNvbW1hbmQgYW5kIHRoZSBDVFJMLV0KdGFnLWxvb2t1cCwgd29yayBvbiB0aGUgd2hvbGUgaWRlbnRpZmllci4gIChDdGFncyBvbiBWTVMgYWxzbyBzdXBwb3J0cyAnJCcgaW4KQyBrZXl3b3JkcyBzaW5jZSBjdGFncyB2ZXJzaW9uIDUuMS4pCgooQ29lbiBFbmdlbGJhcnRzLCBWaW0gNi4xKQoKOC4xNCBWSU1UVVRPUiBmb3IgYmVnaW5uZXJzCgpUaGUgVklNVFVUT1IuQ09NIERDTCBzY3JpcHQgY2FuIGhlbHAgVmltIGJlZ2lubmVycyB0byBsZWFybi9tYWtlIHRoZWlyIGZpcnN0CnN0ZXBzIHdpdGggVmltIG9uIE9wZW5WTVMuICBEZXBlbmRpbmcgb2YgYmluYXJ5IGRpc3RyaWJ1dGlvbiB5b3UgbWF5IHN0YXJ0IGl0CndpdGg6ID4KCglAdmltOnZpbXR1dG9yCgooVGhvbWFzLlIuV3lhbnQgSUlJLCBWaW0gNi4xKQoKOC4xNiBTbG93IHN0YXJ0IGluIGNvbnNvbGUgbW9kZSBpc3N1ZQoKQXMgR1VJL0dUSyBWaW0gd29ya3MgZXF1YWxseSB3ZWxsIGluIGNvbnNvbGUgbW9kZSwgbWFueSBhZG1pbmlzdHJhdG9ycwpkZXBsb3kgdGhvc2UgZXhlY3V0YWJsZXMgc3lzdGVtIHdpZGUuClVuZm9ydHVuYXRlbHksIG9uIGEgcmVtb3RlIHNsb3cgY29ubmVjdGlvbnMgR1VJL0dUSyBleGVjdXRhYmxlcyBiZWhhdmUgcmF0aGVyCnNsb3cgd2hlbiB1c2VyIHdhbnRzIHRvIHJ1biBWaW0ganVzdCBpbiB0aGUgY29uc29sZSBtb2RlIC0gYmVjYXVzZSBvZiBYCmVudmlyb25tZW50IGRldGVjdGlvbiB0aW1lb3V0LgoKTHVja2lseSwgdGhlcmUgaXMgYSBzaW1wbGUgc29sdXRpb24gZm9yIHRoYXQuIEFkbWluaXN0cmF0b3JzIG5lZWQgdG8gZGVwbG95CmJvdGggR1VJL0dUSyBidWlsZCBhbmQganVzdCBjb25zb2xlIGJ1aWxkIGV4ZWN1dGFibGVzLCBsaWtlIGJlbG93OiA+CgogICAgfC0gdmltNzMKICAgIHwtLS0tLSBkb2MKICAgIHwtLS0tLSBzeW50YXgKICAgICAgIHZpbXJjICAgIChzeXN0ZW0gcmMgZmlsZXMpCiAgICAgICBndmltcmMKICAgICAgIGd2aW0uZXhlICh0aGUgcmVuYW1lZCBHVUkgb3IgR1RLIGJ1aWx0IHZpbS5leGUpCiAgICAgICB2aW0uZXhlICAodGhlIGNvbnNvbGUgb25seSBleGVjdXRhYmxlKQoKRGVmaW5lIHN5c3RlbSBzeW1ib2xzIGxpa2UgYmVsb3cgaW4gZm9yIGV4IGluIExPR0lOLkNPTSBvciBTWUxPR0lOLkNPTTogPgoKCSQgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLlZJTTczXSAhIHdoZXJlIHlvdSBWSU0gZGlyZWN0b3J5IGlzCgkkIHZpKm0gIDo9PSBtY3IgVklNOlZJTS5FWEUKCSQgZ3ZpKm0gOj09IG1jciBWSU06R1ZJTS5FWEUKCSQgISBvciB5b3UgY2FuIHRyeSB0byBzcGF3biB3aXRoCgkkIGd2KmltIDo9PSBzcGF3bi9ub3dhaXQvaW5wdXQ9TkxBMCBtY3IgVklNOkdWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAoKCkxpa2UgdGhpcywgdXNlcnMgdGhhdCBkbyBub3QgaGF2ZSBYIGVudmlyb25tZW50IGFuZCB3YW50IHRvIHVzZSBWaW0ganVzdCBpbgpjb25zb2xlIG1vZGUgY2FuIGF2b2lkIHBlcmZvcm1hbmNlIHByb2JsZW1zLgoKKFpvbHRhbiBBcnBhZGZmeSwgVmltIDcuMikKCjguMTUgQ29tbW9uIFZJTSBkaXJlY3RvcnkgLSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcwoKSW4gYSBjbHVzdGVyIHRoYXQgY29udGFpbnMgbm9kZXMgd2l0aCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyBsaWtlIGJlbG93OgoKJHNob3cgY2x1c3RlcgpWaWV3IG9mIENsdXN0ZXIgZnJvbSBzeXN0ZW0gSUQgMTE2NTUgIG5vZGU6IFRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4LUFVRy0yMDA4IDExOjU4OjMxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCqYgICAgICAgIFNZU1RFTVMgICAgICAgIKYgTUVNQkVSUyCmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS2mCqYgIE5PREUgIKYgICBTT0ZUV0FSRSAgIKYgIFNUQVRVUyCmCistLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS2mCqYgVE9SICAgIKYgVk1TIFY3LjMtMiAgIKYgTUVNQkVSICCmCqYgVElUQU4yIKYgVk1TIFY4LjMgICAgIKYgTUVNQkVSICCmCqYgT0RJTiAgIKYgVk1TIFY3LjMtMiAgIKYgTUVNQkVSICCmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgpJdCBpcyBjb252ZW5pZW50IHRvIGhhdmUgYSBjb21tb24gVklNIGRpcmVjdG9yeSBidXQgZXhlY3V0ZSBkaWZmZXJlbnQKZXhlY3V0YWJsZXMuClRoZXJlIGFyZSBzZXZlcmFsIHNvbHV0aW9ucyBmb3IgdGhpcyBwcm9ibGVtOgoKU29sdXRpb24gMS4gIEFsbCBleGVjdXRhYmxlcyBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd2l0aCBkaWZmZXJlbnQgbmFtZXMKVGhpcyBpcyBlYXNpbHkgZG9uZSB3aXRoIHRoZSBmb2xsb3dpbmcgc2NyaXB0IHRoYXQgY2FuIGJlIGFkZGVkCnRvIHRoZSBsb2dpbi5jb20gb3Igc3lsb2dpbi5jb206ID4KCgkkIGlmIGYkZ2V0c3lpKCJOT0RFX0hXVFlQRSIpIC5lcXMuICJWQVgiCgkkIHRoZW4KCSQgICAgICAgc2F5ICJWQVggcGxhdGZvcm0iCgkkICAgICAgIHZpKm06PT0gbWNyIHZpbTpWSU0uRVhFX1ZBWAoJJCBlbmRpZgoJJCBpZiBmJGdldHN5aSgiTk9ERV9IV1RZUEUiKSAuZXFzLiAiQUxQSCIKCSQgdGhlbgoJJCAgICAgICBzYXkgIkFMUEhBIHBsYXRmb3JtIgoJJCAgICAgICB2aSptIDo9PSBtY3IgdmltOlZJTS5FWEVfQVhQCgkkIGVuZGlmCgkkIGlmIGYkZ2V0c3lpKCJBUkNIX05BTUUiKSAuZXFzLiAiSUE2NCIKCSQgdGhlbgoJJCAgICAgIHNheSAiSUE2NCBwbGF0Zm9ybSIKCSQgICAgICB2aSptIDo9PSBtY3IgdmltOlZJTS5FWEVfSUE2NAoJJCBlbmRpZgoKU29sdXRpb24gMi4gIERpZmZlcmVudCBkaXJlY3RvcmllczogPgoKCSQgaWYgZiRnZXRzeWkoIk5PREVfSFdUWVBFIikgLmVxcy4gIlZBWCIKCSQgdGhlbgoJJCAgICAgICBzYXkgIlZBWCBwbGF0Zm9ybSIKCSQgICAgICAgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLlZBWF9FWEVdICEgVkFYIGV4ZWN1dGFibGVzCgkkIGVuZGlmCgkkIGlmIGYkZ2V0c3lpKCJOT0RFX0hXVFlQRSIpIC5lcXMuICJBTFBIIgoJJCB0aGVuCgkkICAgICAgIHNheSAiQUxQSEEgcGxhdGZvcm0iCgkkICAgICAgIGRlZmluZS9ub2xvZyBWSU0gUkYxMDpbVVRJTC5BWFBfRVhFXSAhIEFYUCBleGVjdXRhYmxlcwoJJCBlbmRpZgoJJCBpZiBmJGdldHN5aSgiQVJDSF9OQU1FIikgLmVxcy4gIklBNjQiCgkkIHRoZW4KCSQgICAgICBzYXkgIklBNjQgcGxhdGZvcm0iCgkkICAgICAgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLklBNjRfRVhFXSAhIElBNjQgZXhlY3V0YWJsZXMKCSQgZW5kaWYKICAgICAgICAkISBWSU1SVU5USU1FIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBmaW5kIHJ1bnRpbWUgZmlsZXMKCSQgZGVmaW5lL25vbG9nIFZJTVJVTlRJTUUgUkYxMDpbVVRJTC5WSU03M10KCkEgZ29vZCBleGFtcGxlIGZvciB0aGlzIGFwcHJvYWNoIGlzIHRoZSBbR05VXWdudV90b29scy5jb20gc2NyaXB0IGZyb20KR05VX1RPT0xTLlpJUCBwYWNrYWdlIGRvd25sb2FkYWJsZSBmcm9tIGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vCgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNy4yKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo5LiBWTVMgcmVsYXRlZCBjaGFuZ2VzCQkJCQkqdm1zLWNoYW5nZXMqCgpWZXJzaW9uIDcuNCAKLSBVbmRvOiBWTVMgY2FuIG5vdCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBkb3QgaW4gdGhlIGZpbGVuYW1lcyB1c2UgImRpci9uYW1lIiAtPiAiZGlyL191bl9uYW1lIiAKICBhZGQgX3VuXyBhdCB0aGUgYmVnaW5uaW5nIHRvIGtlZXAgdGhlIGV4dGVuc2lvbgotIGNvcnJlY3Qgc3dhcCBmaWxlIG5hbWUgd2lsZGNhcmQgaGFuZGxpbmcKLSBoYW5kbGUgaWNvbnYgdXNhZ2UgY29ycmVjdGx5Ci0gZG8gbm90IG9wdGltaXplIG9uIHZheCAtIG90aGVyd2lzZSBpdCBoYW5ncyBjb21waWxpbmcgY3J5cHRvIGZpbGVzCi0gZmlsZWlvLmMgZml4IHRoZSBjb21tZW50Ci0gY29ycmVjdCBSZWFsV2FpdEZvckNoYXIgCi0gYWZ0ZXIgNy40LTExOSB1c2UgZGlmZmVyZW50IGZ1bmN0aW9ucyBsaWIkY3Z0Zl90b19pbnRlcm5hbF90aW1lIGJlY2F1c2UgQWxwaGEgYW5kIFZBWCBoYXZlCiAgR19GTE9BVCBidXQgSUE2NCB1c2VzIElFRUUgZmxvYXQgb3RoZXJ3aXNlIFZpbSBjcmFzaGVzCi0gZ3VhcmQgYWdhaW5zIGNyYXNoZXMgdGhhdCBhcmUgY2F1c2VkIGJ5IG1peGVkIGZpbGVuYW1lcwotIFtURVNURElSXW1ha2Vfdm1zLm1tcyBjaGFuZ2VkIHRvIHNlZSB0aGUgb3V0cHV0IGZpbGVzCi0gSW1wcm92ZSB0ZXN0cywgdXBkYXRlIGtub3duIGlzc3VlcwotIG1pbm9yIGNvbXBpbGVyIHdhcm5pbmdzIGZpeGVkCi0gQ1RBR1MgNS44ICtyZWdleCBpbmNsdWRlZAoKVmVyc2lvbiA3LjMKLSBDVEFHUyA1LjggaW5jbHVkZWQKLSBWTVMgY29tcGlsZSB3YXJuaW5ncyBmaXhlZCAtIGZsb2F0aW5nLXBvaW50IG92ZXJmbG93IHdhcm5pbmcgY29ycmVjdGVkIG9uIFZBWAotIGZpbGVwYXRoIGNvbXBsZXRpb24gY29ycmVjdGVkIC0gdG9vIG1hbnkgY2hhcnMgd2VyZSBlc2NhcGVkIGluIGZpbGVuYW1lCiAgYW5kIHNoZWxsIGNvbW1hbmRzCi0gdGhlIGZvbGxvd2luZyBwbHVnaW5zIGFyZSBpbmNsdWRlZCBpbnRvIFZNUyBydW50aW1lOgoJZ2VudXRpbHMgMi40LCBtdWx0aXNlbGVjdCAyLjIsIG11bHR2YWxzIDMuMSwgc2VsZWN0YnVmIDQuMywKCWJ1ZmV4cGxvcmVyIDcuMS43LCB0YWdsaXN0IDQuNQotIG1pbm9yIGNoYW5nZXMgaW4gdmltcmMgKGp1c3QgaW4gVk1TIHJ1bnRpbWUpCi0gbWFrZV92bXMubW1zIC0gSFVHRSBtb2RlbCBpcyB0aGUgZGVmYXVsdAotIFtURVNURElSXW1ha2Vfdm1zLm1tcyBpbmNsdWRlIGFzIG1hbnkgdGVzdHMgcG9zc2libGUKLSBtb2RpZnkgdGVzdDMwIGFuZCB0ZXN0NTQgZm9yIFZNUwotIGVuYWJsZSBGTE9BVCBmZWF0dXJlIGluIFZNUyBwb3J0Ci0gb3Nfdm1zLnR4dCB1cGRhdGVkCgpWZXJzaW9uIDcuMiAoMjAwOCBBdWcgOSkKLSBWQ0YgZmlsZXMgd3JpdGUgY29ycmVjdGVkCi0gQ1RBR1MgNS43IGluY2x1ZGVkCi0gY29ycmVjdGVkIG1ha2Vfdm1zLm1tcyAob24gVkFYIGdhdmUgc3ludGF4IGVycm9yKQoKVmVyc2lvbiA3LjEgKDIwMDcgSnVuIDE1KQotIGNyZWF0ZSBUQUdTIGZpbGUgZnJvbSBtZW51CgpWZXJzaW9uIDcgKDIwMDYgTWF5IDgpCi0gSW1wcm92ZWQgbG93IGxldmVsIGNoYXIgaW5wdXQgKGFmZmVjdHMganVzdCBjb25zb2xlIG1vZGUpCi0gRml4ZWQgcGx1Z2luIGJ1ZwotIENUQUdTIDUuNiBpbmNsdWRlZAoKVmVyc2lvbiA2LjQgKDIwMDUgT2N0IDE1KQotIEdUS0xJQiBhbmQgVmltIGJ1aWxkIG9uIElBNjQKLSBjb2xvcnMgaW4gdGVybWluYWwgbW9kZQotIHN5bnRheCBoaWdobGlnaHRpbmcgaW4gdGVybWluYWwgbW9kZQotIHdyaXRlIHByb2JsZW0gZml4ZWQgKGV4dHJhIENSKQotIEVTQyBhbmQgRVNDIHNlcXVlbmNlIHJlY29nbml0aW9uIGluIHRlcm1pbmFsIG1vZGUKLSBtYWtlIGZpbGUgY2hhbmdlZCB0byBzdXBwb3J0IG5ldyBNTVMgdmVyc2lvbgotIGVudiB2YXJpYWJsZSBleHBhbnNpb24gaW4gcGF0aCBjb3JyZWN0ZWQKLSBwcmludGluZyBwcm9ibGVtcyBjb3JyZWN0ZWQKLSBoZWxwIHRleHQgYWRkZWQgZm9yIGNhc2UgaW5zZW5zaXRpdmUgYXJndW1lbnRzCgpWZXJzaW9uIDYuMyAoMjAwNCBNYXkgMTApCi0gSW1wcm92ZWQgdm1zX3JlYWQgZnVuY3Rpb24KLSBDVEFHUyB2NS41LjQgaW5jbHVkZWQKLSBEb2N1bWVudGF0aW9uIGNvcnJlY3RlZCBhbmQgdXBkYXRlZAoKVmVyc2lvbiA2LjIgKDIwMDMgTWF5IDcpCi0gQ29ycmVjdGVkIFZNUyBzeXN0ZW0gY2FsbCByZXN1bHRzCi0gTG93IGxldmVsIGNoYXJhY3RlciBpbnB1dCBpcyByZXdyaXR0ZW4KLSBDb3JyZWN0aW9uIGluIHRhZyBhbmQgcXVpY2tmaXggaGFuZGxpbmcKLSBGaXJzdCBHVEsgYnVpbGQKLSBNYWtlIGZpbGUgY2hhbmdlcwogICAgLSBHVEsgZmVhdHVyZSBhZGRlZAogICAgLSBEZWZpbmUgZm9yIE9MRF9WTVMKICAgIC0gT3BlblZNUyB2ZXJzaW9uIDYuMiBvciBvbGRlcgotIERvY3VtZW50YXRpb24gdXBkYXRlZCB3aXRoIEdUSyBmZWF0dXJlcwotIENUQUdTIHY1LjUgaW5jbHVkZWQKLSBWTVMgVklNIHR1dG9yIGNyZWF0ZWQKClZlcnNpb24gNi4xICgyMDAyIE1hciAyNSkKLSBUQ0wgaW5pdF90Y2woKSBwcm9ibGVtIGZpeGVkCi0gQ1RBR1MgdjUuNCBpbmNsdWRlZAotIEdOVSB0b29scyBiaW5hcmllcyBmb3IgT3BlblZNUwotIE1ha2UgZmlsZSBjaGFuZ2VzCiAgICAtIFBFUkwsIFBZVEhPTiBhbmQgVENMIHN1cHBvcnQgaW1wcm92ZWQKICAgIC0gSW5zdGFsbFZNUy50eHQgaGFzIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gSE9XVE8gYnVpbGQKLSBWTVMvVW5peCBmaWxlIGhhbmRsaW5nIHJld3JpdHRlbgotIE1pbm9yIGNhc3RpbmcgYW5kIGJ1ZyBmaXhlcwoKVmVyc2lvbiA2LjAgKDIwMDEgU2VwIDI4KQotIFVuaXggYW5kIFZNUyBjb2RlIGhhcyBiZWVuIG1lcmdlZAoJLSBzZXBhcmF0ZWQgInJlYWxseSIgVk1TIHJlbGF0ZWQgY29kZQoJLSBpbmNsdWRlZCBhbGwgcG9zc2libGUgVW5peCBmdW5jdGlvbmFsaXR5CgktIHNpbXBsaWZpZWQgb3IgZGVsZXRlZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcwoJLSBtYWtlZmlsZSBNQUtFX1ZNUy5NTVMgcmV2aWV3ZWQKLSBtZW51IGNoYW5nZXMgKGZpeGVkIHByaW50aW5nLCBDVEFHUyBhbmQgWFhEIHVzYWdlKQotIGZpeGVkIHZhcmlhYmxlIFJNUyByZWNvcmQgZm9ybWF0IGhhbmRsaW5nIGFub21hbHkKLSBjb3JyZWN0ZWQgc3ludGF4LCBmdHBsdWdpbiBldGMgZmlsZXMgbG9hZAotIGNoYW5nZWQgZXhwYW5kX3dpbGRjYXJkcyBhbmQgZXhwYW5kcGF0aCBmdW5jdGlvbnMgdG8gd29yayBtb3JlIGdlbmVyYWwKLSBjcmVhdGVkIE9TX1ZNU19GSUxURVIuQ09NIC0gREVDQy0+VkFYQyBwcmUtcHJvY2Vzc29yIGRpcmVjdGl2ZSBjb252ZXJ0CiAgc2NyaXB0LgotIEltcHJvdmVkIGNvZGUncyBWQVhDIGFuZCBuZXcgREVDQyBjb21waWxlcnMgY29tcGF0aWJpbGl0eQotIGNoYW5nZWQgcXVpY2tmaXggcGFyYW1ldGVyczoKCS0gZXJyb3JtZXNzYWdlIGZvcm1hdCB0byBzdWl0ZSBERUNDCgktIHNlYXJjaCwgbWFrZSBhbmQgb3RoZXIgY29tbWFuZHMgdG8gc3VpdGUgVk1TIHN5c3RlbQotIHVwZGF0ZWQgYW5kIHJlbmFtZWQgTU1TIG1ha2UgZmlsZXMgZm9yIFZpbSBhbmQgQ1RBR1MuCi0gQ1RBR1MgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHNvdXJjZSBkaXN0cmlidXRpb24gb2YgVmltIGJ1dCBpdCB3aWxsIHJlbWFpbgogIGluIE9wZW5WTVMgYmluYXJ5IGRpc3RyaWJ1dGlvbnMuCi0gc2ltcGxpZmllZCBidWlsZC9jb25maWd1cmF0aW9uIHByb2NlZHVyZQotIGNyZWF0ZWQgSU5TVEFMTHZtcy50eHQgLSBkZXRhaWxlZCBjb21waWxpbmcgaW5zdHJ1Y3Rpb25zIHVuZGVyIFZNUy4KLSB1cGRhdGVkIHRlc3Qgc2NyaXB0cy4KClZlcnNpb24gNS44ICgyMDAxIEp1biAxKQotIE9TX1ZNUy5UWFQgdXBkYXRlZCB3aXRoIG5ldyBmZWF0dXJlcy4KLSBvdGhlciBtaW5vciBmaXhlcy4KLSBkb2N1bWVudGF0aW9uIHVwZGF0ZWQKLSB0aGlzIHZlcnNpb24gaGFkIGJlZW4gdGVzdGVkIG11Y2ggbW9yZSB0aGFuIGFueSBvdGhlciBPcGVuVk1TIHZlcnNpb24KICBlYXJsaWVyCgpWZXJzaW9uIDUuNyAoMjAwMCBKdW4gMjQpCi0gTmV3IENUQUdTIHY1LjAgaW4gZGlzdHJpYnV0aW9uCi0gRG9jdW1lbnRhdGlvbiB1cGRhdGVkCgpWZXJzaW9uIDUuNiAoMjAwMCBKYW4gMTcpCi0gVk1TIGZpbGVuYW1lIHJlbGF0ZWQgY2hhbmdlczoKCS0gdmVyc2lvbiBoYW5kbGluZyAob3BlbiBldmVyeXRoaW5nLCBzYXZlIHRvIG5ldyB2ZXJzaW9uKQoJLSBjb3JyZWN0IGZpbGUgZXh0ZW5zaW9uIG1hdGNoaW5nIGZvciBzeW50YXggKHZlcnNpb24gcHJvYmxlbSkKCS0gaGFuZGxlIDwsPiBjaGFyYWN0ZXJzIGFuZCBwYXNzd29yZHMgaW4gZGlyZWN0b3J5IGRlZmluaXRpb24KCS0gaGFuZGxlIGludGVybm9kZS9yZW1vdGUgaW52b2NhdGlvbiBhbmQgZWRpdGluZyB3aXRoIHBhc3N3b3JkcwoJLSBPcGVuVk1TIGZpbGVzIHdpbGwgYmUgdHJlYXRlZCBjYXNlIGluc2Vuc2l0aXZlIGZyb20gbm93CgktIGNvcnJlY3RlZCByZXNwb25zZSBvZiBleHBhbmQoIiU6LiIpIGV0YyBwYXRoIHJlbGF0ZWQgZnVuY3Rpb25zCgkoaW4gb25lIHdvcmQ6IFZNUyBkaXJlY3RvcnkgaGFuZGxpbmcgaW50ZXJuYWxseSkKLSB2ZXJzaW9uIGNvbW1hbmQKCS0gY29ycmVjdGVkICgrLC0pIGluZm9ybWF0aW9uIGRhdGEKCS0gYWRkZWQgY29tcGlsZXIgYW5kIE9TIHZlcnNpb24KCS0gYWRkZWQgdXNlciBhbmQgaG9zdCBpbmZvcm1hdGlvbgoJLSByZXNvbHZpbmcgJFZJTSBhbmQgJFZJTVJVTlRJTUUgbG9naWNhbHMKLSBWTVMgcG9ydCBpcyBpbiBNQVhfRkVBVCAobWF4aW11bSBmZWF0dXJlcykgY2x1YiB3aXRoIFVuaXgsIFdpbjMyIGFuZCBPUy8yLgoJLSBlbmFibGVkIGZhcnNpLCByaWdodGxlZnQgZXRjLiBmZWF0dXJlcwoJLSB1bmRvIGxldmVsIHJhaXNlZCB1cCB0byAxMDAwCi0gVXBkYXRlZCBPU19WTVMuTU1TIGZpbGUuCgktIG1heGltdW0gZmVhdHVyZXMgT04gaXMgZGVmYXVsdAoJLSBWaW0gaXMgY29tcGlsYWJsZSB3aXRoICtwZXJsLCArcHl0aG9uIGFuZCArdGNsIGZlYXR1cmVzLgoJLSBpbXByb3ZlZCBNTUsgY29tcGF0aWJpbGl0eQotIENyZWF0ZWQgTUFLRUZJTEVfVk1TLk1NUywgbWFrZWZpbGUgZm9yIHRlc3RpbmcgVmltIGR1cmluZyBkZXZlbG9wbWVudC4KLSBEZWZpbmVkIERFQyB0ZXJtaW5hbCBWVDMyMAoJLSBjb21wYXRpYmlsaXR5IGZvciBWVDMqMCwgVlQyKjAgYW5kIFZUMSowIC0gQU5TSSB0ZXJtaW5hbHMKCSAgYmFja3dhcmRzLCBidXQgbm90IFZUMzQwIGFuZCBuZXdlciB3aXRoIGNvbG91ciBjYXBhYmlsaXR5LgoJLSBWVDMyMCBpcyBkZWZhdWx0IHRlcm1pbmFsIGZvciBPcGVuVk1TCgktIHRoZXNlIG5ldyB0ZXJtaW5hbHMgYXJlIGFsc28gZmFzdCB0dHlzIChkZWZhdWx0IGZvciBPcGVuVk1TKS4KCS0gYWxsb3dlZCBkZWNfbW91c2UgdHR5bQotIFVwZGF0ZWQgZmlsZXMgdmltcmMgYW5kIGd2aW1yYyB3aXRoIFZNUyBzcGVjaWZpYyBzdWdnZXN0aW9ucy4KLSBPU19WTVMuVFhUIHVwZGF0ZWQgd2l0aCBuZXcgZmVhdHVyZXMuCgpWZXJzaW9uIDUuNSAoMTk5OSBEZWMgMykKLSBQb3B1cCBtZW51IGxpbmUgY3Jhc2ggY29ycmVjdGVkLgotIEhhbmRsZSBmdWxsIGZpbGUgbmFtZXMgd2l0aCB2ZXJzaW9uIG51bWJlcnMuCi0gRGlyZWN0b3J5IGhhbmRsaW5nIChDRCBjb21tYW5kIGV0Yy4pCi0gQ29ycmVjdGVkIGZpbGUgbmFtZSBjb252ZXJzaW9uIFZNUyB0byBVbml4IGFuZCB2LnYuCi0gQ29ycmVjdCByZXNwb25zZSBvZiBleHBhbmQgd2lsZGNhcmRzCi0gUmVjb3ZlcnkgaXMgd29ya2luZyBmcm9tIHRoaXMgdmVyc2lvbiB1bmRlciBWTVMgYXMgd2VsbC4KLSBJbXByb3ZlZCB0ZXJtaW5hbCBhbmQgc2lnbmFsIGhhbmRpbmcuCi0gSW1wcm92ZWQgT1NfVk1TLlRYVAoKVmVyc2lvbiA1LjQgKDE5OTkgU2VwIDkpCi0gQ3V0IGFuZCBwYXN0ZSBtaXNtYXRjaCBjb3JyZWN0ZWQuCi0gTW90aWYgZGlyZWN0b3JpZXMgZHVyaW5nIG9wZW4gYW5kIHNhdmUgYXJlIGNvcnJlY3RlZC4KClZlcnNpb24gNS4zICgxOTk4IE9jdCAxMikKLSBNaW5vciBjaGFuZ2VzIGluIHRoZSBjb2RlCi0gU3RhbmRhcmQgZGlzdHJpYnV0aW9uIHdpdGggK0dVSSBvcHRpb24KClZlcnNpb24gNS4xICgxOTk4IEFwciAyMSkKLSBTeW50YXggYW5kIERFQyBDIGNoYW5nZXMgaW4gdGhlIGNvZGUKLSBGaXhpbmcgcHJvYmxlbXMgd2l0aCB0aGUgL2RvYyBzdWJkaXJlY3RvcnkKLSBJbXByb3ZlIE9TX1ZNUy5NTVMKClZlcnNpb24gNC41ICgxOTk2IERlYyAxNikKLSBGaXJzdCBWTVMgcG9ydCBieSBIZW5rIEVsYmVycyA8aGVua0B4czRhbGwubmw+Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjEwLiBBdXRob3JzCQkJCQkJKnZtcy1hdXRob3JzKgoKT3BlblZNUyBkb2N1bWVudGF0aW9uIGFuZCBleGVjdXRhYmxlcyBhcmUgbWFpbnRhaW5lZCBieToKWm9sdGFuIEFycGFkZmZ5IDxhcnBhZGZmeUBwb2xhcmhvbWUuY29tPgpPcGVuVk1TIFZpbSBwYWdlOiBodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vdmltLwoKVGhpcyBkb2N1bWVudCB1c2VzIHBhcnRzIGFuZCByZW1hcmtzIGZyb20gZWFybGllciBhdXRob3JzIGFuZCBjb250cmlidXRvcnMKb2YgT1NfVk1TLlRYVDoKCUNoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8Y2VjQGdyeXBob24uZ3NmYy5uYXNhLmdvdj4KCUJydWNlIEh1bnNha2VyIDxCTkh1bnNha2VyQGNocS5ieXUuZWR1PgoJU2FuZG9yIEtvcGFueWkgPHNhbmRvci5rb3BhbnlpQG1haWxib3guaHU+CgogdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgo=