Km9zX3Ztcy50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjRiLiAgTGFzdCBjaGFuZ2U6IDIwMTEgQXVnIDE0CgoKCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCgoKCQkJCQkJCSpWTVMqICp2bXMqClRoaXMgZmlsZSBjb250YWlucyB0aGUgcGFydGljdWxhcml0aWVzIGZvciB0aGUgVk1TIHZlcnNpb24gb2YgVmltLgpZb3UgY2FuIHJlYWNoIHRoaXMgaW5mb3JtYXRpb24gZmlsZSBieSB0eXBpbmcgOmhlbHAgVk1TIGluIFZpbSBjb21tYW5kCnByb21wdC4KCiAxLiBHZXR0aW5nIHN0YXJ0ZWQJfHZtcy1zdGFydGVkfAogMi4gRG93bmxvYWQgZmlsZXMJfHZtcy1kb3dubG9hZHwKIDMuIENvbXBpbGluZwkJfHZtcy1jb21waWxpbmd8CiA0LiBQcm9ibGVtcwkJfHZtcy1wcm9ibGVtc3wKIDUuIERlcGxveQkJfHZtcy1kZXBsb3l8CiA2LiBQcmFjdGljYWwgdXNhZ2UJfHZtcy11c2FnZXwKIDcuIEdVSSBtb2RlIHF1ZXN0aW9ucwl8dm1zLWd1aXwKIDguIFVzZWZ1bCBub3Rlcwl8dm1zLW5vdGVzfAogOS4gVk1TIHJlbGF0ZWQgY2hhbmdlcwl8dm1zLWNoYW5nZXN8CjEwLiBBdXRob3JzCQl8dm1zLWF1dGhvcnN8Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjEuIEdldHRpbmcgc3RhcnRlZAkJCQkJKnZtcy1zdGFydGVkKgoKVmltIChWaSBJTXByb3ZlZCkgaXMgYSB2aS1jb21wYXRpYmxlIHRleHQgZWRpdG9yIHRoYXQgcnVucyBvbiBuZWFybHkgZXZlcnkKb3BlcmF0aW5nIHN5c3RlbSBrbm93biB0byBodW1hbml0eS4gIE5vdyB1c2UgVmltIG9uIE9wZW5WTVMgdG9vLCBpbiBjaGFyYWN0ZXIKb3IgWC9Nb3RpZiBlbnZpcm9ubWVudC4gIEl0IGlzIGZ1bGx5IGZlYXR1cmVkIGFuZCBhYnNvbHV0ZWx5IGNvbXBhdGlibGUgd2l0aApWaW0gb24gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjIuIERvd25sb2FkIGZpbGVzCQkJCQkqdm1zLWRvd25sb2FkKgoKWW91IGNhbiBkb3dubG9hZCB0aGUgVmltIHNvdXJjZSBjb2RlIGJ5IGZ0cCBmcm9tIHRoZSBvZmZpY2lhbCBWaW0gc2l0ZToKCWZ0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vCk9yIHVzZSBvbmUgb2YgdGhlIG1pcnJvcnM6CglmdHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL01JUlJPUlMKCllvdSBjYW4gZG93bmxvYWQgcHJlY29tcGlsZWQgZXhlY3V0YWJsZXMgZnJvbToKCWh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vCglmdHA6Ly9mdHAucG9sYXJob21lLmNvbS9wdWIvdmltLwoKVG8gdXNlIHRoZSBwcmVjb21waWxlZCBiaW5hcnkgdmVyc2lvbiwgeW91IG5lZWQgb25lIG9mIHRoZXNlIGFyY2hpdmVzOgoKICB2aW0tWFgtZXhlLWlhNjQtZ3VpLnppcCAgICAgICBJQTY0IEdVSS9Nb3RpZiBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtaWE2NC1ndGsuemlwICAgICAgIElBNjQgR1VJL0dUSyBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtaWE2NC10ZXJtLnppcCAgICAgIElBNjQgY29uc29sZSBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtYXhwLWd1aS56aXAJQWxwaGEgR1VJL01vdGlmIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1heHAtZ3RrLnppcAlBbHBoYSBHVUkvR1RLIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1heHAtdGVybS56aXAgICAgICAgQWxwaGEgY29uc29sZSBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtdmF4LWd1aS56aXAJVkFYIEdVSSBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtdmF4LXRlcm0uemlwICAgICAgIFZBWCBjb25zb2xlIGV4ZWN1dGFibGVzCgphbmQgb2YgY291cnNlIChvcHRpb25hbCkKICB2aW0tWFgtcnVudGltZS56aXAJCXJ1bnRpbWUgZmlsZXMKClRoZSBiaW5hcnkgYXJjaGl2ZXMgY29udGFpbjogdmltLmV4ZSwgY3RhZ3MuZXhlLCB4eGQuZXhlIGZpbGVzLgoKRm9yIEdUSyBleGVjdXRhYmxlcyB5b3Ugd2lsbCBuZWVkIEdUS0xJQiB0aGF0IGlzIGF2YWlsYWJsZSBmb3IKQWxwaGEgYW5kIElBNjQgcGxhdGZvcm0uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjMuIENvbXBpbGluZwkJCQkJCSp2bXMtY29tcGlsaW5nKgoKU2VlIHRoZSBmaWxlIFsuU1JDXUlOU1RBTExWTVMuVFhULgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo0LiBQcm9ibGVtcwkJCQkJCSp2bXMtcHJvYmxlbXMqCgpUaGUgY29kZSBoYXMgYmVlbiB0ZXN0ZWQgdW5kZXIgT3BlbiBWTVMgNi4yIC0gOC4yIG9uIEFscGhhLCBWQVggYW5kIElBNjQKcGxhdGZvcm1zIHdpdGggdGhlIERFQyBDIGNvbXBpbGVyLiAgSXQgc2hvdWxkIHdvcmsgd2l0aG91dCBiaWcgcHJvYmxlbXMuCklmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgc29tZSBpbmNsdWRlIGxpYnJhcmllcyB5b3UgY2FuIHR1bmUgdXAgaW4KT1NfVk1TX0NPTkYuSCBmaWxlLgoKSWYgeW91IGRlY2lkZWQgdG8gYnVpbGQgVmltIHdpdGggK3BlcmwsICtweXRob24sIGV0Yy4gb3B0aW9ucywgZmlyc3QgeW91IG5lZWQKdG8gZG93bmxvYWQgT3BlblZNUyBkaXN0cmlidXRpb25zIG9mIFBlcmwgYW5kIFB5dGhvbi4gIEJ1aWxkIGFuZCBkZXBsb3kgdGhlCmxpYnJhcmllcyBhbmQgY2hhbmdlIGFkZXF1YXRlIGxpbmVzIGluIE1BS0VfVk1TLk1NUyBmaWxlLiAgVGhlcmUgc2hvdWxkIG5vdCBiZQphIHByb2JsZW0gZnJvbSBWaW0gc2lkZS4KCkFsc28gR1RLLCBYUE0gbGlicmFyeSBwYXRocyBzaG91bGQgYmUgY29uZmlndXJlZCBpbiBNQUtFX1ZNUy5NTVMKCk5vdGU6IFVuZGVyIFZBWCBpdCBzaG91bGQgd29yayB3aXRoIHRoZSBERUMgQyBjb21waWxlciB3aXRob3V0IHByb2JsZW1zLiAgVGhlClZBWCBDIGNvbXBpbGVyIGlzIG5vdCBmdWxseSBBTlNJIEMgY29tcGF0aWJsZSBpbiBwcmUtcHJvY2Vzc29yIGRpcmVjdGl2ZXMKc2VtYW50aWNzLCB0aGVyZWZvcmUgeW91IGhhdmUgdG8gdXNlIGEgY29udmVydGVyIHByb2dyYW0gdGhhdCB3aWxsIGRvIHRoZSBsaW9uCnBhcnQgb2YgdGhlIGpvYi4gIEZvciBkZXRhaWxlZCBpbnN0cnVjdGlvbnMgcmVhZCBmaWxlIElOU1RBTEx2bXMudHh0CgpNTVNfVklNLkVYRSBpcyBidWlsZCB0b2dldGhlciB3aXRoIFZJTS5FWEUsIGJ1dCBmb3IgWFhELkVYRSB5b3Ugc2hvdWxkCmNoYW5nZSB0byBhIHN1YmRpcmVjdG9yeSBhbmQgYnVpbGQgaXQgc2VwYXJhdGVseS4KCkNUQUdTIGlzIG5vdCBwYXJ0IG9mIHRoZSBWaW0gc291cmNlIGRpc3RyaWJ1dGlvbiBhbnltb3JlLCBob3dldmVyIHRoZSBPcGVuVk1TCnNwZWNpZmljIHNvdXJjZSBtaWdodCBjb250YWluIENUQUdTIHNvdXJjZSBmaWxlcyBhcyBkZXNjcmliZWQgYWJvdmUuCllvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENUQUdTIG9uIFZNUyBhdApodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vY3RhZ3MvCgpBZHZhbmNlZCB1c2VycyBtYXkgdHJ5IHNvbWUgYWNyb2JhdGljcyBpbiBGRUFUVVJFLkggZmlsZSBhcyB3ZWxsLgoKSXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoICt4Zm9udHNldCAreGltIG9wdGlvbnMgdG9vLCBidXQgdGhlbiB5b3UgaGF2ZQp0byBzZXQgdXAgR1VJIGZvbnRzIGV0Yy4gY29ycmVjdGx5LiAgU2VlIDpoZWxwIHhpbSBmcm9tIFZpbSBjb21tYW5kIHByb21wdC4KCllvdSBtYXkgd2FudCB0byB1c2UgR1VJIHdpdGggR1RLIGljb25zLCB0aGVuIHlvdSBoYXZlIHRvIGRvd25sb2FkIGFuZCBpbnN0YWxsCkdUSyBmb3IgT3BlblZNUyBvciBhdCBsZWFzdCBydW50aW1lIHNoYXJlYWJsZSBpbWFnZXMgLSBMSUJHVEsgZnJvbQpwb2xhcmhvbWUuY29tCgpGb3IgbW9yZSBhZHZhbmNlZCBxdWVzdGlvbnMsIHBsZWFzZSBzZW5kIHlvdXIgcHJvYmxlbSB0byBWaW0gb24gVk1TIG1haWxpbmcKbGlzdCA8dmltLXZtc0Bwb2xhcmhvbWUuY29tPgpNb3JlIGFib3V0IHRoZSB2aW0tdm1zIGxpc3QgY2FuIGJlIGZvdW5kIGF0OgpodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vbWFpbG1hbi9saXN0aW5mby92aW0tdm1zCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjUuIERlcGxveQkJCQkJCSp2bXMtZGVwbG95KgoKVmltIHVzZXMgYSBzcGVjaWFsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgZG9jdW1lbnQgYW5kIHJ1bnRpbWUgZmlsZXM6CgogICB2aW0gKG9yIHdoZXJldmVyKQogICAgfC0gdG1wCiAgICB8LSB2aW01NwogICAgfC0tLS0tIGRvYwogICAgfC0tLS0tIHN5bnRheAogICAgfC0gdmltNjIKICAgIHwtLS0tLSBkb2MKICAgIHwtLS0tLSBzeW50YXgKICAgIHwtIHZpbTY0CiAgICB8LS0tLS0gZG9jCiAgICB8LS0tLS0gc3ludGF4CiAgICB2aW1yYyAgICAoc3lzdGVtIHJjIGZpbGVzKQogICAgZ3ZpbXJjCgpVc2U6ID4KCglkZWZpbmUvbm9sb2cgVklNCWRldmljZTpbcGF0aC52aW1dCglkZWZpbmUvbm9sb2cgVklNUlVOVElNRSBkZXZpY2U6W3BhdGgudmltLnZpbTYwXQoJZGVmaW5lL25vbG9nIFRNUAlkZXZpY2U6W3BhdGgudG1wXQoKVG8gZ2V0IHZpbS5leGUgdG8gZmluZCBpdHMgZG9jdW1lbnQsIGZpbGV0eXBlLCBhbmQgc3ludGF4IGZpbGVzLCBhbmQgdG8Kc3BlY2lmeSBhIGRpcmVjdG9yeSB3aGVyZSB0ZW1wb3JhcnkgZmlsZXMgd2lsbCBiZSBsb2NhdGVkLiAgQ29weSB0aGUgInJ1bnRpbWUiCnN1YmRpcmVjdG9yeSBvZiB0aGUgVmltIGRpc3RyaWJ1dGlvbiB0byB2aW1ydW50aW1lLgoKTG9naWNhbHMgJFZJTVJVTlRJTUUgYW5kICRUTVAgYXJlIG9wdGlvbmFsLgoKSWYgJFZJTVJVTlRJTUUgaXMgbm90IHNldCwgVmltIHdpbGwgZ3Vlc3MgYW5kIHRyeSB0byBzZXQgdXAgYXV0b21hdGljYWxseS4KUmVhZCBtb3JlIGFib3V0IGl0IGF0IDpoZWxwIHJ1bnRpbWUKCklmICRUTVAgaXMgbm90IHNldCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHNvbWUgZnVuY3Rpb25zIGFzIENUQUdTLApYWEQsIHByaW50aW5nIGV0Yy4gdGhhdCB1c2UgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3Igbm9ybWFsIG9wZXJhdGlvbi4KVGhlICRUTVAgZGlyZWN0b3J5IHNob3VsZCBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUgYnkgdGhlIHVzZXIocykuClRoZSBlYXNpZXN0IHdheSB0byBzZXQgdXAgJFRNUCBpcyB0byBkZWZpbmUgYSBsb2dpY2FsOiA+CgoJZGVmaW5lL25vbG9nIFRNUCBTWVMkU0NSQVRDSApvciBhczogPgoJZGVmaW5lL25vbG9nIFRNUCBTWVMkTE9HSU4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKNi4gUHJhY3RpY2FsIHVzYWdlCQkJCQkqdm1zLXVzYWdlKgoKVXN1YWxseSwgeW91IHdhbnQgdG8gcnVuIGp1c3Qgb25lIHZlcnNpb24gb2YgVmltIG9uIHlvdXIgc3lzdGVtLCB0aGVyZWZvcmUKaXQgaXMgZW5vdWdoIHRvIGRlZGljYXRlIG9uZSBkaXJlY3RvcnkgZm9yIFZpbS4KQ29weSB0aGUgd2hvbGUgVmltIHJ1bnRpbWUgZGlyZWN0b3J5IHN0cnVjdHVyZSB0byB0aGUgZGVwbG95bWVudCBwb3NpdGlvbi4KQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciBMT0dJTi5DT00gKGluIFNZUyRMT0dJTiBkaXJlY3RvcnkpLgpTZXQgdXAgdGhlIGxvZ2ljYWwgJFZJTSBhczogPgoKCSQgZGVmaW5lIFZJTSBkZXZpY2U6PHBhdGg+CgpTZXQgdXAgc29tZSBzeW1ib2xzOiA+CgoJJCAhIHZpIHN0YXJ0cyBWaW0gaW4gY2hyLiBtb2RlLgoJJCB2aSptICA6PT0gbWNyIFZJTTpWSU0uRVhFCgoJJCAhZ3ZpIHN0YXJ0cyBWaW0gaW4gR1VJIG1vZGUuCgkkIGd2KmltIDo9PSBzcGF3bi9ub3dhaXQgbWNyIFZJTTpWSU0uRVhFIC1nCgpQbGVhc2UsIGNoZWNrIHRoZSBub3RlcyBmb3IgY3VzdG9taXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBzeW1ib2xzLgoKWW91IG1heSB3YW50IHRvIGNyZWF0ZSAudmltcmMgYW5kIC5ndmltcmMgZmlsZXMgaW4geW91ciBob21lIGRpcmVjdG9yeQooU1lTJExPR0lOKSB0byBvdmVyd3JpdGUgZGVmYXVsdCBzZXR0aW5ncy4KClRoZSBlYXNpZXN0IHdheSBpcyBqdXN0IHJlbmFtZSBleGFtcGxlIGZpbGVzLiAgWW91IG1heSBsZWF2ZSB0aGUgbWVudSBmaWxlCihNRU5VLlZJTSkgYW5kIGZpbGVzIHZpbXJjIGFuZCBndmltcmMgaW4gdGhlIG9yaWdpbmFsICRWSU0gZGlyZWN0b3J5LiAgSXQgd2lsbApiZSB0aGUgZGVmYXVsdCBzZXR1cCBmb3IgYWxsIHVzZXJzLCBhbmQgZm9yIHVzZXJzIGl0IGlzIGVub3VnaCB0byBqdXN0IGhhdmUKdGhlaXIgb3duIGFkZGl0aW9ucyBvciByZXNldHRpbmcgaW4gdGhlaXIgaG9tZSBkaXJlY3RvcnkgaW4gZmlsZXMgLnZpbXJjIGFuZAouZ3ZpbXJjLiAgSXQgc2hvdWxkIHdvcmsgd2l0aG91dCBwcm9ibGVtcy4KCk5vdGU6IFJlbWVtYmVyLCBzeXN0ZW0gcmMgZmlsZXMgKGRlZmF1bHQgZm9yIGFsbCB1c2VycykgZG9uJ3QgaGF2ZSBhIGxlYWRpbmcKIi4iLiAgU28sIHN5c3RlbSByYyBmaWxlcyBhcmU6ID4KCgkkVklNOnZpbXJjCgkkVklNOmd2aW1yYwoJJFZJTTptZW51LnZpbQoKYW5kIHVzZXIgY3VzdG9taXplZCByYyBmaWxlcyBhcmU6ID4KCglzeXMkbG9naW46LnZpbXJjCglzeXMkbG9naW46Lmd2aW1yYwoKWW91IGNhbiBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgaXMgYXQgdGhlIHJpZ2h0IHBsYWNlIHdpdGggdGhlIDp2ZXJzaW9uIGNvbW1hbmQuCgpFeGFtcGxlIExPR0lOLkNPTTogPgoKCSQgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLlZJTV0KCSQgdmkqbSA6PT0gbWNyIFZJTTpWSU0uRVhFCgkkIGd2KmltOj09IHNwYXduL25vd2FpdC9pbnB1dD1OTEEwIG1jciBWSU06VklNLkVYRSAtZyAtR0VPTUVUUlkgODB4NDAKCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9MTkyLjE2OC41LjIyMy90cmFucz10Y3BpcAoKTm90ZTogVGhpcyBzZXQtdXAgc2hvdWxkIGJlIGVub3VnaCwgaWYgeW91IGFyZSB3b3JraW5nIG9uIGEgc3RhbmRhbG9uZSBzZXJ2ZXIgb3IKY2x1c3RlcmVkIGVudmlyb25tZW50LCBidXQgaWYgeW91IHdhbnQgdG8gdXNlIFZpbSBhcyBhbiBpbnRlcm5vZGUgZWRpdG9yIGluCkRFQ05FVCBlbnZpcm9ubWVudCwgaXQgd2lsbCBzYXRpc2Z5IGFzIHdlbGwuCllvdSBqdXN0IGhhdmUgdG8gZGVmaW5lIHRoZSAid2hvbGUiIHBhdGg6ID4KCgkkIGRlZmluZSBWSU0gIjxzZXJ2ZXJfbmFtZT5bIiJ1c2VyIHBhc3N3b3JkIiJdOjpkZXZpY2U6PHBhdGg+IgoJJCB2aSptIDo9PSAibWNyIFZJTTpWSU0uRVhFIgoKRm9yIGV4YW1wbGU6ID4KCgkkIGRlZmluZSBWSU0gIlBMVVRPOjpSRjEwOltVVElMLlZJTV0iCgkkIGRlZmluZSBWSU0gIlBMVVRPIiJaQVkgbXlwYXNzIiI6OlJGMTA6W1VUSUwuVklNXSIgISBpZiBwYXNzd2QgcmVxdWlyZWQKCllvdSBjYW4gYWxzbyB1c2UgdGhlICRWSU1SVU5USU1FIGxvZ2ljYWwgdG8gcG9pbnQgdG8gdGhlIHByb3BlciB2ZXJzaW9uIG9mIFZpbQppZiB5b3UgaGF2ZSBpbnN0YWxsZWQgbW9yZSB2ZXJzaW9ucyBhdCB0aGUgc2FtZSB0aW1lLiAgSWYgJFZJTVJVTlRJTUUgaXMgbm90CmRlZmluZWQgVmltIHdpbGwgYm9ycm93IGl0cyB2YWx1ZSBmcm9tIHRoZSAkVklNIGxvZ2ljYWwuICBZb3UgY2FuIGZpbmQgbW9yZQppbmZvcm1hdGlvbiBhYm91dCB0aGUgJFZJTVJVTlRJTUUgbG9naWNhbCBieSB0eXBpbmcgOmhlbHAgcnVudGltZSBhcyBhIFZpbQpjb21tYW5kLgoKU3lzdGVtIGFkbWluaXN0cmF0b3JzIG1pZ2h0IHdhbnQgdG8gc2V0IHVwIGEgc3lzdGVtIHdpZGUgVmltIGluc3RhbGxhdGlvbiwKdGhlbiBhZGQgdG8gdGhlIFNZUyRTVEFSVFVQOlNZTE9HSUNBTFMuQ09NID4KCgkkIGRlZmluZS9ub2xvZy9zeXMgVklNIGRldmljZTo8cGF0aD4KCSQgZGVmaW5lL25vbG9nL3N5cyBUTVAgU1lTJFNDUkFUQ0gKCkFuZCB0byB0aGUgU1lTJFNUQVJUVVA6U1lMT0dJTi5DT00gPgoKCSQgdmkqbSA6PT0gbWNyIFZJTTpWSU0uRVhFCgkkIGd2KmltOj09IHNwYXduL25vd2FpdC9pbnB1dD1OTEEwIG1jciBWSU06VklNLkVYRSAtZyAtR0VPTUVUUlkgODB4NDAKCgpJdCB3aWxsIHNldCB1cCBhIG5vcm1hbCBWaW0gd29yayBlbnZpcm9ubWVudCBmb3IgZXZlcnkgdXNlciBvbiB0aGUgc3lzdGVtLgoKSU1QT1JUQU5UOiBWaW0gb24gT3BlblZNUyAoYW5kIG9uIG90aGVyIGNhc2UgaW5zZW5zaXRpdmUgc3lzdGVtKSBjb21tYW5kIGxpbmUKcGFyYW1ldGVycyBhcmUgYXNzdW1lZCB0byBiZSBsb3dlcmNhc2UuIEluIG9yZGVyIHRvIGluZGljYXRlIHRoYXQgYSBjb21tYW5kCmxpbmUgcGFyYW1ldGVyIGlzIHVwcGVyY2FzZSAiLyIgc2lnbiBtdXN0IGJlIHVzZWQuCgpFeGFtcGxlczoKICA+Cgl2aW0gLVIgIGZpbGVuYW1lICAhIG1lYW5zOiAtciBMaXN0IHN3YXAgZmlsZXMgYW5kIGV4aXQKCXZpbSAtL3IgZmlsZW5hbWUgICEgbWVhbnM6IC1SIFJlYWRvbmx5IG1vZGUgKGxpa2UgInZpZXciKQoJdmltIC11CTx2aW1yYz4gICAhIG1lYW5zOiAtdSBVc2UgPHZpbXJjPiBpbnN0ZWFkIG9mIGFueSAudmltcmMKCXZpbSAtL3UgPGd2aW1yYz4gICEgbWVhbnM6IC1VIFVzZSA8Z3ZpbXJjPiBpbnN0ZWFkIG9mIGFueSAuZ3ZpbXJjCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjcuIEdVSSBtb2RlIHF1ZXN0aW9ucwkJCQkJKnZtcy1ndWkqCgpPcGVuVk1TIGlzIGEgcmVhbCBtYWluZnJhbWUgT1MsIHRoZXJlZm9yZSBldmVuIGlmIGl0IGhhcyBhIEdVSSBjb25zb2xlLCBtb3N0Cm9mIHRoZSB1c2VycyBkbyBub3QgdXNlIGEgbmF0aXZlIFgvV2luZG93IGVudmlyb25tZW50IGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLgpJdCBpcyBub3QgcG9zc2libGUgdG8gc3RhcnQgVmltIGluIEdVSSBtb2RlICJqdXN0IGxpa2UgdGhhdCIuICBCdXQgYW55aG93IGl0CmlzIG5vdCB0b28gY29tcGxpY2F0ZWQgZWl0aGVyLgoKRmlyc3Qgb2YgYWxsOiB5b3Ugd2lsbCBuZWVkIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBidWlsdCB3aXRoIHRoZSBHVUkgZW5hYmxlZC4KClNlY29uZDogeW91IG5lZWQgdG8gaGF2ZSBpbnN0YWxsZWQgREVDVy9Nb3RpZiBvbiB5b3VyIFZNUyBzZXJ2ZXIsIG90aGVyd2lzZQp5b3Ugd2lsbCBnZXQgZXJyb3JzIHRoYXQgc29tZSBzaGFyZWFibGUgbGlicmFyaWVzIGFyZSBtaXNzaW5nLgoKVGhpcmQ6IElmIHlvdSBjaG9vc2UgdG8gcnVuIFZpbSB3aXRoIGV4dHJhIGZlYXR1cmVzIHN1Y2ggYXMgR1VJL0dUSyB0aGVuIHlvdQpuZWVkIGEgR1RLIGluc3RhbGxhdGlvbiB0b28gb3IgYXQgbGVhc3QgYSBHVEsgcnVudGltZSBlbnZpcm9ubWVudCAoTElCR1RLCmNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5wb2xhcmhvbWUuY29tL3ZpbS8pLgoKMSkgSWYgeW91IGFyZSB3b3JraW5nIG9uIHRoZSBWTVMgWC9Nb3RpZiBjb25zb2xlOgogICBTdGFydCBWaW0gd2l0aCB0aGUgY29tbWFuZDogPgoKCSQgbWMgZGV2aWNlOjxwYXRoPlZJTS5FWEUgLWcKPAogICBvciB0eXBlIDpndWkgYXMgYSBjb21tYW5kIHRvIHRoZSBWaW0gY29tbWFuZCBwcm9tcHQuICBGb3IgbW9yZSBpbmZvIDpoZWxwCiAgIGd1aQoKMikgSWYgeW91IGFyZSB3b3JraW5nIG9uIHNvbWUgb3RoZXIgWC9XaW5kb3cgZW52aXJvbm1lbnQgbGlrZSBVbml4IG9yIGEgcmVtb3RlCiAgIFggVk1TIGNvbnNvbGUuICBTZXQgdXAgZGlzcGxheSB0byB5b3VyIGhvc3Qgd2l0aDogPgoKCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9PHlvdXIgSVAgYWRkcmVzcz4vdHJhbnM9PHRyYW5zcG9ydC1uYW1lPgo8CiAgIGFuZCBzdGFydCBWaW0gYXMgaW4gcG9pbnQgMS4gIFlvdSBjYW4gZmluZCBtb3JlIGhlbHAgaW4gVk1TIGRvY3VtZW50YXRpb24gb3IKICAgdHlwZTogaGVscCBzZXQgZGlzcCBpbiBWTVMgcHJvbXB0LgogICBFeGFtcGxlczogPgoKCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9MTkyLjE2OC41LjE1OQkJICEgZGVmYXVsdCB0cmFucyBpcyBERUNuZXQKCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9MTkyLjE2OC41LjE1OS90cmFucz10Y3BpcCAhIFRDUC9JUCBuZXR3b3JrCgkkIHNldCBkaXNwL2NyZWF0ZS9ub2RlPTE5Mi4xNjguNS4xNTkvdHJhbnM9bG9jYWwgISBkaXNwbGF5IG9uIHRoZSBzYW1lIG5vZGUKCk5vdGU6IHlvdSBzaG91bGQgZGVmaW5lIGp1c3Qgb25lIG9mIHRoZXNlLgpGb3IgbW9yZSBpbmZvcm1hdGlvbiB0eXBlICRoZWxwIHNldCBkaXNwIGluIFZNUyBwcm9tcHQuCgozKSBBbm90aGVyIGVsZWdhbnQgc29sdXRpb24gaXMgWERNIGlmIHlvdSBoYXZlIGluc3RhbGxlZCBvbiBPcGVuVk1TIGJveC4KICAgSXQgaXMgcG9zc2libGUgdG8gd29yayBmcm9tIFhETSBjbGllbnQgYXMgZnJvbSBHVUkgY29uc29sZS4KCjQpIElmIHlvdSBhcmUgd29ya2luZyBvbiBNUy1XaW5kb3dzIG9yIHNvbWUgb3RoZXIgbm9uIFgvV2luZG93IGVudmlyb25tZW50CiAgIHlvdSBuZWVkIHRvIHNldCB1cCBvbmUgWCBzZXJ2ZXIgYW5kIHJ1biBWaW0gYXMgaW4gcG9pbnQgMi4KICAgRm9yIE1TLVdpbmRvd3MgdGhlcmUgYXJlIGF2YWlsYWJsZSBmcmVlIFggc2VydmVycyBhcyBNSVgsIE9tbmkgWCBldGMuLAogICBhcyB3ZWxsIGFzIGV4Y2VsbGVudCBjb21tZXJjaWFsIHByb2R1Y3RzIGFzIGVYY3Vyc2lvbiBvciBSZWZsZWN0aW9uWCB3aXRoCiAgIGJ1aWx0LWluIERFQyBzdXBwb3J0LgoKUGxlYXNlIG5vdGUsIHRoYXQgZXhlY3V0YWJsZXMgd2l0aG91dCBHVUkgYXJlIHNsaWdodGx5IGZhc3RlciBkdXJpbmcgc3RhcnR1cAp0aGFuIHdpdGggZW5hYmxlZCBHVUkgaW4gY2hhcmFjdGVyIG1vZGUuIFRoZXJlZm9yZSwgaWYgeW91IGRvIG5vdCB1c2UgR1VJCmZlYXR1cmVzLCBpdCBpcyB3b3J0aCB0byBjaG9vc2Ugbm9uIEdVSSBleGVjdXRhYmxlcy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKOC4gVXNlZnVsIG5vdGVzCQkJCQkJKnZtcy1ub3RlcyoKCjguMSBCYWNrc3BhY2UvZGVsZXRlCjguMiBGaWx0ZXJzCjguMyBWTVMgZmlsZSB2ZXJzaW9uIG51bWJlcnMKOC40IERpcmVjdG9yeSBjb252ZXJzaW9uCjguNSBSZW1vdGUgaG9zdCBpbnZvY2F0aW9uCjguNiBUZXJtaW5hbCBwcm9ibGVtcwo4LjcgSGV4LWVkaXRpbmcgYW5kIG90aGVyIGV4dGVybmFsIHRvb2xzCjguOCBTb3VyY2luZyB2aW1yYyBhbmQgZ3ZpbXJjCjguOSBQcmludGluZyBmcm9tIFZpbQo4LjEwIFNldHRpbmcgdXAgdGhlIHN5bWJvbHMKOC4xMSBkaWZmIGFuZCBvdGhlciBHTlUgcHJvZ3JhbXMKOC4xMiBkaWZmLW1vZGUKOC4xMyBBbGxvdyAnJCcgaW4gQyBrZXl3b3Jkcwo4LjE0IFZJTVRVVE9SIGZvciBiZWdpbm5lcnMKOC4xNSBTbG93IHN0YXJ0IGluIGNvbnNvbGUgbW9kZSBpc3N1ZQo4LjE2IENvbW1vbiBWSU0gZGlyZWN0b3J5IC0gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMKCjguMSBCYWNrc3BhY2UvZGVsZXRlCgpUaGVyZSBhcmUgYmFja3NwYWNlL2RlbGV0ZSBrZXkgaW5jb25zaXN0ZW5jaWVzIHdpdGggVk1TLgo6Zml4ZGVsIGRvZXNuJ3QgZG8gdGhlIHRyaWNrLCBidXQgdGhlIHNvbHV0aW9uIGlzOiA+CgoJOmlub3JlbWFwIF4/IF5ICQkiIGZvciB0ZXJtaW5hbCBtb2RlCgk6aW5vcmVtYXAgPERlbD4gXkgJIiBmb3IgZ3VpIG1vZGUKClJlYWQgbW9yZSBpbiBjaDogOC42IChUZXJtaW5hbCBwcm9ibGVtcykuCihCcnVjZSBIdW5zYWtlciA8Qk5IdW5zYWtlckBjaHEuYnl1LmVkdT4gVmltIDUuMykKCgo4LjIgRmlsdGVycwoKVmltIHN1cHBvcnRzIGZpbHRlcnMsIGkuZS4sIGlmIHlvdSBoYXZlIGEgc29ydCBwcm9ncmFtIHRoYXQgY2FuIGhhbmRsZQppbnB1dC9vdXRwdXQgcmVkaXJlY3Rpb24gbGlrZSBVbml4ICg8aW5maWxlID5vdXRmaWxlKSwgeW91IGNvdWxkIHVzZSA+CgoJOm1hcCBccyAwISdhcXNvcnQ8Q1I+CgooQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxjZWNAZ3J5cGhvbi5nc2ZjLm5hc2EuZ292PiBWaW0gNS40KQoKCjguMyBWTVMgZmlsZSB2ZXJzaW9uIG51bWJlcnMKClZpbSBpcyBzYXZpbmcgZmlsZXMgaW50byBhIG5ldyBmaWxlIHdpdGggdGhlIG5leHQgaGlnaGVyIGZpbGUgdmVyc2lvbgpudW1iZXIsIHRyeSB0aGVzZSBzZXR0aW5ncy4gPgoKCTpzZXQgbm9iYWNrdXAJICAgICAiIGRvZXMgbm90IGNyZWF0ZSAqLipfIGJhY2t1cCBmaWxlcwoJOnNldCBub3dyaXRlYmFja3VwICAgIiBkb2VzIG5vdCBoYXZlIGFueSBwdXJwb3NlIG9uIFZNUy4gIEl0J3MgdGhlCgkJCSAgICAgIiBkZWZhdWx0LgoKUmVjb3ZlcnkgaXMgd29ya2luZyBwZXJmZWN0bHkgYXMgd2VsbCBmcm9tIHRoZSBkZWZhdWx0IHN3YXAgZmlsZS4KUmVhZCBtb3JlIHdpdGggOmhlbHAgc3dhcGZpbGUKCihDbGF1ZGUgTWFyaW5pZXIgPENsYXVkZU1hcmluaWVyQHh3YXZlc29sdXRpb25zLmNvbT4gVmltIDUuNSwgWm9sdGFuIEFycGFkZmZ5ClZpbSA1LjYpCgoKOC40IERpcmVjdG9yeSBjb252ZXJzaW9uCgpWaW0gd2lsbCBpbnRlcm5hbGx5IGNvbnZlcnQgYW55IHVuaXgtc3R5bGUgcGF0aHMgYW5kIGV2ZW4gbWl4ZWQgdW5peC9WTVMKcGF0aHMgaW50byBWTVMgc3R5bGUgcGF0aHMuICBTb21lIHR5cGljYWwgY29udmVyc2lvbnMgcmVzZW1ibGU6CgoJL2FiYy9kZWYvZ2hpCQktPiBhYmM6W2RlZl1naGkuCgkvYWJjL2RlZi9naGkuagkJLT4gYWJjOltkZWZdZ2hpLmoKCS9hYmMvZGVmL2doaS5qOzIJLT4gYWJjOltkZWZdZ2hpLmo7MgoJL2FiYy9kZWYvZ2hpL2prbC9tbm8JLT4gYWJjOltkZWYuZ2hpLmprbF1tbm8uCglhYmM6W2RlZi5naGldamtsL21ubwktPiBhYmM6W2RlZi5naGkuamtsXW1uby4KCSAgLi8JCQktPiBjdXJyZW50IGRpcmVjdG9yeQoJICAuLi8JCQktPiByZWxhdGl2ZSBwYXJlbnQgZGlyZWN0b3J5CgkgIFsuZGVmLmdoaV0JCS0+IHJlbGF0aXZlIGNoaWxkIGRpcmVjdG9yeQoJICAgLi9kZWYvZ2hpCQktPiByZWxhdGl2ZSBjaGlsZCBkaXJlY3RvcnkKCk5vdGU6IFlvdSBtYXkgdXNlIDwsPiBicmFja2V0cyBhcyB3ZWxsIChkZXZpY2U6PHBhdGg+ZmlsZS5leHQ7dmVyc2lvbikgYXMKcmYxMDo8dXNlci56YXkud29yaz50ZXN0LmM7MQoKKERhdmlkIEVsaW5zIDxkZWxpbnNAZm9saWFnZS5jb20+LCBKZXJvbWUgTGF1cmV0CjxKTEFVUkVUQG1haWwuY2hlbS5zdW55c2IuZWR1PiBWaW0gNS42KQoKCjguNSBSZW1vdGUgaG9zdCBpbnZvY2F0aW9uCgpJdCBpcyBwb3NzaWJsZSB0byB1c2UgVmltIGFzIGFuIGludGVybm9kZSBlZGl0b3IuCjEuIEVkaXQgc29tZSBmaWxlIGZyb20gcmVtb3RlIG5vZGU6ID4KCgl2aSAiPHNlcnZlcj4iInVzZXJuYW1lIHBhc3N3ZCIiOjo8ZGV2aWNlPjo8cGF0aD48ZmlsZW5hbWU+Ozx2ZXJzaW9uPiIKCkV4YW1wbGU6ID4KCXZpICJwbHV0byIiemF5IHBhc3N3ZCIiOjpSRjEwOjxVU0VSLlpBWS5XT1JLPlRFU1QuQzsxIgoKTm90ZTogc3ludGF4IGlzIHZlcnkgaW1wb3J0YW50LCBvdGhlcndpc2UgVk1TIHdpbGwgcmVjb2duaXplIG1vcmUgcGFyYW1ldGVycwppbnN0ZWFkIG9mIG9uZSAocmVzdWx0aW5nIHdpdGg6IGZpbGUgbm90IGZvdW5kKQoKMi4gIFNldCB1cCBWaW0gYXMgeW91ciBpbnRlcm5vZGUgZWRpdG9yLiAgSWYgVmltIGlzIG5vdCBpbnN0YWxsZWQgb24geW91cgpob3N0LCBqdXN0IHNldCB1cCB5b3VyIElQIGFkZHJlc3MsIHRoZSBmdWxsIFZpbSBwYXRoIGluY2x1ZGluZyB0aGUgc2VydmVyIG5hbWUKYW5kIHJ1biB0aGUgY29tbWFuZCBwcm9jZWR1cmUgYmVsb3c6ID4KCgkkIGlmIChwMSAuZXFzLiAiIikgLk9SLiAocDIgLmVxcy4gIiIpIHRoZW4gZ290byB1c2FnZQoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT08eW91cl9JUF9oZXJlPi90cmFucz10Y3BpcAoJJCBkZWZpbmUgIlZJTSAiPHZpbV9zZXJ2ZXI+IiInJ3AxJyAnJ3AyJyIiOjo8ZGV2aWNlPjo8dmltX3BhdGg+IgoJJCAgdmkqbSA6PT0gIm1jciBWSU06VklNLkVYRSIKCSQgZ3YqaW0gOj09ICJzcGF3bi9ub3dhaXQgbWNyIFZJTTpWSU0uRVhFIC1nIgoJJCBnb3RvIGVuZAoJJCB1c2FnZToKCSQgd3JpdGUgc3lzJG91dHB1dCAiIFBsZWFzZSBlbnRlciB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXMgYSBwYXJhbWV0ZXIuIgoJJCB3cml0ZSBzeXMkb3V0cHV0ICIgRXhhbXBsZTogQFNFVFZJTS5DT00gdXNlcm5hbWUgcGFzc3dkIgoJJCBlbmQ6CgpOb3RlOiBOZXZlciB1c2UgaXQgaW4gYSBjbHVzdGVyZWQgZW52aXJvbm1lbnQgKHlvdSBkbyBub3QgbmVlZCBpdCksIGxvYWRpbmcKY291bGQgYmUgdmVyeS12ZXJ5IHNsb3csIGJ1dCBldmVuIGZhc3RlciB0aGFuIGEgbG9jYWwgRW1hY3MuIDotKQoKKFpvbHRhbiBBcnBhZGZmeSwgVmltIDUuNikKCgo4LjYgVGVybWluYWwgcHJvYmxlbXMKCklmIHlvdXIgdGVybWluYWwgbmFtZSBpcyBub3Qga25vd24gdG8gVmltIGFuZCBpdCBpcyB0cnlpbmcgdG8gZmluZCB0aGUgZGVmYXVsdApvbmUgeW91IHdpbGwgZ2V0IHRoZSBmb2xsb3dpbmcgbWVzc2FnZSBkdXJpbmcgc3RhcnQtdXA6Ci0tLQpUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWNhcAondW5rbm93bi10ZXJtaW5hbCcgbm90IGtub3duLiAgQXZhaWxhYmxlIGJ1aWx0LWluIHRlcm1pbmFscyBhcmU6CiAgICBidWlsdGluX2d1aQogICAgYnVpbHRpbl9yaXNjb3MKICAgIGJ1aWx0aW5fYW1pZ2EKICAgIGJ1aWx0aW5fYmVvcy1hbnNpCiAgICBidWlsdGluX2Fuc2kKICAgIGJ1aWx0aW5fdnQzMjAKICAgIGJ1aWx0aW5fdnQ1MgogICAgYnVpbHRpbl9wY2Fuc2kKICAgIGJ1aWx0aW5fd2luMzIKICAgIGJ1aWx0aW5feHRlcm0KICAgIGJ1aWx0aW5faXJpcy1hbnNpCiAgICBidWlsdGluX2RlYnVnCiAgICBidWlsdGluX2R1bWIKZGVmYXVsdGluZyB0byAndnQzMjAnCi0tLQpUaGUgc29sdXRpb24gaXMgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IHRlcm1pbmFsIG5hbWU6ID4KCgkkICEgdW5rbm93biB0ZXJtaW5hbCBuYW1lLiAgTGV0IHVzIHVzZSB2dDMyMCBvciBhbnNpIGluc3RlYWQuCgkkICEgTm90ZTogaXQncyBjYXNlIHNlbnNpdGl2ZQoJJCBkZWZpbmUgdGVybSAidnQzMjAiCgpUZXJtaW5hbHMgZnJvbSBWVDEwMCB0byBWVDMyMCAoYXMgVjMwMCwgVlQyMjAsIFZUMjAwKSBkbyBub3QgbmVlZCBhbnkgZXh0cmEKa2V5Ym9hcmQgbWFwcGluZ3MuICBUaGV5IHNob3VsZCB3b3JrIHBlcmZlY3RseSBhcyB0aGV5IGFyZSwgaW5jbHVkaW5nIGFycm93cywKSW5zLCBEZWwgYnV0dG9ucyBldGMuLCBleGNlcHQgQmFja3NwYWNlIGluIEdVSSBtb2RlLiAgVG8gc29sdmUgaXQsIGFkZCB0bwouZ3ZpbXJjOiA+CgoJaW5vcmVtYXAgPERlbD4gPEJTPgoKVmltIHdpbGwgYWxzbyByZWNvZ25pemUgdGhhdCB0aGV5IGFyZSBmYXN0IHRlcm1pbmFscy4KCklmIHlvdSBoYXZlIHNvbWUgYW5ub3lpbmcgbGluZSBqdW1waW5nIG9uIHRoZSBzY3JlZW4gYmV0d2VlbiB3aW5kb3dzIGFkZCB0bwp5b3VyIC52aW1yYyBmaWxlOiA+CgoJc2V0IHR0eWZhc3QJIiBzZXQgZmFzdCB0ZXJtaW5hbAoKTm90ZTogaWYgeW91J3JlIHVzaW5nIFZpbSBvbiByZW1vdGUgaG9zdCBvciB0aHJvdWdoIGEgdmVyeSBzbG93IGNvbm5lY3Rpb24sIGl0J3MKcmVjb21tZW5kZWQgdG8gYXZvaWQgdGhlIGZhc3QgdGVybWluYWwgb3B0aW9uIHdpdGg6ID4KCglzZXQgbm90dHlmYXN0ICAgIiBzZXQgdGVybWluYWwgdG8gc2xvdyBtb2RlCgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNS42KQoKCjguNyBIZXgtZWRpdGluZyBhbmQgb3RoZXIgZXh0ZXJuYWwgdG9vbHMKCkEgdmVyeSBpbXBvcnRhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIE9wZW5WTVMgYW5kIG90aGVyIHN5c3RlbXMgaXMgdGhhdCBWTVMgdXNlcwpzcGVjaWFsIGNvbW1hbmRzIHRvIGV4ZWN1dGUgZXhlY3V0YWJsZXM6ID4KCglSVU4gPHBhdGg+ZmlsZW5hbWUKCU1DUiA8cGF0aD5maWxlbmFtZSA8cGFyYW1ldGVycz4KCk9wZW5WTVMgdXNlcnMgYWx3YXlzIGhhdmUgdG8gYmUgYXdhcmUgdGhhdCB0aGUgVmltIGNvbW1hbmQgOiEgImp1c3QiIGRyb3AgdGhlbQp0byBEQ0wgcHJvbXB0LiAgVGhpcyBmZWF0dXJlIGlzIHBvc3NpYmxlIHRvIHVzZSB3aXRob3V0IGFueSBwcm9ibGVtIHdpdGggYWxsCkRDTCBjb21tYW5kcywgYnV0IGlmIHdlIHdhbnQgdG8gZXhlY3V0ZSBzb21lIHByb2dyYW1zIHN1Y2ggYXMgWFhELCBDVEFHUywgSlRBR1MsCmV0Yy4gIHdlJ3JlIHJ1bm5pbmcgaW50byB0cm91YmxlIGlmIHdlIGZvbGxvdyB0aGUgVmltIGRvY3VtZW50YXRpb24gKHNlZTogaGVscAp4eGQpLgoKU29sdXRpb246IEV4ZWN1dGUgd2l0aCB0aGUgTUMgY29tbWFuZCBhbmQgYWRkIHRoZSBmdWxsIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUuCkV4YW1wbGU6IEluc3RlYWQgb2YgOiUheHhkIGNvbW1hbmQgdXNlOiA+CgoJOiUhbWMgdmltOnh4ZAoKLi4uIG9yIGluIGdlbmVyYWw6ID4KCTohbWMgPHBhdGg+ZmlsZW5hbWUgPHBhcmFtZXRlcnM+CgpOb3RlOiBZb3UgY2FuIHVzZSBYWEQgYW5kIENUQUdTIGZyb20gR1VJIG1lbnUuCgpUbyBjdXN0b21pemUgY3RhZ3MgaXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIHRoZSBsb2dpY2FsICRDVEFHUyB3aXRoIHN0YW5kYXJkCnBhcmFtZXRlcnMgYXM6ID4KCglkZWZpbmUvbm9sb2cgQ1RBR1MgIi0tdG90YWxzIC1vIHN5cyRsb2dpbjp0YWdzIgoKRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHBsZWFzZSByZWFkIDpoZWxwIHRhZ3NlYXJjaCBhbmQgQ1RBR1MKZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vY3RhZ3Muc291cmNlZm9yZ2UubmV0L2N0YWdzLmh0bWwuCgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNS42LTcwKQoKCjguOCBTb3VyY2luZyB2aW1yYyBhbmQgZ3ZpbXJjCgpJZiB5b3Ugd2FudCB0byB1c2UgeW91ciAudmltcmMgYW5kIC5ndmltcmMgZnJvbSBvdGhlciBwbGF0Zm9ybXMgKGUuZy4gV2luZG93cykKeW91IGNhbiBnZXQgaW4gdHJvdWJsZSBpZiB5b3UgZnRwIHRoYXQgZmlsZShzKTogVk1TIGhhcyBkaWZmZXJlbnQgZW5kLW9mLWxpbmUKaW5kaWNhdGlvbi4KVGhlIHN5bXB0b20gaXMgdGhhdCBWaW0gaXMgbm90IHNvdXJjaW5nIHlvdXIgLnZpbXJjLy5ndmltcmMsIGV2ZW4gaWYgeW91IHNheToKPgoJOnNvIHN5cyRsb2dpbjoudmltcmMKCk9uZSB0cmljayBpcyB0byBjb21wcmVzcyAoZS5nLiB6aXApIHRoZSBmaWxlcyBvbiB0aGUgb3RoZXIgcGxhdGZvcm0gYW5kCnVuY29tcHJlc3MgaXQgb24gVk1TOyBpZiB5b3UgaGF2ZSB0aGUgc2FtZSBzeW1wdG9tLCB0cnkgdG8gY3JlYXRlIHRoZSBmaWxlcwp3aXRoIGNvcHktcGFzdGUgKGZvciB0aGlzIHlvdSBuZWVkIGJvdGggb3AuIHN5c3RlbXMgcmVhY2hhYmxlIGZyb20gb25lCm1hY2hpbmUsIGUuZy4gYW4gWHRlcm0gb24gV2luZG93cyBvciB0ZWxuZXQgdG8gV2luZG93cyBmcm9tIFZNUykuCgooU2FuZG9yIEtvcGFueWksIDxzYW5kb3Iua29wYW55aUBtYWlsYm94Lmh1PiBWaW0gNi4wYSkKCgo4LjkgUHJpbnRpbmcgZnJvbSBWaW0KClRvIGJlIGFibGUgdG8gcHJpbnQgZnJvbSBWaW0gKHJ1bm5pbmcgaW4gR1VJIG1vZGUpIHVuZGVyIFZNUyB5b3UgaGF2ZSB0byBzZXQKdXAgJFRNUCBsb2dpY2FsIHdoaWNoIHNob3VsZCBwb2ludCB0byBzb21lIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGxvZ2ljYWwKU1lTJFBSSU5UIHRvIHlvdXIgZGVmYXVsdCBwcmludCBxdWV1ZS4KRXhhbXBsZTogPgoKCSRkZWZpbmUgU1lTJFBSSU5UIEhQNUFOU0kKCllvdSBjYW4gcHJpbnQgb3V0IHRoZSB3aG9sZSBidWZmZXIgb3IganVzdCB0aGUgbWFya2VkIGFyZWEuCk1vcmUgaW5mbyB1bmRlciA6aGVscCBoYXJkY29weQoKKFpvbHRhbiBBcnBhZGZmeSwgVmltIDYuMGMpCgoKOC4xMCBTZXR0aW5nIHVwIHRoZSBzeW1ib2xzCgpXaGVuIEkgdXNlIEdWSU0gdGhpcyB3YXkgYW5kIHByZXNzIENUUkwtWSBpbiB0aGUgcGFyZW50IHRlcm1pbmFsLCBndmltIGV4aXRzLgpJIG5vdyB1c2UgYSBkaWZmZXJlbnQgc3ltYm9sIHRoYXQgc2VlbXMgdG8gd29yayBPSyBhbmQgZml4ZXMgdGhlIHByb2JsZW0uCkkgc3VnZ2VzdCB0aGlzIGluc3RlYWQ6ID4KCgkkIEdWKklNOj09U1BBV04vTk9XQUlUL0lOUFVUPU5MQTA6IE1DUiBWSU06VklNLkVYRSAtRyAtR0VPTUVUUlkgODBYNDAKClRoZSAvSU5QVVQ9TkxBMDogc2VwYXJhdGVzIHRoZSBzdGFuZGFyZCBpbnB1dCBvZiB0aGUgZ3ZpbSBwcm9jZXNzIGZyb20gdGhlCnBhcmVudCB0ZXJtaW5hbCwgdG8gYmxvY2sgc2lnbmFscyBmcm9tIHRoZSBwYXJlbnQgd2luZG93LgpXaXRob3V0IHRoZSAtR0VPTUVUUlksIHRoZSBHVklNIHdpbmRvdyBzaXplIHdpbGwgYmUgbWluaW1hbCBhbmQgdGhlIG1lbnUKd2lsbCBiZSBjb25mdXNlZCBhZnRlciBhIHdpbmRvdy1yZXNpemUuCgooQ2FybG8gTWVrZW5rYW1wLCBDb2VuIEVuZ2VsYmFydHMsIFZpbSA2LjBhYykKCgo4LjExIGRpZmYgYW5kIG90aGVyIEdOVSBwcm9ncmFtcwoKRnJvbSA2LjAgZGlmZiBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGltcGxlbWVudGVkLCBidXQgT3BlblZNUyBkb2VzIG5vdCB1c2UKR05VL1VuaXggbGlrZSBkaWZmIHRoZXJlZm9yZSBidWlsdCBpbiBkaWZmIGRvZXMgbm90IHdvcmsuClRoZXJlIGlzIGEgc2ltcGxlIHNvbHV0aW9uIHRvIHNvbHZlIHRoaXMgYW5vbWFseS4gIEluc3RhbGwgYSBVbml4IGxpa2UgZGlmZgphbmQgVmltIHdpbGwgd29yayBwZXJmZWN0bHkgaW4gZGlmZiBtb2RlIHRvby4gIFlvdSBqdXN0IGhhdmUgdG8gcmVkZWZpbmUgeW91cgpkaWZmIHByb2dyYW0gYXM6ID4KCglkZWZpbmUgL25vbG9nIGRpZmYgPEdOVV9QQVRIPmRpZmYuZXhlCgpBbm90aGVyLCBtb3JlIHNvcGhpc3RpY2F0ZWQgc29sdXRpb24gaXMgZGVzY3JpYmVkIGJlbG93ICg4LjEyIGRpZmYtbW9kZSkKVGhlcmUgYXJlIG90aGVyIHByb2dyYW1zIHN1Y2ggYXMgcGF0Y2gsIG1ha2UgZXRjIHRoYXQgbWF5IGNhdXNlIHRoZSBzYW1lCnByb2JsZW1zLiAgQXQgd3d3LnBvbGFyaG9tZS5jb20gaXMgcG9zc2libGUgdG8gZG93bmxvYWQgYW4gR05VIHBhY2thZ2UgZm9yCkFscGhhIGFuZCBWQVggYm94ZXMgdGhhdCBpcyBtZWFudCB0byBzb2x2ZSBHTlUgcHJvYmxlbXMgb24gT3BlblZNUy4KKFpvbHRhbiBBcnBhZGZmeSwgVmltIDYuMSkKCgo4LjEyIGRpZmYtbW9kZQoKVmltIDYuMCBhbmQgaGlnaGVyIHN1cHBvcnRzIFZpbSBkaWZmLW1vZGUgKFNlZSB8bmV3LWRpZmYtbW9kZXwsIHxkaWZmLW1vZGV8CmFuZCB8MDguN3wpLiAgVGhpcyB1c2VzIHRoZSBleHRlcm5hbCBwcm9ncmFtICdkaWZmJyBhbmQgZXhwZWN0cyBhIFVuaXgtbGlrZQpvdXRwdXQgZm9ybWF0IGZyb20gZGlmZi4gIFRoZSBzdGFuZGFyZCBWTVMgZGlmZiBoYXMgYSBkaWZmZXJlbnQgb3V0cHV0CmZvcm1hdC4gIFRvIHVzZSBWaW0gb24gVk1TIGluIGRpZmYtbW9kZSwgeW91IG5lZWQgdG86CiAgICAxIEluc3RhbGwgYSBVbml4LWxpa2UgZGlmZiBwcm9ncmFtLCBlLmcuIEdOVSBkaWZmCiAgICAyIFRlbGwgVmltIHRvIHVzZSB0aGUgVW5peC1saWtlIGRpZmYgZm9yIGRpZmYtbW9kZS4KCllvdSBjYW4gZG93bmxvYWQgR05VIGRpZmYgZnJvbSB0aGUgVklNLVZNUyB3ZWJzaXRlLCBpdCBpcyBvbmUgb2YgdGhlIEdOVQp0b29scyBpbiBodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vdmltL2ZpbGVzL2dudV90b29scy56aXAuICBJIHN1Z2dlc3QgdG8KdW5wYWNrIGl0IGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5ICJHTlUiIGFuZCBjcmVhdGUgYSBsb2dpY2FsIEdOVTogdGhhdApwb2ludHMgdG8gdGhhdCBkaXJlY3RvcnksIGUuZzogPgoKICAgREVGSU5FIEdOVSAgICA8RElTSz46WzxESVJFQ1RPUlk+LkJJTi5HTlVdCgpZb3UgbWF5IGFsc28gd2FudCB0byBkZWZpbmUgYSBzeW1ib2wgR0RJRkYsIHRvIHVzZSB0aGUgR05VIGRpZmYgZnJvbSB0aGUgRENMCnByb21wdDogPgoKICAgR0RJRkYgOj09ICAgICAkR05VOkRJRkYuRVhFCgpOb3cgeW91IG5lZWQgdG8gdGVsbCBWaW0gdG8gdXNlIHRoZSBuZXcgZGlmZiBwcm9ncmFtLiAgVGFrZSB0aGUgZXhhbXBsZQpzZXR0aW5ncyBmcm9tIHxkaWZmLWRpZmZleHByfCBhbmQgY2hhbmdlIHRoZSBjYWxsIHRvIHRoZSBleHRlcm5hbCBkaWZmCnByb2dyYW0gdG8gdGhlIG5ldyBkaWZmIG9uIFZNUy4gIEFkZCB0aGlzIHRvIHlvdXIgLnZpbXJjIGZpbGU6ID4KCiAgICAgIiBTZXQgdXAgdmltZGlmZiBvcHRpb25zCiAgICAgICBpZiB2OnZlcnNpb24gPj0gNjAwCgkiIFVzZSBHTlUgZGlmZiBvbiBWTVMKCXNldCBkaWZmZXhwcj1NeURpZmYoKQoJZnVuY3Rpb24gTXlEaWZmKCkKCSAgIGxldCBvcHQgPSAiIgoJICAgaWYgJmRpZmZvcHQgPX4gImljYXNlIgoJICAgICBsZXQgb3B0ID0gb3B0IC4gIi1pICIKCSAgIGVuZGlmCgkgICBpZiAmZGlmZm9wdCA9fiAiaXdoaXRlIgoJICAgICBsZXQgb3B0ID0gb3B0IC4gIi1iICIKCSAgIGVuZGlmCgkgICBzaWxlbnQgZXhlY3V0ZSAiIW1jIEdOVTpkaWZmLmV4ZSAtYSAiIC4gb3B0IC4gdjpmbmFtZV9pbiAuICIgIiAuICB2OmZuYW1lX25ldyAuCgkJXCAgIiA+ICIgLiB2OmZuYW1lX291dAoJZW5kZnVuY3Rpb24KICAgICAgZW5kaWYKCllvdSBjYW4gbm93IHVzZSBWaW0gaW4gZGlmZi1tb2RlLCBlLmcuIHRvIGNvbXBhcmUgdHdvIGZpbGVzIGluIHJlYWQtb25seQptb2RlOiA+CgogICAgJCBWSU0gLUQvUiA8RklMRTE+IDxGSUxFMj4KCllvdSBjYW4gYWxzbyBkZWZpbmUgbmV3IHN5bWJvbHMgZm9yIHZpbWRpZmYsIGUuZy46ID4KCiAgICAkIFZJTURJRkYgICAgIDo9PSAnVklNJyAtRC9SCiAgICAkIEdWSU1ESUZGICAgIDo9PSAnR1ZJTScgLUQvUgoKWW91IGNhbiBub3cgY29tcGFyZSBmaWxlcyBpbiA0IHdheXM6ID4KCiAgICAxLiBWTVMgIGRpZmY6ICAkIERJRkYgICAgIDxGSUxFMT4gPEZJTEUyPgogICAgMi4gR05VICBkaWZmOiAgJCBHRElGRiAgICA8RklMRTE+IDxGSUxFMj4KICAgIDMuIFZJTSAgZGlmZjogICQgVklNRElGRiAgPEZJTEUxPiA8RklMRTI+CiAgICA0LiBHVklNIGRpZmY6ICAkIEdWSU1ESUZGIDxGSUxFMT4gPEZJTEUyPgoKKENvZW4gRW5nZWxiYXJ0cywgVmltIDYuMSkKCgo4LjEzIEFsbG93ICckJyBpbiBDIGtleXdvcmRzCgpERUMgQyB1c2VzIG1hbnkgaWRlbnRpZmllcnMgd2l0aCAnJCcgaW4gdGhlbS4gIFRoaXMgaXMgbm90IGFsbG93ZWQgaW4gQU5TSSBDLAphbmQgVmltIHJlY29nbmlzZXMgdGhlICckJyBhcyB0aGUgZW5kIG9mIHRoZSBpZGVudGlmaWVyLiAgWW91IGNhbiBjaGFuZ2UgdGhpcwp3aXRoIHRoZSAnaXNrZXl3b3JkJyBvcHRpb24uCkFkZCB0aGlzIGNvbW1hbmQgdG8geW91ciAudmltcmMgZmlsZTogPgoKICAgIGF1dG9jbWQgRmlsZVR5cGUgYyxjcHAsY3MgIHNldCBpc2tleXdvcmQrPSQKCllvdSBjYW4gYWxzbyBjcmVhdGUgdGhlIGZpbGUocykgJFZJTS9GVFBMVUdJTi9DLlZJTSAoYW5kL29yIENQUC5WSU0gYW5kCkNTLlZJTSkgYW5kIGFkZCB0aGlzIGNvbW1hbmQ6ID4KCglzZXQgaXNrZXl3b3JkKz0kCgpOb3cgd29yZC1iYXNlZCBjb21tYW5kcywgZS5nLiB0aGUgJyonLXNlYXJjaC1jb21tYW5kIGFuZCB0aGUgQ1RSTC1dCnRhZy1sb29rdXAsIHdvcmsgb24gdGhlIHdob2xlIGlkZW50aWZpZXIuICAoQ3RhZ3Mgb24gVk1TIGFsc28gc3VwcG9ydHMgJyQnIGluCkMga2V5d29yZHMgc2luY2UgY3RhZ3MgdmVyc2lvbiA1LjEuKQoKKENvZW4gRW5nZWxiYXJ0cywgVmltIDYuMSkKCjguMTQgVklNVFVUT1IgZm9yIGJlZ2lubmVycwoKVGhlIFZJTVRVVE9SLkNPTSBEQ0wgc2NyaXB0IGNhbiBoZWxwIFZpbSBiZWdpbm5lcnMgdG8gbGVhcm4vbWFrZSB0aGVpciBmaXJzdApzdGVwcyB3aXRoIFZpbSBvbiBPcGVuVk1TLiAgRGVwZW5kaW5nIG9mIGJpbmFyeSBkaXN0cmlidXRpb24geW91IG1heSBzdGFydCBpdAp3aXRoOiA+CgoJQHZpbTp2aW10dXRvcgoKKFRob21hcy5SLld5YW50IElJSSwgVmltIDYuMSkKCjguMTYgU2xvdyBzdGFydCBpbiBjb25zb2xlIG1vZGUgaXNzdWUKCkFzIEdVSS9HVEsgVmltIHdvcmtzIGVxdWFsbHkgd2VsbCBpbiBjb25zb2xlIG1vZGUsIG1hbnkgYWRtaW5pc3RyYXRvcnMKZGVwbG95IHRob3NlIGV4ZWN1dGFibGVzIHN5c3RlbSB3aWRlLgpVbmZvcnR1bmF0ZWx5LCBvbiBhIHJlbW90ZSBzbG93IGNvbm5lY3Rpb25zIEdVSS9HVEsgZXhlY3V0YWJsZXMgYmVoYXZlIHJhdGhlcgpzbG93IHdoZW4gdXNlciB3YW50cyB0byBydW4gVmltIGp1c3QgaW4gdGhlIGNvbnNvbGUgbW9kZSAtIGJlY2F1c2Ugb2YgWAplbnZpcm9ubWVudCBkZXRlY3Rpb24gdGltZW91dC4KCkx1Y2tpbHksIHRoZXJlIGlzIGEgc2ltcGxlIHNvbHV0aW9uIGZvciB0aGF0LiBBZG1pbmlzdHJhdG9ycyBuZWVkIHRvIGRlcGxveQpib3RoIEdVSS9HVEsgYnVpbGQgYW5kIGp1c3QgY29uc29sZSBidWlsZCBleGVjdXRhYmxlcywgbGlrZSBiZWxvdzogPgoKICAgIHwtIHZpbTczCiAgICB8LS0tLS0gZG9jCiAgICB8LS0tLS0gc3ludGF4CiAgICAgICB2aW1yYyAgICAoc3lzdGVtIHJjIGZpbGVzKQogICAgICAgZ3ZpbXJjCiAgICAgICBndmltLmV4ZSAodGhlIHJlbmFtZWQgR1VJIG9yIEdUSyBidWlsdCB2aW0uZXhlKQogICAgICAgdmltLmV4ZSAgKHRoZSBjb25zb2xlIG9ubHkgZXhlY3V0YWJsZSkKCkRlZmluZSBzeXN0ZW0gc3ltYm9scyBsaWtlIGJlbG93IGluIGZvciBleCBpbiBMT0dJTi5DT00gb3IgU1lMT0dJTi5DT006ID4KCgkkIGRlZmluZS9ub2xvZyBWSU0gUkYxMDpbVVRJTC5WSU03M10gISB3aGVyZSB5b3UgVklNIGRpcmVjdG9yeSBpcwoJJCB2aSptICA6PT0gbWNyIFZJTTpWSU0uRVhFCgkkIGd2aSptIDo9PSBtY3IgVklNOkdWSU0uRVhFCgkkICEgb3IgeW91IGNhbiB0cnkgdG8gc3Bhd24gd2l0aAoJJCBndippbSA6PT0gc3Bhd24vbm93YWl0L2lucHV0PU5MQTAgbWNyIFZJTTpHVklNLkVYRSAtZyAtR0VPTUVUUlkgODB4NDAKCgpMaWtlIHRoaXMsIHVzZXJzIHRoYXQgZG8gbm90IGhhdmUgWCBlbnZpcm9ubWVudCBhbmQgd2FudCB0byB1c2UgVmltIGp1c3QgaW4KY29uc29sZSBtb2RlIGNhbiBhdm9pZCBwZXJmb3JtYW5jZSBwcm9ibGVtcy4KCihab2x0YW4gQXJwYWRmZnksIFZpbSA3LjIpCgo4LjE1IENvbW1vbiBWSU0gZGlyZWN0b3J5IC0gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMKCkluIGEgY2x1c3RlciB0aGF0IGNvbnRhaW5zIG5vZGVzIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgbGlrZSBiZWxvdzoKCiRzaG93IGNsdXN0ZXIKVmlldyBvZiBDbHVzdGVyIGZyb20gc3lzdGVtIElEIDExNjU1ICBub2RlOiBUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOC1BVUctMjAwOCAxMTo1ODozMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwqmICAgICAgICBTWVNURU1TICAgICAgICCmIE1FTUJFUlMgpgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tpgqmICBOT0RFICCmICAgU09GVFdBUkUgICCmICBTVEFUVVMgpgorLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tpgqmIFRPUiAgICCmIFZNUyBWNy4zLTIgICCmIE1FTUJFUiAgpgqmIFRJVEFOMiCmIFZNUyBWOC4zICAgICCmIE1FTUJFUiAgpgqmIE9ESU4gICCmIFZNUyBWNy4zLTIgICCmIE1FTUJFUiAgpgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKSXQgaXMgY29udmVuaWVudCB0byBoYXZlIGEgY29tbW9uIFZJTSBkaXJlY3RvcnkgYnV0IGV4ZWN1dGUgZGlmZmVyZW50CmV4ZWN1dGFibGVzLgpUaGVyZSBhcmUgc2V2ZXJhbCBzb2x1dGlvbnMgZm9yIHRoaXMgcHJvYmxlbToKClNvbHV0aW9uIDEuICBBbGwgZXhlY3V0YWJsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHdpdGggZGlmZmVyZW50IG5hbWVzClRoaXMgaXMgZWFzaWx5IGRvbmUgd2l0aCB0aGUgZm9sbG93aW5nIHNjcmlwdCB0aGF0IGNhbiBiZSBhZGRlZAp0byB0aGUgbG9naW4uY29tIG9yIHN5bG9naW4uY29tOiA+CgoJJCBpZiBmJGdldHN5aSgiTk9ERV9IV1RZUEUiKSAuZXFzLiAiVkFYIgoJJCB0aGVuCgkkICAgICAgIHNheSAiVkFYIHBsYXRmb3JtIgoJJCAgICAgICB2aSptOj09IG1jciB2aW06VklNLkVYRV9WQVgKCSQgZW5kaWYKCSQgaWYgZiRnZXRzeWkoIk5PREVfSFdUWVBFIikgLmVxcy4gIkFMUEgiCgkkIHRoZW4KCSQgICAgICAgc2F5ICJBTFBIQSBwbGF0Zm9ybSIKCSQgICAgICAgdmkqbSA6PT0gbWNyIHZpbTpWSU0uRVhFX0FYUAoJJCBlbmRpZgoJJCBpZiBmJGdldHN5aSgiQVJDSF9OQU1FIikgLmVxcy4gIklBNjQiCgkkIHRoZW4KCSQgICAgICBzYXkgIklBNjQgcGxhdGZvcm0iCgkkICAgICAgdmkqbSA6PT0gbWNyIHZpbTpWSU0uRVhFX0lBNjQKCSQgZW5kaWYKClNvbHV0aW9uIDIuICBEaWZmZXJlbnQgZGlyZWN0b3JpZXM6ID4KCgkkIGlmIGYkZ2V0c3lpKCJOT0RFX0hXVFlQRSIpIC5lcXMuICJWQVgiCgkkIHRoZW4KCSQgICAgICAgc2F5ICJWQVggcGxhdGZvcm0iCgkkICAgICAgIGRlZmluZS9ub2xvZyBWSU0gUkYxMDpbVVRJTC5WQVhfRVhFXSAhIFZBWCBleGVjdXRhYmxlcwoJJCBlbmRpZgoJJCBpZiBmJGdldHN5aSgiTk9ERV9IV1RZUEUiKSAuZXFzLiAiQUxQSCIKCSQgdGhlbgoJJCAgICAgICBzYXkgIkFMUEhBIHBsYXRmb3JtIgoJJCAgICAgICBkZWZpbmUvbm9sb2cgVklNIFJGMTA6W1VUSUwuQVhQX0VYRV0gISBBWFAgZXhlY3V0YWJsZXMKCSQgZW5kaWYKCSQgaWYgZiRnZXRzeWkoIkFSQ0hfTkFNRSIpIC5lcXMuICJJQTY0IgoJJCB0aGVuCgkkICAgICAgc2F5ICJJQTY0IHBsYXRmb3JtIgoJJCAgICAgIGRlZmluZS9ub2xvZyBWSU0gUkYxMDpbVVRJTC5JQTY0X0VYRV0gISBJQTY0IGV4ZWN1dGFibGVzCgkkIGVuZGlmCiAgICAgICAgJCEgVklNUlVOVElNRSBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZmluZCBydW50aW1lIGZpbGVzCgkkIGRlZmluZS9ub2xvZyBWSU1SVU5USU1FIFJGMTA6W1VUSUwuVklNNzNdCgpBIGdvb2QgZXhhbXBsZSBmb3IgdGhpcyBhcHByb2FjaCBpcyB0aGUgW0dOVV1nbnVfdG9vbHMuY29tIHNjcmlwdCBmcm9tCkdOVV9UT09MUy5aSVAgcGFja2FnZSBkb3dubG9hZGFibGUgZnJvbSBodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vdmltLwoKKFpvbHRhbiBBcnBhZGZmeSwgVmltIDcuMikKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKOS4gVk1TIHJlbGF0ZWQgY2hhbmdlcwkJCQkJKnZtcy1jaGFuZ2VzKgoKVmVyc2lvbiA3LjMKLSBDVEFHUyA1LjggaW5jbHVkZWQKLSBWTVMgY29tcGlsZSB3YXJuaW5ncyBmaXhlZCAtIGZsb2F0aW5nLXBvaW50IG92ZXJmbG93IHdhcm5pbmcgY29ycmVjdGVkIG9uIFZBWAotIGZpbGVwYXRoIGNvbXBsZXRpb24gY29ycmVjdGVkIC0gdG9vIG1hbnkgY2hhcnMgd2VyZSBlc2NhcGVkIGluIGZpbGVuYW1lCiAgYW5kIHNoZWxsIGNvbW1hbmRzCi0gdGhlIGZvbGxvd2luZyBwbHVnaW5zIGFyZSBpbmNsdWRlZCBpbnRvIFZNUyBydW50aW1lOgoJZ2VudXRpbHMgMi40LCBtdWx0aXNlbGVjdCAyLjIsIG11bHR2YWxzIDMuMSwgc2VsZWN0YnVmIDQuMywKCWJ1ZmV4cGxvcmVyIDcuMS43LCB0YWdsaXN0IDQuNQotIG1pbm9yIGNoYW5nZXMgaW4gdmltcmMgKGp1c3QgaW4gVk1TIHJ1bnRpbWUpCi0gbWFrZV92bXMubW1zIC0gSFVHRSBtb2RlbCBpcyB0aGUgZGVmYXVsdAotIFtURVNURElSXW1ha2Vfdm1zLm1tcyBpbmNsdWRlIGFzIG1hbnkgdGVzdHMgcG9zc2libGUKLSBtb2RpZnkgdGVzdDMwIGFuZCB0ZXN0NTQgZm9yIFZNUwotIGVuYWJsZSBGTE9BVCBmZWF0dXJlIGluIFZNUyBwb3J0Ci0gb3Nfdm1zLnR4dCB1cGRhdGVkCgpWZXJzaW9uIDcuMiAoMjAwOCBBdWcgOSkKLSBWQ0YgZmlsZXMgd3JpdGUgY29ycmVjdGVkCi0gQ1RBR1MgNS43IGluY2x1ZGVkCi0gY29ycmVjdGVkIG1ha2Vfdm1zLm1tcyAob24gVkFYIGdhdmUgc3ludGF4IGVycm9yKQoKVmVyc2lvbiA3LjEgKDIwMDcgSnVuIDE1KQotIGNyZWF0ZSBUQUdTIGZpbGUgZnJvbSBtZW51CgpWZXJzaW9uIDcgKDIwMDYgTWF5IDgpCi0gSW1wcm92ZWQgbG93IGxldmVsIGNoYXIgaW5wdXQgKGFmZmVjdHMganVzdCBjb25zb2xlIG1vZGUpCi0gRml4ZWQgcGx1Z2luIGJ1ZwotIENUQUdTIDUuNiBpbmNsdWRlZAoKVmVyc2lvbiA2LjQgKDIwMDUgT2N0IDE1KQotIEdUS0xJQiBhbmQgVmltIGJ1aWxkIG9uIElBNjQKLSBjb2xvcnMgaW4gdGVybWluYWwgbW9kZQotIHN5bnRheCBoaWdobGlnaHRpbmcgaW4gdGVybWluYWwgbW9kZQotIHdyaXRlIHByb2JsZW0gZml4ZWQgKGV4dHJhIENSKQotIEVTQyBhbmQgRVNDIHNlcXVlbmNlIHJlY29nbml0aW9uIGluIHRlcm1pbmFsIG1vZGUKLSBtYWtlIGZpbGUgY2hhbmdlZCB0byBzdXBwb3J0IG5ldyBNTVMgdmVyc2lvbgotIGVudiB2YXJpYWJsZSBleHBhbnNpb24gaW4gcGF0aCBjb3JyZWN0ZWQKLSBwcmludGluZyBwcm9ibGVtcyBjb3JyZWN0ZWQKLSBoZWxwIHRleHQgYWRkZWQgZm9yIGNhc2UgaW5zZW5zaXRpdmUgYXJndW1lbnRzCgpWZXJzaW9uIDYuMyAoMjAwNCBNYXkgMTApCi0gSW1wcm92ZWQgdm1zX3JlYWQgZnVuY3Rpb24KLSBDVEFHUyB2NS41LjQgaW5jbHVkZWQKLSBEb2N1bWVudGF0aW9uIGNvcnJlY3RlZCBhbmQgdXBkYXRlZAoKVmVyc2lvbiA2LjIgKDIwMDMgTWF5IDcpCi0gQ29ycmVjdGVkIFZNUyBzeXN0ZW0gY2FsbCByZXN1bHRzCi0gTG93IGxldmVsIGNoYXJhY3RlciBpbnB1dCBpcyByZXdyaXR0ZW4KLSBDb3JyZWN0aW9uIGluIHRhZyBhbmQgcXVpY2tmaXggaGFuZGxpbmcKLSBGaXJzdCBHVEsgYnVpbGQKLSBNYWtlIGZpbGUgY2hhbmdlcwogICAgLSBHVEsgZmVhdHVyZSBhZGRlZAogICAgLSBEZWZpbmUgZm9yIE9MRF9WTVMKICAgIC0gT3BlblZNUyB2ZXJzaW9uIDYuMiBvciBvbGRlcgotIERvY3VtZW50YXRpb24gdXBkYXRlZCB3aXRoIEdUSyBmZWF0dXJlcwotIENUQUdTIHY1LjUgaW5jbHVkZWQKLSBWTVMgVklNIHR1dG9yIGNyZWF0ZWQKClZlcnNpb24gNi4xICgyMDAyIE1hciAyNSkKLSBUQ0wgaW5pdF90Y2woKSBwcm9ibGVtIGZpeGVkCi0gQ1RBR1MgdjUuNCBpbmNsdWRlZAotIEdOVSB0b29scyBiaW5hcmllcyBmb3IgT3BlblZNUwotIE1ha2UgZmlsZSBjaGFuZ2VzCiAgICAtIFBFUkwsIFBZVEhPTiBhbmQgVENMIHN1cHBvcnQgaW1wcm92ZWQKICAgIC0gSW5zdGFsbFZNUy50eHQgaGFzIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gSE9XVE8gYnVpbGQKLSBWTVMvVW5peCBmaWxlIGhhbmRsaW5nIHJld3JpdHRlbgotIE1pbm9yIGNhc3RpbmcgYW5kIGJ1ZyBmaXhlcwoKVmVyc2lvbiA2LjAgKDIwMDEgU2VwIDI4KQotIFVuaXggYW5kIFZNUyBjb2RlIGhhcyBiZWVuIG1lcmdlZAoJLSBzZXBhcmF0ZWQgInJlYWxseSIgVk1TIHJlbGF0ZWQgY29kZQoJLSBpbmNsdWRlZCBhbGwgcG9zc2libGUgVW5peCBmdW5jdGlvbmFsaXR5CgktIHNpbXBsaWZpZWQgb3IgZGVsZXRlZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcwoJLSBtYWtlZmlsZSBNQUtFX1ZNUy5NTVMgcmV2aWV3ZWQKLSBtZW51IGNoYW5nZXMgKGZpeGVkIHByaW50aW5nLCBDVEFHUyBhbmQgWFhEIHVzYWdlKQotIGZpeGVkIHZhcmlhYmxlIFJNUyByZWNvcmQgZm9ybWF0IGhhbmRsaW5nIGFub21hbHkKLSBjb3JyZWN0ZWQgc3ludGF4LCBmdHBsdWdpbiBldGMgZmlsZXMgbG9hZAotIGNoYW5nZWQgZXhwYW5kX3dpbGRjYXJkcyBhbmQgZXhwYW5kcGF0aCBmdW5jdGlvbnMgdG8gd29yayBtb3JlIGdlbmVyYWwKLSBjcmVhdGVkIE9TX1ZNU19GSUxURVIuQ09NIC0gREVDQy0+VkFYQyBwcmUtcHJvY2Vzc29yIGRpcmVjdGl2ZSBjb252ZXJ0CiAgc2NyaXB0LgotIEltcHJvdmVkIGNvZGUncyBWQVhDIGFuZCBuZXcgREVDQyBjb21waWxlcnMgY29tcGF0aWJpbGl0eQotIGNoYW5nZWQgcXVpY2tmaXggcGFyYW1ldGVyczoKCS0gZXJyb3JtZXNzYWdlIGZvcm1hdCB0byBzdWl0ZSBERUNDCgktIHNlYXJjaCwgbWFrZSBhbmQgb3RoZXIgY29tbWFuZHMgdG8gc3VpdGUgVk1TIHN5c3RlbQotIHVwZGF0ZWQgYW5kIHJlbmFtZWQgTU1TIG1ha2UgZmlsZXMgZm9yIFZpbSBhbmQgQ1RBR1MuCi0gQ1RBR1MgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHNvdXJjZSBkaXN0cmlidXRpb24gb2YgVmltIGJ1dCBpdCB3aWxsIHJlbWFpbgogIGluIE9wZW5WTVMgYmluYXJ5IGRpc3RyaWJ1dGlvbnMuCi0gc2ltcGxpZmllZCBidWlsZC9jb25maWd1cmF0aW9uIHByb2NlZHVyZQotIGNyZWF0ZWQgSU5TVEFMTHZtcy50eHQgLSBkZXRhaWxlZCBjb21waWxpbmcgaW5zdHJ1Y3Rpb25zIHVuZGVyIFZNUy4KLSB1cGRhdGVkIHRlc3Qgc2NyaXB0cy4KClZlcnNpb24gNS44ICgyMDAxIEp1biAxKQotIE9TX1ZNUy5UWFQgdXBkYXRlZCB3aXRoIG5ldyBmZWF0dXJlcy4KLSBvdGhlciBtaW5vciBmaXhlcy4KLSBkb2N1bWVudGF0aW9uIHVwZGF0ZWQKLSB0aGlzIHZlcnNpb24gaGFkIGJlZW4gdGVzdGVkIG11Y2ggbW9yZSB0aGFuIGFueSBvdGhlciBPcGVuVk1TIHZlcnNpb24KICBlYXJsaWVyCgpWZXJzaW9uIDUuNyAoMjAwMCBKdW4gMjQpCi0gTmV3IENUQUdTIHY1LjAgaW4gZGlzdHJpYnV0aW9uCi0gRG9jdW1lbnRhdGlvbiB1cGRhdGVkCgpWZXJzaW9uIDUuNiAoMjAwMCBKYW4gMTcpCi0gVk1TIGZpbGVuYW1lIHJlbGF0ZWQgY2hhbmdlczoKCS0gdmVyc2lvbiBoYW5kbGluZyAob3BlbiBldmVyeXRoaW5nLCBzYXZlIHRvIG5ldyB2ZXJzaW9uKQoJLSBjb3JyZWN0IGZpbGUgZXh0ZW5zaW9uIG1hdGNoaW5nIGZvciBzeW50YXggKHZlcnNpb24gcHJvYmxlbSkKCS0gaGFuZGxlIDwsPiBjaGFyYWN0ZXJzIGFuZCBwYXNzd29yZHMgaW4gZGlyZWN0b3J5IGRlZmluaXRpb24KCS0gaGFuZGxlIGludGVybm9kZS9yZW1vdGUgaW52b2NhdGlvbiBhbmQgZWRpdGluZyB3aXRoIHBhc3N3b3JkcwoJLSBPcGVuVk1TIGZpbGVzIHdpbGwgYmUgdHJlYXRlZCBjYXNlIGluc2Vuc2l0aXZlIGZyb20gbm93CgktIGNvcnJlY3RlZCByZXNwb25zZSBvZiBleHBhbmQoIiU6LiIpIGV0YyBwYXRoIHJlbGF0ZWQgZnVuY3Rpb25zCgkoaW4gb25lIHdvcmQ6IFZNUyBkaXJlY3RvcnkgaGFuZGxpbmcgaW50ZXJuYWxseSkKLSB2ZXJzaW9uIGNvbW1hbmQKCS0gY29ycmVjdGVkICgrLC0pIGluZm9ybWF0aW9uIGRhdGEKCS0gYWRkZWQgY29tcGlsZXIgYW5kIE9TIHZlcnNpb24KCS0gYWRkZWQgdXNlciBhbmQgaG9zdCBpbmZvcm1hdGlvbgoJLSByZXNvbHZpbmcgJFZJTSBhbmQgJFZJTVJVTlRJTUUgbG9naWNhbHMKLSBWTVMgcG9ydCBpcyBpbiBNQVhfRkVBVCAobWF4aW11bSBmZWF0dXJlcykgY2x1YiB3aXRoIFVuaXgsIFdpbjMyIGFuZCBPUy8yLgoJLSBlbmFibGVkIGZhcnNpLCByaWdodGxlZnQgZXRjLiBmZWF0dXJlcwoJLSB1bmRvIGxldmVsIHJhaXNlZCB1cCB0byAxMDAwCi0gVXBkYXRlZCBPU19WTVMuTU1TIGZpbGUuCgktIG1heGltdW0gZmVhdHVyZXMgT04gaXMgZGVmYXVsdAoJLSBWaW0gaXMgY29tcGlsYWJsZSB3aXRoICtwZXJsLCArcHl0aG9uIGFuZCArdGNsIGZlYXR1cmVzLgoJLSBpbXByb3ZlZCBNTUsgY29tcGF0aWJpbGl0eQotIENyZWF0ZWQgTUFLRUZJTEVfVk1TLk1NUywgbWFrZWZpbGUgZm9yIHRlc3RpbmcgVmltIGR1cmluZyBkZXZlbG9wbWVudC4KLSBEZWZpbmVkIERFQyB0ZXJtaW5hbCBWVDMyMAoJLSBjb21wYXRpYmlsaXR5IGZvciBWVDMqMCwgVlQyKjAgYW5kIFZUMSowIC0gQU5TSSB0ZXJtaW5hbHMKCSAgYmFja3dhcmRzLCBidXQgbm90IFZUMzQwIGFuZCBuZXdlciB3aXRoIGNvbG91ciBjYXBhYmlsaXR5LgoJLSBWVDMyMCBpcyBkZWZhdWx0IHRlcm1pbmFsIGZvciBPcGVuVk1TCgktIHRoZXNlIG5ldyB0ZXJtaW5hbHMgYXJlIGFsc28gZmFzdCB0dHlzIChkZWZhdWx0IGZvciBPcGVuVk1TKS4KCS0gYWxsb3dlZCBkZWNfbW91c2UgdHR5bQotIFVwZGF0ZWQgZmlsZXMgdmltcmMgYW5kIGd2aW1yYyB3aXRoIFZNUyBzcGVjaWZpYyBzdWdnZXN0aW9ucy4KLSBPU19WTVMuVFhUIHVwZGF0ZWQgd2l0aCBuZXcgZmVhdHVyZXMuCgpWZXJzaW9uIDUuNSAoMTk5OSBEZWMgMykKLSBQb3B1cCBtZW51IGxpbmUgY3Jhc2ggY29ycmVjdGVkLgotIEhhbmRsZSBmdWxsIGZpbGUgbmFtZXMgd2l0aCB2ZXJzaW9uIG51bWJlcnMuCi0gRGlyZWN0b3J5IGhhbmRsaW5nIChDRCBjb21tYW5kIGV0Yy4pCi0gQ29ycmVjdGVkIGZpbGUgbmFtZSBjb252ZXJzaW9uIFZNUyB0byBVbml4IGFuZCB2LnYuCi0gQ29ycmVjdCByZXNwb25zZSBvZiBleHBhbmQgd2lsZGNhcmRzCi0gUmVjb3ZlcnkgaXMgd29ya2luZyBmcm9tIHRoaXMgdmVyc2lvbiB1bmRlciBWTVMgYXMgd2VsbC4KLSBJbXByb3ZlZCB0ZXJtaW5hbCBhbmQgc2lnbmFsIGhhbmRpbmcuCi0gSW1wcm92ZWQgT1NfVk1TLlRYVAoKVmVyc2lvbiA1LjQgKDE5OTkgU2VwIDkpCi0gQ3V0IGFuZCBwYXN0ZSBtaXNtYXRjaCBjb3JyZWN0ZWQuCi0gTW90aWYgZGlyZWN0b3JpZXMgZHVyaW5nIG9wZW4gYW5kIHNhdmUgYXJlIGNvcnJlY3RlZC4KClZlcnNpb24gNS4zICgxOTk4IE9jdCAxMikKLSBNaW5vciBjaGFuZ2VzIGluIHRoZSBjb2RlCi0gU3RhbmRhcmQgZGlzdHJpYnV0aW9uIHdpdGggK0dVSSBvcHRpb24KClZlcnNpb24gNS4xICgxOTk4IEFwciAyMSkKLSBTeW50YXggYW5kIERFQyBDIGNoYW5nZXMgaW4gdGhlIGNvZGUKLSBGaXhpbmcgcHJvYmxlbXMgd2l0aCB0aGUgL2RvYyBzdWJkaXJlY3RvcnkKLSBJbXByb3ZlIE9TX1ZNUy5NTVMKClZlcnNpb24gNC41ICgxOTk2IERlYyAxNikKLSBGaXJzdCBWTVMgcG9ydCBieSBIZW5rIEVsYmVycyA8aGVua0B4czRhbGwubmw+Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjEwLiBBdXRob3JzCQkJCQkJKnZtcy1hdXRob3JzKgoKT3BlblZNUyBkb2N1bWVudGF0aW9uIGFuZCBleGVjdXRhYmxlcyBhcmUgbWFpbnRhaW5lZCBieToKWm9sdGFuIEFycGFkZmZ5IDxhcnBhZGZmeUBwb2xhcmhvbWUuY29tPgpPcGVuVk1TIFZpbSBwYWdlOiBodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vdmltLwoKVGhpcyBkb2N1bWVudCB1c2VzIHBhcnRzIGFuZCByZW1hcmtzIGZyb20gZWFybGllciBhdXRob3JzIGFuZCBjb250cmlidXRvcnMKb2YgT1NfVk1TLlRYVDoKCUNoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8Y2VjQGdyeXBob24uZ3NmYy5uYXNhLmdvdj4KCUJydWNlIEh1bnNha2VyIDxCTkh1bnNha2VyQGNocS5ieXUuZWR1PgoJU2FuZG9yIEtvcGFueWkgPHNhbmRvci5rb3BhbnlpQG1haWxib3guaHU+CgogdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgo=