KnNwZWxsLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgQXVnIDIyCgoKCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKCgpTcGVsbCBjaGVja2luZwkJCQkJCSpzcGVsbCoKCjEuIFF1aWNrIHN0YXJ0CQkJfHNwZWxsLXF1aWNrc3RhcnR8CjIuIFJlbWFya3Mgb24gc3BlbGwgY2hlY2tpbmcJfHNwZWxsLXJlbWFya3N8CjMuIEdlbmVyYXRpbmcgYSBzcGVsbCBmaWxlCXxzcGVsbC1ta3NwZWxsfAo0LiBTcGVsbCBmaWxlIGZvcm1hdAkJfHNwZWxsLWZpbGUtZm9ybWF0fAoKe1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQoKU3BlbGwgY2hlY2tpbmcgaXMgbm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K3N5bnRheHwgZmVhdHVyZSBoYXMgYmVlbiBkaXNhYmxlZAphdCBjb21waWxlIHRpbWUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gUXVpY2sgc3RhcnQJCQkJCQkqc3BlbGwtcXVpY2tzdGFydCoKClRoaXMgY29tbWFuZCBzd2l0Y2hlcyBvbiBzcGVsbCBjaGVja2luZzogPgoKCTpzZXRsb2NhbCBzcGVsbCBzcGVsbGxhbmc9ZW5fdXMKClRoaXMgc3dpdGNoZXMgb24gdGhlICdzcGVsbCcgb3B0aW9uIGFuZCBzcGVjaWZpZXMgdG8gY2hlY2sgZm9yIFVTIEVuZ2xpc2guCgpUaGUgd29yZHMgdGhhdCBhcmUgbm90IHJlY29nbml6ZWQgYXJlIGhpZ2hsaWdodGVkIHdpdGggb25lIG9mIHRoZXNlOgoJU3BlbGxCYWQJd29yZCBub3QgcmVjb2duaXplZAkJCXxobC1TcGVsbEJhZHwKCVNwZWxsQ2FwCXdvcmQgbm90IGNhcGl0YWxpc2VkCQkJfGhsLVNwZWxsQ2FwfAoJU3BlbGxSYXJlCXJhcmUgd29yZAkJCQl8aGwtU3BlbGxSYXJlfAoJU3BlbGxMb2NhbAl3cm9uZyBzcGVsbGluZyBmb3Igc2VsZWN0ZWQgcmVnaW9uCXxobC1TcGVsbExvY2FsfAoKVmltIG9ubHkgY2hlY2tzIHdvcmRzIGZvciBzcGVsbGluZywgdGhlcmUgaXMgbm8gZ3JhbW1hciBjaGVjay4KCklmIHRoZSAnbW91c2Vtb2RlbCcgb3B0aW9uIGlzIHNldCB0byAicG9wdXAiIGFuZCB0aGUgY3Vyc29yIGlzIG9uIGEgYmFkbHkKc3BlbGxlZCB3b3JkIG9yIGl0IGlzICJwb3B1cF9zZXRwb3MiIGFuZCB0aGUgbW91c2UgcG9pbnRlciBpcyBvbiBhIGJhZGx5CnNwZWxsZWQgd29yZCwgdGhlbiB0aGUgcG9wdXAgbWVudSB3aWxsIGNvbnRhaW4gYW4gc3VibWVudSB0byByZXBsYWNlIHRoZSBiYWQKd29yZC4gIE5vdGU6IHRoaXMgc2xvd3MgZG93biB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgcG9wdXAgbWVudS4KClRvIHNlYXJjaCBmb3IgdGhlIG5leHQgbWlzc3BlbGxlZCB3b3JkOgoKCQkJCQkJCSpdcyogKkU3NTYqCl1zCQkJTW92ZSB0byBuZXh0IG1pc3NwZWxsZWQgd29yZCBhZnRlciB0aGUgY3Vyc29yLgoJCQlBIGNvdW50IGJlZm9yZSB0aGUgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZXBlYXQuCgoJCQkJCQkJKltzKgpbcwkJCUxpa2UgIl1zIiBidXQgc2VhcmNoIGJhY2t3YXJkcywgZmluZCB0aGUgbWlzc3BlbGxlZAoJCQl3b3JkIGJlZm9yZSB0aGUgY3Vyc29yLiAgRG9lc24ndCByZWNvZ25pemUgd29yZHMKCQkJc3BsaXQgb3ZlciB0d28gbGluZXMsIHRodXMgbWF5IHN0b3AgYXQgd29yZHMgdGhhdCBhcmUKCQkJbm90IGhpZ2hsaWdodGVkIGFzIGJhZC4gIERvZXMgbm90IHN0b3AgYXQgd29yZCB3aXRoCgkJCW1pc3NpbmcgY2FwaXRhbCBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLgoKCQkJCQkJCSpdUyoKXVMJCQlMaWtlICJdcyIgYnV0IG9ubHkgc3RvcCBhdCBiYWQgd29yZHMsIG5vdCBhdCByYXJlCgkJCXdvcmRzIG9yIHdvcmRzIGZvciBhbm90aGVyIHJlZ2lvbi4KCgkJCQkJCQkqW1MqCltTCQkJTGlrZSAiXVMiIGJ1dCBzZWFyY2ggYmFja3dhcmRzLgoKClRvIGFkZCB3b3JkcyB0byB5b3VyIG93biB3b3JkIGxpc3Q6CQkJCSpFNzY0KgoKCQkJCQkJCSp6ZyoKemcJCQlBZGQgd29yZCB1bmRlciB0aGUgY3Vyc29yIGFzIGEgZ29vZCB3b3JkIHRvIHRoZSBmaXJzdAoJCQluYW1lIGluICdzcGVsbGZpbGUnLiAgSW4gVmlzdWFsIG1vZGUgdGhlIHNlbGVjdGVkCgkJCWNoYXJhY3RlcnMgYXJlIGFkZGVkIGFzIGEgd29yZCAoaW5jbHVkaW5nIHdoaXRlCgkJCXNwYWNlISkuICBJZiB0aGUgd29yZCBpcyBleHBsaWNpdGx5IG1hcmtlZCBhcyBiYWQgd29yZAoJCQlpbiBhbm90aGVyIHNwZWxsIGZpbGUgdGhlIHJlc3VsdCBpcyB1bnByZWRpY3RhYmxlLgoJCQlBIGNvdW50IG1heSBwcmVjZWRlIHRoZSBjb21tYW5kIHRvIGluZGljYXRlIHRoZSBlbnRyeQoJCQlpbiAnc3BlbGxmaWxlJyB0byBiZSB1c2VkLiAgQSBjb3VudCBvZiB0d28gdXNlcyB0aGUKCQkJc2Vjb25kIGVudHJ5LgoKCQkJCQkJCSp6RyoKekcJCQlMaWtlICJ6ZyIgYnV0IGFkZCB0aGUgd29yZCB0byB0aGUgaW50ZXJuYWwgd29yZCBsaXN0CgkJCXxpbnRlcm5hbC13b3JkbGlzdHwuCgoJCQkJCQkJKnp3Kgp6dwkJCUxpa2UgInpnIiBidXQgbWFyayB0aGUgd29yZCBhcyBhIHdyb25nIChiYWQpIHdvcmQuCgoJCQkJCQkJKnpXKgp6VwkJCUxpa2UgInp3IiBidXQgYWRkIHRoZSB3b3JkIHRvIHRoZSBpbnRlcm5hbCB3b3JkIGxpc3QKCQkJfGludGVybmFsLXdvcmRsaXN0fC4KCgkJCQkJCQkqOnNwZSogKjpzcGVsbGdvb2QqCjpbY291bnRdc3BlW2xsZ29vZF0ge3dvcmR9CgkJCUFkZCB7d29yZH0gYXMgYSBnb29kIHdvcmQgdG8gJ3NwZWxsZmlsZScsIGxpa2Ugd2l0aAoJCQkiemciLiAgV2l0aG91dCBjb3VudCB0aGUgZmlyc3QgbmFtZSBpcyB1c2VkLCB3aXRoIGEKCQkJY291bnQgb2YgdHdvIHRoZSBzZWNvbmQgZW50cnksIGV0Yy4KCjpzcGVbbGxnb29kXSEge3dvcmR9CUFkZCB7d29yZH0gYXMgYSBnb29kIHdvcmQgdG8gdGhlIGludGVybmFsIHdvcmQgbGlzdCwKCQkJbGlrZSB3aXRoICJ6RyIuCgoJCQkJCQkJKjpzcGVsbHcqICo6c3BlbGx3cm9uZyoKOltjb3VudF1zcGVsbHdbcm9uZ10ge3dvcmR9CgkJCUFkZCB7d29yZH0gYXMgYSB3cm9uZyAoYmFkKSB3b3JkIHRvICdzcGVsbGZpbGUnLCBhcwoJCQl3aXRoICJ6dyIuICBXaXRob3V0IGNvdW50IHRoZSBmaXJzdCBuYW1lIGlzIHVzZWQsIHdpdGgKCQkJYSBjb3VudCBvZiB0d28gdGhlIHNlY29uZCBlbnRyeSwgZXRjLgoKOnNwZWxsd1tyb25nXSEge3dvcmR9CUFkZCB7d29yZH0gYXMgYSB3cm9uZyAoYmFkKSB3b3JkIHRvIHRoZSBpbnRlcm5hbCB3b3JkCgkJCWxpc3QuCgpBZnRlciBhZGRpbmcgYSB3b3JkIHRvICdzcGVsbGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmRzIGl0cyBhc3NvY2lhdGVkCiIuc3BsIiBmaWxlIHdpbGwgYXV0b21hdGljYWxseSBiZSB1cGRhdGVkIGFuZCByZWxvYWRlZC4gIElmIHlvdSBjaGFuZ2UKJ3NwZWxsZmlsZScgbWFudWFsbHkgeW91IG5lZWQgdG8gdXNlIHRoZSB8Om1rc3BlbGx8IGNvbW1hbmQuICBUaGlzIHNlcXVlbmNlIG9mCmNvbW1hbmRzIG1vc3RseSB3b3JrcyB3ZWxsOiA+Cgk6ZWRpdCA8ZmlsZSBpbiAnc3BlbGxmaWxlJz4KPAkobWFrZSBjaGFuZ2VzIHRvIHRoZSBzcGVsbCBmaWxlKSA+Cgk6bWtzcGVsbCEgJQoKTW9yZSBkZXRhaWxzIGFib3V0IHRoZSAnc3BlbGxmaWxlJyBmb3JtYXQgYmVsb3cgfHNwZWxsLXdvcmRsaXN0LWZvcm1hdHwuCgoJCQkJCQkJKmludGVybmFsLXdvcmRsaXN0KgpUaGUgaW50ZXJuYWwgd29yZCBsaXN0IGlzIHVzZWQgZm9yIGFsbCBidWZmZXJzIHdoZXJlICdzcGVsbCcgaXMgc2V0LiAgSXQgaXMKbm90IHN0b3JlZCwgaXQgaXMgbG9zdCB3aGVuIHlvdSBleGl0IFZpbS4gIEl0IGlzIGFsc28gY2xlYXJlZCB3aGVuICdlbmNvZGluZycKaXMgc2V0LgoKCkZpbmRpbmcgc3VnZ2VzdGlvbnMgZm9yIGJhZCB3b3JkczoKCQkJCQkJCSp6PyoKej8JCQlGb3IgdGhlIHdvcmQgdW5kZXIvYWZ0ZXIgdGhlIGN1cnNvciBzdWdnZXN0IGNvcnJlY3RseQoJCQlzcGVsbGVkIHdvcmRzLiAgVGhpcyBhbHNvIHdvcmtzIHRvIGZpbmQgYWx0ZXJuYXRpdmVzCgkJCWZvciBhIHdvcmQgdGhhdCBpcyBub3QgaGlnaGxpZ2h0ZWQgYXMgYSBiYWQgd29yZCwKCQkJZS5nLiwgd2hlbiB0aGUgd29yZCBhZnRlciBpdCBpcyBiYWQuCgkJCVRoZSByZXN1bHRzIGFyZSBzb3J0ZWQgb24gc2ltaWxhcml0eSB0byB0aGUgd29yZAoJCQl1bmRlci9hZnRlciB0aGUgY3Vyc29yLgoJCQlUaGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lLiAgSGl0IENUUkwtQyB3aGVuIHlvdSBnZXQKCQkJYm9yZWQuCgoJCQlJZiB0aGUgY29tbWFuZCBpcyB1c2VkIHdpdGhvdXQgYSBjb3VudCB0aGUKCQkJYWx0ZXJuYXRpdmVzIGFyZSBsaXN0ZWQgYW5kIHlvdSBjYW4gZW50ZXIgdGhlIG51bWJlcgoJCQlvZiB5b3VyIGNob2ljZSBvciBwcmVzcyA8RW50ZXI+IGlmIHlvdSBkb24ndCB3YW50IHRvCgkJCXJlcGxhY2UuICBZb3UgY2FuIGFsc28gdXNlIHRoZSBtb3VzZSB0byBjbGljayBvbiB5b3VyCgkJCWNob2ljZSAob25seSB3b3JrcyBpZiB0aGUgbW91c2UgY2FuIGJlIHVzZWQgaW4gTm9ybWFsCgkJCW1vZGUgYW5kIHdoZW4gdGhlcmUgYXJlIG5vIGxpbmUgd3JhcHMpLiAgQ2xpY2sgb24gdGhlCgkJCWZpcnN0IGxpbmUgKHRoZSBoZWFkZXIpIHRvIGNhbmNlbC4KCgkJCUlmIGEgY291bnQgaXMgdXNlZCB0aGF0IHN1Z2dlc3Rpb24gaXMgdXNlZCwgd2l0aG91dAoJCQlwcm9tcHRpbmcuICBGb3IgZXhhbXBsZSwgIjF6PyIgYWx3YXlzIHRha2VzIHRoZSBmaXJzdAoJCQlzdWdnZXN0aW9uLgoKCQkJSWYgJ3ZlcmJvc2UnIGlzIG5vbi16ZXJvIGEgc2NvcmUgd2lsbCBiZSBkaXNwbGF5ZWQKCQkJd2l0aCB0aGUgc3VnZ2VzdGlvbnMgdG8gaW5kaWNhdGUgdGhlIGxpa2VsaW5lc3MgdG8gdGhlCgkJCWJhZGx5IHNwZWxsZWQgd29yZCAodGhlIGhpZ2hlciB0aGUgc2NvcmUgdGhlIG1vcmUKCQkJZGlmZmVyZW50KS4KCQkJV2hlbiBhIHdvcmQgd2FzIHJlcGxhY2VkIHRoZSByZWRvIGNvbW1hbmQgIi4iIHdpbGwKCQkJcmVwZWF0IHRoZSB3b3JkIHJlcGxhY2VtZW50LiAgVGhpcyB3b3JrcyBsaWtlICJjaXciLAoJCQl0aGUgZ29vZCB3b3JkIGFuZCA8RXNjPi4KCgkJCQkJKjpzcGVsbHIqICo6c3BlbGxyZXBhbGwqICpFNzUyKiAqRTc1MyoKOnNwZWxscltlcGFsbF0JCVJlcGVhdCB0aGUgcmVwbGFjZW1lbnQgZG9uZSBieSB8ej98IGZvciBhbGwgbWF0Y2hlcwoJCQl3aXRoIHRoZSByZXBsYWNlZCB3b3JkIGluIHRoZSBjdXJyZW50IHdpbmRvdy4KCkluIEluc2VydCBtb2RlLCB3aGVuIHRoZSBjdXJzb3IgaXMgYWZ0ZXIgYSBiYWRseSBzcGVsbGVkIHdvcmQsIHlvdSBjYW4gdXNlCkNUUkwtWCBzIHRvIGZpbmQgc3VnZ2VzdGlvbnMuICBUaGlzIHdvcmtzIGxpa2UgSW5zZXJ0IG1vZGUgY29tcGxldGlvbi4gIFVzZQpDVFJMLU4gdG8gdXNlIHRoZSBuZXh0IHN1Z2dlc3Rpb24sIENUUkwtUCB0byBnbyBiYWNrLiB8aV9DVFJMLVhfc3wKClRoZSAnc3BlbGxzdWdnZXN0JyBvcHRpb24gaW5mbHVlbmNlcyBob3cgdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgaXMgZ2VuZXJhdGVkCmFuZCBzb3J0ZWQuICBTZWUgfCdzcGVsbHN1Z2dlc3QnfC4KClRoZSAnc3BlbGxjYXBjaGVjaycgb3B0aW9uIGlzIHVzZWQgdG8gY2hlY2sgdGhlIGZpcnN0IHdvcmQgb2YgYSBzZW50ZW5jZQpzdGFydHMgd2l0aCBhIGNhcGl0YWwuICBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgdGhlIGZpcnN0IHdvcmQgaW4gdGhlIGZpbGUuCldoZW4gdGhlcmUgaXMgYSBsaW5lIGJyZWFrIHJpZ2h0IGFmdGVyIGEgc2VudGVuY2UgdGhlIGhpZ2hsaWdodGluZyBvZiB0aGUgbmV4dApsaW5lIG1heSBiZSBwb3N0cG9uZWQuICBVc2UgfENUUkwtTHwgd2hlbiBuZWVkZWQuICBBbHNvIHNlZSB8c2V0LXNwYy1hdXRvfCBmb3IKaG93IGl0IGNhbiBiZSBzZXQgYXV0b21hdGljYWxseSB3aGVuICdzcGVsbGxhbmcnIGlzIHNldC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBSZW1hcmtzIG9uIHNwZWxsIGNoZWNraW5nCQkJCSpzcGVsbC1yZW1hcmtzKgoKUEVSRk9STUFOQ0UKClZpbSBkb2VzIG9uLXRoZS1mbHkgc3BlbGwgY2hlY2tpbmcuICBUbyBtYWtlIHRoaXMgd29yayBmYXN0IHRoZSB3b3JkIGxpc3QgaXMKbG9hZGVkIGluIG1lbW9yeS4gIFRodXMgdGhpcyB1c2VzIGEgbG90IG9mIG1lbW9yeSAoMSBNYnl0ZSBvciBtb3JlKS4gIFRoZXJlCm1pZ2h0IGFsc28gYmUgYSBub3RpY2VhYmxlIGRlbGF5IHdoZW4gdGhlIHdvcmQgbGlzdCBpcyBsb2FkZWQsIHdoaWNoIGhhcHBlbnMKd2hlbiAnc3BlbGwnIGlzIHNldCBhbmQgd2hlbiAnc3BlbGxsYW5nJyBpcyBzZXQgd2hpbGUgJ3NwZWxsJyB3YXMgYWxyZWFkeSBzZXQuClRvIG1pbmltaXplIHRoZSBkZWxheSBlYWNoIHdvcmQgbGlzdCBpcyBvbmx5IGxvYWRlZCBvbmNlLCBpdCBpcyBub3QgZGVsZXRlZAp3aGVuICdzcGVsbGxhbmcnIGlzIG1hZGUgZW1wdHkgb3IgJ3NwZWxsJyBpcyByZXNldC4gIFdoZW4gJ2VuY29kaW5nJyBpcyBzZXQKYWxsIHRoZSB3b3JkIGxpc3RzIGFyZSByZWxvYWRlZCwgdGh1cyB5b3UgbWF5IG5vdGljZSBhIGRlbGF5IHRoZW4gdG9vLgoKClJFR0lPTlMKCkEgd29yZCBtYXkgYmUgc3BlbGxlZCBkaWZmZXJlbnRseSBpbiB2YXJpb3VzIHJlZ2lvbnMuICBGb3IgZXhhbXBsZSwgRW5nbGlzaApjb21lcyBpbiAoYXQgbGVhc3QpIHRoZXNlIHZhcmlhbnRzOgoKCWVuCQlhbGwgcmVnaW9ucwoJZW5fYXUJCUF1c3RyYWxpYQoJZW5fY2EJCUNhbmFkYQoJZW5fZ2IJCUdyZWF0IEJyaXRhaW4KCWVuX256CQlOZXcgWmVhbGFuZAoJZW5fdXMJCVVTQQoKV29yZHMgdGhhdCBhcmUgbm90IHVzZWQgaW4gb25lIHJlZ2lvbiBidXQgYXJlIHVzZWQgaW4gYW5vdGhlciByZWdpb24gYXJlCmhpZ2hsaWdodGVkIHdpdGggU3BlbGxMb2NhbCB8aGwtU3BlbGxMb2NhbHwuCgpBbHdheXMgdXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciB0aGUgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBuYW1lcy4KCldoZW4gYWRkaW5nIGEgd29yZCB3aXRoIHx6Z3wgb3IgYW5vdGhlciBjb21tYW5kIGl0J3MgYWx3YXlzIGFkZGVkIGZvciBhbGwKcmVnaW9ucy4gIFlvdSBjYW4gY2hhbmdlIHRoYXQgYnkgbWFudWFsbHkgZWRpdGluZyB0aGUgJ3NwZWxsZmlsZScuICBTZWUKfHNwZWxsLXdvcmRsaXN0LWZvcm1hdHwuICBOb3RlIHRoYXQgdGhlIHJlZ2lvbnMgYXMgc3BlY2lmaWVkIGluIHRoZSBmaWxlcyBpbgonc3BlbGxmaWxlJyBhcmUgb25seSB1c2VkIHdoZW4gYWxsIGVudHJpZXMgaW4gInNwZWxsbGFuZyIgc3BlY2lmeSB0aGUgc2FtZQpyZWdpb24gKG5vdCBjb3VudGluZyBmaWxlcyBzcGVjaWZpZWQgYnkgdGhlaXIgLnNwbCBuYW1lKS4KCgkJCQkJCQkqc3BlbGwtZ2VybWFuKgpTcGVjaWZpYyBleGNlcHRpb246IEZvciBHZXJtYW4gdGhlc2Ugc3BlY2lhbCByZWdpb25zIGFyZSB1c2VkOgoJZGUJCWFsbCBHZXJtYW4gd29yZHMgYWNjZXB0ZWQKCWRlX2RlCQlvbGQgYW5kIG5ldyBzcGVsbGluZwoJZGVfMTkJCW9sZCBzcGVsbGluZwoJZGVfMjAJCW5ldyBzcGVsbGluZwoJZGVfYXQJCUF1c3RyaWEKCWRlX2NoCQlTd2l0emVybGFuZAoKCQkJCQkJCSpzcGVsbC15aWRkaXNoKgpZaWRkaXNoIHJlcXVpcmVzIHVzaW5nICJ1dGYtOCIgZW5jb2RpbmcsIGJlY2F1c2Ugb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVycwp1c2VkLiAgSWYgeW91IGFyZSB1c2luZyBsYXRpbjEgVmltIHdpbGwgdXNlIHRyYW5zbGl0ZXJhdGVkIChyb21hbml6ZWQpIFlpZGRpc2gKaW5zdGVhZC4gIElmIHlvdSB3YW50IHRvIHVzZSB0cmFuc2xpdGVyYXRlZCBZaWRkaXNoIHdpdGggdXRmLTggdXNlICJ5aS10ciIuCkluIGEgdGFibGU6CgknZW5jb2RpbmcnCSdzcGVsbGxhbmcnCgl1dGYtOAkJeWkJCVlpZGRpc2gKCWxhdGluMQkJeWkJCXRyYW5zbGl0ZXJhdGVkIFlpZGRpc2gKCXV0Zi04CQl5aS10cgkJdHJhbnNsaXRlcmF0ZWQgWWlkZGlzaAoKClNQRUxMIEZJTEVTCQkJCQkJKnNwZWxsLWxvYWQqCgpWaW0gc2VhcmNoZXMgZm9yIHNwZWxsIGZpbGVzIGluIHRoZSAic3BlbGwiIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3JpZXMgaW4KJ3J1bnRpbWVwYXRoJy4gIFRoZSBuYW1lIGlzOiBMTC5FRUUuc3BsLCB3aGVyZToKCUxMCXRoZSBsYW5ndWFnZSBuYW1lCglFRUUJdGhlIHZhbHVlIG9mICdlbmNvZGluZycKClRoZSB2YWx1ZSBmb3IgIkxMIiBjb21lcyBmcm9tICdzcGVsbGxhbmcnLCBidXQgZXhjbHVkZXMgdGhlIHJlZ2lvbiBuYW1lLgpFeGFtcGxlczoKCSdzcGVsbGxhbmcnCUxMIH4KCWVuX3VzCQllbgoJZW4tcmFyZQkJZW4tcmFyZQoJbWVkaWNhbF9jYQltZWRpY2FsCgpPbmx5IHRoZSBmaXJzdCBmaWxlIGlzIGxvYWRlZCwgdGhlIG9uZSB0aGF0IGlzIGZpcnN0IGluICdydW50aW1lcGF0aCcuICBJZgp0aGlzIHN1Y2NlZWRzIHRoZW4gYWRkaXRpb25hbGx5IGZpbGVzIHdpdGggdGhlIG5hbWUgTEwuRUVFLmFkZC5zcGwgYXJlIGxvYWRlZC4KQWxsIHRoZSBvbmVzIHRoYXQgYXJlIGZvdW5kIGFyZSB1c2VkLgoKQWRkaXRpb25hbGx5LCB0aGUgZmlsZXMgcmVsYXRlZCB0byB0aGUgbmFtZXMgaW4gJ3NwZWxsZmlsZScgYXJlIGxvYWRlZC4gIFRoZXNlCmFyZSB0aGUgZmlsZXMgdGhhdCB8emd8IGFuZCB8end8IGFkZCBnb29kIGFuZCB3cm9uZyB3b3JkcyB0by4KCkV4Y2VwdGlvbnM6Ci0gVmltIHVzZXMgImxhdGluMSIgd2hlbiAnZW5jb2RpbmcnIGlzICJpc28tODg1OS0xNSIuICBUaGUgZXVybyBzaWduIGRvZXNuJ3QKICBtYXR0ZXIgZm9yIHNwZWxsaW5nLgotIFdoZW4gbm8gc3BlbGwgZmlsZSBmb3IgJ2VuY29kaW5nJyBpcyBmb3VuZCAiYXNjaWkiIGlzIHRyaWVkLiAgVGhpcyBvbmx5CiAgd29ya3MgZm9yIGxhbmd1YWdlcyB3aGVyZSBuZWFybHkgYWxsIHdvcmRzIGFyZSBBU0NJSSwgc3VjaCBhcyBFbmdsaXNoLiAgSXQKICBoZWxwcyB3aGVuICdlbmNvZGluZycgaXMgbm90ICJsYXRpbjEiLCBzdWNoIGFzIGlzby04ODU5LTIsIGFuZCBFbmdsaXNoIHRleHQKICBpcyBiZWluZyBlZGl0ZWQuICBGb3IgdGhlICIuYWRkIiBmaWxlcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBmb3VuZCBtYWluCiAgc3BlbGwgZmlsZSBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHdpdGggdGhlc2UgdmFsdWVzOgoJJ3J1bnRpbWVwYXRoJyBpcyAifi8udmltLC91c3Ivc2hhcmUvdmltNzAsfi8udmltL2FmdGVyIgoJJ2VuY29kaW5nJyAgICBpcyAiaXNvLTg4NTktMiIKCSdzcGVsbGxhbmcnICAgaXMgInBsIgoKVmltIHdpbGwgbG9vayBmb3I6CjEuIH4vLnZpbS9zcGVsbC9wbC5pc28tODg1OS0yLnNwbAoyLiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmlzby04ODU5LTIuc3BsCjMuIH4vLnZpbS9zcGVsbC9wbC5pc28tODg1OS0yLmFkZC5zcGwKNC4gL3Vzci9zaGFyZS92aW03MC9zcGVsbC9wbC5pc28tODg1OS0yLmFkZC5zcGwKNS4gfi8udmltL2FmdGVyL3NwZWxsL3BsLmlzby04ODU5LTIuYWRkLnNwbAoKVGhpcyBhc3N1bWVzIDEuIGlzIG5vdCBmb3VuZCBhbmQgMi4gaXMgZm91bmQuCgpJZiAnZW5jb2RpbmcnIGlzICJsYXRpbjEiIFZpbSB3aWxsIGxvb2sgZm9yOgoxLiB+Ly52aW0vc3BlbGwvcGwubGF0aW4xLnNwbAoyLiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmxhdGluMS5zcGwKMy4gfi8udmltL2FmdGVyL3NwZWxsL3BsLmxhdGluMS5zcGwKNC4gfi8udmltL3NwZWxsL3BsLmFzY2lpLnNwbAo1LiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmFzY2lpLnNwbAo2LiB+Ly52aW0vYWZ0ZXIvc3BlbGwvcGwuYXNjaWkuc3BsCgpUaGlzIGFzc3VtZXMgbm9uZSBvZiB0aGVtIGFyZSBmb3VuZCAoUG9saXNoIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aGVuIGxlYXZpbmcKb3V0IHRoZSBub24tQVNDSUkgY2hhcmFjdGVycykuCgpTcGVsbGluZyBmb3IgRUJDRElDIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgoKQSBzcGVsbCBmaWxlIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgJ2VuY29kaW5nJy4gIFNlZQp8c3BlbGwtbWtzcGVsbHwgYWJvdXQgaG93IHRvIGNyZWF0ZSBhIHNwZWxsIGZpbGUuICBDb252ZXJ0aW5nIGEgc3BlbGwgZmlsZQp3aXRoICJpY29udiIgd2lsbCBOT1Qgd29yayEKCgkJCQkJCQkqRTc1OCogKkU3NTkqCldoZW4gbG9hZGluZyBhIHNwZWxsIGZpbGUgVmltIGNoZWNrcyB0aGF0IGl0IGlzIHByb3Blcmx5IGZvcm1hdHRlZC4gIElmIHlvdQpnZXQgYW4gZXJyb3IgdGhlIGZpbGUgbWF5IGJlIHRydW5jYXRlZCwgbW9kaWZpZWQgb3IgaW50ZW5kZWQgZm9yIGFub3RoZXIgVmltCnZlcnNpb24uCgoKV09SRFMKClZpbSB1c2VzIGEgZml4ZWQgbWV0aG9kIHRvIHJlY29nbml6ZSBhIHdvcmQuICBUaGlzIGlzIGluZGVwZW5kZW50IG9mCidpc2tleXdvcmQnLCBzbyB0aGF0IGl0IGFsc28gd29ya3MgaW4gaGVscCBmaWxlcyBhbmQgZm9yIGxhbmd1YWdlcyB0aGF0CmluY2x1ZGUgY2hhcmFjdGVycyBsaWtlICctJyBpbiAnaXNrZXl3b3JkJy4gIFRoZSB3b3JkIGNoYXJhY3RlcnMgZG8gZGVwZW5kIG9uCidlbmNvZGluZycuCgpUaGUgdGFibGUgd2l0aCB3b3JkIGNoYXJhY3RlcnMgaXMgc3RvcmVkIGluIHRoZSBtYWluIC5zcGwgZmlsZS4gIFRoZXJlZm9yZSBpdAptYXR0ZXJzIHdoYXQgdGhlIGN1cnJlbnQgbG9jYWxlIGlzIHdoZW4gZ2VuZXJhdGluZyBpdCEgIEEgLmFkZC5zcGwgZmlsZSBkb2VzCm5vdCBjb250YWluIGEgd29yZCB0YWJsZSB0aG91Z2guCgpBIHdvcmQgdGhhdCBzdGFydHMgd2l0aCBhIGRpZ2l0IGlzIGFsd2F5cyBpZ25vcmVkLiAgVGhhdCBpbmNsdWRlcyBoZXggbnVtYmVycwppbiB0aGUgZm9ybSAweGZmIGFuZCAwWEZGLgoKCldPUkQgQ09NQklOQVRJT05TCgpJdCBpcyBwb3NzaWJsZSB0byBzcGVsbC1jaGVjayB3b3JkcyB0aGF0IGluY2x1ZGUgYSBzcGFjZS4gIFRoaXMgaXMgdXNlZCB0bwpyZWNvZ25pemUgd29yZHMgdGhhdCBhcmUgaW52YWxpZCB3aGVuIHVzZWQgYnkgdGhlbXNlbHZlcywgZS5nLiBmb3IgImV0IGFsLiIuCkl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVjb2duaXplICJ0aGUgdGhlIiBhbmQgaGlnaGxpZ2h0IGl0LgoKVGhlIG51bWJlciBvZiBzcGFjZXMgaXMgaXJyZWxldmFudC4gIEluIG1vc3QgY2FzZXMgYSBsaW5lIGJyZWFrIG1heSBhbHNvCmFwcGVhci4gIEhvd2V2ZXIsIHRoaXMgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZpbmQgb3V0IHdoZXJlIHRvIHN0YXJ0IGNoZWNraW5nCmZvciBzcGVsbGluZyBtaXN0YWtlcy4gIFdoZW4geW91IG1ha2UgYSBjaGFuZ2UgdG8gb25lIGxpbmUgYW5kIG9ubHkgdGhhdCBsaW5lCmlzIHJlZHJhd24gVmltIHdvbid0IGxvb2sgaW4gdGhlIHByZXZpb3VzIGxpbmUsIHRodXMgd2hlbiAiZXQiIGlzIGF0IHRoZSBlbmQKb2YgdGhlIHByZXZpb3VzIGxpbmUgImFsLiIgd2lsbCBiZSBmbGFnZ2VkIGFzIGFuIGVycm9yLiAgQW5kIHdoZW4geW91IHR5cGUKInRoZTxDUj50aGUiIHRoZSBoaWdobGlnaHRpbmcgZG9lc24ndCBhcHBlYXIgdW50aWwgdGhlIGZpcnN0IGxpbmUgaXMgcmVkcmF3bi4KVXNlIHxDVFJMLUx8IHRvIHJlZHJhdyByaWdodCBhd2F5LiAgIltzIiB3aWxsIGFsc28gc3RvcCBhdCBhIHdvcmQgY29tYmluYXRpb24Kd2l0aCBhIGxpbmUgYnJlYWsuCgpXaGVuIGVuY291bnRlcmluZyBhIGxpbmUgYnJlYWsgVmltIHNraXBzIGNoYXJhY3RlcnMgc3VjaCBhcyAnKicsICc+JyBhbmQgJyInLApzbyB0aGF0IGNvbW1lbnRzIGluIEMsIHNoZWxsIGFuZCBWaW0gY29kZSBjYW4gYmUgc3BlbGwgY2hlY2tlZC4KCgpTWU5UQVggSElHSExJR0hUSU5HCQkJCQkqc3BlbGwtc3ludGF4KgoKRmlsZXMgdGhhdCB1c2Ugc3ludGF4IGhpZ2hsaWdodGluZyBjYW4gc3BlY2lmeSB3aGVyZSBzcGVsbCBjaGVja2luZyBzaG91bGQgYmUKZG9uZToKCjEuICBldmVyeXdoZXJlCQkJICAgZGVmYXVsdAoyLiAgaW4gc3BlY2lmaWMgaXRlbXMJCSAgIHVzZSAiY29udGFpbnM9QFNwZWxsIgozLiAgZXZlcnl3aGVyZSBidXQgc3BlY2lmaWMgaXRlbXMgIHVzZSAiY29udGFpbnM9QE5vU3BlbGwiCgpGb3IgdGhlIHNlY29uZCBtZXRob2QgYWRkaW5nIHRoZSBATm9TcGVsbCBjbHVzdGVyIHdpbGwgZGlzYWJsZSBzcGVsbCBjaGVja2luZwphZ2Fpbi4gIFRoaXMgY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhZGQgQFNwZWxsIHRvIHRoZSBjb21tZW50cyBvZiBhCnByb2dyYW0sIGFuZCBhZGQgQE5vU3BlbGwgZm9yIGl0ZW1zIHRoYXQgc2hvdWxkbid0IGJlIGNoZWNrZWQuCgoKVklNIFNDUklQVFMKCklmIHlvdSB3YW50IHRvIHdyaXRlIGEgVmltIHNjcmlwdCB0aGF0IGRvZXMgc29tZXRoaW5nIHdpdGggc3BlbGxpbmcsIHlvdSBtYXkKZmluZCB0aGVzZSBmdW5jdGlvbnMgdXNlZnVsOgoKICAgIHNwZWxsYmFkd29yZCgpCWZpbmQgYmFkbHkgc3BlbGxlZCB3b3JkIGF0IHRoZSBjdXJzb3IKICAgIHNwZWxsc3VnZ2VzdCgpCWdldCBsaXN0IG9mIHNwZWxsaW5nIHN1Z2dlc3Rpb25zCiAgICBzb3VuZGZvbGQoKQkJZ2V0IHRoZSBzb3VuZC1hLWxpa2UgdmVyc2lvbiBvZiBhIHdvcmQKCgpTRVRUSU5HICdzcGVsbGNhcGNoZWNrJyBBVVRPTUFUSUNBTExZCQkJKnNldC1zcGMtYXV0byoKCkFmdGVyIHRoZSAnc3BlbGxsYW5nJyBvcHRpb24gaGFzIGJlZW4gc2V0IHN1Y2Nlc3NmdWxseSwgVmltIHdpbGwgc291cmNlIHRoZQpmaWxlcyAic3BlbGwvTEFORy52aW0iIGluICdydW50aW1lcGF0aCcuICAiTEFORyIgaXMgdGhlIHZhbHVlIG9mICdzcGVsbGxhbmcnCnVwIHRvIHRoZSBmaXJzdCBjb21tYSwgZG90IG9yIHVuZGVyc2NvcmUuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBvcHRpb25zCnNwZWNpZmljYWxseSBmb3IgdGhlIGxhbmd1YWdlLCBlc3BlY2lhbGx5ICdzcGVsbGNhcGNoZWNrJy4KClRoZSBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSBmZXcgb2YgdGhlc2UgZmlsZXMuICBVc2UgdGhpcyBjb21tYW5kIHRvIHNlZSB3aGF0CnRoZXkgZG86ID4KCTpuZXh0ICRWSU1SVU5USU1FL3NwZWxsLyoudmltCgpOb3RlIHRoYXQgdGhlIGRlZmF1bHQgc2NyaXB0cyBkb24ndCBzZXQgJ3NwZWxsY2FwY2hlY2snIGlmIGl0IHdhcyBjaGFuZ2VkIGZyb20KdGhlIGRlZmF1bHQgdmFsdWUuICBUaGlzIGFzc3VtZXMgdGhlIHVzZXIgcHJlZmVycyBhbm90aGVyIHZhbHVlIHRoZW4uCgoKRE9VQkxFIFNDT1JJTkcJCQkJCQkqc3BlbGwtZG91YmxlLXNjb3JpbmcqCgpUaGUgJ3NwZWxsc3VnZ2VzdCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCAiZG91YmxlIiBzY29yaW5nLiAgVGhpcwptZWNoYW5pc20gaXMgYmFzZWQgb24gdGhlIHByaW5jaXBsZSB0aGF0IHRoZXJlIGFyZSB0d28ga2luZHMgb2Ygc3BlbGxpbmcKbWlzdGFrZXM6CgoxLiBZb3Uga25vdyBob3cgdG8gc3BlbGwgdGhlIHdvcmQsIGJ1dCBtaXN0eXBlIHNvbWV0aGluZy4gIFRoaXMgcmVzdWx0cyBpbiBhCiAgIHNtYWxsIGVkaXRpbmcgZGlzdGFuY2UgKGNoYXJhY3RlciBzd2FwcGVkL29taXR0ZWQvaW5zZXJ0ZWQpIGFuZCBwb3NzaWJseSBhCiAgIHdvcmQgdGhhdCBzb3VuZHMgY29tcGxldGVseSBkaWZmZXJlbnQuCgoyLiBZb3UgZG9uJ3Qga25vdyBob3cgdG8gc3BlbGwgdGhlIHdvcmQgYW5kIHR5cGUgc29tZXRoaW5nIHRoYXQgc291bmRzIHJpZ2h0LgogICBUaGUgZWRpdCBkaXN0YW5jZSBjYW4gYmUgYmlnIGJ1dCB0aGUgd29yZCBpcyBzaW1pbGFyIGFmdGVyIHNvdW5kLWZvbGRpbmcuCgpTaW5jZSBzY29yZXMgZm9yIHRoZXNlIHR3byBtaXN0YWtlcyB3aWxsIGJlIHZlcnkgZGlmZmVyZW50IHdlIHVzZSBhIGxpc3QKZm9yIGVhY2ggYW5kIG1peCB0aGVtLgoKVGhlIHNvdW5kLWZvbGRpbmcgaXMgc2xvdyBhbmQgcGVvcGxlIHRoYXQga25vdyB0aGUgbGFuZ3VhZ2Ugd29uJ3QgbWFrZSB0aGUKc2Vjb25kIGtpbmQgb2YgbWlzdGFrZXMuICBUaGVyZWZvcmUgJ3NwZWxsc3VnZ2VzdCcgY2FuIGJlIHNldCB0byBzZWxlY3QgdGhlCnByZWZlcnJlZCBtZXRob2QgZm9yIHNjb3JpbmcgdGhlIHN1Z2dlc3Rpb25zLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIEdlbmVyYXRpbmcgYSBzcGVsbCBmaWxlCQkJCSpzcGVsbC1ta3NwZWxsKgoKVmltIHVzZXMgYSBiaW5hcnkgZmlsZSBmb3JtYXQgZm9yIHNwZWxsaW5nLiAgVGhpcyBncmVhdGx5IHNwZWVkcyB1cCBsb2FkaW5nCnRoZSB3b3JkIGxpc3QgYW5kIGtlZXBzIGl0IHNtYWxsLgoJCQkJCQkgICAgKi5hZmYqICouZGljKiAqTXlzcGVsbCoKWW91IGNhbiBjcmVhdGUgYSBWaW0gc3BlbGwgZmlsZSBmcm9tIHRoZSAuYWZmIGFuZCAuZGljIGZpbGVzIHRoYXQgTXlzcGVsbAp1c2VzLiAgTXlzcGVsbCBpcyB1c2VkIGJ5IE9wZW5PZmZpY2Uub3JnIGFuZCBNb3ppbGxhLiAgWW91IHNob3VsZCBiZSBhYmxlIHRvCmZpbmQgdGhlbSBoZXJlOgoJaHR0cDovL2xpbmd1Y29tcG9uZW50Lm9wZW5vZmZpY2Uub3JnL3NwZWxsX2RpYy5odG1sCllvdSBjYW4gYWxzbyB1c2UgYSBwbGFpbiB3b3JkIGxpc3QuICBUaGUgcmVzdWx0cyBhcmUgdGhlIHNhbWUsIHRoZSBjaG9pY2UKZGVwZW5kcyBvbiB3aGF0IHdvcmQgbGlzdHMgeW91IGNhbiBmaW5kLgoKSWYgeW91IGluc3RhbGwgQWFwIChmcm9tIHd3dy5hLWEtcC5vcmcpIHlvdSBjYW4gdXNlIHRoZSByZWNpcGVzIGluIHRoZQpydW50aW1lL3NwZWxsLz8/LyBkaXJlY3Rvcmllcy4gIEFhcCB3aWxsIHRha2UgY2FyZSBvZiBkb3dubG9hZGluZyB0aGUgZmlsZXMsCmFwcGx5IHBhdGNoZXMgbmVlZGVkIGZvciBWaW0gYW5kIGJ1aWxkIHRoZSAuc3BsIGZpbGUuCgpNYWtlIHN1cmUgeW91ciBjdXJyZW50IGxvY2FsZSBpcyBzZXQgcHJvcGVybHksIG90aGVyd2lzZSBWaW0gZG9lc24ndCBrbm93IHdoYXQKY2hhcmFjdGVycyBhcmUgdXBwZXIvbG93ZXIgY2FzZSBsZXR0ZXJzLiAgSWYgdGhlIGxvY2FsZSBpc24ndCBhdmFpbGFibGUgKGUuZy4sCndoZW4gdXNpbmcgYW4gTVMtV2luZG93cyBjb2RlcGFnZSBvbiBVbml4KSBhZGQgdGFibGVzIHRvIHRoZSAuYWZmIGZpbGUKfHNwZWxsLWFmZml4LWNoYXJzfC4gIElmIHRoZSAuYWZmIGZpbGUgZG9lc24ndCBkZWZpbmUgYSB0YWJsZSB0aGVuIHRoZSB3b3JkCnRhYmxlIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNwZWxsaW5nIGlzIHVzZWQuICBJZiBzcGVsbGluZyBpcyBub3QgYWN0aXZlCnRoZW4gVmltIHdpbGwgdHJ5IHRvIGd1ZXNzLgoKCQkJCQkJCSo6bWtzcCogKjpta3NwZWxsKgo6bWtzcFtlbGxdWyFdIFstYXNjaWldIHtvdXRuYW1lfSB7aW5uYW1lfSAuLi4KCQkJR2VuZXJhdGUgYSBWaW0gc3BlbGwgZmlsZSB3b3JkIGxpc3RzLiAgRXhhbXBsZTogPgoJCTpta3NwZWxsIC90bXAvbmwgbmxfTkwud29yZHMKPAkJCQkJCQkJKkU3NTEqCgkJCVdoZW4ge291dG5hbWV9IGVuZHMgaW4gIi5zcGwiIGl0IGlzIHVzZWQgYXMgdGhlIG91dHB1dAoJCQlmaWxlIG5hbWUuICBPdGhlcndpc2UgaXQgc2hvdWxkIGJlIGEgbGFuZ3VhZ2UgbmFtZSwKCQkJc3VjaCBhcyAiZW4iLCB3aXRob3V0IHRoZSByZWdpb24gbmFtZS4gIFRoZSBmaWxlCgkJCXdyaXR0ZW4gd2lsbCBiZSAie291dG5hbWV9LntlbmNvZGluZ30uc3BsIiwgd2hlcmUKCQkJe2VuY29kaW5nfSBpcyB0aGUgdmFsdWUgb2YgdGhlICdlbmNvZGluZycgb3B0aW9uLgoKCQkJV2hlbiB0aGUgb3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMgWyFdIG11c3QgYmUgdXNlZAoJCQl0byBvdmVyd3JpdGUgaXQuCgoJCQlXaGVuIHRoZSBbLWFzY2lpXSBhcmd1bWVudCBpcyBwcmVzZW50LCB3b3JkcyB3aXRoCgkJCW5vbi1hc2NpaSBjaGFyYWN0ZXJzIGFyZSBza2lwcGVkLiAgVGhlIHJlc3VsdGluZyBmaWxlCgkJCWVuZHMgaW4gImFzY2lpLnNwbCIuCgoJCQlUaGUgaW5wdXQgY2FuIGJlIHRoZSBNeXNwZWxsIGZvcm1hdCBmaWxlcyB7aW5uYW1lfS5hZmYKCQkJYW5kIHtpbm5hbWV9LmRpYy4gIElmIHtpbm5hbWV9LmFmZiBkb2VzIG5vdCBleGlzdCB0aGVuCgkJCXtpbm5hbWV9IGlzIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBvZiBhIHBsYWluIHdvcmQKCQkJbGlzdC4KCgkJCU11bHRpcGxlIHtpbm5hbWV9IGFyZ3VtZW50cyBjYW4gYmUgZ2l2ZW4gdG8gY29tYmluZQoJCQlyZWdpb25zIGludG8gb25lIFZpbSBzcGVsbCBmaWxlLiAgRXhhbXBsZTogPgoJCTpta3NwZWxsIH4vLnZpbS9zcGVsbC9lbiAvdG1wL2VuX1VTIC90bXAvZW5fQ0EgL3RtcC9lbl9BVQo8CQkJVGhpcyBjb21iaW5lcyB0aGUgRW5nbGlzaCB3b3JkIGxpc3RzIGZvciBVUywgQ0EgYW5kIEFVCgkJCWludG8gb25lIGVuLnNwbCBmaWxlLgoJCQlVcCB0byBlaWdodCByZWdpb25zIGNhbiBiZSBjb21iaW5lZC4gKkU3NTQqICo3NTUqCgkJCVRoZSBSRVAgYW5kIFNBTCBpdGVtcyBvZiB0aGUgZmlyc3QgLmFmZiBmaWxlIHdoZXJlCgkJCXRoZXkgYXBwZWFyIGFyZSB1c2VkLiB8c3BlbGwtYWZmaXgtUkVQfAoJCQl8c3BlbGwtYWZmaXgtU0FMfAoKCQkJVGhpcyBjb21tYW5kIHVzZXMgYSBsb3Qgb2YgbWVtb3J5LCByZXF1aXJlZCB0byBmaW5kCgkJCXRoZSBvcHRpbWFsIHdvcmQgdHJlZSAoUG9saXNoLCBJdGFsaWFuIGFuZCBIdW5nYXJpYW4KCQkJcmVxdWlyZSBzZXZlcmFsIGh1bmRyZWQgTWJ5dGUpLiAgVGhlIGZpbmFsIHJlc3VsdCB3aWxsCgkJCWJlIG11Y2ggc21hbGxlciwgYmVjYXVzZSBjb21wcmVzc2lvbiBpcyB1c2VkLiAgVG8KCQkJYXZvaWQgcnVubmluZyBvdXQgb2YgbWVtb3J5IGNvbXByZXNzaW9uIHdpbGwgYmUgZG9uZQoJCQlub3cgYW5kIHRoZW4uICBUaGlzIGNhbiBiZSB0dW5lZCB3aXRoIHRoZSAnbWtzcGVsbG1lbScKCQkJb3B0aW9uLgoKCQkJQWZ0ZXIgdGhlIHNwZWxsIGZpbGUgd2FzIHdyaXR0ZW4gYW5kIGl0IHdhcyBiZWluZyB1c2VkCgkJCWluIGEgYnVmZmVyIGl0IHdpbGwgYmUgcmVsb2FkZWQgYXV0b21hdGljYWxseS4KCjpta3NwW2VsbF0gWy1hc2NpaV0ge25hbWV9LntlbmN9LmFkZAoJCQlMaWtlICI6bWtzcGVsbCIgYWJvdmUsIHVzaW5nIHtuYW1lfS57ZW5jfS5hZGQgYXMgdGhlCgkJCWlucHV0IGZpbGUgYW5kIHByb2R1Y2luZyBhbiBvdXRwdXQgZmlsZSBpbiB0aGUgc2FtZQoJCQlkaXJlY3RvcnkgdGhhdCBoYXMgIi5zcGwiIGFwcGVuZGVkLgoKOm1rc3BbZWxsXSBbLWFzY2lpXSB7bmFtZX0KCQkJTGlrZSAiOm1rc3BlbGwiIGFib3ZlLCB1c2luZyB7bmFtZX0gYXMgdGhlIGlucHV0IGZpbGUKCQkJYW5kIHByb2R1Y2luZyBhbiBvdXRwdXQgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKCQkJdGhhdCBoYXMgIi57ZW5jfS5zcGwiIGFwcGVuZGVkLgoKVmltIHdpbGwgcmVwb3J0IHRoZSBudW1iZXIgb2YgZHVwbGljYXRlIHdvcmRzLiAgVGhpcyBtaWdodCBiZSBhIG1pc3Rha2UgaW4gdGhlCmxpc3Qgb2Ygd29yZHMuICBCdXQgc29tZXRpbWVzIGl0IGlzIHVzZWQgdG8gaGF2ZSBkaWZmZXJlbnQgcHJlZml4ZXMgYW5kCnN1ZmZpeGVzIGZvciB0aGUgc2FtZSBiYXNpYyB3b3JkIHRvIGF2b2lkIHRoZW0gY29tYmluaW5nIChlLmcuIEN6ZWNoIHVzZXMKdGhpcykuICBJZiB5b3Ugd2FudCBWaW0gdG8gcmVwb3J0IGFsbCBkdXBsaWNhdGUgd29yZHMgc2V0IHRoZSAndmVyYm9zZScKb3B0aW9uLgoKU2luY2UgeW91IG1pZ2h0IHdhbnQgdG8gY2hhbmdlIGEgTXlzcGVsbCB3b3JkIGxpc3QgZm9yIHVzZSB3aXRoIFZpbSB0aGUKZm9sbG93aW5nIHByb2NlZHVyZSBpcyByZWNvbW1lbmRlZDoKCjEuIE9idGFpbiB0aGUgeHhfWVkuYWZmIGFuZCB4eF9ZWS5kaWMgZmlsZXMgZnJvbSBNeXNwZWxsLgoyLiBNYWtlIGEgY29weSBvZiB0aGVzZSBmaWxlcyB0byB4eF9ZWS5vcmlnLmFmZiBhbmQgeHhfWVkub3JpZy5kaWMuCjMuIENoYW5nZSB0aGUgeHhfWVkuYWZmIGFuZCB4eF9ZWS5kaWMgZmlsZXMgdG8gcmVtb3ZlIGJhZCB3b3JkcywgYWRkIG1pc3NpbmcKICAgd29yZHMsIGRlZmluZSB3b3JkIGNoYXJhY3RlcnMgd2l0aCBGT0wvTE9XL1VQUCwgZXRjLiAgVGhlIGRpc3RyaWJ1dGVkCiAgICJzcmMvc3BlbGwvKi5kaWZmIiBmaWxlcyBjYW4gYmUgdXNlZC4KNC4gU3RhcnQgVmltIHdpdGggdGhlIHJpZ2h0IGxvY2FsZSBhbmQgdXNlIHw6bWtzcGVsbHwgdG8gZ2VuZXJhdGUgdGhlIFZpbQogICBzcGVsbCBmaWxlLgo1LiBUcnkgb3V0IHRoZSBzcGVsbCBmaWxlIHdpdGggIjpzZXQgc3BlbGwgc3BlbGxsYW5nPXh4IiBpZiB5b3Ugd3JvdGUgaXQgaW4KICAgYSBzcGVsbCBkaXJlY3RvcnkgaW4gJ3J1bnRpbWVwYXRoJywgb3IgIjpzZXQgc3BlbGxsYW5nPXh4LmVuYy5zcGwiIGlmIHlvdQogICB3cm90ZSBpdCBzb21ld2hlcmUgZWxzZS4KCldoZW4gdGhlIE15c3BlbGwgZmlsZXMgYXJlIHVwZGF0ZWQgeW91IGNhbiBtZXJnZSB0aGUgZGlmZmVyZW5jZXM6CjEuIE9idGFpbiB0aGUgbmV3IE15c3BlbGwgZmlsZXMgYXMgeHhfWVkubmV3LmFmZiBhbmQgeHhfVVUubmV3LmRpYy4KMi4gVXNlIFZpbWRpZmYgdG8gc2VlIHdoYXQgY2hhbmdlZDogPgoJdmltZGlmZiB4eF9ZWS5vcmlnLmRpYyB4eF9ZWS5uZXcuZGljCjMuIFRha2Ugb3ZlciB0aGUgY2hhbmdlcyB5b3UgbGlrZSBpbiB4eF9ZWS5kaWMuCiAgIFlvdSBtYXkgYWxzbyBuZWVkIHRvIGNoYW5nZSB4eF9ZWS5hZmYuCjQuIFJlbmFtZSB4eF9ZWS5uZXcuZGljIHRvIHh4X1lZLm9yaWcuZGljIGFuZCB4eF9ZWS5uZXcuYWZmIHRvIHh4X1lZLm5ldy5hZmYuCgoKU1BFTEwgRklMRSBWRVJTSU9OUwkJCQkJKkU3NzAqICpFNzcxKiAqRTc3MioKClNwZWxsIGNoZWNraW5nIGlzIGEgcmVsYXRpdmVseSBuZXcgZmVhdHVyZSBpbiBWaW0sIHRodXMgaXQncyBwb3NzaWJsZSB0aGF0IHRoZQouc3BsIGZpbGUgZm9ybWF0IHdpbGwgYmUgY2hhbmdlZCB0byBzdXBwb3J0IG1vcmUgbGFuZ3VhZ2VzLiAgVmltIHdpbGwgY2hlY2sKdGhlIHZhbGlkaXR5IG9mIHRoZSBzcGVsbCBmaWxlIGFuZCByZXBvcnQgYW55dGhpbmcgd3JvbmcuCgoJRTc3MTogT2xkIHNwZWxsIGZpbGUsIG5lZWRzIHRvIGJlIHVwZGF0ZWQgfgpUaGlzIHNwZWxsIGZpbGUgaXMgb2xkZXIgdGhhbiB5b3VyIFZpbS4gIFlvdSBuZWVkIHRvIHVwZGF0ZSB0aGUgLnNwbCBmaWxlLgoKCUU3NzI6IFNwZWxsIGZpbGUgaXMgZm9yIG5ld2VyIHZlcnNpb24gb2YgVmltIH4KVGhpcyBtZWFucyB0aGUgc3BlbGwgZmlsZSB3YXMgbWFkZSBmb3IgYSBsYXRlciB2ZXJzaW9uIG9mIFZpbS4gIFlvdSBuZWVkIHRvCnVwZGF0ZSBWaW0uCgoJRTc3MDogVW5zdXBwb3J0ZWQgc2VjdGlvbiBpbiBzcGVsbCBmaWxlIH4KVGhpcyBtZWFucyB0aGUgc3BlbGwgZmlsZSB3YXMgbWFkZSBmb3IgYSBsYXRlciB2ZXJzaW9uIG9mIFZpbSBhbmQgY29udGFpbnMgYQpzZWN0aW9uIHRoYXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBzcGVsbCBmaWxlIHRvIHdvcmsuICBJbiB0aGlzIGNhc2UgaXQncwpwcm9iYWJseSBhIGdvb2QgaWRlYSB0byB1cGdyYWRlIHlvdXIgVmltLgoKClNQRUxMIEZJTEUgRFVNUAoKSWYgZm9yIHNvbWUgcmVhc29uIHlvdSB3YW50IHRvIGNoZWNrIHdoYXQgd29yZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudGx5CnVzZWQgc3BlbGxpbmcgZmlsZXMsIHVzZSB0aGlzIGNvbW1hbmQ6CgoJCQkJCQkJKjpzcGVsbGR1bXAqICo6c3BlbGxkKgo6c3BlbGxkW3VtcF0JCU9wZW4gYSBuZXcgd2luZG93IGFuZCBmaWxsIGl0IHdpdGggYWxsIGN1cnJlbnRseSB2YWxpZAoJCQl3b3Jkcy4KCQkJTm90ZTogRm9yIHNvbWUgbGFuZ3VhZ2VzIHRoZSByZXN1bHQgbWF5IGJlIGVub3Jtb3VzLAoJCQljYXVzaW5nIFZpbSB0byBydW4gb3V0IG9mIG1lbW9yeS4KClRoZSBmb3JtYXQgb2YgdGhlIHdvcmQgbGlzdCBpcyB1c2VkIHxzcGVsbC13b3JkbGlzdC1mb3JtYXR8LiAgWW91IHNob3VsZCBiZQphYmxlIHRvIHJlYWQgaXQgd2l0aCAiOm1rc3BlbGwiIHRvIGdlbmVyYXRlIG9uZSAuc3BsIGZpbGUgdGhhdCBpbmNsdWRlcyBhbGwKdGhlIHdvcmRzLgoKV2hlbiBhbGwgZW50cmllcyB0byAnc3BlbGxsYW5nJyB1c2UgdGhlIHNhbWUgcmVnaW9ucyBvciBubyByZWdpb25zIGF0IGFsbCB0aGVuCnRoZSByZWdpb24gaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIGR1bXBlZCB3b3Jkcy4gIE90aGVyd2lzZSBvbmx5IHdvcmRzCmZvciB0aGUgY3VycmVudCByZWdpb24gYXJlIGluY2x1ZGVkIGFuZCBubyAiL3JlZ2lvbnMiIGxpbmUgaXMgZ2VuZXJhdGVkLgoKQ29tbWVudCBsaW5lcyB3aXRoIHRoZSBuYW1lIG9mIHRoZSAuc3BsIGZpbGUgYXJlIHVzZWQgYXMgYSBoZWFkZXIgYWJvdmUgdGhlCndvcmRzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgZnJvbSB0aGF0IC5zcGwgZmlsZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBTcGVsbCBmaWxlIGZvcm1hdAkJCQkJKnNwZWxsLWZpbGUtZm9ybWF0KgoKVGhpcyBpcyB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBwZXJzb24gd2hvIGNyZWF0ZXMgYW5kCm1haW50YWlucyBhIHdvcmQgbGlzdC4KCk5vdGUgdGhhdCB3ZSBhdm9pZCB0aGUgd29yZCAiZGljdGlvbmFyeSIgaGVyZS4gIFRoYXQgaXMgYmVjYXVzZSB0aGUgZ29hbCBvZgpzcGVsbCBjaGVja2luZyBkaWZmZXJzIGZyb20gd3JpdGluZyBhIGRpY3Rpb25hcnkgKGFzIGluIHRoZSBib29rKS4gIEZvcgpzcGVsbGluZyB3ZSBuZWVkIGEgbGlzdCBvZiB3b3JkcyB0aGF0IGFyZSBPSywgdGh1cyBzaG91bGQgbm90IHRvIGJlCmhpZ2hsaWdodGVkLiAgUGVyc29uIGFuZCBjb21wYW55IG5hbWVzIHdpbGwgbm90IGFwcGVhciBpbiBhIGRpY3Rpb25hcnksIGJ1dCBkbwphcHBlYXIgaW4gYSB3b3JkIGxpc3QuICBBbmQgc29tZSBvbGQgd29yZHMgYXJlIHJhcmVseSB1c2VkIHdoaWxlIHRoZXkgYXJlCmNvbW1vbiBtaXNzcGVsbGluZ3MuICBUaGVzZSBkbyBhcHBlYXIgaW4gYSBkaWN0aW9uYXJ5IGJ1dCBub3QgaW4gYSB3b3JkIGxpc3QuCgpUaGVyZSBhcmUgdHdvIGZvcm1hdHM6IEEgc3RyYWlnaHQgbGlzdCBvZiB3b3JkcyBhbmQgYSBsaXN0IHVzaW5nIGFmZml4CmNvbXByZXNzaW9uLiAgVGhlIGZpbGVzIHdpdGggYWZmaXggY29tcHJlc3Npb24gYXJlIHVzZWQgYnkgTXlzcGVsbCAoTW96aWxsYQphbmQgT3Blbk9mZmljZS5vcmcpLiAgVGhpcyByZXF1aXJlcyB0d28gZmlsZXMsIG9uZSB3aXRoIC5hZmYgYW5kIG9uZSB3aXRoIC5kaWMKZXh0ZW5zaW9uLgoKCkZPUk1BVCBPRiBTVFJBSUdIVCBXT1JEIExJU1QJCQkJKnNwZWxsLXdvcmRsaXN0LWZvcm1hdCoKClRoZSB3b3JkcyBtdXN0IGFwcGVhciBvbmUgcGVyIGxpbmUuICBUaGF0IGlzIGFsbCB0aGF0IGlzIHJlcXVpcmVkLgoKQWRkaXRpb25hbGx5IHRoZSBmb2xsb3dpbmcgaXRlbXMgYXJlIHJlY29nbml6ZWQ6CgotIEVtcHR5IGFuZCBibGFuayBsaW5lcyBhcmUgaWdub3JlZC4KCi0gTGluZXMgc3RhcnRpbmcgd2l0aCBhICMgYXJlIGlnbm9yZWQgKGNvbW1lbnQgbGluZXMpLgoKLSBBIGxpbmUgc3RhcnRpbmcgd2l0aCAiL2VuY29kaW5nPSIsIGJlZm9yZSBhbnkgd29yZCwgc3BlY2lmaWVzIHRoZSBlbmNvZGluZwogIG9mIHRoZSBmaWxlLiAgQWZ0ZXIgdGhlIHNlY29uZCAnPScgY29tZXMgYW4gZW5jb2RpbmcgbmFtZS4gIFRoaXMgdGVsbHMgVmltCiAgdG8gc2V0dXAgY29udmVyc2lvbiBmcm9tIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgdG8gJ2VuY29kaW5nJy4gIFRodXMgeW91IGNhbgogIHVzZSBvbmUgd29yZCBsaXN0IGZvciBzZXZlcmFsIHRhcmdldCBlbmNvZGluZ3MuCgotIEEgbGluZSBzdGFydGluZyB3aXRoICIvcmVnaW9ucz0iIHNwZWNpZmllcyB0aGUgcmVnaW9uIG5hbWVzIHRoYXQgYXJlCiAgc3VwcG9ydGVkLiAgRWFjaCByZWdpb24gbmFtZSBtdXN0IGJlIHR3byBBU0NJSSBsZXR0ZXJzLiAgVGhlIGZpcnN0IG9uZSBpcwogIHJlZ2lvbiAxLiAgVGh1cyAiL3JlZ2lvbnM9dXNjYSIgaGFzIHJlZ2lvbiAxICJ1cyIgYW5kIHJlZ2lvbiAyICJjYSIuCiAgSW4gYW4gYWRkaXRpb24gd29yZCBsaXN0IHRoZSByZWdpb24gbmFtZXMgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBtYWluIHdvcmQKICBsaXN0IQoKLSBPdGhlciBsaW5lcyBzdGFydGluZyB3aXRoICcvJyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICBUaGUgb25lcyB0aGF0CiAgYXJlIG5vdCByZWNvZ25pemVkIGFyZSBpZ25vcmVkIChidXQgeW91IGRvIGdldCBhIHdhcm5pbmcgbWVzc2FnZSkuCgotIEEgIi8iIG1heSBmb2xsb3cgdGhlIHdvcmQgd2l0aCB0aGUgZm9sbG93aW5nIGl0ZW1zOgogICAgPSAgIAlDYXNlIG11c3QgbWF0Y2ggZXhhY3RseS4KICAgID8JCVJhcmUgd29yZC4KICAgICEJCUJhZCAod3JvbmcpIHdvcmQuCiAgICBkaWdpdAlBIHJlZ2lvbiBpbiB3aGljaCB0aGUgd29yZCBpcyB2YWxpZC4gIElmIG5vIHJlZ2lvbnMgYXJlCiAgICAJCXNwZWNpZmllZCB0aGUgd29yZCBpcyB2YWxpZCBpbiBhbGwgcmVnaW9ucy4KCkV4YW1wbGU6CgoJIyBUaGlzIGlzIGFuIGV4YW1wbGUgd29yZCBsaXN0CQljb21tZW50CgkvZW5jb2Rpbmc9bGF0aW4xCQkJZW5jb2Rpbmcgb2YgdGhlIGZpbGUKCS9yZWdpb25zPXVzY2FnYgkJCQlyZWdpb25zICJ1cyIsICJjYSIgYW5kICJnYiIKCWV4YW1wbGUJCQkJCXdvcmQgZm9yIGFsbCByZWdpb25zCglibGFoLzEyCQkJCQl3b3JkIGZvciByZWdpb25zICJ1cyIgYW5kICJjYSIKCXZpbS8hCQkJCQliYWQgd29yZAoJQ2FtcGJlbGwvPzMJCQkJcmFyZSB3b3JkIGluIHJlZ2lvbiAzICJnYiIKCSdzIG1vcm5pbmdzLz0JCQkJa2VlcC1jYXNlIHdvcmQKCk5vdGUgdGhhdCB3aGVuICIvPSIgaXMgdXNlZCB0aGUgc2FtZSB3b3JkIHdpdGggYWxsIHVwcGVyLWNhc2UgbGV0dGVycyBpcyBub3QKYWNjZXB0ZWQuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGEgd29yZCB3aXRoIG1peGVkIGNhc2UgdGhhdCBpcyBhdXRvbWF0aWNhbGx5Cm1hcmtlZCBhcyBrZWVwLWNhc2UsIHRob3NlIHdvcmRzIG1heSBhcHBlYXIgaW4gYWxsIHVwcGVyLWNhc2UgbGV0dGVycy4KCgpGT1JNQVQgV0lUSCBBRkZJWCBDT01QUkVTU0lPTgoKVGhlcmUgYXJlIHR3byBmaWxlczogdGhlIGJhc2ljIHdvcmQgbGlzdCBhbmQgYW4gYWZmaXggZmlsZS4gIFRoZSBhZmZpeGVzIGFyZQp1c2VkIHRvIG1vZGlmeSB0aGUgYmFzaWMgd29yZHMgdG8gZ2V0IHRoZSBmdWxsIHdvcmQgbGlzdC4gIFRoaXMgc2lnbmlmaWNhbnRseQpyZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd29yZHMsIGVzcGVjaWFsbHkgZm9yIGEgbGFuZ3VhZ2UgbGlrZSBQb2xpc2guICBUaGlzIGlzCmNhbGxlZCBhZmZpeCBjb21wcmVzc2lvbi4KClRoZSBmb3JtYXQgZm9yIHRoZSBhZmZpeCBhbmQgd29yZCBsaXN0IGZpbGVzIGlzIG1vc3RseSBpZGVudGljYWwgdG8gd2hhdApNeXNwZWxsIHVzZXMgKHRoZSBzcGVsbCBjaGVja2VyIG9mIE1vemlsbGEgYW5kIE9wZW5PZmZpY2Uub3JnKS4gIEEgZGVzY3JpcHRpb24KY2FuIGJlIGZvdW5kIGhlcmU6CglodHRwOi8vbGluZ3Vjb21wb25lbnQub3Blbm9mZmljZS5vcmcvYWZmaXgucmVhZG1lIH4KTm90ZSB0aGF0IGFmZml4ZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLCB0aGlzIGlzbid0IG9idmlvdXMgZnJvbSB0aGUgZGVzY3JpcHRpb24uCgpWaW0gc3VwcG9ydHMgYSBmZXcgZXh0cmFzLiAgSG9wZWZ1bGx5IE15c3BlbGwgd2lsbCBzdXBwb3J0IHRoZXNlIHRvbyBzb21lIGRheS4KU2VlIHxzcGVsbC1hZmZpeC12aW18LgoKVGhlIGJhc2ljIHdvcmQgbGlzdCBhbmQgdGhlIGFmZml4IGZpbGUgYXJlIGNvbWJpbmVkIGFuZCB0dXJuZWQgaW50byBhIGJpbmFyeQpzcGVsbCBmaWxlLiAgQWxsIHRoZSBwcmVwcm9jZXNzaW5nIGhhcyBiZWVuIGRvbmUsIHRodXMgdGhpcyBmaWxlIGxvYWRzIGZhc3QuClRoZSBiaW5hcnkgc3BlbGwgZmlsZSBmb3JtYXQgaXMgZGVzY3JpYmVkIGluIHRoZSBzb3VyY2UgY29kZSAoc3JjL3NwZWxsLmMpLgpCdXQgb25seSBkZXZlbG9wZXJzIG5lZWQgdG8ga25vdyBhYm91dCBpdC4KClRoZSBwcmVwcm9jZXNzaW5nIGFsc28gYWxsb3dzIHVzIHRvIHRha2UgdGhlIE15c3BlbGwgbGFuZ3VhZ2UgZmlsZXMgYW5kIG1vZGlmeQp0aGVtIGJlZm9yZSB0aGUgVmltIHdvcmQgbGlzdCBpcyBtYWRlLiAgVGhlIHRvb2xzIGZvciB0aGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUKInNyYy9zcGVsbCIgZGlyZWN0b3J5LgoKCldPUkQgTElTVCBGT1JNQVQJCQkJKnNwZWxsLWRpYy1mb3JtYXQqCgpBIHZlcnkgc2hvcnQgZXhhbXBsZSwgd2l0aCBsaW5lIG51bWJlcnM6CgoJMQkxMjM0CgkyCWFhbgoJMwlBbHMKCTQJRXR0ZW4tTGV1cgoJNQlldCBhbC4KCTYJJ3MtR3JhdmVuaGFnZQoJNwkncy1HcmF2ZW5oYWFncwoJOAliZWRlbC9QCgk5CWthZG8vMQoJMTAJY2FkZWF1LzIKClRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIHRoZSBudW1iZXIgb2Ygd29yZHMuICBWaW0gaWdub3JlcyBpdCwgYnV0IHlvdSBkbyBnZXQKYW4gZXJyb3IgbWVzc2FnZSBpZiBpdCdzIG5vdCB0aGVyZS4gICpFNzYwKgoKV2hhdCBmb2xsb3dzIGlzIG9uZSB3b3JkIHBlciBsaW5lLiAgVGhlcmUgc2hvdWxkIGJlIG5vIHdoaXRlIHNwYWNlIGJlZm9yZSBvcgphZnRlciB0aGUgd29yZC4KCldoZW4gdGhlIHdvcmQgb25seSBoYXMgbG93ZXItY2FzZSBsZXR0ZXJzIGl0IHdpbGwgYWxzbyBtYXRjaCB3aXRoIHRoZSB3b3JkCnN0YXJ0aW5nIHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIuCgpXaGVuIHRoZSB3b3JkIGluY2x1ZGVzIGFuIHVwcGVyLWNhc2UgbGV0dGVyLCB0aGlzIG1lYW5zIHRoZSB1cHBlci1jYXNlIGxldHRlcgppcyByZXF1aXJlZCBhdCB0aGlzIHBvc2l0aW9uLiAgVGhlIHNhbWUgd29yZCB3aXRoIGEgbG93ZXItY2FzZSBsZXR0ZXIgYXQgdGhpcwpwb3NpdGlvbiB3aWxsIG5vdCBtYXRjaC4gV2hlbiBzb21lIG9mIHRoZSBvdGhlciBsZXR0ZXJzIGFyZSB1cHBlci1jYXNlIGl0IHdpbGwKbm90IG1hdGNoIGVpdGhlci4KClRoZSB3b3JkIHdpdGggYWxsIHVwcGVyLWNhc2UgY2hhcmFjdGVycyB3aWxsIGFsd2F5cyBiZSBPSy4KCgl3b3JkIGxpc3QJbWF0Y2hlcwkJCWRvZXMgbm90IG1hdGNoIH4KCWFscwkJYWxzIEFscyBBTFMJCUFMcyBBbFMgYUxzIGFMUwoJQWxzCQlBbHMgIEFMUwkJYWxzIEFMcyBBbFMgYUxzIGFMUwoJQUxTCQlBTFMJCQlhbHMgQWxzIEFMcyBBbFMgYUxzIGFMUwoJQWxTCQlBbFMgQUxTCQkJYWxzIEFscyBBTHMgYUxzIGFMUwoKVGhlIEtFUCBhZmZpeCBJRCBjYW4gYmUgdXNlZCB0byBzcGVjaWZpY2FsbHkgbWF0Y2ggYSB3b3JkIHdpdGggaWRlbnRpY2FsIGNhc2UKb25seSwgc2VlIGJlbG93IHxzcGVsbC1hZmZpeC1LRVB8LgoKTm90ZSBpbiBsaW5lIDUgdG8gNyB0aGF0IG5vbi13b3JkIGNoYXJhY3RlcnMgYXJlIHVzZWQuICBZb3UgY2FuIGluY2x1ZGUKYW55IGNoYXJhY3RlciBpbiBhIHdvcmQuICBXaGVuIGNoZWNraW5nIHRoZSB0ZXh0IGEgd29yZCBzdGlsbCBvbmx5IG1hdGNoZXMKd2hlbiBpdCBhcHBlYXJzIHdpdGggYSBub24td29yZCBjaGFyYWN0ZXIgYmVmb3JlIGFuZCBhZnRlciBpdC4gIEZvciBNeXNwZWxsIGEKd29yZCBzdGFydGluZyB3aXRoIGEgbm9uLXdvcmQgY2hhcmFjdGVyIHByb2JhYmx5IHdvbid0IHdvcmsuCgpBZnRlciB0aGUgd29yZCB0aGVyZSBpcyBhbiBvcHRpb25hbCBzbGFzaCBhbmQgZmxhZ3MuICBNb3N0IG9mIHRoZXNlIGZsYWdzIGFyZQpsZXR0ZXJzIHRoYXQgaW5kaWNhdGUgdGhlIGFmZml4ZXMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoaXMgd29yZC4gIFRoZXNlIGFyZQpzcGVjaWZpZWQgd2l0aCBTRlggYW5kIFBGWCBsaW5lcyBpbiB0aGUgLmFmZiBmaWxlLiAgU2VlIHRoZSBNeXNwZWxsCmRvY3VtZW50YXRpb24uCgoJCQkJCQkJKnNwZWxsLWFmZml4LXZpbSoKQSBmbGFnIHRoYXQgVmltIGFkZHMgYW5kIGlzIG5vdCBpbiBNeXNwZWxsIGlzIHRoZSBmbGFnIGRlZmluZWQgd2l0aCBLRVAgaW4gdGhlCmFmZml4IGZpbGUuICBUaGlzIGhhcyB0aGUgbWVhbmluZyB0aGF0IGNhc2UgbWF0dGVycy4gIFRoaXMgY2FuIGJlIHVzZWQgaWYgdGhlCndvcmQgZG9lcyBub3QgaGF2ZSB0aGUgZmlyc3QgbGV0dGVyIGluIHVwcGVyIGNhc2UgYXQgdGhlIHN0YXJ0IG9mIGEgc2VudGVuY2UuCkV4YW1wbGUgKGFzc3VtaW5nIHRoYXQgPSB3YXMgdXNlZCBmb3IgS0VQKToKCiAgICB3b3JkIGxpc3QJICAgIG1hdGNoZXMJCSAgICBkb2VzIG5vdCBtYXRjaCB+CiAgICAncyBtb3JnZW5zLz0gICAgJ3MgbW9yZ2VucwkJICAgICdTIG1vcmdlbnMgJ3MgTW9yZ2VucyAnUyBNT1JHRU5TCiAgICAncyBNb3JnZW5zCSAgICAncyBNb3JnZW5zICdTIE1PUkdFTlMgICAnUyBtb3JnZW5zICdzIG1vcmdlbnMKClRoZSBmbGFnIGNhbiBhbHNvIGJlIHVzZWQgdG8gYXZvaWQgdGhhdCB0aGUgd29yZCBtYXRjaGVzIHdoZW4gaXQgaXMgaW4gYWxsCnVwcGVyLWNhc2UgbGV0dGVycy4KCgkJCQkJCQkqc3BlbGwtYWZmaXgtbWJ5dGUqClRoZSBiYXNpYyB3b3JkIGxpc3QgaXMgbm9ybWFsbHkgaW4gYW4gOC1iaXQgZW5jb2RpbmcsIHdoaWNoIGlzIG1lbnRpb25lZCBpbgp0aGUgYWZmaXggZmlsZS4gIFRoZSBhZmZpeCBmaWxlIG11c3QgYWx3YXlzIGJlIGluIHRoZSBzYW1lIGVuY29kaW5nIGFzIHRoZQp3b3JkIGxpc3QuICBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBNeXNwZWxsLiAgRm9yIFZpbSB0aGUgZW5jb2RpbmcgbWF5IGFsc28gYmUKc29tZXRoaW5nIGVsc2UsIGFueSBlbmNvZGluZyB0aGF0ICJpY29udiIgc3VwcG9ydHMuICBUaGUgIlNFVCIgbGluZSBtdXN0CnNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nLiAgV2hlbiB1c2luZyBhIG11bHRpLWJ5dGUgZW5jb2RpbmcgaXQncwpwb3NzaWJsZSB0byB1c2UgbW9yZSBkaWZmZXJlbnQgYWZmaXhlcyAoYnV0IE15c3BlbGwgZG9lc24ndCBzdXBwb3J0IHRoYXQsIHRodXMKeW91IG1heSBub3Qgd2FudCB0byB1c2UgaXQgYW55d2F5KS4KCgpDSEFSQUNURVIgVEFCTEVTCgkJCQkJCQkqc3BlbGwtYWZmaXgtY2hhcnMqCldoZW4gdXNpbmcgYW4gOC1iaXQgZW5jb2RpbmcgdGhlIGFmZml4IGZpbGUgc2hvdWxkIGRlZmluZSB3aGF0IGNoYXJhY3RlcnMgYXJlCndvcmQgY2hhcmFjdGVycyAoYXMgc3BlY2lmaWVkIHdpdGggRU5DKS4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgc3lzdGVtIHdoZXJlCiI6bWtzcGVsbCIgaXMgdXNlZCBtYXkgbm90IHN1cHBvcnQgYSBsb2NhbGUgd2l0aCB0aGlzIGVuY29kaW5nIGFuZCBpc2FscGhhKCkKd29uJ3Qgd29yay4gIEZvciBleGFtcGxlIHdoZW4gdXNpbmcgImNwMTI1MCIgb24gVW5peC4KCgkJCQkJKkU3NjEqICpFNzYyKiAqc3BlbGwtYWZmaXgtRk9MKgoJCQkJCSpzcGVsbC1hZmZpeC1MT1cqICpzcGVsbC1hZmZpeC1VUFAqClRocmVlIGxpbmVzIGluIHRoZSBhZmZpeCBmaWxlIGFyZSBuZWVkZWQuICBTaW1wbGlzdGljIGV4YW1wbGU6CgoJRk9MICDh6/EgfgoJTE9XICDh6/EgfgoJVVBQICDBy9EgfgoKQWxsIHRocmVlIGxpbmVzIG11c3QgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIG51bWJlciBvZiBjaGFyYWN0ZXJzLgoKVGhlICJGT0wiIGxpbmUgc3BlY2lmaWVzIHRoZSBjYXNlLWZvbGRlZCBjaGFyYWN0ZXJzLiAgVGhlc2UgYXJlIHVzZWQgdG8KY29tcGFyZSB3b3JkcyB3aGlsZSBpZ25vcmluZyBjYXNlLiAgRm9yIG1vc3QgZW5jb2RpbmdzIHRoaXMgaXMgaWRlbnRpY2FsIHRvCnRoZSBsb3dlciBjYXNlIGxpbmUuCgpUaGUgIkxPVyIgbGluZSBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlcnMgaW4gbG93ZXItY2FzZS4gIE1vc3RseSBpdCdzIGVxdWFsIHRvCnRoZSAiRk9MIiBsaW5lLgoKVGhlICJVUFAiIGxpbmUgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIHdpdGggdXBwZXItY2FzZS4gIFRoYXQgaXMsIGEgY2hhcmFjdGVyCmlzIHVwcGVyLWNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluCiJGT0wiLgoKQVNDSUkgY2hhcmFjdGVycyBzaG91bGQgYmUgb21pdHRlZCwgVmltIGFsd2F5cyBoYW5kbGVzIHRoZXNlIGluIHRoZSBzYW1lIHdheS4KV2hlbiB0aGUgZW5jb2RpbmcgaXMgVVRGLTggbm8gd29yZCBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgc3BlY2lmaWVkLgoKCQkJCQkJCSpFNzYzKgpWaW0gYWxsb3dzIHlvdSB0byB1c2Ugc3BlbGwgY2hlY2tpbmcgZm9yIHNldmVyYWwgbGFuZ3VhZ2VzIGluIHRoZSBzYW1lIGZpbGUuCllvdSBjYW4gbGlzdCB0aGVtIGluIHRoZSAnc3BlbGxsYW5nJyBvcHRpb24uICBBcyBhIGNvbnNlcXVlbmNlIGFsbCBzcGVsbCBmaWxlcwpmb3IgdGhlIHNhbWUgZW5jb2RpbmcgbXVzdCB1c2UgdGhlIHNhbWUgd29yZCBjaGFyYWN0ZXJzLCBvdGhlcndpc2UgdGhleSBjYW4ndApiZSBjb21iaW5lZCB3aXRob3V0IGVycm9ycy4gIElmIHlvdSBnZXQgYSB3YXJuaW5nIHRoYXQgdGhlIHdvcmQgdGFibGVzIGRpZmZlcgp5b3UgbWF5IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIC5zcGwgZmlsZSBhZ2FpbiB3aXRoIHw6bWtzcGVsbHwuICBDaGVjayB0aGUgRk9MLApMT1cgYW5kIFVQUCBsaW5lcyBpbiB0aGUgdXNlZCAuYWZmIGZpbGUuCgpUaGUgWFguYXNjaWkuc3BsIHNwZWxsIGZpbGUgZ2VuZXJhdGVkIHdpdGggdGhlICItYXNjaWkiIGFyZ3VtZW50IHdpbGwgbm90CmNvbnRhaW4gdGhlIHRhYmxlIHdpdGggY2hhcmFjdGVycywgc28gdGhhdCBpdCBjYW4gYmUgY29tYmluZSB3aXRoIHNwZWxsIGZpbGVzCmZvciBhbnkgZW5jb2RpbmcuICBUaGUgLmFkZC5zcGwgZmlsZXMgYWxzbyBkbyBub3QgY29udGFpbiB0aGUgdGFibGUuCgoKTUlELVdPUkQgQ0hBUkFDVEVSUwoJCQkJCQkJKnNwZWxsLW1pZHdvcmQqClNvbWUgY2hhcmFjdGVycyBhcmUgb25seSB0byBiZSBjb25zaWRlcmVkIHdvcmQgY2hhcmFjdGVycyBpZiB0aGV5IGFyZSB1c2VkIGluCmJldHdlZW4gdHdvIG9yZGluYXJ5IHdvcmQgY2hhcmFjdGVycy4gIEFuIGV4YW1wbGUgaXMgdGhlIHNpbmdsZSBxdW90ZTogSXQgaXMKb2Z0ZW4gdXNlZCB0byBwdXQgdGV4dCBpbiBxdW90ZXMsIHRodXMgaXQgY2FuJ3QgYmUgcmVjb2duaXplZCBhcyBhIHdvcmQKY2hhcmFjdGVyLCBidXQgd2hlbiBpdCBhcHBlYXJzIGluIGJldHdlZW4gd29yZCBjaGFyYWN0ZXJzIGl0IG11c3QgYmUgcGFydCBvZgp0aGUgd29yZC4gIFRoaXMgaXMgbmVlZGVkIHRvIGRldGVjdCBhIHNwZWxsaW5nIGVycm9yIHN1Y2ggYXMgdGhleSdhcmUuICBUaGF0CnNob3VsZCBiZSB0aGV5J3JlLCBidXQgc2luY2UgInRoZXkiIGFuZCAiYXJlIiBhcmUgd29yZHMgdGhlbXNlbHZlcyB0aGF0IHdvdWxkCmdvIHVubm90aWNlZC4KClRoZXNlIGNoYXJhY3RlcnMgYXJlIGRlZmluZWQgd2l0aCBNSURXT1JEIGluIHRoZSAuYWZmIGZpbGU6CgoJTUlEV09SRAknLSB+CgoKQUZGSVhFUwoJCQkJCSAgICAqc3BlbGwtYWZmaXgtUEZYKiAqc3BlbGwtYWZmaXgtU0ZYKgpUaGUgdXN1YWwgUEZYIChwcmVmaXgpIGFuZCBTRlggKHN1ZmZpeCkgbGluZXMgYXJlIHN1cHBvcnRlZCAoc2VlIHRoZSBNeXNwZWxsCmRvY3VtZW50YXRpb24gb3IgdGhlIEFzcGVsbCBtYW51YWw6Cmh0dHA6Ly9hc3BlbGwubmV0L21hbi1odG1sL0FmZml4LUNvbXByZXNzaW9uLmh0bWwpLgoKTm90ZSB0aGF0IE15c3BlbGwgaWdub3JlcyBhbnkgZXh0cmEgdGV4dCBhZnRlciB0aGUgcmVsZXZhbnQgaW5mby4gIFZpbQpyZXF1aXJlcyB0aGlzIHRleHQgdG8gc3RhcnQgd2l0aCBhICIjIiBzbyB0aGF0IG1pc3Rha2VzIGRvbid0IGdvIHVubm90aWNlZC4KRXhhbXBsZToKCglTRlggRiAwIGluICAgW15pXW4gICAgICAjIFNwaW9uID4gU3Bpb25pbiAgfgoJU0ZYIEYgMCBuZW4gIGluICAgICAgICAgIyBCYXVlcmluID4gQmF1ZXJpbm5lbiB+CgoJCQkJCQkJKnNwZWxsLWFmZml4LXJhcmUqCkFuIGV4dHJhIGl0ZW0gZm9yIFZpbSBpcyB0aGUgInJhcmUiIGZsYWcuICBJdCBtdXN0IGNvbWUgYWZ0ZXIgdGhlIG90aGVyCmZpZWxkcywgYmVmb3JlIGEgY29tbWVudC4gIFdoZW4gdXNlZCB0aGVuIGFsbCB3b3JkcyB0aGF0IHVzZSB0aGUgYWZmaXggd2lsbCBiZQptYXJrZWQgYXMgcmFyZSB3b3Jkcy4gIEV4YW1wbGU6CgoJUEZYIEYgMCBuZW5lICAuICAgcmFyZSB+CglTRlggRiAwIG9pbiAgIG4gICByYXJlICAgIyBoYXJkbHkgZXZlciB1c2VkIH4KCkhvd2V2ZXIsIGlmIHRoZSB3b3JkIGFsc28gYXBwZWFycyBhcyBhIGdvb2Qgd29yZCBpbiBhbm90aGVyIHdheSBpdCB3b24ndCBiZQptYXJrZWQgYXMgcmFyZS4KCgkJCQkJCQkqc3BlbGwtYWZmaXgtbm9jb21wKgpBbm90aGVyIGV4dHJhIGl0ZW0gZm9yIFZpbSBpcyB0aGUgIm5vY29tcCIgZmxhZy4gIEl0IG11c3QgY29tZSBhZnRlciB0aGUgb3RoZXIKZmllbGRzLCBiZWZvcmUgYSBjb21tZW50LiAgSXQgY2FuIGJlIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgInJhcmUiLiAgV2hlbgpwcmVzZW50IHRoZW4gYWxsIHdvcmRzIHRoYXQgdXNlIHRoZSBhZmZpeCB3aWxsIG5vdCBiZSBwYXJ0IG9mIGEgY29tcG91bmQgd29yZC4KRXhhbXBsZToKCWFmZml4IGZpbGU6CgkJQ09NUE9VTkRGTEFHIGMgfgoJCVNGWCBhIFkgMiB+CgkJU0ZYIGEgMCBzICAgLiB+CgkJU0ZYIGEgMCBpemUgLiBub2NvbXAgfgoJZGljdGlvbmFyeToKCQl3b3JkL2MgfgoJCXV0aWwvYWMgfgoKVGhpcyBhbGxvd3MgZm9yICJ3b3JkdXRpbCIgYW5kICJ3b3JkdXRpbHMiIGJ1dCBub3QgIndvcmR1dGlsaXplIi4KCgkJCQkJCSAgICAqc3BlbGwtYWZmaXgtUEZYUE9TVFBPTkUqCldoZW4gYW4gYWZmaXggZmlsZSBoYXMgdmVyeSBtYW55IHByZWZpeGVzIHRoYXQgYXBwbHkgdG8gbWFueSB3b3JkcyBpdCdzIG5vdApwb3NzaWJsZSB0byBidWlsZCB0aGUgd2hvbGUgd29yZCBsaXN0IGluIG1lbW9yeS4gIFRoaXMgYXBwbGllcyB0byBIZWJyZXcgKGEKbGlzdCB3aXRoIGFsbCB3b3JkcyBpcyBvdmVyIGEgR2J5dGUpLiAgSW4gdGhhdCBjYXNlIGFwcGx5aW5nIHByZWZpeGVzIG11c3QgYmUKcG9zdHBvbmVkLiAgVGhpcyBtYWtlcyBzcGVsbCBjaGVja2luZyBzbG93ZXIuICBJdCBpcyBpbmRpY2F0ZWQgYnkgdGhpcyBrZXl3b3JkCmluIHRoZSAuYWZmIGZpbGU6CgoJUEZYUE9TVFBPTkUgfgoKT25seSBwcmVmaXhlcyB3aXRob3V0IGEgY2hvcCBzdHJpbmcgY2FuIGJlIHBvc3Rwb25lZCwgcHJlZml4ZXMgd2l0aCBhIGNob3AKc3RyaW5nIHdpbGwgc3RpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHdvcmQgbGlzdC4gIEFuIGV4Y2VwdGlvbiBpZiB0aGUgY2hvcApzdHJpbmcgaXMgb25lIGNoYXJhY3RlciBhbmQgZXF1YWwgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBhZGRlZCBzdHJpbmcsCmJ1dCBpbiBsb3dlciBjYXNlLiAgVGh1cyB3aGVuIHRoZSBjaG9wIHN0cmluZyBpcyB1c2VkIHRvIGFsbG93IHRoZSBmb2xsb3dpbmcKd29yZCB0byBzdGFydCB3aXRoIGFuIHVwcGVyIGNhc2UgbGV0dGVyLgoKCldPUkRTIFdJVEggQSBTTEFTSAkJCQkJKnNwZWxsLWFmZml4LVNMQVNIKgoKVGhlIHNsYXNoIGlzIHVzZWQgaW4gdGhlIC5kaWMgZmlsZSB0byBzZXBhcmF0ZSB0aGUgYmFzaWMgd29yZCBmcm9tIHRoZSBhZmZpeApsZXR0ZXJzIHRoYXQgY2FuIGJlIHVzZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1lYW5zIHlvdSBjYW5ub3QgdXNlIGEgc2xhc2ggaW4KYSB3b3JkLiAgVGh1cyAiVENQL0lQIiBjYW5ub3QgYmUgYSB3b3JkLiAgVG8gd29yayBhcm91bmQgdGhhdCB5b3UgY2FuIGRlZmluZSBhCnJlcGxhY2VtZW50IGNoYXJhY3RlciBmb3IgdGhlIHNsYXNoLiAgRXhhbXBsZToKCglTTEFTSCAsIH4KCk5vdyB5b3UgY2FuIHVzZSAiVENQLElQIiB0byBhZGQgdGhlIHdvcmQgIlRDUC9JUCIuCgpPZiBjb3Vyc2UsIHRoZSBsZXR0ZXIgdXNlZCBzaG91bGQgaXRzZWxmIG5vdCBhcHBlYXIgaW4gYW55IHdvcmQhICBUaGUgbGV0dGVyCm11c3QgYmUgQVNDSUksIHRodXMgYSBzaW5nbGUgYnl0ZS4KCgpLRUVQLUNBU0UgV09SRFMJCQkJCQkqc3BlbGwtYWZmaXgtS0VQKgoKSW4gdGhlIGFmZml4IGZpbGUgYSBLRVAgbGluZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGFmZml4IG5hbWUgdXNlZCBmb3IKa2VlcC1jYXNlIHdvcmRzLiAgRXhhbXBsZToKCglLRVAgPSB+CgpTZWUgYWJvdmUgZm9yIGFuIGV4YW1wbGUgfHNwZWxsLWFmZml4LXZpbXwuCgoKUkFSRSBXT1JEUwkJCQkJCSpzcGVsbC1hZmZpeC1SQVIqCgpJbiB0aGUgYWZmaXggZmlsZSBhIFJBUiBsaW5lIGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgYWZmaXggbmFtZSB1c2VkIGZvcgpyYXJlIHdvcmRzLiAgRXhhbXBsZToKCglSQVIgPyB+CgpSYXJlIHdvcmRzIGFyZSBoaWdobGlnaHRlZCBkaWZmZXJlbnRseSBmcm9tIGJhZCB3b3Jkcy4gIFRoaXMgaXMgdG8gYmUgdXNlZCBmb3IKd29yZHMgdGhhdCBhcmUgY29ycmVjdCBmb3IgdGhlIGxhbmd1YWdlLCBidXQgYXJlIGhhcmRseSBldmVyIHVzZWQgYW5kIGNvdWxkIGJlCmEgdHlwaW5nIG1pc3Rha2UgYW55d2F5LiAgV2hlbiB0aGUgc2FtZSB3b3JkIGlzIGZvdW5kIGFzIGdvb2QgaXQgd29uJ3QgYmUKaGlnaGxpZ2h0ZWQgYXMgcmFyZS4KCgpCQUQgV09SRFMJCQkJCQkqc3BlbGwtYWZmaXgtQkFEKgoKSW4gdGhlIGFmZml4IGZpbGUgYSBCQUQgbGluZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGFmZml4IG5hbWUgdXNlZCBmb3IKYmFkIHdvcmRzLiAgRXhhbXBsZToKCglCQUQgISB+CgpUaGlzIGNhbiBiZSB1c2VkIHRvIGV4Y2x1ZGUgd29yZHMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgZ29vZC4gIEZvciBleGFtcGxlCiJ0aGUgdGhlIiBpbiB0aGUgLmRpYyBmaWxlOgoKCXRoZSB0aGUvISB+CgpPbmNlIGEgd29yZCBoYXMgYmVlbiBtYXJrZWQgYXMgYmFkIGl0IHdvbid0IGJlIHVuZG9uZSBieSBlbmNvdW50ZXJpbmcgdGhlIHNhbWUKd29yZCBhcyBnb29kLgoKCQkJCQkJCSpzcGVsbC1hZmZpeC1ORUVEQUZGSVgqClRoZSBORUVEQUZGSVggZmxhZyBpcyB1c2VkIHRvIHJlcXVpcmUgdGhhdCBhIHdvcmQgaXMgdXNlZCB3aXRoIGFuIGFmZml4LiAgVGhlCndvcmQgaXRzZWxmIGlzIG5vdCBhIGdvb2Qgd29yZC4gIEV4YW1wbGU6CgoJTkVFREFGRklYICsgfgoKCkNPTVBPVU5EIFdPUkRTCQkJCQkJKnNwZWxsLWFmZml4LWNvbXBvdW5kKgoKQSBjb21wb3VuZCB3b3JkIGlzIGEgbG9uZ2VyIHdvcmQgbWFkZSBieSBjb25jYXRlbmF0aW5nIHdvcmRzIHRoYXQgYXBwZWFyIGluCnRoZSAuZGljIGZpbGUuICBUbyBzcGVjaWZ5IHdoaWNoIHdvcmRzIG1heSBiZSBjb25jYXRlbmF0ZWQgYSBjaGFyYWN0ZXIgaXMKdXNlZC4gIFRoaXMgY2hhcmFjdGVyIGlzIHB1dCBpbiB0aGUgbGlzdCBvZiBhZmZpeGVzIGFmdGVyIHRoZSB3b3JkLiAgV2Ugd2lsbApjYWxsIHRoaXMgY2hhcmFjdGVyIGEgZmxhZyBoZXJlLiAgT2J2aW91c2x5IHRoZXNlIGZsYWdzIG11c3QgYmUgZGlmZmVyZW50IGZyb20KYW55IGFmZml4IElEcyB1c2VkLgoKCQkJCQkJCSpzcGVsbC1DT01QT1VOREZMQUcqClRoZSBNeXNwZWxsIGNvbXBhdGlibGUgbWV0aG9kIHVzZXMgb25lIGZsYWcsIHNwZWNpZmllZCB3aXRoIENPTVBPVU5ERkxBRy4KQWxsIHdvcmRzIHdpdGggdGhpcyBmbGFnIGNvbWJpbmUgaW4gYW55IG9yZGVyLiAgVGhpcyBtZWFucyB0aGVyZSBpcyBubyBjb250cm9sCm92ZXIgd2hpY2ggd29yZCBjb21lcyBmaXJzdC4gIEV4YW1wbGU6CglDT01QT1VOREZMQUcgYyB+CgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5ERkxBR1MqCkEgbW9yZSBhZHZhbmNlZCBtZXRob2QgdG8gc3BlY2lmeSBob3cgY29tcG91bmQgd29yZHMgY2FuIGJlIGZvcm1lZCB1c2VzCm11bHRpcGxlIGl0ZW1zIHdpdGggbXVsdGlwbGUgZmxhZ3MuICBUaGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggTXlzcGVsbCAzLjAuCkxldCdzIHN0YXJ0IHdpdGggYW4gZXhhbXBsZToKCUNPTVBPVU5ERkxBR1MgYysgfgoJQ09NUE9VTkRGTEFHUyBzZSB+CgpUaGUgZmlyc3QgbGluZSBkZWZpbmVzIHRoYXQgd29yZHMgd2l0aCB0aGUgImMiIGZsYWcgY2FuIGJlIGNvbmNhdGVuYXRlZCBpbiBhbnkKb3JkZXIuICBUaGUgc2Vjb25kIGxpbmUgZGVmaW5lcyBjb21wb3VuZCB3b3JkcyB0aGF0IGFyZSBtYWRlIG9mIG9uZSB3b3JkIHdpdGgKdGhlICJzIiBmbGFnIGFuZCBvbmUgd29yZCB3aXRoIHRoZSAiZSIgZmxhZy4gIFdpdGggdGhpcyBkaWN0aW9uYXJ5OgoJYm9yay9jIH4KCW9uaW9uL3MgfgoJc291cC9lIH4KCllvdSBjYW4gbWFrZSB0aGVzZSB3b3JkczoKCWJvcmsKCWJvcmtib3JrCglib3JrYm9ya2JvcmsKCShldGMuKQoJb25pb24KCXNvdXAKCW9uaW9uc291cAoKVGhlIENPTVBPVU5ERkxBR1MgaXRlbSBtYXkgYXBwZWFyIG11bHRpcGxlIHRpbWVzLiAgVGhlIGFyZ3VtZW50IGlzIG1hZGUgb3V0IG9mCm9uZSBvciBtb3JlIGdyb3Vwcywgd2hlcmUgZWFjaCBncm91cCBjYW4gYmU6CglvbmUgZmxhZwkJCWUuZy4sIGMKCWFsdGVybmF0ZSBmbGFncyBpbnNpZGUgW10JZS5nLiwgW2FiY10KT3B0aW9uYWxseSB0aGlzIG1heSBiZSBmb2xsb3dlZCBieToKCSoJdGhlIGdyb3VwIGFwcGVhcnMgemVybyBvciBtb3JlIHRpbWVzLCBlLmcuLCBzbSplCgkrCXRoZSBncm91cCBhcHBlYXJzIG9uZSBvciBtb3JlIHRpbWVzLCBlLmcuLCBjKwoKVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSByZWdleHAgcGF0dGVybiBzeW50YXggKGJ1dCBub3QgdGhlIHNhbWUhKS4gIEEgZmV3CmV4YW1wbGVzIHdpdGggdGhlIHNlcXVlbmNlIG9mIHdvcmQgZmxhZ3MgdGhleSByZXF1aXJlOgogICAgQ09NUE9VTkRGTEFHUyB4KwkgICAgeCB4eCB4eHggZXRjLgogICAgQ09NUE9VTkRGTEFHUyB5egkgICAgeXoKICAgIENPTVBPVU5ERkxBR1MgeCt6CSAgICB4eiB4eHogeHh4eiBldGMuCiAgICBDT01QT1VOREZMQUdTIHl4KwkgICAgeXggeXh4IHl4eHggZXRjLgoKICAgIENPTVBPVU5ERkxBR1MgW2FiY116ICAgIGF6IGJ6IGN6CiAgICBDT01QT1VOREZMQUdTIFthYmNdK3ogICBheiBhYXogYWJheiBieiBiYXogYmNieiBjeiBjYXogY2JheiBldGMuCiAgICBDT01QT1VOREZMQUdTIGFbeHl6XSsgICBheCBheHggYXh5eiBheSBheXggYXl6eiBheiBhenkgYXp4eSBldGMuCiAgICBDT01QT1VOREZMQUdTIHNtKmUJICAgIHNlIHNtZSBzbW1lIHNtbW1lIGV0Yy4KICAgIENPTVBPVU5ERkxBR1Mgc1t4eXpdKmUgIHNlIHN4ZSBzeHllIHN4eXhlIHN5ZSBzeXplIHN6ZSBzenllIHN6eXhlICBldGMuCgpBIHNwZWNpZmljIGV4YW1wbGU6IEFsbG93IGEgY29tcG91bmQgdG8gYmUgbWFkZSBvZiB0d28gd29yZHMgYW5kIGEgZGFzaDoKCUluIHRoZSAuYWZmIGZpbGU6CgkgICAgQ09NUE9VTkRGTEFHUyBzZGUgfgoJICAgIE5FRURBRkZJWCB4IH4KCSAgICBDT01QT1VORE1BWCAzIH4KCSAgICBDT01QT1VORE1JTiAxIH4KCUluIHRoZSAuZGljIGZpbGU6CgkgICAgc3RhcnQvcyB+CgkgICAgZW5kL2UgfgoJICAgIC0veGQgfgoKVGhpcyBhbGxvd3MgZm9yIHRoZSB3b3JkICJzdGFydC1lbmQiLCBidXQgbm90ICJzdGFydGVuZCIuCgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5ETUlOKgpUaGUgbWluaW1hbCBieXRlIGxlbmd0aCBvZiBhIHdvcmQgdXNlZCBmb3IgY29uY2F0ZW5hdGlvbiBpcyBzcGVjaWZpZWQgd2l0aApDT01QT1VORE1JTi4gIEV4YW1wbGU6CglDT01QT1VORE1JTiA1IH4KCldoZW4gb21pdHRlZCBhIG1pbmltYWwgbGVuZ3RoIG9mIDMgYnl0ZXMgaXMgdXNlZC4gIE9idmlvdXNseSB5b3UgY291bGQganVzdApsZWF2ZSBvdXQgdGhlIGNvbXBvdW5kIGZsYWcgZnJvbSBzaG9ydCB3b3JkcyBpbnN0ZWFkLCB0aGlzIGZlYXR1cmUgaXMgcHJlc2VudApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIE15c3BlbGwuCgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5ETUFYKgpUaGUgbWF4aW11bSBudW1iZXIgb2Ygd29yZHMgdGhhdCBjYW4gYmUgY29uY2F0ZW5hdGVkIGludG8gYSBjb21wb3VuZCB3b3JkIGlzCnNwZWNpZmllZCB3aXRoIENPTVBPVU5ETUFYLiAgRXhhbXBsZToKCUNPTVBPVU5ETUFYIDMgfgoKV2hlbiBvbWl0dGVkIHRoZXJlIGlzIG5vIG1heGltdW0uICBJdCBhcHBsaWVzIHRvIGFsbCBjb21wb3VuZCB3b3Jkcy4KClRvIHNldCBhIGxpbWl0IGZvciB3b3JkcyB3aXRoIHNwZWNpZmljIGZsYWdzIG1ha2Ugc3VyZSB0aGUgaXRlbXMgaW4KQ09NUE9VTkRGTEFHUyB3aGVyZSB0aGV5IGFwcGVhciBkb24ndCBhbGxvdyB0b28gbWFueSB3b3Jkcy4KCgkJCQkJCQkqc3BlbGwtQ09NUE9VTkRTWUxNQVgqClRoZSBtYXhpbXVtIG51bWJlciBvZiBzeWxsYWJsZXMgdGhhdCBhIGNvbXBvdW5kIHdvcmQgbWF5IGNvbnRhaW4gaXMgc3BlY2lmaWVkCndpdGggQ09NUE9VTkRTWUxNQVguICBFeGFtcGxlOgoJQ09NUE9VTkRTWUxNQVggNiB+CgpUaGlzIGhhcyBubyBlZmZlY3QgaWYgdGhlcmUgaXMgbm8gU1lMTEFCTEUgaXRlbS4gIFdpdGhvdXQgQ09NUE9VTkRTWUxNQVggdGhlcmUKaXMgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzeWxsYWJsZXMuCgpJZiBib3RoIENPTVBPVU5ETUFYIGFuZCBDT01QT1VORFNZTE1BWCBhcmUgZGVmaW5lZCwgYSBjb21wb3VuZCB3b3JkIGlzCmFjY2VwdGVkIGlmIGl0IGZpdHMgb25lIG9mIHRoZSBjcml0ZXJpYSwgdGh1cyBpcyBlaXRoZXIgbWFkZSBmcm9tIHVwIHRvCkNPTVBPVU5ETUFYIHdvcmRzIG9yIGNvbnRhaW5zIHVwIHRvIENPTVBPVU5EU1lMTUFYIHN5bGxhYmxlcy4KCgkJCQkJCQkqc3BlbGwtU1lMTEFCTEUqClRoZSBTWUxMQUJMRSBpdGVtIGRlZmluZXMgY2hhcmFjdGVycyBvciBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoYXQgYXJlIHVzZWQgdG8KY291bnQgdGhlIG51bWJlciBvZiBzeWxsYWJsZXMgaW4gYSB3b3JkLiAgRXhhbXBsZToKCVNZTExBQkxFIGHhZelp7W/z9vV1+vz7eS9hYS9hdS9lYS9lZS9laS9pZS9vYS9vZS9vby9vdS91dS91aSB+CgpCZWZvcmUgdGhlIGZpcnN0IHNsYXNoIGlzIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBjb3VudGVkIGZvciBvbmUKc3lsbGFibGUsIGFsc28gd2hlbiByZXBlYXRlZCBhbmQgbWl4ZWQsIHVudGlsIHRoZSBuZXh0IGNoYXJhY3RlciB0aGF0IGlzIG5vdAppbiB0aGlzIHNldC4gIEFmdGVyIHRoZSBzbGFzaCBjb21lIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGNvdW50ZWQKZm9yIG9uZSBzeWxsYWJsZS4gIFRoZXNlIGFyZSBwcmVmZXJyZWQgb3ZlciB1c2luZyBjaGFyYWN0ZXJzIGZyb20gdGhlIHNldC4KV2l0aCB0aGUgZXhhbXBsZSAiaWRlZWVuIiBoYXMgdGhyZWUgc3lsbGFibGVzLCBjb3VudGVkIGJ5ICJpIiwgImVlIiBhbmQgImUiLgoKT25seSBjYXNlLWZvbGRlZCBsZXR0ZXJzIG5lZWQgdG8gYmUgaW5jbHVkZWQuCgpBYm92ZSBhbm90aGVyIHdheSB0byByZXN0cmljdCBjb21wb3VuZGluZyB3YXMgbWVudGlvbmVkIGFib3ZlOiBhZGRpbmcgIm5vY29tcCIKYWZ0ZXIgYW4gYWZmaXggY2F1c2VzIGFsbCB3b3JkcyB0aGF0IGFyZSBtYWRlIHdpdGggdGhhdCBhZmZpeCBub3QgYmUgYmUgdXNlZApmb3IgY29tcG91bmRpbmcuIHxzcGVsbC1hZmZpeC1ub2NvbXB8Cgo+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PApOT1RFOiBUaGUgZm9sbG93aW5nIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHdvcmQKbGlzdHMgdGhhdCBzdXBwb3J0IHRoaXMuCj4gCQkJCQkJCSpzcGVsbC1DTVAqCj4gU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgYSB3b3JkIHdoZW4gY29uY2F0ZW5hdGluZyBpdCB0byBhbm90aGVyLAo+IGJ5IHJlbW92aW5nIGEgZmV3IGxldHRlcnMsIGluc2VydGluZyBzb21ldGhpbmcgb3IgYm90aC4gIEl0IGNhbiBhbHNvIGJlIHVzZWZ1bAo+IHRvIHJlc3RyaWN0IGNvbmNhdGVuYXRpb24gdG8gd29yZHMgdGhhdCBtYXRjaCBhIHBhdHRlcm4uICBGb3IgdGhpcyBwdXJwb3NlIENNUAo+IGl0ZW1zIGNhbiBiZSB1c2VkLiAgVGhleSBsb29rIGxpa2UgdGhpczoKPiAJQ01QIHtmbGFnfSB7ZmxhZ3N9IHtzdHJpcH0ge3N0cmlwMn0ge2FkZH0ge2NvbmR9IHtjb25kMn0KPiAKPiAJe2ZsYWd9CQl0aGUgZmxhZywgYXMgdXNlZCBpbiBDT01QT1VOREZMQUdTIGZvciB0aGUgbGVhZCB3b3JkCj4gCXtmbGFnc30JCWFjY2VwdGVkIGZsYWdzIGZvciB0aGUgZm9sbG93aW5nIHdvcmQgKCcuJyB0byBhY2NlcHQKPiAJCQlhbGwpCj4gCXtzdHJpcH0JCXRleHQgdG8gcmVtb3ZlIGZyb20gdGhlIGVuZCBvZiB0aGUgbGVhZCB3b3JkICh6ZXJvCj4gCQkJZm9yIG5vIHN0cmlwcGluZykKPiAJe3N0cmlwMn0JdGV4dCB0byByZW1vdmUgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZvbGxvd2luZyB3b3JkCj4gCQkJKHplcm8gZm9yIG5vIHN0cmlwcGluZykKPiAJe2FkZH0JCXRleHQgdG8gaW5zZXJ0IGJldHdlZW4gdGhlIHdvcmRzICh6ZXJvIGZvciBubwo+IAkJCWFkZGl0aW9uKQo+IAl7Y29uZH0JCWNvbmRpdGlvbiB0byBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBsZWFkIHdvcmQKPiAJe2NvbmQyfQkJY29uZGl0aW9uIHRvIG1hdGNoIGF0IHRoZSBzdGFydCBvZiB0aGUgZm9sbG93aW5nIHdvcmQKPiAKPiBUaGlzIGlzIHRoZSBzYW1lIGFzIHdoYXQgaXMgdXNlZCBmb3IgU0ZYIGFuZCBQRlggaXRlbXMsIHdpdGggdGhlIGV4dHJhIHtmbGFnc30KPiBhbmQge2NvbmQyfSBmaWVsZHMuICBFeGFtcGxlOgo+IAlDTVAgZiBtcnQgMCAtIC4gLiB+Cj4gCj4gV2hlbiB1c2VkIHdpdGggdGhlIGZvb2QgYW5kIGRpc2ggd29yZCBsaXN0IGFib3ZlLCB0aGlzIG1lYW5zIHRoYXQgYSBkYXNoIGlzCj4gaW5zZXJ0ZWQgYWZ0ZXIgZWFjaCBmb29kIGl0ZW0uICBUaHVzIHlvdSBnZXQgIm9uaW9uLXNvdXAiIGFuZAo+ICJvbmlvbi10b21hdG8tc2FsYXQiLgo+IAo+IFdoZW4gdGhlcmUgYXJlIENNUCBpdGVtcyBmb3IgYSBjb21wb3VuZCBmbGFnIHRoZSBjb25jYXRlbmF0aW9uIGlzIG9ubHkgZG9uZQo+IHdoZW4gYSBDTVAgaXRlbSBtYXRjaGVzLgo+IAo+IFdoZW4gdGhlcmUgYXJlIG5vIENNUCBpdGVtcyBmb3IgYSBjb21wb3VuZCBmbGFnLCB0aGVuIGFsbCB3b3JkcyB3aWxsIGJlCj4gY29uY2F0ZW5hdGVkLCBhcyBpZiB0aGVyZSB3YXMgYW4gaXRlbToKPiAJQ01QIHtmbGFnfSAuIDAgMCAuIC4KPgo+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PAoKClJFUExBQ0VNRU5UUwkJCQkJCSpzcGVsbC1hZmZpeC1SRVAqCgpJbiB0aGUgYWZmaXggZmlsZSBSRVAgaXRlbXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGNvbW1vbiBtaXN0YWtlcy4gIFRoaXMgaXMKdXNlZCB0byBtYWtlIHNwZWxsaW5nIHN1Z2dlc3Rpb25zLiAgVGhlIGl0ZW1zIGRlZmluZSB0aGUgImZyb20iIHRleHQgYW5kIHRoZQoidG8iIHJlcGxhY2VtZW50LiAgRXhhbXBsZToKCglSRVAgNCB+CglSRVAgZiBwaCB+CglSRVAgcGggZiB+CglSRVAgayBjaCB+CglSRVAgY2ggayB+CgpUaGUgZmlyc3QgbGluZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBSRVAgbGluZXMgZm9sbG93aW5nLiAgVmltIGlnbm9yZXMgaXQuCkRvbid0IGluY2x1ZGUgc2ltcGxlIG9uZS1jaGFyYWN0ZXIgcmVwbGFjZW1lbnRzIG9yIHN3YXBzLiAgVmltIHdpbGwgdHJ5IHRoZXNlCmFueXdheS4gIFlvdSBjYW4gaW5jbHVkZSB3aG9sZSB3b3JkcyBpZiB5b3Ugd2FudCB0bywgYnV0IHlvdSBtaWdodCB3YW50IHRvIHVzZQp0aGUgImZpbGU6IiBpdGVtIGluICdzcGVsbHN1Z2dlc3QnIGluc3RlYWQuCgoKU0lNSUxBUiBDSEFSQUNURVJTCQkJCQkqc3BlbGwtYWZmaXgtTUFQKgoKSW4gdGhlIGFmZml4IGZpbGUgTUFQIGl0ZW1zIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBsZXR0ZXJzIHRoYXQgYXJlIHZlcnkgbXVjaAphbGlrZS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yIGEgbGV0dGVyIHdpdGggZGlmZmVyZW50IGFjY2VudHMuICBUaGlzIGlzIHVzZWQKdG8gcHJlZmVyIHN1Z2dlc3Rpb25zIHdpdGggdGhlc2UgbGV0dGVycyBzdWJzdGl0dXRlZC4gIEV4YW1wbGU6CgoJTUFQIDIgfgoJTUFQIGXp6+roIH4KCU1BUCB1/Pn6+yB+CgpUaGUgZmlyc3QgbGluZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBNQVAgbGluZXMgZm9sbG93aW5nLiAgVmltIGlnbm9yZXMgaXQuCgpFYWNoIGxldHRlciBtdXN0IGFwcGVhciBpbiBvbmx5IG9uZSBvZiB0aGUgTUFQIGl0ZW1zLiAgSXQncyBhIGJpdCBtb3JlCmVmZmljaWVudCBpZiB0aGUgZmlyc3QgbGV0dGVyIGlzIEFTQ0lJIG9yIGF0IGxlYXN0IG9uZSB3aXRob3V0IGFjY2VudHMuCgoKU09VTkQtQS1MSUtFCQkJCQkJKnNwZWxsLWFmZml4LVNBTCoKCkluIHRoZSBhZmZpeCBmaWxlIFNBTCBpdGVtcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIHNvdW5kcy1hLWxpa2UgbWVjaGFuaXNtCnRvIGJlIHVzZWQuICBUaGUgbWFpbiBpdGVtcyBkZWZpbmUgdGhlICJmcm9tIiB0ZXh0IGFuZCB0aGUgInRvIiByZXBsYWNlbWVudC4KU2ltcGxpc3RpYyBleGFtcGxlOgoKCVNBTCBDSUEgICAgICAgICAgICAgICAgICBYIH4KCVNBTCBDSCAgICAgICAgICAgICAgICAgICBYIH4KCVNBTCBDICAgICAgICAgICAgICAgICAgICBLIH4KCVNBTCBLICAgICAgICAgICAgICAgICAgICBLIH4KClRoZXJlIGFyZSBhIGZldyBydWxlcyBhbmQgdGhpcyBjYW4gYmVjb21lIHF1aXRlIGNvbXBsaWNhdGVkLiAgQW4gZXhwbGFuYXRpb24KaG93IGl0IHdvcmtzIGNhbiBiZSBmb3VuZCBpbiB0aGUgQXNwZWxsIG1hbnVhbDoKaHR0cDovL2FzcGVsbC5uZXQvbWFuLWh0bWwvUGhvbmV0aWMtQ29kZS5odG1sLgoKVGhlcmUgYXJlIGEgZmV3IHNwZWNpYWwgaXRlbXM6CgoJU0FMIGZvbGxvd3VwCQl0cnVlIH4KCVNBTCBjb2xsYXBzZV9yZXN1bHQJdHJ1ZSB+CglTQUwgcmVtb3ZlX2FjY2VudHMJdHJ1ZSB+CgoiMSIgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgInRydWUiLiAgQW55IG90aGVyIHZhbHVlIG1lYW5zICJmYWxzZSIuCgoKU0lNUExFIFNPVU5ERk9MRElORwkJKnNwZWxsLWFmZml4LVNPRk9GUk9NKiAqc3BlbGwtYWZmaXgtU09GT1RPKgoKVGhlIFNBTCBtZWNoYW5pc20gaXMgY29tcGxleCBhbmQgc2xvdy4gIEEgc2ltcGxlciBtZWNoYW5pc20gaXMgbWFwcGluZyBhbGwKY2hhcmFjdGVycyB0byBhbm90aGVyIGNoYXJhY3RlciwgbWFwcGluZyBzaW1pbGFyIHNvdW5kaW5nIGNoYXJhY3RlcnMgdG8gdGhlCnNhbWUgY2hhcmFjdGVyLiAgQXQgdGhlIHNhbWUgdGltZSB0aGlzIGRvZXMgY2FzZSBmb2xkaW5nLiAgWW91IGNhbiBub3QgaGF2ZQpib3RoIFNBTCBpdGVtcyBhbmQgc2ltcGxlIHNvdW5kZm9sZGluZy4KClRoZXJlIGFyZSB0d28gaXRlbXMgcmVxdWlyZWQ6IG9uZSB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG1hcHBlZAphbmQgb25lIHRoYXQgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIHRoZXkgYXJlIG1hcHBlZCB0by4gIFRoZXkgbXVzdCBoYXZlCmV4YWN0bHkgdGhlIHNhbWUgbnVtYmVyIG9mIGNoYXJhY3RlcnMuICBFeGFtcGxlOgoKICAgIFNPRk9GUk9NIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogfgogICAgU09GT1RPICAgZWJjdGVmZ2hlamtsbm5lcGtyc3RldnZrZXNlYmN0ZWZnaGVqa2xubmVwa3JzdGV2dmtlcyB+CgpJbiB0aGUgZXhhbXBsZSBhbGwgdm93ZWxzIGFyZSBtYXBwZWQgdG8gdGhlIHNhbWUgY2hhcmFjdGVyICdlJy4gIEFub3RoZXIKbWV0aG9kIHdvdWxkIGJlIHRvIGxlYXZlIG91dCBhbGwgdm93ZWxzLiAgU29tZSBjaGFyYWN0ZXJzIHRoYXQgc291bmQgbmVhcmx5CnRoZSBzYW1lIGFuZCBhcmUgb2Z0ZW4gbWl4ZWQgdXAsIHN1Y2ggYXMgJ20nIGFuZCAnbicsIGFyZSBtYXBwZWQgdG8gdGhlIHNhbWUKY2hhcmFjdGVyLiAgRG9uJ3QgZG8gdGhpcyB0b28gbXVjaCwgYWxsIHdvcmRzIHdpbGwgc3RhcnQgbG9va2luZyBhbGlrZS4KCkNoYXJhY3RlcnMgdGhhdCBkbyBub3QgYXBwZWFyIGluIFNPRk9GUk9NIHdpbGwgYmUgbGVmdCBvdXQsIGV4Y2VwdCB0aGF0IGFsbAp3aGl0ZSBzcGFjZSBpcyByZXBsYWNlZCBieSBvbmUgc3BhY2UuICBTZXF1ZW5jZXMgb2YgdGhlIHNhbWUgY2hhcmFjdGVyIGluClNPRk9GUk9NIGFyZSByZXBsYWNlZCBieSBvbmUuCgpZb3UgY2FuIHVzZSB0aGUgfHNvdW5kZm9sZCgpfCBmdW5jdGlvbiB0byB0cnkgb3V0IHRoZSByZXN1bHRzLiAgT3Igc2V0IHRoZQondmVyYm9zZScgb3B0aW9uIHRvIHNlZSB0aGUgc2NvcmUgaW4gdGhlIG91dHB1dCBvZiB0aGUgfHo/fCBjb21tYW5kLgoKCiB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoK