Km9zX3Ztcy50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMSBBdWcgMTQKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwKCgoJCQkJCQkJKlZNUyogKnZtcyoKVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFyaXRpZXMgZm9yIHRoZSBWTVMgdmVyc2lvbiBvZiBWaW0uCllvdSBjYW4gcmVhY2ggdGhpcyBpbmZvcm1hdGlvbiBmaWxlIGJ5IHR5cGluZyA6aGVscCBWTVMgaW4gVmltIGNvbW1hbmQKcHJvbXB0LgoKIDEuIEdldHRpbmcgc3RhcnRlZAl8dm1zLXN0YXJ0ZWR8CiAyLiBEb3dubG9hZCBmaWxlcwl8dm1zLWRvd25sb2FkfAogMy4gQ29tcGlsaW5nCQl8dm1zLWNvbXBpbGluZ3wKIDQuIFByb2JsZW1zCQl8dm1zLXByb2JsZW1zfAogNS4gRGVwbG95CQl8dm1zLWRlcGxveXwKIDYuIFByYWN0aWNhbCB1c2FnZQl8dm1zLXVzYWdlfAogNy4gR1VJIG1vZGUgcXVlc3Rpb25zCXx2bXMtZ3VpfAogOC4gVXNlZnVsIG5vdGVzCXx2bXMtbm90ZXN8CiA5LiBWTVMgcmVsYXRlZCBjaGFuZ2VzCXx2bXMtY2hhbmdlc3wKMTAuIEF1dGhvcnMJCXx2bXMtYXV0aG9yc3wKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMS4gR2V0dGluZyBzdGFydGVkCQkJCQkqdm1zLXN0YXJ0ZWQqCgpWaW0gKFZpIElNcHJvdmVkKSBpcyBhIHZpLWNvbXBhdGlibGUgdGV4dCBlZGl0b3IgdGhhdCBydW5zIG9uIG5lYXJseSBldmVyeQpvcGVyYXRpbmcgc3lzdGVtIGtub3duIHRvIGh1bWFuaXR5LiAgTm93IHVzZSBWaW0gb24gT3BlblZNUyB0b28sIGluIGNoYXJhY3RlcgpvciBYL01vdGlmIGVudmlyb25tZW50LiAgSXQgaXMgZnVsbHkgZmVhdHVyZWQgYW5kIGFic29sdXRlbHkgY29tcGF0aWJsZSB3aXRoClZpbSBvbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMi4gRG93bmxvYWQgZmlsZXMJCQkJCSp2bXMtZG93bmxvYWQqCgpZb3UgY2FuIGRvd25sb2FkIHRoZSBWaW0gc291cmNlIGNvZGUgYnkgZnRwIGZyb20gdGhlIG9mZmljaWFsIFZpbSBzaXRlOgoJZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS8KT3IgdXNlIG9uZSBvZiB0aGUgbWlycm9yczoKCWZ0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vTUlSUk9SUwoKWW91IGNhbiBkb3dubG9hZCBwcmVjb21waWxlZCBleGVjdXRhYmxlcyBmcm9tOgoJaHR0cDovL3d3dy5wb2xhcmhvbWUuY29tL3ZpbS8KCWZ0cDovL2Z0cC5wb2xhcmhvbWUuY29tL3B1Yi92aW0vCgpUbyB1c2UgdGhlIHByZWNvbXBpbGVkIGJpbmFyeSB2ZXJzaW9uLCB5b3UgbmVlZCBvbmUgb2YgdGhlc2UgYXJjaGl2ZXM6CgogIHZpbS1YWC1leGUtaWE2NC1ndWkuemlwICAgICAgIElBNjQgR1VJL01vdGlmIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1pYTY0LWd0ay56aXAgICAgICAgSUE2NCBHVUkvR1RLIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1pYTY0LXRlcm0uemlwICAgICAgSUE2NCBjb25zb2xlIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1heHAtZ3VpLnppcAlBbHBoYSBHVUkvTW90aWYgZXhlY3V0YWJsZXMKICB2aW0tWFgtZXhlLWF4cC1ndGsuemlwCUFscGhhIEdVSS9HVEsgZXhlY3V0YWJsZXMKICB2aW0tWFgtZXhlLWF4cC10ZXJtLnppcCAgICAgICBBbHBoYSBjb25zb2xlIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS12YXgtZ3VpLnppcAlWQVggR1VJIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS12YXgtdGVybS56aXAgICAgICAgVkFYIGNvbnNvbGUgZXhlY3V0YWJsZXMKCmFuZCBvZiBjb3Vyc2UgKG9wdGlvbmFsKQogIHZpbS1YWC1ydW50aW1lLnppcAkJcnVudGltZSBmaWxlcwoKVGhlIGJpbmFyeSBhcmNoaXZlcyBjb250YWluOiB2aW0uZXhlLCBjdGFncy5leGUsIHh4ZC5leGUgZmlsZXMuCgpGb3IgR1RLIGV4ZWN1dGFibGVzIHlvdSB3aWxsIG5lZWQgR1RLTElCIHRoYXQgaXMgYXZhaWxhYmxlIGZvcgpBbHBoYSBhbmQgSUE2NCBwbGF0Zm9ybS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMy4gQ29tcGlsaW5nCQkJCQkJKnZtcy1jb21waWxpbmcqCgpTZWUgdGhlIGZpbGUgWy5TUkNdSU5TVEFMTFZNUy5UWFQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjQuIFByb2JsZW1zCQkJCQkJKnZtcy1wcm9ibGVtcyoKClRoZSBjb2RlIGhhcyBiZWVuIHRlc3RlZCB1bmRlciBPcGVuIFZNUyA2LjIgLSA4LjIgb24gQWxwaGEsIFZBWCBhbmQgSUE2NApwbGF0Zm9ybXMgd2l0aCB0aGUgREVDIEMgY29tcGlsZXIuICBJdCBzaG91bGQgd29yayB3aXRob3V0IGJpZyBwcm9ibGVtcy4KSWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBzb21lIGluY2x1ZGUgbGlicmFyaWVzIHlvdSBjYW4gdHVuZSB1cCBpbgpPU19WTVNfQ09ORi5IIGZpbGUuCgpJZiB5b3UgZGVjaWRlZCB0byBidWlsZCBWaW0gd2l0aCArcGVybCwgK3B5dGhvbiwgZXRjLiBvcHRpb25zLCBmaXJzdCB5b3UgbmVlZAp0byBkb3dubG9hZCBPcGVuVk1TIGRpc3RyaWJ1dGlvbnMgb2YgUGVybCBhbmQgUHl0aG9uLiAgQnVpbGQgYW5kIGRlcGxveSB0aGUKbGlicmFyaWVzIGFuZCBjaGFuZ2UgYWRlcXVhdGUgbGluZXMgaW4gTUFLRV9WTVMuTU1TIGZpbGUuICBUaGVyZSBzaG91bGQgbm90IGJlCmEgcHJvYmxlbSBmcm9tIFZpbSBzaWRlLgoKQWxzbyBHVEssIFhQTSBsaWJyYXJ5IHBhdGhzIHNob3VsZCBiZSBjb25maWd1cmVkIGluIE1BS0VfVk1TLk1NUwoKTm90ZTogVW5kZXIgVkFYIGl0IHNob3VsZCB3b3JrIHdpdGggdGhlIERFQyBDIGNvbXBpbGVyIHdpdGhvdXQgcHJvYmxlbXMuICBUaGUKVkFYIEMgY29tcGlsZXIgaXMgbm90IGZ1bGx5IEFOU0kgQyBjb21wYXRpYmxlIGluIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlcwpzZW1hbnRpY3MsIHRoZXJlZm9yZSB5b3UgaGF2ZSB0byB1c2UgYSBjb252ZXJ0ZXIgcHJvZ3JhbSB0aGF0IHdpbGwgZG8gdGhlIGxpb24KcGFydCBvZiB0aGUgam9iLiAgRm9yIGRldGFpbGVkIGluc3RydWN0aW9ucyByZWFkIGZpbGUgSU5TVEFMTHZtcy50eHQKCk1NU19WSU0uRVhFIGlzIGJ1aWxkIHRvZ2V0aGVyIHdpdGggVklNLkVYRSwgYnV0IGZvciBYWEQuRVhFIHlvdSBzaG91bGQKY2hhbmdlIHRvIGEgc3ViZGlyZWN0b3J5IGFuZCBidWlsZCBpdCBzZXBhcmF0ZWx5LgoKQ1RBR1MgaXMgbm90IHBhcnQgb2YgdGhlIFZpbSBzb3VyY2UgZGlzdHJpYnV0aW9uIGFueW1vcmUsIGhvd2V2ZXIgdGhlIE9wZW5WTVMKc3BlY2lmaWMgc291cmNlIG1pZ2h0IGNvbnRhaW4gQ1RBR1Mgc291cmNlIGZpbGVzIGFzIGRlc2NyaWJlZCBhYm92ZS4KWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ1RBR1Mgb24gVk1TIGF0Cmh0dHA6Ly93d3cucG9sYXJob21lLmNvbS9jdGFncy8KCkFkdmFuY2VkIHVzZXJzIG1heSB0cnkgc29tZSBhY3JvYmF0aWNzIGluIEZFQVRVUkUuSCBmaWxlIGFzIHdlbGwuCgpJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggK3hmb250c2V0ICt4aW0gb3B0aW9ucyB0b28sIGJ1dCB0aGVuIHlvdSBoYXZlCnRvIHNldCB1cCBHVUkgZm9udHMgZXRjLiBjb3JyZWN0bHkuICBTZWUgOmhlbHAgeGltIGZyb20gVmltIGNvbW1hbmQgcHJvbXB0LgoKWW91IG1heSB3YW50IHRvIHVzZSBHVUkgd2l0aCBHVEsgaWNvbnMsIHRoZW4geW91IGhhdmUgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwKR1RLIGZvciBPcGVuVk1TIG9yIGF0IGxlYXN0IHJ1bnRpbWUgc2hhcmVhYmxlIGltYWdlcyAtIExJQkdUSyBmcm9tCnBvbGFyaG9tZS5jb20KCkZvciBtb3JlIGFkdmFuY2VkIHF1ZXN0aW9ucywgcGxlYXNlIHNlbmQgeW91ciBwcm9ibGVtIHRvIFZpbSBvbiBWTVMgbWFpbGluZwpsaXN0IDx2aW0tdm1zQHBvbGFyaG9tZS5jb20+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+CgogICAgfC0gdmltNzMKICAgIHwtLS0tLSBkb2MKICAgIHwtLS0tLSBzeW50YXgKICAgICAgIHZpbXJjICAgIChzeXN0ZW0gcmMgZmlsZXMpCiAgICAgICBndmltcmMKICAgICAgIGd2aW0uZXhlICh0aGUgcmVuYW1lZCBHVUkgb3IgR1RLIGJ1aWx0IHZpbS5leGUpCiAgICAgICB2aW0uZXhlICAodGhlIGNvbnNvbGUgb25seSBleGVjdXRhYmxlKQoKRGVmaW5lIHN5c3RlbSBzeW1ib2xzIGxpa2UgYmVsb3cgaW4gZm9yIGV4IGluIExPR0lOLkNPTSBvciBTWUxPR0lOLkNPTTogPgoKCSQgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLlZJTTczXSAhIHdoZXJlIHlvdSBWSU0gZGlyZWN0b3J5IGlzCgkkIHZpKm0gIDo9PSBtY3IgVklNOlZJTS5FWEUKCSQgZ3ZpKm0gOj09IG1jciBWSU06R1ZJTS5FWEUKCSQgISBvciB5b3UgY2FuIHRyeSB0byBzcGF3biB3aXRoCgkkIGd2KmltIDo9PSBzcGF3bi9ub3dhaXQvaW5wdXQ9TkxBMCBtY3IgVklNOkdWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAoKCkxpa2UgdGhpcywgdXNlcnMgdGhhdCBkbyBub3QgaGF2ZSBYIGVudmlyb25tZW50IGFuZCB3YW50IHRvIHVzZSBWaW0ganVzdCBpbgpjb25zb2xlIG1vZGUgY2FuIGF2b2lkIHBlcmZvcm1hbmNlIHByb2JsZW1zLgoKKFpvbHRhbiBBcnBhZGZmeSwgVmltIDcuMikKCjguMTUgQ29tbW9uIFZJTSBkaXJlY3RvcnkgLSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcwoKSW4gYSBjbHVzdGVyIHRoYXQgY29udGFpbnMgbm9kZXMgd2l0aCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyBsaWtlIGJlbG93OgoKJHNob3cgY2x1c3RlcgpWaWV3IG9mIENsdXN0ZXIgZnJvbSBzeXN0ZW0gSUQgMTE2NTUgIG5vZGU6IFRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4LUFVRy0yMDA4IDExOjU4OjMxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCqYgICAgICAgIFNZU1RFTVMgICAgICAgIKYgTUVNQkVSUyCmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS2mCqYgIE5PREUgIKYgICBTT0ZUV0FSRSAgIKYgIFNUQVRVUyCmCistLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS2mCqYgVE9SICAgIKYgVk1TIFY3LjMtMiAgIKYgTUVNQkVSICCmCqYgVElUQU4yIKYgVk1TIFY4LjMgICAgIKYgTUVNQkVSICCmCqYgT0RJTiAgIKYgVk1TIFY3LjMtMiAgIKYgTUVNQkVSICCmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgpJdCBpcyBjb252ZW5pZW50IHRvIGhhdmUgYSBjb21tb24gVklNIGRpcmVjdG9yeSBidXQgZXhlY3V0ZSBkaWZmZXJlbnQKZXhlY3V0YWJsZXMuClRoZXJlIGFyZSBzZXZlcmFsIHNvbHV0aW9ucyBmb3IgdGhpcyBwcm9ibGVtOgoKU29sdXRpb24gMS4gIEFsbCBleGVjdXRhYmxlcyBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd2l0aCBkaWZmZXJlbnQgbmFtZXMKVGhpcyBpcyBlYXNpbHkgZG9uZSB3aXRoIHRoZSBmb2xsb3dpbmcgc2NyaXB0IHRoYXQgY2FuIGJlIGFkZGVkCnRvIHRoZSBsb2dpbi5jb20gb3Igc3lsb2dpbi5jb206ID4KCgkkIGlmIGYkZ2V0c3lpKCJOT0RFX0hXVFlQRSIpIC5lcXMuICJWQVgiCgkkIHRoZW4KCSQgICAgICAgc2F5ICJWQVggcGxhdGZvcm0iCgkkICAgICAgIHZpKm06PT0gbWNyIHZpbTpWSU0uRVhFX1ZBWAoJJCBlbmRpZgoJJCBpZiBmJGdldHN5aSgiTk9ERV9IV1RZUEUiKSAuZXFzLiAiQUxQSCIKCSQgdGhlbgoJJCAgICAgICBzYXkgIkFMUEhBIHBsYXRmb3JtIgoJJCAgICAgICB2aSptIDo9PSBtY3IgdmltOlZJTS5FWEVfQVhQCgkkIGVuZGlmCgkkIGlmIGYkZ2V0c3lpKCJBUkNIX05BTUUiKSAuZXFzLiAiSUE2NCIKCSQgdGhlbgoJJCAgICAgIHNheSAiSUE2NCBwbGF0Zm9ybSIKCSQgICAgICB2aSptIDo9PSBtY3IgdmltOlZJTS5FWEVfSUE2NAoJJCBlbmRpZgoKU29sdXRpb24gMi4gIERpZmZlcmVudCBkaXJlY3RvcmllczogPgoKCSQgaWYgZiRnZXRzeWkoIk5PREVfSFdUWVBFIikgLmVxcy4gIlZBWCIKCSQgdGhlbgoJJCAgICAgICBzYXkgIlZBWCBwbGF0Zm9ybSIKCSQgICAgICAgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLlZBWF9FWEVdICEgVkFYIGV4ZWN1dGFibGVzCgkkIGVuZGlmCgkkIGlmIGYkZ2V0c3lpKCJOT0RFX0hXVFlQRSIpIC5lcXMuICJBTFBIIgoJJCB0aGVuCgkkICAgICAgIHNheSAiQUxQSEEgcGxhdGZvcm0iCgkkICAgICAgIGRlZmluZS9ub2xvZyBWSU0gUkYxMDpbVVRJTC5BWFBfRVhFXSAhIEFYUCBleGVjdXRhYmxlcwoJJCBlbmRpZgoJJCBpZiBmJGdldHN5aSgiQVJDSF9OQU1FIikgLmVxcy4gIklBNjQiCgkkIHRoZW4KCSQgICAgICBzYXkgIklBNjQgcGxhdGZvcm0iCgkkICAgICAgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLklBNjRfRVhFXSAhIElBNjQgZXhlY3V0YWJsZXMKCSQgZW5kaWYKICAgICAgICAkISBWSU1SVU5USU1FIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBmaW5kIHJ1bnRpbWUgZmlsZXMKCSQgZGVmaW5lL25vbG9nIFZJTVJVTlRJTUUgUkYxMDpbVVRJTC5WSU03M10KCkEgZ29vZCBleGFtcGxlIGZvciB0aGlzIGFwcHJvYWNoIGlzIHRoZSBbR05VXWdudV90b29scy5jb20gc2NyaXB0IGZyb20KR05VX1RPT0xTLlpJUCBwYWNrYWdlIGRvd25sb2FkYWJsZSBmcm9tIGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vCgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNy4yKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo5LiBWTVMgcmVsYXRlZCBjaGFuZ2VzCQkJCQkqdm1zLWNoYW5nZXMqCgpWZXJzaW9uIDcuMwotIENUQUdTIDUuOCBpbmNsdWRlZAotIFZNUyBjb21waWxlIHdhcm5pbmdzIGZpeGVkIC0gZmxvYXRpbmctcG9pbnQgb3ZlcmZsb3cgd2FybmluZyBjb3JyZWN0ZWQgb24gVkFYCi0gZmlsZXBhdGggY29tcGxldGlvbiBjb3JyZWN0ZWQgLSB0b28gbWFueSBjaGFycyB3ZXJlIGVzY2FwZWQgaW4gZmlsZW5hbWUKICBhbmQgc2hlbGwgY29tbWFuZHMKLSB0aGUgZm9sbG93aW5nIHBsdWdpbnMgYXJlIGluY2x1ZGVkIGludG8gVk1TIHJ1bnRpbWU6CglnZW51dGlscyAyLjQsIG11bHRpc2VsZWN0IDIuMiwgbXVsdHZhbHMgMy4xLCBzZWxlY3RidWYgNC4zLAoJYnVmZXhwbG9yZXIgNy4xLjcsIHRhZ2xpc3QgNC41Ci0gbWlub3IgY2hhbmdlcyBpbiB2aW1yYyAoanVzdCBpbiBWTVMgcnVudGltZSkKLSBtYWtlX3Ztcy5tbXMgLSBIVUdFIG1vZGVsIGlzIHRoZSBkZWZhdWx0Ci0gW1RFU1RESVJdbWFrZV92bXMubW1zIGluY2x1ZGUgYXMgbWFueSB0ZXN0cyBwb3NzaWJsZQotIG1vZGlmeSB0ZXN0MzAgYW5kIHRlc3Q1NCBmb3IgVk1TCi0gZW5hYmxlIEZMT0FUIGZlYXR1cmUgaW4gVk1TIHBvcnQKLSBvc192bXMudHh0IHVwZGF0ZWQKClZlcnNpb24gNy4yICgyMDA4IEF1ZyA5KQotIFZDRiBmaWxlcyB3cml0ZSBjb3JyZWN0ZWQKLSBDVEFHUyA1LjcgaW5jbHVkZWQKLSBjb3JyZWN0ZWQgbWFrZV92bXMubW1zIChvbiBWQVggZ2F2ZSBzeW50YXggZXJyb3IpCgpWZXJzaW9uIDcuMSAoMjAwNyBKdW4gMTUpCi0gY3JlYXRlIFRBR1MgZmlsZSBmcm9tIG1lbnUKClZlcnNpb24gNyAoMjAwNiBNYXkgOCkKLSBJbXByb3ZlZCBsb3cgbGV2ZWwgY2hhciBpbnB1dCAoYWZmZWN0cyBqdXN0IGNvbnNvbGUgbW9kZSkKLSBGaXhlZCBwbHVnaW4gYnVnCi0gQ1RBR1MgNS42IGluY2x1ZGVkCgpWZXJzaW9uIDYuNCAoMjAwNSBPY3QgMTUpCi0gR1RLTElCIGFuZCBWaW0gYnVpbGQgb24gSUE2NAotIGNvbG9ycyBpbiB0ZXJtaW5hbCBtb2RlCi0gc3ludGF4IGhpZ2hsaWdodGluZyBpbiB0ZXJtaW5hbCBtb2RlCi0gd3JpdGUgcHJvYmxlbSBmaXhlZCAoZXh0cmEgQ1IpCi0gRVNDIGFuZCBFU0Mgc2VxdWVuY2UgcmVjb2duaXRpb24gaW4gdGVybWluYWwgbW9kZQotIG1ha2UgZmlsZSBjaGFuZ2VkIHRvIHN1cHBvcnQgbmV3IE1NUyB2ZXJzaW9uCi0gZW52IHZhcmlhYmxlIGV4cGFuc2lvbiBpbiBwYXRoIGNvcnJlY3RlZAotIHByaW50aW5nIHByb2JsZW1zIGNvcnJlY3RlZAotIGhlbHAgdGV4dCBhZGRlZCBmb3IgY2FzZSBpbnNlbnNpdGl2ZSBhcmd1bWVudHMKClZlcnNpb24gNi4zICgyMDA0IE1heSAxMCkKLSBJbXByb3ZlZCB2bXNfcmVhZCBmdW5jdGlvbgotIENUQUdTIHY1LjUuNCBpbmNsdWRlZAotIERvY3VtZW50YXRpb24gY29ycmVjdGVkIGFuZCB1cGRhdGVkCgpWZXJzaW9uIDYuMiAoMjAwMyBNYXkgNykKLSBDb3JyZWN0ZWQgVk1TIHN5c3RlbSBjYWxsIHJlc3VsdHMKLSBMb3cgbGV2ZWwgY2hhcmFjdGVyIGlucHV0IGlzIHJld3JpdHRlbgotIENvcnJlY3Rpb24gaW4gdGFnIGFuZCBxdWlja2ZpeCBoYW5kbGluZwotIEZpcnN0IEdUSyBidWlsZAotIE1ha2UgZmlsZSBjaGFuZ2VzCiAgICAtIEdUSyBmZWF0dXJlIGFkZGVkCiAgICAtIERlZmluZSBmb3IgT0xEX1ZNUwogICAgLSBPcGVuVk1TIHZlcnNpb24gNi4yIG9yIG9sZGVyCi0gRG9jdW1lbnRhdGlvbiB1cGRhdGVkIHdpdGggR1RLIGZlYXR1cmVzCi0gQ1RBR1MgdjUuNSBpbmNsdWRlZAotIFZNUyBWSU0gdHV0b3IgY3JlYXRlZAoKVmVyc2lvbiA2LjEgKDIwMDIgTWFyIDI1KQotIFRDTCBpbml0X3RjbCgpIHByb2JsZW0gZml4ZWQKLSBDVEFHUyB2NS40IGluY2x1ZGVkCi0gR05VIHRvb2xzIGJpbmFyaWVzIGZvciBPcGVuVk1TCi0gTWFrZSBmaWxlIGNoYW5nZXMKICAgIC0gUEVSTCwgUFlUSE9OIGFuZCBUQ0wgc3VwcG9ydCBpbXByb3ZlZAogICAgLSBJbnN0YWxsVk1TLnR4dCBoYXMgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBIT1dUTyBidWlsZAotIFZNUy9Vbml4IGZpbGUgaGFuZGxpbmcgcmV3cml0dGVuCi0gTWlub3IgY2FzdGluZyBhbmQgYnVnIGZpeGVzCgpWZXJzaW9uIDYuMCAoMjAwMSBTZXAgMjgpCi0gVW5peCBhbmQgVk1TIGNvZGUgaGFzIGJlZW4gbWVyZ2VkCgktIHNlcGFyYXRlZCAicmVhbGx5IiBWTVMgcmVsYXRlZCBjb2RlCgktIGluY2x1ZGVkIGFsbCBwb3NzaWJsZSBVbml4IGZ1bmN0aW9uYWxpdHkKCS0gc2ltcGxpZmllZCBvciBkZWxldGVkIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzCgktIG1ha2VmaWxlIE1BS0VfVk1TLk1NUyByZXZpZXdlZAotIG1lbnUgY2hhbmdlcyAoZml4ZWQgcHJpbnRpbmcsIENUQUdTIGFuZCBYWEQgdXNhZ2UpCi0gZml4ZWQgdmFyaWFibGUgUk1TIHJlY29yZCBmb3JtYXQgaGFuZGxpbmcgYW5vbWFseQotIGNvcnJlY3RlZCBzeW50YXgsIGZ0cGx1Z2luIGV0YyBmaWxlcyBsb2FkCi0gY2hhbmdlZCBleHBhbmRfd2lsZGNhcmRzIGFuZCBleHBhbmRwYXRoIGZ1bmN0aW9ucyB0byB3b3JrIG1vcmUgZ2VuZXJhbAotIGNyZWF0ZWQgT1NfVk1TX0ZJTFRFUi5DT00gLSBERUNDLT5WQVhDIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlIGNvbnZlcnQKICBzY3JpcHQuCi0gSW1wcm92ZWQgY29kZSdzIFZBWEMgYW5kIG5ldyBERUNDIGNvbXBpbGVycyBjb21wYXRpYmlsaXR5Ci0gY2hhbmdlZCBxdWlja2ZpeCBwYXJhbWV0ZXJzOgoJLSBlcnJvcm1lc3NhZ2UgZm9ybWF0IHRvIHN1aXRlIERFQ0MKCS0gc2VhcmNoLCBtYWtlIGFuZCBvdGhlciBjb21tYW5kcyB0byBzdWl0ZSBWTVMgc3lzdGVtCi0gdXBkYXRlZCBhbmQgcmVuYW1lZCBNTVMgbWFrZSBmaWxlcyBmb3IgVmltIGFuZCBDVEFHUy4KLSBDVEFHUyBoYXMgYmVlbiByZW1vdmVkIGZyb20gc291cmNlIGRpc3RyaWJ1dGlvbiBvZiBWaW0gYnV0IGl0IHdpbGwgcmVtYWluCiAgaW4gT3BlblZNUyBiaW5hcnkgZGlzdHJpYnV0aW9ucy4KLSBzaW1wbGlmaWVkIGJ1aWxkL2NvbmZpZ3VyYXRpb24gcHJvY2VkdXJlCi0gY3JlYXRlZCBJTlNUQUxMdm1zLnR4dCAtIGRldGFpbGVkIGNvbXBpbGluZyBpbnN0cnVjdGlvbnMgdW5kZXIgVk1TLgotIHVwZGF0ZWQgdGVzdCBzY3JpcHRzLgoKVmVyc2lvbiA1LjggKDIwMDEgSnVuIDEpCi0gT1NfVk1TLlRYVCB1cGRhdGVkIHdpdGggbmV3IGZlYXR1cmVzLgotIG90aGVyIG1pbm9yIGZpeGVzLgotIGRvY3VtZW50YXRpb24gdXBkYXRlZAotIHRoaXMgdmVyc2lvbiBoYWQgYmVlbiB0ZXN0ZWQgbXVjaCBtb3JlIHRoYW4gYW55IG90aGVyIE9wZW5WTVMgdmVyc2lvbgogIGVhcmxpZXIKClZlcnNpb24gNS43ICgyMDAwIEp1biAyNCkKLSBOZXcgQ1RBR1MgdjUuMCBpbiBkaXN0cmlidXRpb24KLSBEb2N1bWVudGF0aW9uIHVwZGF0ZWQKClZlcnNpb24gNS42ICgyMDAwIEphbiAxNykKLSBWTVMgZmlsZW5hbWUgcmVsYXRlZCBjaGFuZ2VzOgoJLSB2ZXJzaW9uIGhhbmRsaW5nIChvcGVuIGV2ZXJ5dGhpbmcsIHNhdmUgdG8gbmV3IHZlcnNpb24pCgktIGNvcnJlY3QgZmlsZSBleHRlbnNpb24gbWF0Y2hpbmcgZm9yIHN5bnRheCAodmVyc2lvbiBwcm9ibGVtKQoJLSBoYW5kbGUgPCw+IGNoYXJhY3RlcnMgYW5kIHBhc3N3b3JkcyBpbiBkaXJlY3RvcnkgZGVmaW5pdGlvbgoJLSBoYW5kbGUgaW50ZXJub2RlL3JlbW90ZSBpbnZvY2F0aW9uIGFuZCBlZGl0aW5nIHdpdGggcGFzc3dvcmRzCgktIE9wZW5WTVMgZmlsZXMgd2lsbCBiZSB0cmVhdGVkIGNhc2UgaW5zZW5zaXRpdmUgZnJvbSBub3cKCS0gY29ycmVjdGVkIHJlc3BvbnNlIG9mIGV4cGFuZCgiJTouIikgZXRjIHBhdGggcmVsYXRlZCBmdW5jdGlvbnMKCShpbiBvbmUgd29yZDogVk1TIGRpcmVjdG9yeSBoYW5kbGluZyBpbnRlcm5hbGx5KQotIHZlcnNpb24gY29tbWFuZAoJLSBjb3JyZWN0ZWQgKCssLSkgaW5mb3JtYXRpb24gZGF0YQoJLSBhZGRlZCBjb21waWxlciBhbmQgT1MgdmVyc2lvbgoJLSBhZGRlZCB1c2VyIGFuZCBob3N0IGluZm9ybWF0aW9uCgktIHJlc29sdmluZyAkVklNIGFuZCAkVklNUlVOVElNRSBsb2dpY2FscwotIFZNUyBwb3J0IGlzIGluIE1BWF9GRUFUIChtYXhpbXVtIGZlYXR1cmVzKSBjbHViIHdpdGggVW5peCwgV2luMzIgYW5kIE9TLzIuCgktIGVuYWJsZWQgZmFyc2ksIHJpZ2h0bGVmdCBldGMuIGZlYXR1cmVzCgktIHVuZG8gbGV2ZWwgcmFpc2VkIHVwIHRvIDEwMDAKLSBVcGRhdGVkIE9TX1ZNUy5NTVMgZmlsZS4KCS0gbWF4aW11bSBmZWF0dXJlcyBPTiBpcyBkZWZhdWx0CgktIFZpbSBpcyBjb21waWxhYmxlIHdpdGggK3BlcmwsICtweXRob24gYW5kICt0Y2wgZmVhdHVyZXMuCgktIGltcHJvdmVkIE1NSyBjb21wYXRpYmlsaXR5Ci0gQ3JlYXRlZCBNQUtFRklMRV9WTVMuTU1TLCBtYWtlZmlsZSBmb3IgdGVzdGluZyBWaW0gZHVyaW5nIGRldmVsb3BtZW50LgotIERlZmluZWQgREVDIHRlcm1pbmFsIFZUMzIwCgktIGNvbXBhdGliaWxpdHkgZm9yIFZUMyowLCBWVDIqMCBhbmQgVlQxKjAgLSBBTlNJIHRlcm1pbmFscwoJICBiYWNrd2FyZHMsIGJ1dCBub3QgVlQzNDAgYW5kIG5ld2VyIHdpdGggY29sb3VyIGNhcGFiaWxpdHkuCgktIFZUMzIwIGlzIGRlZmF1bHQgdGVybWluYWwgZm9yIE9wZW5WTVMKCS0gdGhlc2UgbmV3IHRlcm1pbmFscyBhcmUgYWxzbyBmYXN0IHR0eXMgKGRlZmF1bHQgZm9yIE9wZW5WTVMpLgoJLSBhbGxvd2VkIGRlY19tb3VzZSB0dHltCi0gVXBkYXRlZCBmaWxlcyB2aW1yYyBhbmQgZ3ZpbXJjIHdpdGggVk1TIHNwZWNpZmljIHN1Z2dlc3Rpb25zLgotIE9TX1ZNUy5UWFQgdXBkYXRlZCB3aXRoIG5ldyBmZWF0dXJlcy4KClZlcnNpb24gNS41ICgxOTk5IERlYyAzKQotIFBvcHVwIG1lbnUgbGluZSBjcmFzaCBjb3JyZWN0ZWQuCi0gSGFuZGxlIGZ1bGwgZmlsZSBuYW1lcyB3aXRoIHZlcnNpb24gbnVtYmVycy4KLSBEaXJlY3RvcnkgaGFuZGxpbmcgKENEIGNvbW1hbmQgZXRjLikKLSBDb3JyZWN0ZWQgZmlsZSBuYW1lIGNvbnZlcnNpb24gVk1TIHRvIFVuaXggYW5kIHYudi4KLSBDb3JyZWN0IHJlc3BvbnNlIG9mIGV4cGFuZCB3aWxkY2FyZHMKLSBSZWNvdmVyeSBpcyB3b3JraW5nIGZyb20gdGhpcyB2ZXJzaW9uIHVuZGVyIFZNUyBhcyB3ZWxsLgotIEltcHJvdmVkIHRlcm1pbmFsIGFuZCBzaWduYWwgaGFuZGluZy4KLSBJbXByb3ZlZCBPU19WTVMuVFhUCgpWZXJzaW9uIDUuNCAoMTk5OSBTZXAgOSkKLSBDdXQgYW5kIHBhc3RlIG1pc21hdGNoIGNvcnJlY3RlZC4KLSBNb3RpZiBkaXJlY3RvcmllcyBkdXJpbmcgb3BlbiBhbmQgc2F2ZSBhcmUgY29ycmVjdGVkLgoKVmVyc2lvbiA1LjMgKDE5OTggT2N0IDEyKQotIE1pbm9yIGNoYW5nZXMgaW4gdGhlIGNvZGUKLSBTdGFuZGFyZCBkaXN0cmlidXRpb24gd2l0aCArR1VJIG9wdGlvbgoKVmVyc2lvbiA1LjEgKDE5OTggQXByIDIxKQotIFN5bnRheCBhbmQgREVDIEMgY2hhbmdlcyBpbiB0aGUgY29kZQotIEZpeGluZyBwcm9ibGVtcyB3aXRoIHRoZSAvZG9jIHN1YmRpcmVjdG9yeQotIEltcHJvdmUgT1NfVk1TLk1NUwoKVmVyc2lvbiA0LjUgKDE5OTYgRGVjIDE2KQotIEZpcnN0IFZNUyBwb3J0IGJ5IEhlbmsgRWxiZXJzIDxoZW5rQHhzNGFsbC5ubD4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMTAuIEF1dGhvcnMJCQkJCQkqdm1zLWF1dGhvcnMqCgpPcGVuVk1TIGRvY3VtZW50YXRpb24gYW5kIGV4ZWN1dGFibGVzIGFyZSBtYWludGFpbmVkIGJ5Ogpab2x0YW4gQXJwYWRmZnkgPGFycGFkZmZ5QHBvbGFyaG9tZS5jb20+Ck9wZW5WTVMgVmltIHBhZ2U6IGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vCgpUaGlzIGRvY3VtZW50IHVzZXMgcGFydHMgYW5kIHJlbWFya3MgZnJvbSBlYXJsaWVyIGF1dGhvcnMgYW5kIGNvbnRyaWJ1dG9ycwpvZiBPU19WTVMuVFhUOgoJQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxjZWNAZ3J5cGhvbi5nc2ZjLm5hc2EuZ292PgoJQnJ1Y2UgSHVuc2FrZXIgPEJOSHVuc2FrZXJAY2hxLmJ5dS5lZHU+CglTYW5kb3IgS29wYW55aSA8c2FuZG9yLmtvcGFueWlAbWFpbGJveC5odT4KCiB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6Cg==