sabato 1 gennaio 2000

[AL CORPUS] Clairvoyance [1/2]

Q0xBSVJWT1lBTkNFIAoKCiUtIC4gCgpjLiB3LiAKCgpMRUFEQkVBVEVSIAoKClNFQ09ORCBFRElUSU9OIAoKCkxPTkRPTiAKClRIRU9TT1BISUNBTCBQVUJMSVNISU5HIFNPQ0lFVFkgCgoKPzM1IAoKRDMgCgpJNjE2aDwyIOKAmSAKCgpDT05URU5UUyAKCgppIAoKCkNIQVBURVIgSS4gCgpXaGF0IENsYWlydm95YW5jZSBpcyAuIC4gLiAKCkNIQVBURVIgSUkuIAoKU2ltcGxlIENsYWlydm95YW5jZSA6IEZ1bGwgCgpDSEFQVEVSIElJSS4gCgpTaW1wbGUgQ2xhaXJ2b3lhbmNlKi4gUGFydGlhbCAuIAoKQ0hBUFRFUiBJVi4gCgpDbGFpcnZveWFuY2UgaW4gU3BhY2UgOiBJbnRlbnRpb25hbCAKCkNIQVBURVIgVi4gCgpDbGFpcnZveWFuY2UgaW4gU3BhY2UgKi4gU2VtaS1JbnRlbnRpb25hbCAKCkNIQVBURVIgVkkuIAoKQ2xhaXJ2b3lhbmNlIGluIFNwYWNlIDogVW5pbnRlbnRpb25hbCAuIAoKQ0hBUFRFUiBWSUkuIAoKQ2xhaXJ2b3lhbmNlIGluIFRpbWUgLiogdGhlIFBhc3QgCgpDSEFQVEVSIFZJSUksIAoKQ2xhaXJ2b3lhbmNlIGluIFRpbWUgOiB0aGUgRnV0dXJlIC4gCgpDSEFQVEVSIElYLiAKCk1ldGhvZHMgb2YgRGV2ZWxvcG1lbnQgLi4uLiAKCgpDTEFJUlZPWUFOQ0UgCgpDSEFQVEVSIEkuIAoKV2hhdCBDbGFpcnZveWFuY2UgaXMuIAoKQ2xhaXJ2b3lhbmNlIG1lYW5zIGxpdGVyYWxseSBub3RoaW5nIG1vcmUgdGhhbiAK4oCcIGNsZWFyLXNlZWluZy8nIGFuZCBpdCBpcyBhIHdvcmQgd2hpY2ggaGFzIGJlZW4gc29yZWx5IAptaXN1c2VkLCBhbmQgZXZlbiBkZWdyYWRlZCBzbyBmYXIgYXMgdG8gYmUgZW1wbG95ZWQgCnRvIGRlc2NyaWJlIHRoZSB0cmlja2VyeSBvZiBhIG1vdW50ZWJhbmsgaW4gYSB2YXJpZXR5IApzaG93LiBFdmVuIGluIGl0cyBtb3JlIHJlc3RyaWN0ZWQgc2Vuc2UgaXQgY292ZXJzIGEgCiNpZGUgcmFuZ2Ugb2YgcGhlbm9tZW5hLCBkaWZmZXJpbmcgc28gZ3JlYXRseSBpbiAKY2hhcmFjdGVyIHRoYXQgaXQgaXMgbm90IGVhc3kgdG8gZ2l2ZSBhIGRlZmluaXRpb24gb2YgdGhlIAp3b3JkIHdoaWNoIHNoYWxsIGJlIGF0IG9uY2Ugc3VjY2luY3QgYW5kIGFjY3VyYXRlLiAKSXQgaGFzIGJlZW4gY2FsbGVkIOKAnCBzcGlyaXR1YWwgdmlzaW9uLCcg4oCdIGJ1dCBubyByZW5kZXJpbmcgCmNvdWxkIHdlbGwgYmUgbW9yZSBtaXNsZWFkaW5nIHRoYW4gdGhhdCwgZm9yIGluIHRoZSAKdmFzdCBtYWpvcml0eSBvZiBjYXNlcyB0aGVyZSBpcyBubyBmYWN1bHR5IGNvbm5lY3RlZCAKd2l0aCBpdCB3aGljaCBoYXMgdGhlIHNsaWdodGVzdCBjbGFpbSB0byBiZSBob25vdXJlZCAKYnkgc28gbG9mdHkgYSBuYW1lLiAKCkZvciB0aGUgcHVycG9zZSBvZiB0aGlzIHRyZWF0aXNlIHdlIG1heSwgcGVyaGFwcywgCmRlZmluZSBpdCBhcyB0aGUgcG93ZXIgdG8gc2VlIHdoYXQgaXMgaGlkZGVuIGZyb3JwIApvcmRpbmFyeSBwaHlzaWNhbCBzaWdodC4gSXQgd2lsbCBiZSBhcyB3ZWxsIHRvIHByZW1pc2UgCgoKNiAKCgpDTEFJUlZPWUFOQ0UgCgoKdGhhdCBpdCBpcyB2ZXJ5IGZyZXF1ZW50bHkgKHRob3VnaCBieSBubyBtZWFucyBhbHdheXMpIAphY2NvbXBhbmllZCBieSB3aGF0IGlzIGNhbGxlZCBjbGFpcmF1ZGllbmNlLCBvciB0aGUgCnBvd2VyIHRvIGhlYXIgd2hhdCB3b3VsZCBiZSBpbmF1ZGlibGUgdG8gdGhlIG9yZGluYXJ5IApwaHlzaWNhbCBlYXIgOyBhbmQgd2Ugd2lsbCBmb3IgdGhlIG5vbmNlIHRha2Ugb3VyIHRpdGxlIAphcyBjb3ZlcmluZyB0aGlzIGZhY3VsdHkgYWxzbywgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIApjbHVtc2luZXNzIG9mIHBlcnBldHVhbGx5IHVzaW5nIHR3byBsb25nIHdvcmRzIHdoZXJlIApvbmUgd2lsbCBzdWZmaWNlLiAKCkxldCBtZSBtYWtlIHR3byBwb2ludHMgY2xlYXIgYmVmb3JlIEkgYmVnaW4uIApGaXJzdCwgSSBhbSBub3Qgd3JpdGluZyBmb3IgdGhvc2Ugd2hvIGRvIG5vdCBiZWxpZXZlIAp0aGF0IHRoZXJlIGlzIHN1Y2ggYSB0aGluZyBhcyBjbGFpcnZveWFuY2UsIG5vciBhbSBJIApzZWVraW5nIHRvIGNvbnZpbmNlIHRob3NlIHdobyBhcmUgaW4gZG91YnQgYWJvdXQgdGhlIAptYXR0ZXIuIEluIHNvIHNtYWxsIGEgd29yayBhcyB0aGlzIEkgaGF2ZSBubyBzcGFjZSAKZm9yIHRoYXQgOyBzdWNoIHBlb3BsZSBtdXN0IHN0dWR5IHRoZSBtYW55IGJvb2tzIApjb250YWluaW5nIGxpc3RzIG9mIGNhc2VzLCBvciBtYWtlIGV4cGVyaW1lbnRzIGZvciAKCjEgdGhlbXNlbHZlcyBhbG9uZyBtZXNtZXJpYyBsaW5lcy4gSSBhbSBhZGRyZXNzaW5nIApteXNlbGYgdG8gdGhlIGJldHRlci1pbnN0cnVjdGVkIGNsYXNzIHdobyBrbm93IApedGhhdCBjbGFpcnZveWFuY2UgZXhpc3RzLCBhbmQgYXJlIHN1ZmZpY2llbnRseSBpbnRlcmVzdGVkIAoiaW4gdGhlIHN1YmplY3QgdG8gYmUgZ2xhZCBvZiBpbmZvcm1hdGlvbiBhcyB0byBpdCQgCm1ldGhvZHMgYW5kIF5qZ2dnZ2JpbGl0aWVzIDsgYW5kIEkgd291bGQgYXNzdXJlIHRoZWhhIAoKdGhhdCAiKjIwXiAKCmFuZCBleHBlcmltZW50LCBhbmQgdGhhdCB0aG91Z2ggc29tZSBvZiB0aGUgcG93ZXJzIAp3aGljaCBJIHNoYWxsIGhhdmUgdG8gZGVzY3JpYmUgbWF5IHNlZW0gbmV3IGFuZCAKd29uZGVyZnVsIHRvIHRoZW0sIEkgbWVudGlvbiBubyBzaW5nbGUgb25lIG9mIHdoaWNoIApJIGhhdmUgbm90IG15c2VsZiBzZWVuIGV4YW1wbGVzLiAKClNlY29uZGx5LCB0aG91Z2ggSSBzaGFsbCBlbmRlYXZvdXIgdG8gYXZvaWQgdGVjaG5pLSAKY2FsaXRpZXMgYXMgZmFyIGFzIHBvc3NpYmxlLCB5ZXQgYXMgSSBhbSB3cml0aW5nIGluIHRoZSAKbWFpbiBmb3Igc3R1ZGVudHMgb2YgVGhlb3NvcGh5LCBJIHNoYWxsIGZlZWwgbXlzZWxmIGF0IApsaWJlcnR5IHNvbWV0aW1lcyB0byB1c2UsIGZvciBicmV2aXR54oCZcyBzYWtlIGFuZCB3aXRoLSAKCgonIGkgCgoKTEFURU5UIEZBQ1VMVElFUyAKCgo3IAoKCm91dCBkZXRhaWxlZCBleHBsYW5hdGlvbiwgdGhlIG9yZGluYXJ5IFRoZW9zb3BoaWNhbCAKdGVybXMgd2l0aCB3aGljaCBJIG1heSBzYWZlbHkgYXNzdW1lIHRoZW0gdG8gYmUgCmZhbWlsaWFyLiAKClNob3VsZCB0aGlzIGxpdHRsZSBib29rIGZhbGwgaW50byB0aGUgaGFuZHMgb2YgYW55IC10byAKd2hvbSB0aGUgb2NjYXNpb25hbCB1c2Ugb2Ygc3VjaCB0ZXJtcyBjb25zdGl0dXRlcyBhIApkaWZmaWN1bHR5LCBJIGNhbiBvbmx5IGFwb2xvZ2l6ZSB0byB0aGVtIGFuZCByZWZlciB0aGVtIApmb3IgdGhlc2UgcHJlbGltaW5hcnkgZXhwbGFuYXRpb25zIHRvIGFueSBlbGVtZW50YXJ5IApUaGVvc29waGljYWwgd29yaywgc3VjaCogYXMgTXJzLiBCZXNhbmZzIEFuY2llbnQgCldpc2RvbSBvciBNYW4gYW5kIEhpcyBCb2RpZXMuIFRoZSB0cnV0aCBpcyB0aGF0IAp0aGUgd2hvbGUgVGhlb3NvcGhpY2FsIHN5c3RlbSBoYW5ncyB0b2dldGhlciBzbyAKY2xvc2VseSwgYW5kIGl0cyB2YXJpb3VzIHBhcnRzIGFyZSBzbyBpbnRlcmRlcGVuZGVudCwgCnRoYXQgdG8gZ2l2ZSBhIGZ1bGwgZXhwbGFuYXRpb24gb2YgZXZlcnkgdGVybSB1c2VkIAp3b3VsZCBuZWNlc3NpdGF0ZSBhbiBleGhhdXN0aXZlIHRyZWF0aXNlIG9uIFRoZW9zb3BoeSAKYXMgYSBwcmVmYWNlIGV2ZW4gdG8gdGhpcyBzaG9ydCBhY2NvdW50IG9mIGNsYWlydm95YW5jZS4gCgpCZWZvcmUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBjbGFpcnZveWFuY2UgY2FuIAp1c2VmdWxseSBiZSBhdHRlbXB0ZWQsIGhvd2V2ZXIsIGl0IHdpbGwgYmUgbmVjZXNzYXJ5IApmb3IgdXMgdG8gZGV2b3RlIGEgbGl0dGxlIHRpbWUgdG8gc29tZSBwcmVsaW1pbmFyeSBjb24tIApzaWRlcmF0aW9ucywgaW4gb3JkZXIgdGhhdCB3ZSBtYXkgaGF2XmNmZWlseSBpbiBtaW5kIAphIGZldyBicm9hZCBmYWN0cyBhcyB0byB0aGUgZGlmZmVyZW50IHBsYW5lcyBvbiB3aGljaCAKY2xhaXJ2b3lhbnQgdmlzaW9uIG1heSBiZSBleGVyY2lzZWQsIGFuZCB0aGUgY29uLSAKZGl0aW9ucyB3aGljaCByZW5kZXIgaXRzIGV4ZXJjaXNlIHBvc3NpYmxlLiAKCldlIGFyZSBjb25zdGFudGx5IGFzc3VyZWQgaW4gVGhlb3NvcGhpY2FsIGxpdGVyYXR1cmUgCnRoYXQgYWxsIHRoZXNlIGhpZ2hlciBmYWN1bHRpZXMgYXJlIHByZXNlbnRseSB0byBiZSB0aGUgCmhlcml0YWdlIG9mIG1hbmtpbmQgaW4gZ2VuZXJhbCDigJQgdGhhdCB0aGUgY2FwYWNpdHkgb2YgCmNsYWlydm95YW5jZSwgZm9yIGV4YW1wbGUsIGxpZXMgbGF0ZW50IGluIGV2ZXJ5IG9uZSwgCmFuZCB0aGF0IHRob3NlIGluIHdob20gaXQgYWxyZWFkeSBtYW5pZmVzdHMgaXRzZWxmIGFyZSAKc2ltcGx5IGluIHRoYXQgb25lIHBhcnRpY3VsYXIgYSBsaXR0bGUgaW4gYWR2YW5jZSBvZiB0aGUgCnJlc3Qgb2YgdXMuIE5vdyB0aGlzIHN0YXRlbWVudCBpcyBhIHRydWUgb25lLCBhbmQgeWV0IAoKCjggCgoKQ0xBSVJWT1lBTkNFIAoKCml0IHNlZW1zIHF1aXRlIHZhZ3VlIGFuZCB1bnJlYWwgdG8gdGhlIG1ham9yaXR5IG9mIApwZW9wbGUsIHNpbXBseSBiZWNhdXNlIHRoZXkgcmVnYXJkIHN1Y2ggYSBmYWN1bHR5IGFzIApzb21ldGhpbmcgYWJzb2x1dGVseSBkaWZmZXJlbnQgZnJvbSBhbnl0aGluZyB0aGV5IApoYXZlIHlldCBleHBlcmllbmNlZCwgYW5kIGZlZWwgZmFpcmx5IGNvbmZpZGVudCB0aGF0IAp0aGV5IHRoZW1zZWx2ZXMsIGF0IGFueSByYXRlLCBhcmUgbm90IHdpdGhpbiBtZWFzdXJhYmxlIApkaXN0YW5jZSBvZiBpdHMgZGV2ZWxvcG1lbnQgCgpJdCBtYXkgaGVscCB0byBkaXNwZWwgdGhpcyBzZW5zZSBvZiB1bnJlYWxpdHkgaWYgd2UgCnRyeSB0byB1bmRlcnN0YW5kIHRoYXQgY2xhaXJ2b3lhbmNlLCBsaWtlIHNvIG1hbnkgCm90aGVyIHRoaW5ncyBpbiBuYXR1cmUsIGlzIG1haW5seSBhdWVzdGlvbiBvZiB2aS0gCmZmYnJhdGlvbnMsIGFuZCBqcyBpbiBmYWN0IHFvdGheIG9mLCwgCgpqcG93ZXJzIHdoaWNoLCwgd2UgYXJlIGFsbCB1c2luZyBldmVqW3leZGF5IG9mIG91ciBsaXZlcy4gCl5XZSBhcmUgbGl2aW5nIGFsbCB0aGUgd2hpbGUgc3Vycm91bmRlZCBieSBhIHZhc3Qgc2VhIApwZiBtaW5nbGVkIGFpciBhbmQgZXRoZXIsIHRoZSBsYXR0ZXIgaW50ZXJwZW5ldHJhdGluZyAKdGhlIGZvcm1lciwgYXMgaXQgZG9lcyBhbGwgcGh5c2ljYWwgbWF0dGVyOyBhbmQgaXQgaXMgCgpjaGllXiBe4oCeLm1lYW5zIC5vZiB2aWJyYXRpb25zIGluIHRoYXQgdmFzdCBzZWEgb2YgCgpcbWF0dGVyIHRoXl4gam1wcl5pb25zIC4gcmVhY2gganVzbCBmcm9tLCB0aGUgb3V0c2lkZS4gClRoaXMgbXVjaCB3ZSBhbGwga25vdywgYnV0IGl0IG1heSBwZXJoYXBzIG5ldmVyIApeIGhhdmUgb2NjdXJyZWQgdG8gbWFueSBvZiB1cyB0aGF0IHRoZSBudW1iZXIgb2YgdGhlcy5lwrsgCndpYnJhdGlvbnMgdG8gd2hpY2ggd2UgYXJlIGNhcGFibGUgb2YgcmVzcG9uZGluZyBpcyBpbiAKUmVhbGl0eSBxdWl0ZSBpbmZpbml0ZXNpbWFsLiAKClVwIGFtb25nIHRoZSBleGNlZWRpbmdseSByYXBpZCB2aWJyYXRpb25zIHdoaWNoIAphZmZlY3QgdGhlIGV0aGVyIHRoZXJlIGlzIGEgY2VydGFpbiBzbWFsbCBzZWN0aW9uIOKAlCBhIAp2ZXJ5IHNtYWxsIHNlY3Rpb24g4oCUIHRvIHdoaWNoIHRoZSByZXRpbmEgb2YgdGhlIGh1bWFuIApleWUgSXMgY2FwYWJsZSBvZiByZXNwb25kaW5nLCBhbmQgdGhlc2UgcGFydGljdWxhciAKdmlicmF0aW9ucyBwcm9kdWNlIGluIHVzIHRoZSBzZW5zYXRpb24gd2hpY2ggd2UgY2FsbCAKZmxpZ2h0LiBUaGF0IGlzIHRvIHNheSwgd2UgYXJlIGNhcGFibGUgb2Ygc2VlaW5nIG9ubHkgCnRob3NlIG9iamVjdHMgZnJvbSB3aGljaCBsaWdodCBvZiB0aGF0IHBhcnRpY3VsYXIga2luZCAKY2FuIGVpdGhlciBpc3N1ZSBvciBiZSByZWZsZWN0ZWQuIAoKCn4gCgoKciAKCgpWSUJSQVRJT05TIAoKCjkgCgoKSW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgdGhlIHR5IG1wYW51bSBvZiB0aGUgaHVtYW4gCmVhciBpcyBjYXBhYmxlIG9mIHJlc3BvbmRpbmcgdG8g4oCcYXNjZXJ0YWluIHZlcnkgc21hbGwgCnJhbmdlIG9mIGNvbXBhcmF0aXZlbHkgc2xvdyB2aWJyYXRpb25zIOKAlCBzbG93IGVub3VnaCAKdG8gYWZmZWN0IHRoZSBhaXIgd2hpY2ggc3Vycm91bmRzIHVzIDsgYW5kIHNvIHRoZSBvbmx5IApzb3VuZHMgd2hpY2ggd2UgY2FuIGhlYXIgYXJlIHRob3NlIG1hZGUgYnkgb2JqZWN0cyAKd2hpY2ggYXJlIGFibGUgdG8gdmlicmF0ZSBhdCBzb21lIHJhdGUgd2l0aGluIHRoYXQgCnBhcnRpY3VsYXIgcmFuZ2UuIAoKSW4gYm90aCBjYXNlcyBpdCBpcyBhIG1hdHRlciBwZXJmZWN0bHkgd2VsbCBrbm93biB0byAKc2NpZW5jZSB0aGF0IHRoZXJlIGFyZSBsYXJnZSBudW1iZXJzIG9mIHZpYnJhdGlncF5qIApib3RoIGFib3ZlICwgYW5kIEpeZWxvdyB0aGVzZSAsIHR3byBzZWN0aW9ucywgYW5kIHRoYXwpIApjb25zZXF1ZW50bHkgdGhlcmUgaXMgbXVjaCBsaWdodCB0aGF0IHdlIGNhbm5vdCBzZWV8OyAKYW5kIHRoZXJlIGFyZSBtYW55IHNvdW5kcyB0byB3aGljaCBvdXIgZWFycyBhcmUgZGVhZmlqIApJbiB0aGUgY2FzZSBvZiBsaWdodCB0aGUgYWN0aW9uIG9mIHRoZXNlIGhpZ2hlciBhbmE/IApsb3dlciB2aWJyYXRpb25zIGlzIGVhc2lseSBwZXJjZXB0aWJsZSBpbiB0aGUgZWZmZWN0cyAKcHJvZHVjZWQgYnkgdGhlIGFjdGluaWMgcmF5cyBhdCBvbmUgZW5kIG9mIHRoZSAKc3BlY3RydW0gYW5kIHRoZSBoZWF0IHJheXMgYXQgdGhlIG90aGVyLiAKCkFzIGEgbWF0dGVyIG9mIGZhY3QgdGhlcmUgZXhpc3QgdmlicmF0aW9ucyBvZiBldmVqIDt5IApjb25jZWl2YWJsZSBkZWdyZWUgLCBvZiByYXBpY2ppZnksIGZpbGxpbmcgdGhlIHdob2xlIHZhc3QgCnNwYWNlIGludGVydmVuaW5nIGJldHdlZW4gdGhlIHNsb3cgc291bmQgd2F2ZXMgYW5kIAp0aGUgc3dpZnQgbGlnaHQgd2F2ZXMgOyBub3IgaXMgZXZlbiB0aGF0IGFsbCwgZm9yIHRoZXJlIAphcmUgdW5kb3VidGVkbHkgdmlicmF0aW9ucyBzbG93ZXIgdGhhbiB0aG9zZSBvZiAKc291bmQsIGFuZCBhIHdob2xlIGluZmluaXR5IG9mIHRoZW0gd2hpY2ggYXJlIHN3aWZ0ZXIgCnRoYW4gdGhvc2Uga25vd24gdG8gdXMgYXMgbGlnaHQuIFNvIHdlIGJlZ2luIHRvIAp1bmRlcnN0YW5kIHRoYXQgdGhlIHZpYnJhdGlvbnMgYnkgd2hpY2ggd2Ugc2VlIGFuZCAKaGVhciBhcmUgb25seSBsaWtlIHR3byB0aW55IGdyb3VwcyBvZiBhIGZldyBzdHJpbmdzIApzZWxlY3RlZCBmcm9tIGFuIGVub3Jtb3VzIGhhcnAgb2YgcHJhY3RpY2FsbHkgaW5maW5pdGUgCmV4dGVudCwgYW5kIHdoZW4gd2UgdGhpbmsgaG93IG11Y2ggd2UgaGF2ZSBiZWVuIAphYmxlIHRvIGxlYXJuIGFuZCBpbmZlciBmcm9tIHRoZSB1c2Ugb2YgdGhvc2UgbWludXRlIAoKCjEwIAoKCkNMQUlSVk9ZQU5DRSAKCgpJL0kgCgoKZnJhZ21lbnRzLCB3ZSBzZWUgdmFndWVseSB3aGF0IHBvc3NpYmlsaXRpZXMgbWlnaHQgbGllIApiZWZvcmUgdXMgaWYgd2Ugd2VyZSBlbmFibGVkIHRvIHV0aWxpemUgdGhlIHZhc3QgYW5kIAp3b25kZXJmdWwgd2hvbGUuIAoKQW5vdGhlciBmYWN0IHdoaWNoIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgaW4gdGhpcyAKb25uZWN0aW9uIGlzIHRoYXQgZGlmZmVyZW50IGh1bWFuIGJlaW5ncyB2YXJ5IGNvbi0gCnNpZGVyYWJseSwgdGhvdWdoIHdpdGhpbiByZWxhdGl2ZWx5IG5hcnJvdyBsaW1pdHMsIGluIAppdGhlaXIgY2FwYWNpdHkgb2YgcmVzcG9uc2UgZXZlbiB0byB0aGUgdmVyeSBmZXcgdmlicmEtIAp0aW9ucyB3aGljaCBhcmUgd2l0aGluIHJlYWNoIG9mIG91ciBwaHlzaWNhbCBzZW5zZXMsIAppbCBhbSBub3QgcmVmZXJyaW5nIHRvIHRoZSBrZWVubmVzcyBvZiBzaWdodCBvciBvZiBoZWFyLSAKaW5nIHRoYXQgZW5hYmxlcyBvbmUgbWFuIHRvIHNlZSBhIGZhaW50ZXIgb2JqZWN0IG9yIApoZWFyIGEgc2xpZ2h0ZXIgc291bmQgdGhhbiBhbm90aGVyIDsgaXQgaXMgbm90IGluIHRoZSAKbGVhc3QgYSBxdWVzdGlvbiBvZiBzdHJlbmd0aCBvZiB2aXNpb24sIGJ1dCBvZiBleHRlbnQgb2YgCnN1c2NlcHRpYmlsaXR5LiAKCkZvciBleGFtcGxlLCBpZiBhbnlvbmUgd2lsbCB0YWtlIGEgZ29vZCBiaXN1bHBoaWRlIApvZiBjYXJib24gcHJpc20sIGFuZCBieSBpdHMgbWVhbnMgdGhyb3cgYSBjbGVhciAKc3BlY3RydW0gb24gYSBzaGVldCBvZiB3aGl0ZSBwYXBlciwgYW5kIHRoZW4gZ2V0IGEgCm51bWJlciBvZiBwZW9wbGUgdG8gbWFyayB1cG9uIHRoZSBwYXBlciB0aGUgZXh0cmVtZSAKbGltaXRzIG9mIHRoZSBzcGVjdHJ1bSBhcyBpdCBhcHBlYXJzIHRvIHRoZW0sIGhlIGlzIApmYWlybHkgY2VydGFpbiB0byBmaW5kIHRoYXQgdGhlaXIgcG93ZXJzIG9mIHZpc2lvbiBkaWZmZXIgCmFwcHJlY2lhYmx5LiBTb21lIHdpbGwgc2VlIHRoZSB2aW9sZXQgZXh0ZW5kaW5nIAptdWNoIGZhcnRoZXIgdGhhbiB0aGUgbWFqb3JpdHkgZG8gOyBvdGhlcnMgd2lsbCAKcGVyaGFwcyBzZWUgcmF0aGVyIGxlc3MgdmlvbGV0IHRoYW4gbW9zdCwgd2hpbGUgZ2FpbmluZyAKYSBjb3JyZXNwb25kaW5nIGV4dGVuc2lvbiBvZiB2aXNpb24gYXQgdGhlIHJlZCBlbmQuIApTb21lIGZldyB0aGVyZSB3aWxsIHBlcmhhcHMgYmUgd2hvIGNhbiBzZWUgZmFydGhlciAKdGhhbiBvcmRpbmFyeSBhdCBib3RoIGVuZHMsIGFuZCB0aGVzZSB3aWxsIGFsbW9zdCAKY2VydGFpbmx5IGJlIHdoYXRed2UgY2FsbCBzZW5zaXRpdmUgcGVvcGxlIOKAlCBzdXNjZXB0aWJsZSAKaW4gZmFjdCB0byBhIGdyZWF0ZXIgcmFuZ2Ugb2YgdmlicmF0aW9ucyB0aGFuIGFyZSBtb3N0IAptZW4gb2YgdGhlIHByZXNlbnQgZGF5LiAKCgpFWFRFTkRFRCBTRU5TRVMgCgoKSUkgCgoKIyAKCgpJbiBoZWFyaW5nLCB0aGUgc2FtZSBkaWZmZXJlbmNlIGNhbiBiZSB0ZXN0ZWQgYnkgCnRha2luZyBzb21lIHNvdW5kIHdoaWNoIGlzIGp1c3Qgbm90IHRvbyBoaWdoIHRvIGJlIAphdWRpYmxlIOKAlCBvbiB0aGUgdmVyeSB2ZXJnZSBvZiBhdWRpYmlsaXR5IGFzIGl0IHdlcmUg4oCUIAphbmQgZGlzY292ZXJpbmcgaG93IG1hbnkgYW1vbmcgYSBnaXZlbiBudW1iZXIgb2YgCnBlb3BsZSBhcmUgYWJsZSB0byBoZWFyIGl0IFRoZSBzcXVlYWsgb2YgYSBiYXQgaXMgYSAKZmFtaWxpYXIgaW5zdGFuY2Ugb2Ygc3VjaCBhIHNvdW5kLCBhbmQgZXhwZXJpbWVudCB3aWxsIApzaG93IHRoYXQgb24gYSBzdW1tZXIgZXZlbmluZywgd2hlbiB0aGUgd2hvbGUgYWlyIAppcyBmdWxsIG9mIHRoZSBzaHJpbGwsIG5lZWRsZS1saWtlIGNyaWVzIG9mIHRoZXNlIGxpdHRsZSAKYW5pbWFscywgcXVpdGUgYSBsYXJnZSBudW1iZXIgb2YgbWVuIHdpbGwgYmUgYWJzb2x1dGVseSAKdW5jb25zY2lvdXMgb2YgdGhlbSwgYW5kIHVuYWJsZSB0byBoZWFyIGFueXRoaW5nIGF0IAphbGwuIAoKTm93IHRoZXNlIGV4YW1wbGVzIGNsZWFybHkgc2hvdyB0aGF0IHRoZXJlIGlzIG5vIApoYXJkLWFuZC1mYXN0IGxpbWl0IHRvIG1hbidzIHBvd2VyIG9mIHJlc3BvbnNlIHRvIAplaXRoZXIgZXRoZXJpYyBvciBhZXJpYWwgdmlicmF0aW9ucywgYnV0IHRoYXQgc29tZSAKYW1jam5nIHVzIGFscmVhZHkgaGF2ZSB0aGF0IHBvd2VyIHRvIGEgd2lkZXIgZXh0ZW50IAp0aGFuIG90aGVycyA7IGFuZCBpdCB3aWxsIGV2ZW4gYmUgZm91bmQgdGhhdCB0aGUgc2FtZSAKbWFuJ3MgY2FwYWNpdHkgdmFyaWVzIG9uIGRpZmZlcmVudCBvY2Nhc2lvbnMuIEl0IGlzIAp0aGVyZWZvcmUgbm90IGRpZmZpY3VsdCBmb3IgdXMgdG8gaW1hZ2luZSB0aGF0IGl0IAptaWdodCBiZSBwb3NzaWJsZSBmb3IgYSBtYW4gdG8gZGV2ZWxvcCB0aGlzIHBvd2VyLCBJIAphbmQgdGh1cyBpbiB0aW1lIHRvIGxlYXJuIHRvIHNlZSBtdWNoIHRoYXQgaXMgaW52aXNpYmxlIAp0byBoaXMgZmVsbG93LW1lbiwgYW5kIGhlYXIgbXVjaCB0aGF0IGlzIGluYXVkaWJsZSAKdG8gdGhlbSwgc2luY2Ugd2Uga25vdyBwZXJmZWN0bHkgd2VsbCB0aGF0IGVub3Jtb3VzIApudW1iZXJzIG9mIHRoZXNlIGFkZGl0aW9uYWwgdmlicmF0aW9ucyBkbyBleGlzdCwgYW5kIAphcmUgc2ltcGx5LCBhcyBpdCB3ZXJlLCBhd2FpdGluZyByZWNvZ25pdGlvbi4gCgpUaGUgZXhwZXJpbWVudHMgd2l0aCB0aGUgUm9udGdlbiByYXlzIGdpdmUgdXMgYW4gCmV4YW1wbGUgb2YgdGhlIHN0YXJ0bGluZyByZXN1bHRzIHdoaWNoIGFyZSBwcm9kdWNlZCAKd2hlbiBldmVuIGEgdmVyeSBmZXcgb2YgdGhlc2UgYWRkaXRpb25hbCB2aWJyYXRpb25zIAphcmUgYnJvdWdodCB3aXRoaW4gaHVtYW4ga2VuLCBhbmQgdGhlIHRyYW5zcGFyZW5jeSAKCgoxMiAKCgpDTEFJUlZPWUFOQ0UgCgoKdG8gdGhlc2UgcmF5cyBvZiBtYW55IHN1YnN0YW5jZXMgaGl0aGVydG8gY29uc2lkZXJlZCAKb3BhcXVlIGF0IG9uY2Ugc2hvd3MgdXMgb25lIHdheSogYXQgbGVhc3QgaW4gd2hpY2ggCndlIG1heSBleHBsYWluIHN1Y2ggZWxlbWVudGFyeSBjbGFpcnZveWFuY2VeYXMgaXMgCmludm9sdmVkIGluIHJlYWRpbmcgYSBsZXR0ZXIgaW5zaWRlIGEgY2xvc2VkIGJveCwgb3IgCmRlc2NyaWJpbmcgdGhvc2UgcHJlc2VudCBpbiBhbiBhZGpvaW5pbmcgYXBhcnRtZW50LiAKVG8gbGVhcm4gdG8gc2VlIGJ5IG1lYW5zIG9mIHRoZSBSb250Z2VuIHJheXMgaW4gCmFkZGl0aW9uIHRvIHRob3NlIG9yZGluYXJpbHkgZW1wbG95ZWQgd291bGQgYmUgcXVpdGUgCnN1ZmZpY2llbnQgdG8gZW5hYmxlIGFueW9uZSB0byBwZXJmb3JtIGEgZmVhdCBvZiBtYWdpYyAKb2YgdGhpcyBvcmRlci4gCgpTbyBmYXIgd2UgaGF2ZSB0aG91Z2h0IG9ubHkgb2YgYW4gZXh0ZW5zaW9uIG9mIHRoZSAKcHVyZWx5IHBoeXNpY2FsIHNlbnNlcyBvZiBtYW4gOyBhbmQgd2hlbiB3ZSAKcmVtZW1iZXIgdGhhdCBhIG1hbuKAmXMgZXRoZXJpYyBib2R5IGlzIGluIHJlYWxpdHkgCm1lcmVseSB0aGUgZmluZXIgcGFydCBvZiBoaXMgcGh5c2ljYWwgZnJhbWUsIGFuZCB0aGF0IAp0aGVyZWZvcmUgYWxsIGhpcyBzZW5zZSBvcmdhbnMgY29udGFpbiwgYSxUbGFyLmcuZS0uYW1vdW50IAoKCmdjYXBhY2l0cmVzIG90IHdIaWNpaSBhcmUgc3RpbGwgcHJhY3RpY2FsbHkgCmxvZiB1cywgd2Ugc2hhbGwgc2VlIHRoYXQgZXZlbiBpZiB3ZSBjb25maW5lIG91cnNlbHZlcyB0byAKanRoaXMgbGluZSBvZiBkZXZlbG9wbWVudCBhbG9uZSB0aGVyZSBhcmUgZW5vcm1vaWZzIApwb3NzaWJpbGl0aWVzIG9mIGFsbCBraW5kcyBhbHJlYWR5IG9wZW5pbmcgb3V0IGJlZm9yZSB1cy4gCgpCdXQgYmVzaWRlcyBhbmQgYmV5b25kIGFsbCB0aGlzIHdlIGtub3cgdGhhdCBtamppIApwb3NzZXNzZXMgYW4gYXN0cmFsIGFuZCBhIG1lbnRhbCBib2R5LCwgZWFjaCBvZiB3aGljaCAKY2FuIGluIHByb2Nlc3Mgb2Z0aW1lIG9lIGFyb3VzZWQgaW50byBhY3Rpdml0eSwgYW5kIAp3aWxsIHJlc3BvbmQgaW4gdHVybiB0byB0aGUgdmlicmF0aW9ucyBvZiB0aGUgbWF0dGVyIApvZiBpdHMgb3duIHBsYW5lLCB0aHVzIG9wZW5pbmcgdXAgYmVmb3JlIHRoZSBFZ28sIAphcyBoZSBsZWFybnMgdG8gZnVuY3Rpb24gdGhyb3VnaCB0aGVzZSB2ZWhpY2xlcywgCnR3byBlbnRpcmVseSBuZXcgYW5kIGZhciB3aWRlciB3b3JsZHMgb2Yga25vd2xlZGdlIAphbmQgcG93ZXIuIE5vdyB0aGVzZSBuZXcgd29ybGRzLCB0aG91Z2ggdGhleSBhcmUgCmFsbCBhcm91bmQgdXMgYW5kIGZyZWVseSBpbnRlcnBlbmV0cmF0ZSBvbmUgYW5vdGhlciwgCgoKSU5URVJQRU5FVFJBVElPTiBPRiBNQVRURVIgCgoKMTMgCgoKYXJlIG5vdCB0byBiZSB0aG91Z2h0IG9mIGFzIGRpc3RpbmN0IGFuZCBlbnRpcmVseSB1bi0gCmNvbm5lY3RlZCBpbiBzdWJzdGFuY2UsIGJ1dCByYXRoZXIgYXMgbWVsdGluZyB0aGUgb25lIAp2IGludG8sIHRoZSBvdGhlciwgdGhlIGxvd2VzdCBhc3RyYWwgZm9ybWluZyBhIGRpcmVjdCBzZXJpZXMgCndpdGggdGhlIGhpZ2hlc3QgcGh5c2ljYWwsIGp1c3QgYXMgdGhlIGxvd2VzdCBtZW50YWwgCmluIGl0cyB0dXJuIGZvcm1zIGEgZGlyZWN0IHNlcmllcyB3aXRoIHRoZSBoaWdoZXN0IGFzdHJhbC4gCldlIGFyZSBub3QgY2FsbGVkIHVwb24gaW4gdGhpbmtpbmcgb2YgdGhlbSB0byAKaW1hZ2luZSBzb21lIG5ldyBhbmQgc3RyYW5nZSBraW5kIG9mIG1hdHRlciwgYnV0IApzaW1wbHkgdG8gdGhpbmsgb2YgdGhlIG9yZGluYXJ5IHBoeXNpY2FsIGtpbmQgYXMgCnN1YmRpdmlkZWQgc28gdmVyeSBtdWNoIG1vcmUgZmluZWx5IGFuZCB2aWJyYXRpbmcgc28gCnZlcnkgbXVjaCBtb3JlIHJhcGlkbHkgYXMgdG8gaW50cm9kdWNlIHVzIHRvIHdoYXQgCmFyZSBwcmFjdGljYWxseSBlbnRpcmVseSBuZXcgY29uZGl0aW9ucyBhbmQgcXVhbGl0aWVzLiAKCkl0IGlzIG5vdCB0aGVuIGRpZmZpY3VsdCBmb3IgdXMgdG8gZ3Jhc3AgdGhlIHBvc3NpYmlsaXR5IAphIHN0ZXxeLTPCq2RpXydFIVRPZ3LCp3NzaXZlIGV4dGVuc2lvbiBvZiBvdXIgc2Vuc2VzLCAKc28gdGhhdCBib3RoIGJ5IHNpZ2h0LCBhbmQgYnZUXmFybV53ZSBtYXZeYmUgYUVmKiAKCgp0byB0aGVeIHBoeXNpY2FsIHBsYW5lLCBhbmQgd2lsbCBtZXJlbHkgZW5hYmxlIHVzIHRvIApvYnRhaW4gaW1wcmVzc2lvbnMgZnJvbSB0aGUgZXRoZXJpYyBwYXJ0IG9mIHRoYXQgcGxhbmUsIAp3aGljaCBpcyBhdCBwcmVzZW50IGFzIGEgY2xvc2VkIGJvb2sgdG8gdXMuIFN1Y2ggCmltcHJlc3Npb25zIHdpbGwgc3RpbGwgYmUgcmVjZWl2ZWQgdGhyb3VnaCB0aGUgcmV0aW5hIG9mIAp0aGUgZXllIDsgb2YgY291cnNlIHRoZXkgd2lsbCBhZmZlY3QgaXRzIGV0aGVyaWMgcmF0aGVyIAp0aGFuIGl0cyBzb2xpZCBtYXR0ZXIsIGJ1dCB3ZSBtYXkgbmV2ZXJ0aGVsZXNzIHJlZ2FyZCAKdGhlbSBhcyBzdGlsbCBhcHBlYWxpbmcgb25seSB0byBhbiBvcmdhbiBzcGVjaWFsaXplZCAKdG8gcmVjZWl2ZSB0aGVtLCBhbmQgbm90IHRvIHRoZSB3aG9sZSBzdXJmYWNlIG9mIHRoZSAKZXRoZXJpYyBib2R5LiAKClRoZXJlIGFyZSBzb21lIGFibm9ybWFsIGNhc2VzLCBob3dldmVyLCBpbiB3aGljaCAKb3RoZXIgcGFydHMgb2YgdGhlIGV0aGVyaWMgYm9keSByZXNwb25kIHRvIHRoZXNlIGFkZGktIAoKCuKZpiAKCgoxNCAKCgpDTEFJUlZPWUFOQ0UgCgoK4pa6IHRpb25hbCB2aWJyYXRpb25zIGFzIHJlYWRpbHkgYXMsIG9yIGV2ZW4gbW9yZSByZWFkaWx5IAp0aGFuLCB0aGUgZXllLiBTdWNoIHZhZ2FyaWVzIGFyZSBleHBsaWNhYmxlIGluIHZhcmlvdXMgCndheXMsIGh1dCBwcmluY2lwYWxseSBhcyBlZmZlY3RzIG9mIHNvbWUgcGFydGlhbCBhc3RyYWwgCmRldmVsb3BtZW50LCBmb3IgaXQgd2lsbCBiZSBmb3VuZCB0aGF0IHRoZSBzZW5zaXRpdmUgCnBhcnRzIG9mIHRoZSBib2R5IGFsbW9zdCBpbnZhcmlhYmx5IGNvcnJlc3BvbmQgd2l0aCAKb25lIG9yIG90aGVyIG9mIHRoZSBjaGFremFtc3kgb3IgY2VudF4gCnRoZSBhc3RyYWwgYm9keS4gQW5kIHRob3VnaCwgaWYgYXN0cmFsIGNvbnNjaW91c25lc3MgCmJlIG5vdCB5ZXQgZGV2ZWxvcGVkLCB0aGVzZSBjZW50cmVzIG1heSBub3QgYmUgYXZhaWwtIAphYmxlIG9uIHRoZWlyIG93biBwbGFuZSwgdGhleSBhcmUgc3RpbGwgc3Ryb25nIGVub3VnaCAKdG8gc3RpbXVsYXRlIGludG8ga2VlbmVyIGFjdGl2aXR5IHRoZSBldGhlcmljIG1hdHRlciAKd2hpY2ggdGhleSBpbnRlcnBlbmV0cmF0ZS4gCgpDaWZjIFdoZW4gd2UgY29tZSB0byBkZWFsIHdpdGggdGhlIGFzdHJhbCBzZW5zZXMgdGhlbS0gCnNlbHZlcyB0aGUgbWV0aG9kcyBvZiB3b3JraW5nIGFyZSB2ZXJ5IGRpZmZlcmVudC4gClRoZSBhc3RyYWwgYm9keSBoYXMgbm8gc3BlY2lhbGl6ZWQgc2Vuc2Utb3JnYW5z4oCUIGEgCmZhY3QgKnZeY25wZXJoYXBzIG5lZWRzIHNvbWUgZXhwbGFuYXRpb24sIHNpbmNlICMgCm1hbnkgc3R1ZGVudHMgd2hvIGFyZSB0cnlpbmcgdG8gY29tcHJlaGVuZCBpdHMgCnBoeXNpb2xvZ3kgc2VlbSB0byBmaW5kIGl0IGRpZmZpY3VsdCB0byByZWNvbmNpbGUgd2l0aCAKdGhlIHN0YXRlbWVudHMgdGhhdCBoYXZlIGJlZW4gbWFkZSBhcyB0byB0aGUgcGVyZmVjdCAKaW50ZXJwZW5ldHJhdGlvbiBvZiB0aGUgcGh5c2ljYWwgYm9keSBieSBhc3RyYWwgbWF0dGVyLCAKdGhlIGV4YWN0IGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gdGhlIHR3byB2ZWhpY2xlcywgCmFuZCB0aGUgZmFjdCB0aGF0IGV2ZXJ5IHBoeXNpY2FsIG9iamVjdCBoYXMgbmVjZXNzYXJpbHkgCml0cyBhc3RyYWwgY291bnRlcnBhcnQuIAoKPyBOb3cgYWxsIHRoZXNlIHN0YXRlbWVudHMgYXJlIHRydWUsIGFuZCB5ZXQgaXQgaXMgCjsgcXVpdGUgcG9zc2libGUgZm9yIHBlb3BsZSB3aG8gZG8gbm90IG5vcm1hbGx5IHNlZSAKCnRzdHJhbGx5IHRvIG1pc3VuZGVyc3RhbmQgdGhlbS4gRXZlcnkgb3JkZXIgb2YgCmh5c2ljYWwgbWF0dGVyIGhhcyBpdHMgY29ycmVzcG9uZGluZyAiJ29yZGVUb2YgYXN0cmFsIAo7IG5hdHRlciBpbiBjb25zdGFudCBhc3NvY2lhdGlvbiB3aXRoIEl04oCUIG5vdCB0byBiZSAKc2VwYXJhdGVkIGZyb20gaXQgZXhjZXB0IGJ5IGEgdmVyeSBjb25zaWRlcmFibGUgCgoKQVNUUkFMIFNFTlNFUyAKCgoxNSAKCgpleGVydGlvbiBvZiBvY2N1bHQgZm9yY2UsIGFuZCBldmVuIHRoZW4gb25seSB0byBiZSAKaGVsZCBhcGFydCBmcm9tIGl0IGFzIGxvbmcgYXMgZm9yY2UgaXMgYmVpbmcgZGVmaW5pdGVseSAKZXhlcnRlZCB0byB0aGF0IGVuZC4gQnV0IGZvciBhbGwgdGhhdCB0aGUgcmVsYXRpb24gb2YgCnRoZSBhc3RyYWwgcGFydGljbGVzIG9uZSB0byBhbm90aGVyIGlzIGZhciBsb29zZXIgdGhhbiAKaXMgdGhlIGNhc2Ugd2l0aCB0aGVpciBwaHlzaWNhbCBjb3JyZXNwb25kZW5jZXMuIAoKSW4gYSBiYXIgb2YgaXJvbiwgZm9yIGV4YW1wbGUsIHdlIGhhdmUgYSBtYXNzIG9mIApwaHlzaWNhbCBqbm9sZWN1bGVzIGluIHRoZSBzb2xpZCBjb25kaXRpb24g4oCUIHRoYXQgaXMgdG8gCnNheSwgY2FwYWJsZSBvZiBjb21wYXJhdGl2ZWx5IGxpdHRsZSBjaGFuZ2UgaW4gdGhlaXIgCnJlbGF0aXZlIHBvc2l0aW9ucywgdGhvdWdoICRhY2ggdmlicmF0aW5nIHdpdGggaW1tZW5zZSByIF4gXiAKcmFwaWRpdHkgaW4gaXRzIG93biBzcGhlcmUuIFRoZSBhc3RyYWwgLiBjb3VudGVycGFydFQgb2YgCnRoaXMgY29uc2lzdHMgb2Ygd2hhdCB3ZSBvZnRlbiBjYWxsIHNvbGlkIGFzdHJhbCBtYXR0ZXIqLSogMSAxIHQgCuKAlHRoYXQgaXMsIG1hdHRlciBvZiB0aGUgbG93ZXN0IGFuZCBkZW5zZXN0IHN1Yi1wbGFuZSAKb2YgdGhlIGFzdHJhbDsgYnV0IG5ldmVydGhlbGVzcyBpdHMgcGFydGljbGVzIGFyZSBjcG4tICoqJyAKc3RhbnRseSBhbmQgcmFwaWRseSBjaGFuZ2luZyB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbiwgJyggXiAKCuKAoiBtb3ZpbmcgYW1vbmcgb25lIGFub3RoZXIgYXMgZWFzaWx5IGFzIHRob3NlIG9mIGEgCmxpcXVpZCBvbiB0aGUgcGh5c2ljYWwgcGxhbmUgbWlnaHQgZG8uIFNvIHRoYXQgdGhlcmUgCmlzIG5vIHBlcm1hbmVudCBhc3NvY2lhdGlvbiBiZXR3ZWVuIGFueSBvbmUgcGh5c2ljYWwgCnBhcnRpY2xlIGFuZCB0aGF0IGFtb3VudCBvZiBhc3RyYWwgbWF0dGVyIHdoaWNoIApoYXBwZW5zIGF0IGFueSBnaXZlbiBtb21lbnQgdG8gYmUgYWN0aW5nIGFzIGl0cyAKY291bnRlcnBhcnQuIAoKVGhpcyBpcyBlcXVhbGx5IHRydWUgd2l0aCByZXNwZWN0IHRvIHRoZSBhc3RyYWwgYm9keSAKb2YgbWFuLCB3aGljaCBmb3Igb3VyIHB1cnBvc2UgYXQgdGhlIG1vbWVudCB3ZSBtYXkgCgotIGltaWkuX2lpIHIifmluZnLigJkqJyAqIAoKcmVnYXJkIGFzIGNvbnNpc3Rpbmcgb2YgdHdvIHBhcnRzIOKAlCB0aGUgZGVuc2VyIGFnZ3JlZ2EtIAp0aW9uIHdoaWNoIG9jY3VwaWVzIHRoZSBleGFjdCBwb3NpdGlvbiBvZiB0aGUgcGh5c2ljYWwgCmJvZHksIGFuZCB0aGUgY2xvdWQgb2YgcmFyZXIgYXN0cmFsIG1hdHRlciB3aGljaCAKc3Vycm91bmRzIHRoYXQgCgphbmQgYmV0d2VlbiB0aGVtIGJvdGgsIHRoZXJlIGlzIGdvaW5nIG9uIGF0IGV2ZXJ5IAptb21lbnQgb2YgdGltZSB0aGUgcmFwaWQgaW50ZXItY2lyY3VsYXRpb24gb2YgdGhlIAoKCmk2IAoKCkNMQUlSVk9ZQU5DRSAKCgpwYXJ0aWNsZXMgd2hpY2ggaGFzIGJlZW4gZGVzY3JpYmVkLCBzbyB0aGF0IGFzIG9uZSAKd2F0Y2hlcyB0aGUgbW92ZW1lbnQgb2YgdGhlIG1vbGVjdWxlcyBpbiB0aGUgYXN0cmFsIApib2R5IG9uZSBpcyByZW1pbmRlZCBvZiB0aGUgYXBwZWFyYW5jZSBvZiB0aG9zZSBpbiAKZmllcmNlbHkgYm9pbGluZyB3YXRlci4gCgo/IF4iVGhpcyBiZWluZyBzbywgaXQgd2lsbCBiZSByZWFkaWx5IHVuZGVyc3Rvb2QgdGhhdCAKdGhvdWdoIGFueSBnaXZlbiBvcmdhbiBvZiB0aGUgcGh5c2ljYWwgYm9keSBtdXN0IAphbHdheXMgaGF2ZSBhcyBpdHMgY291bnRlcnBhcnQgYSBjZXJ0YWluIGFtb3VudCBvZiAKYXN0cmFsIG1hdHRlciwgaXQgZG9lcyBub3QgcmV0YWluIHRoZSBzYW1lIHBhcnRpY2xlcyBmb3IgCm1vcmUgdGhhbiBhIGZldyBzZWNvbmRzIGF0IGEgdGltZSwgYW5kIGNvbnNlcXVlbnRseSAKdGhlcmUgaXMgbm90aGluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWFsaXphdGlvbiAKaiBvZiBwaHlzaWNhbCBuZXJ2ZS1tYXR0ZXIgaW50byBvcHRpYyBvciBhdWRpdG9yeSBuZXJ2ZXMsIAphbmZmVG8gb20gU28gdGhhdCB0aG91Z2ggdGhlIHBoeXNpY2FsIGV5ZSBvciBlYXIgClYuOyBoYXMgdW5kb3VidGVkbHkgYWx3YXlzIGl0cyBjb3VudGVycGFydCBvZiBhc3RyYWwgCnkgbWF0dGVyLCB0aGF0IHBhcnRpY3VsYXIgZnJhZ21lbnQgb2YgYXN0cmFsIG1hdHRlciBpcyAKfCBubyBtb3JlIChhbmQgbm8gbGVzcykgY2FwYWJsZSBvZiByZXNwb25kaW5nIHRvdyB0aGUgCnwgdmlicmF0aW9ucyB3aGljaCBwcm9kdWNlIGFzdHJhbCBzaWdodCBvciBhc3RyYWwgaGVhci0gCmluZyB0aGFuIGFueSBvdGhlciBwYXJ0IG9mIHRoZSB2ZWhpY2xlLiAKCiwgSXQgbXVzdCBuZXZlciBiZSBmb3Jnb3R0ZW4gdGhhdCB0aG91Z2ggd2UgY29maS0gCjEgMSBzdGFudGx5IGhhdmUgdG8gc3BlYWsgb2Yg4oCcIGFzdHJhbCBzaWdodCDigJ0gb3Ig4oCcIGFzdHJhbCAKbGxmZWFyaW5nIOKAnSBpbiBvcmRlciB0byBtYWtlXmJ1cnNlbHZlcyBtdGVsSGdpYmxlLCBhbGwgCkkgZmVhdCB3ZSBtZWFuIGJ5IHRob3NlIGV4cHJlc3Npb25zIGlzIHRoZSBmYWN1bHR5IG9mIAouSWZyZXNwb25kaW5nIHRvIHN1Y2ggdmlicmF0aW9ucyBhcyBjb252ZXkgdG8gdGhlIG1hbuKAmXMgCmYgXmNvbnNjaW91c25lc3MsIHdoZW4gaGUgaXMgZnVuY3Rpb25pbmcgaW4gaGlzIGFzdHJhbCAKSWJvZHksIGluZm9ybWF0aW9uIG9mIHRoZSBzYW1lIGNoYXJhY3RlciBhcyB0aGF0IApsbGNvbnZleWVkIHRvIGhpbSBieSBoaXMgZXllcyBhbmQgZWFycyB3aGlsZSBoZSBpcyBpbiAKPyAtdGhlIHBoeXNpY2FsIGJvZHkuIEJ1dCBpbiB0aGUgZW50aXJlbHkgZGlmZmVyZW50IAphc3RyYWwgY29uZGl0aW9ucywgc3BlY2lhbGl6ZWQgb3JnYW5zIGFyZSBub3QgbmVjZXNzYXJ5IApmb3IgdGhlIGF0dGFpbm1lbnQgb2YgdGhpcyByZXN1bHQ7IHRoZXJlIGlzIG1hdHRlciBpbiAKCgpBU1RSQUwgU0VOU0VTIAoKCjE3IAoKCmV2ZXJ5IHBhcnQgb2YgdGhlIGFzdHJhbCBib2R5IHdoaWNoIEpzIF5jYXBhYmxlIG9mIAoic3VjaCByZXNwb25zZSwgYW5kIGNvbnNlcXVlbnRseSB0aGUgbWFuIGZ1bmN0aW9uaW5nIC4qIAppbiB0aGF0IHZlaGljbGUgc2VlcyBlcXVhbGx5IHdlbGwgb2JqZWN0cyBiZWhpbmQgaGltLC0hIApiZW5lYXRoIGhpbSwgYWJvdmUgaGltLCB3aXRob3V0IG5lZWRpbmcgdG8gdHVybiBoaXMgaiAKaGVhZC4gCgpUaGVyZSBpcywgaG93ZXZlciwgYW5vdGhlciBwb2ludCB3aGljaCBpdCB3b3VsZCAKaGFyZGx5IGJlIGZhaXIgdG8gbGVhdmUgZW50aXJlbHkgb3V0IG9mIGFjY291bnQsIGFuZCAvIAp0aGF0IGlzIHRoZSBxdWVzdGlvbiBvZiB0aGUgY2hha3JhbXMgcmVmZXJyZWQgdG8gYWJvdmUuIApUaGVvc29waGljYWwgc3R1ZGVudHMgYXJlIGZhbWlsaWFyIHdpdGggdGhlIGlkZWEgb2YgwqMgCnRoZSBleGlzdGVuY2UgaW4gYm90aCB0aGUgYXN0cmFsIGFuZCB0aGUgZXRoZXJpYyBib2RpZXMgCm9mIG1hbiBvZiBjZXJ0YWluIGNlbnRyZXMgb2YgZm9yY2Ugd2hpY2ggaGF2ZSB0byBiZSAKdml2aWZpZWQgaW4gdHVybiBieSB0aGUgc2FjcmVkIHNlcnBlbnQtZmlyZSBhcyB0aGUgbWFuIAphZHZhbmNlcyBpbiBldm9sdXRpb24uIFRob3VnaCB0aGVzZSBjYW5ub3QgYmUgdyAKZGVzY3JpYmVkIGFzIG9yZ2FucyBpbiB0aGUgb3JkaW5hcnkgc2Vuc2Ugb2YgdGhlIHdvcmQsIArimaZzaW5jZSogaXQgaXMgbm90IHRocm91Z2ggdGhlbSB0aGF0IHRoZSBtYW4gc2VlcyBvciAKaGVhcnMsIGFzIGhlIGRvZXMgaW4gcGh5c2ljYWwgbGlmZSB0aHJvdWdoIGV5ZXMgYW5kIAplYXJzLCB5ZXQgaXQsIGlzIGFwcGFyZW50bHkgdmVyeSBsYXJnZWx5IHVwb24gdGhlaXIgSSAKdml2aWZpY2F0aW9uJ1RoXnReJ3Bvd2VyIG9mZXhlcmNpc21nICd0aGVzZSBhc3RyYWwgMSAKc2VuaUVpbHhFcGVuZHMuIGVhY2ggb2YgdGhlbSBhcyBpdCBpcyBkZXZlbG9wZWQqIAoKCmdpdmluZyB0byB0aGUgd2hvbGUgYXN0cmFsIGJvZHkgdGhlIHBvd2VyIG9mIHJlc3BvbnNlIHwgCnRvIGEgbmV3IHNldCBvZiB2aWJyYXRpb25zLiAKCk5laXRoZXIgaGF2ZSB0aGVzZSBob3dldmVyLCBhbnkgcGVybWFuZW50IApjb2xsZWN0aW9uIG9mIGFzdHJhbCBtYXR0ZXIgY29ubmVjdGVkIHdpdGggdGhlbS4gClRoZXkgYXJlIHNpbXBseSB5b3J0aWNlcyBpbiB0aGUgbWF0dGVyIG9mIHRoZSBib2R5IOKAlCAKdm9ydGljZXMgdGhyb3VnaCB3aGljaCBhbGwgdGhlIHBhcnRpY2xlcyBwYXNzIGluIHR1cm4g4oCUIApwb2ludHMsIHBlcmhhcHMsIGF0IHdoaWNoIHRoZSBoaWdoZXIgZm9yY2UgZnJvbSBwbGFuZXMgCmFib3ZlIGltcGluZ2VzIHVwb24gdGhlIGFzdHJhbCBib2R5LiBFdmVuIHRoaXMgCmRlc2NyaXB0aW9uIGdpdmVzIGJ1dCBhIHZlcnkgcGFydGlhbCBpZGVhIG9mIHRoZWlyIAoKCiIg4oCi4oCiIOKWoCcgCgoKaTggCgoKQ0xBSVJWT1lBTkNFIAoKCmFwcGVhcmFuY2UsIGZvciB0aGV5IGFyZSBpbiByZWFsaXR5IGZvdXItZGltZW5zaW9uYWwgLiAKdm9ydGljZXMsIHNvIHRoYXQgdGhlIGZvcmNlIHdoaWNoIGNvbWVzIHRocm91Z2ggdGhlbSAKYW5kIGlzIHRoZSBjYXVzZSBvZiB0aGVpciBleGlzdGVuY2Ugc2VlbXMgdG8gd2VsbCB1cCAKZnJvbSBub3doZXJlLiBCdXQgYXQgYW55IHJhdGUsIHNpbmNlIGFsbCBwYXJ0aWNsZXMgaW4gCnR1cm4gcGFzcyB0aHJvdWdoIGVhY2ggb2YgdGhlbSwgaXQgd2lsbCBiZSBjbGVhciB0aGF0IAppdCBpcyB0aHVzIHBvc3NpYmxlIGZvciBlYWNoIGluIHR1cm4gdG8gZXZva2UgaW4gYWxsIHRoZSAKcGFydGljbGVzIG9mIHRoZSBib2R5IHRoZSBwb3dlciBvZiByZWNlcHRpdml0eSB0byBhIAoKY2VydGFpbiBzZXQgb2YgdmlicmF0aW9ucywgc28gdGhhdCBhbGwgdGhlIGFeYWwgfCBzZW5zZXMgCgphcmUgZXEgdWFsbHkgYWN0aXZlIGluIGFsbCBwYXJ0cyBvZiB0aGVeYm9eLiAKCi5uZSBpcyBhZ2FpbiB0b3RhbGx5IAoKCmZlc2pLbS5mbHQudHRpZSBuakxnZ2ZjIAoKZGlmZmVyZW50LCBmb3IgaW4gdGhpcyBjYXNlIHdlIGNhbiBubyBsb25nZXInICdzcGVhayAKb2Ygc2VwYXJhdGUgc2Vuc2VzIHN1Y2ggYXMgc2lnaHQgYW5kIGhlYXJpbmcsIGJ1dCAKcmF0aGVyIGhhdmUgdG8gcG9zdHVsYXRlIG9uZSBnZW5lcmFsIHNlbnNlIHdoaWNoIAplc3BvbmRzIHNvIGZ1bGx5IHRvIHRoZSB2aWJyYXRpb25U4oCdIHJlYWNoaW5nIiBpdCB0aGF0IAp3aGVuIGFueSBvYmplY3QgY29tZXMgd2l0aGluIGl0cyBjb2duaXRpb24gSXQgYXQgCuKAom5lZSBjb21wcmVoZW5kcyBpdCBmdWxseSwgYW5kIGFzIGl0IHdlcmUgc2VlcyBpdCwgCuKWoHMgaXQsIGZlZWxzIGl0LCBhbmQga25vd3MgYWxsIHRoZXJlIGlzIHRvIGtub3cgYWJvdXQgCnQgYnkgdGhlIG9uZSBpbnN0YW50YW5lb3VzIG9wZXJhdGlvbi4gWWV0IGV2ZW4gdGhpcyAKdW5kZXJmaWxsIGZhY3VsdHkgZGlmZmVycyBpbiBkZWdyZWUgb25seSBhbmQgbm90IGluIApuZCBmcm9tIHRob3NlIHdoaWNoIGFyZSBhdCBvdXIgY29tbWFuZCBhdCB0aGUgCnByZXNlbnQgdGltZSA7IG9uIHRoZSBtZW50YWwgcGxhbmUsIGp1c3QgYXMgb24gdGhlIArigKJoeXNpY2FsLCBpbXByZXNzaW9ucyBhcmUgc3RpbGwgY29udmV5ZWQgYnkgbWVhbnMgb2YgCmZ8XmlicmF0aW9ucyBmcmF2ZWpuaVRndHJvXllSZV5vU1RlY3ReXk1ebl5pXmkgCgoKT24gdGhlIGZpdWRkaGljIAoKCmxhbmUgd2UgbWVldCBmb3IgdGhlIGZpcnN0IHRpbWUgCndpdGggYSBxdWl0ZSBuZXcgZmFjdWx0eSBoYXZpbmcgbm90aGluZyBpbiBjb21tb24gCndpbGwgdGhvc2Ugb2Ygd2hpY2ggd2UgaGF2ZSBzcG9rZW4sIGZvciB0aGVyZSBhIG1hbiAKClRoZSAKCgpMSU5FUyBPRiBERVZFTE9QTUVOVCAKCgoxOSAKCgpmIAoKCm9iamVjdCBiZWNvbWVzIHBhcnQgb2YgaGltc2VsZiwgYW5kIGpoLmUgc3R1ZGllcyBpdCBKdG9qbiB8IAp0aGUgaW5zaWRlIGluc3RlYWQgb2YgZnJvbSB0aGUgb3V0c2lkZS4gQnV0IHdpdGggdGtpc2YgCnBvd2VyIG9yZGluYXJ5IGNsYWlydm95YW5jZSBoYXMgbm90aGluZyB0byBkby4gCgpUaGUgZGV2ZWxvcG1lbnQsIGVpdGhlciBlbnRpcmUgb3IgcGFydGlhbCwgb2YgYW55IApvbmUgb2YgdGhlc2UgZmFjdWx0aWVzIHdvdWxkIGNvbWUgdW5kZXIgb3VyIGRlZmluaXRpb24gCm9mIGNsYWlydm95YW5jZeKAlCB0aGUgcG93ZXIgdG8gc2VlIHdoYXQgaXMgaGlkZGVuIApmcm9tIG9yZGluYXJ5IHBoeXNpY2FsIHNpZ2h0LiBCdXQgdGhlc2VeSmZ8Y3VsdGllcyAKCmFuZCBpdCB3aWxsIGJlIHdlbGwgCgp0byBzYXkgYSBmZXcgd29yZHMgYXMgdG8gdGhlc2UgZGlmZmVyZW50IGxpbmVzLiAKCldlIG1heSBwcmVzdW1lIHRoYXQgaWYgaXQgd2VyZSBwb3NzaWJsZSBmb3IgYSBtYW4gCnRvIGJlIGlzb2xhdGVkIGR1cmluZyBoaXMgZXZvbHV0aW9uIGZyb20gYWxsIGJ1dCB0aGUgCmdlbnRsZXN0IG91dHNpZGUgaW5mbHVlbmNlcywgYW5kIHRvIHVuZm9sZCBmcm9tIHRoZSAKYmVnaW5uaW5nIGluIHBlcmZlY3RseSByZWd1bGFyIGFuZCBub3JtYWwgZmFzaGlvbiwgaGUgCndvdWxkIHByb2JhYmx5IGRldmVsb3AgaGlzIHNlbnNlcyBpbiByZWd1bGFyIG9yZGVyIAoxIGFsc28uKiBIZSB3b3VsZCBmaW5kIGhpcyBwaHlzaWNhbCBzZW5zZXMgZ3JhZHVhbCEgCmV4dGVuZGluZyB0aGVpciBzY29wZSB1bnRpbCB0aGV5IHJlc3BvbmRlZCB0byBhbGwgdGg8IApwaHlzaWNhbCB2aWJyYXRpb25zLCBvZiBldGhlcmljIGFzIHdlbGwgYXMgb2YgZGVuc2kgCm1hdHRlciA7IHRoZW4gaW4gb3JkZXJseSBzZXF1ZW5jZSB3b3VsZCBjb21lIHNlbnNpLSAKYmlsaXR5IHRvIHRoZSBjb2Fyc2VyIHBhcnQgb2YgdGhlIGFzdHJhbCBwbGFuZSwgYW48IApwcmVzZW50bHkgdGhlIGZpbmVyIHBhcnQgYWxzbyB3b3VsZCBiZSBpbmNsdWRlZCwgdW50aWxsIAppbiBkdWUgY291cnNlIHRoZSBmYWN1bHR5IG9mIHRoZSBtZW50YWwgcGxhbmUgZGF3bmVkLCAKaW4gaXRzIHR1cm4uIAoKSW4gcmVhbCBsaWZlLCBob3dldmVyLCBkZXZlbG9wbWVudCBzbyByZWd1bGFyIGFzIAp0aGlzIGlzIGhhcmRseSBldmVyIGtub3duLCBhbmQgbWFueSBhIG1hbl4gaGFzLiwuIApvY2Nhc2lvbmFsIGZsYXNoZXMgb2YgYXN0cmFsIGNvbnNjaW91c25lc3Mgd2l0aG91dCBhbnkgJyAKYXdha2VuaW5nIG9mIGV0aGVyaWMgdmlzaW9uIGF0IGFsbC4gQW5kIHRoaXMgaXJyZWd1LSAKbGFyaXR5IG9mIGRldmVsb3BtZW50IGlzIG9uZSBvZiB0bGllIHByaW5jaXBhbCBjYXVzZXMgCm9mIG1hbidzIGV4dHJhb3JkaW5hcnkgbGlhYmlsaXR5IHRvIGVycm9yIGluIG1hdHRlcnMgCgoKLiBKIC4g4pagIAoKCuKWoCBwIEotIAouKiogLyBBLS0qICogCgrCuyBrIF4gKiBBIAoKCjIwIAoKCkNMQUlSVk9ZQU5DRSAKCgpYIAoKCm9mIGNsYWlydm95YW5jZSDigJQgYSBsaWFiaWxpdHkgZnJvbSB3aGljaCB0aGVyZSBpcyBubyAKZXNjYXBlIGV4Y2VwdCBieSBhIGxvbmcgY291cnNlIG9mIGNhcmVmdWwgdHJhaW5pbmcgCnVuZGVyIGEgcXVhbGlmaWVkIHRlYWNoZXIuIAoKU3R1ZGVudHMgb2YgVGhlb3NvcGhpY2FsIGxpdGVyYXR1cmUgYXJlIHdlbGwgYXdhcmUgCnRoYXQgdGhlcmUgYXJlIHN1Y2ggdGVhY2hlcnMgdG8gYmUgZm91bmQt4oCUIHRoYXQgZXZlbiAKaW4gdGhpcyBtYXRlcmlhbGlzdGljIG5pbmV0ZWVudGggY2VudHVyeSB0aGUgb2xkIHNheWluZyAKaXMgc3RpbGwgdHJ1ZSwgdGhhdCDigJwgd2hlbiB0aGUgcHVwaWwgaXMgcmVhZHksIHRoZSBNYXN0ZXIgCuKAomlzIHJlYWR5IGFsc28s4oCdIGFuZCB0aGF0IOKAnGluIHRoZSBoYWxsIG9mIGxlYXJuaW5nLCB3aGVuIApoZSBpcyBjYXBhYmxlIG9mIGVudGVyaW5nIHRoZXJlLCB0aGUgZGlzY2lwbGUgd2lsbCBhbHdheXMgCkkgwqNuZCBoaXMgTWFzdGVyLuKAnSBUaGV5IGFyZSB3ZWxsIGF3YXJlIGFsc28gdGhhdCAKb25seSB1bmRlciBzdWNoIGd1aWRhbmNlIGNhbiBhIG1hbiBkZXZlbG9wIGhpcyAKbGF0ZW50IHBvd2VycyBpbiBzYWZldHkgYW5kIHdpdGggY2VydGFpbnR5LCBzaW5jZSB0aGV5IAo7IGtub3cgaG93IGZhdGFsbHkgZWFzeSBpdCBpcyBmb3IgdGhlIHVudHJhaW5lZCBjbGFpci0gCikgdm95YW50IHRvIGRlY2VpdmUgaGltc2VsZiBhcyB0byB0aGUgbWVhbmluZyBhbmQqIAp2YWx1ZSBvZiB3aGF0IGhlIHNlZXMsIG9yIGV2ZW4gYWJzb2x1dGVseSB0byBkaXN0b3J0IApoaXMgdmlzaW9uIGNvbXBsZXRlbHkgaW4gYnJpbmdpbmcgaXQgZG93biBpbnRvIGhpcyAKcGh5c2ljYWwgY29uc2Npb3VzbmVzcy4gCgpJdCBkb2VzIG5vdCBmb2xsb3cgdGhhdCBldmVuIHRoZSBwdXBpbCB3aG8gSXMgClwgcmVjZWl2aW5nIHJlZ3VsYXIgaW5zdHJ1Y3Rpb24gaW4gdGhlIHVzZSBvZiBvY2N1bHQgCnBvd2VycyB3aWxsIGZpbmQgdGhlbSB1bmZvbGRpbmcgdGhlbXNlbHZlcyBleGFjdGx5IGluIAp0aGUgcmVndWxhciBvcmRlciB3aGljaCB3YXMgc3VnZ2VzdGVkIGFib3ZlIGFzIApwcm9iYWJseSBpZGVhbC4gSGlzIHByZXZpb3VzIHByb2dyZXNzIG1heSBub3QgaGF2ZSAKSSBiZWVuIHN1Y2ggYXMgdG8gbWFrZSB0aGlzIGZvciBoaW0gdGhlIGVhc2llc3Qgb3IgbW9zdCAKISBkZXNpcmFibGUgcm9hZCA7IGJ1dCBhdCBhbnkgcmF0ZSBoZSBpcyBpbiB0aGUgaGFuZHMgb2YgCikgb25lIHdobyBpcyBwZXJmZWN0bHkgY29tcGV0ZW50IHRvIGJlIGhpcyBndWlkZSBpbiAKaiBzcGlyaXR1YWwgZGV2ZWxvcG1lbnQsIGFuZCBoZSByZXN0cyBpbiBwZXJmZWN0IGNvbnRlbnQtIApcIG1lbnQgdGhhdCB0aGUgd2F5IGFsb25nIHdoaWNoIGhlIGlzIHRha2VuIHdpbGwgYmUgCiEgdGhhdCB3aGljaCBpcyB0aGUgYmVzdCB3YXkgZm9yIGhpbS4gCgoKQU1PTkcgVEhFIFVOQ1VMVFVSRUQgCgoKMjEgCgoKQW5vdGhlciBncmVhdCBhZHZhbnRhZ2Ugd2hpY2ggaGUgZ2FpbnMgaXMgdGhhdCAKd2hhdGV2ZXIgZmFjdWx0aWVzIGhlIG1heSBhY3F1aXJlIGFyZSBkZWZpbml0ZWx5IHVuZGVyIApoaXMgY29tbWFuZCBhbmQgY2FuIGJlIHVzZWQgZnVsbHkgYW5kIGNvbnN0YW50bHkgCndoZW4gaGUgbmVlZHMgdGhlbSBmb3IgaGlzIFRoZW9zb3BoaWNhbCB3b3JrIDsgCndoZXJlYXMgaW4gdGhlIGNhc2Ugb2YgdGhlIHVudHJhaW5lZCBtYW4gc3VjaCBwb3dlcnMgOyAKb2Z0ZW4gbWFuaWZlc3QgdGhlbXNlbHZlcyBvbmx5IHZlcnkgcGFydGlhbGx5IGFuZCAKc3Bhc21vZGljYWxseSwgYW5kIGFwcGVhciB0byBjb21lIGFuZCBnbywgYXMgaXQgd2VyZSwgMSAKYXQgdGhlaXIgb3duIHN3ZWV0IHdpbGwuIAoKSXQgbWF5IHJlYXNvbmFibHkgYmUgb2JqZWN0ZWQgdGhhdCBpZiBjbGFpcnZveWFudCAKZmFjdWx0eSBpcywgYXMgc3RhdGVkLCBhIHBhcnQgb2YgdGhlIG9jY3VsdCBkZXZlbG9wbWVudCAKb2YgbWFuLCBhbmQgc28gYSBzaWduIG9mIGEgY2VydGFpbiBhbW91bnQgb2YgcHJvZ3Jlc3MgCmFsb25nIHRoYXQgbGluZSwgaXQgc2VlbXMgc3RyYW5nZSB0aGF0IGl0IHNob3VsZCBvZnRlbiAKYmUgcG9zc2Vzc2VkIGJ5IHByaW1pdGl2ZSBwZW9wbGVzLCBvciBieSB0aGUgaWdub3JhbnQgCmFuZCB1bmN1bHR1cmVkIGFtb25nIG91ciBvd24gcmFjZSDigJQgcGVyc29ucyB3aG8gCmFyZTxwYnZpb3VzbHkgcXVpdGUgdW5kZXZlbG9wZWQsIGZyb20gd2hhdGV2ZXIgcG9pbnQgCm9mIHZpZXcgb25lIHJlZ2FyZHMgdGhlbS4gTm8gZG91YnQgdGhpcyBkb2VzIGFwcGVhciAKcmVtYXJrYWJsZSBhdCBmaXJzdCBzaWdodCA7IGJ1dCB0aGUgZmFjdCBpcyB0aGF0IHRoZSBzZW4tIApzaXRpdmVuZXNzIG9mIHRoZSBzYXZhZ2Ugb3Igb2YgdGhlIGNvYXJzZSBhbmQgdnVsZ2FyIApFdXJvcGVhbiBpZ25vcmFtdXMgaXMgbm90IHJlYWxseSBhdCBhbGwgdGhlIHNhbWUgCnRoaW5nIGFzIHRoZSBmYWN1bHR5IG9mIGhpcyBwcm9wZXJseSB0cmFpbmVkIGJyb3RoZXIsIApub3IgaXMgaXQgYXJyaXZlZCBhdCBpbiB0aGUgc2FtZSB3YXkuIAoKQW4gZXhhY3QgYW5kIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIHRoZSBkaWZmZXJlbmNlIAp3b3VsZCBsZWFkIHVzIGludG8gcmF0aGVyIHJlY29uZGl0ZSB0ZWNobmljYWxpdGllcywgYnV0IApwZXJoYXBzIHRoZSBnZW5lcmFsIGlkZWEgb2YgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gCnRoZSB0d28gbWF5IGJlIGNhdWdodCBmcm9tIGFuIGV4YW1wbGUgdGFrZW4gZnJvbSAKdGhlIHZlcnkgbG93ZXN0IHBsYW5lIG9mIGNsYWlydm95YW5jZSwgaW4gY2xvc2UgY29udGFjdCAKd2l0aCB0aGUgZGVuc2VyIHBoeXNpY2FsLiBUaGUgZXRoZXJpYyBkb3VibGUgaW4gam5hbiAKaXMgaW4gZXhjZWVkaW5nbHkgY2xvc2UgcmVsYXRpb24sLCB0byBoaXMgbmVydm91cyBzeXN0ZW0sIAoKCjIyIAoKCkNMQUlSVk9ZQU5DRSAKCgphbmQgYW55IGtpbmQgb2YgYWN0aW9uIHVwb24gb25lIG9mIHRoZW0gc3BlZWRpbHkgcmUtIAphY3RzIG9uIHRoZSBvdGhlci4gTm93IGluIHRoZSBzcG9yYWRpYyBhcHBlYXJhbmNlIAoqIG9mIGV0aGVyaWMgc2lnaHQgaW4gdGhlIHNhdmFnZSwgd2hldGhlciBvZiBDZW50cmFsIApBZnJpY2Egb3Igb2YgV2VzdGVybiBFdXJvcGUsIGl0IGhhcyBiZWVuIG9ic2VydmVkIAp0aGF0IHRoZSBjb3JyZXNwb25kaW5nIG5lcnZvdXMgZGlzdHVyYmFuY2UgaXMgYWxtb3N0IApcIGVudGlyZWx5IGluIHRoZSBzeW1wYXRoZXRpYyBzeXN0ZW0sIGFuZCB0aGF0IHRoZSAKSSB3aG9sZSBhZmZhaXIgaXMgcHJhY3RpY2FsbHkgYmV5b25kIHRoZSBtYW7igJlzIGNvbnRyb2zigJQgCgp8IGlzIGluIGZhY3QgYSBzb3J0IG9mIG1hc3NpdmUgc2Vuc2F0aW9uIHZhZ3VlbHkgYmVsb25nLSAKaW5nIHRvIHRoZSB3aG9sZSBldGhlcmljIGJvZHksIHJhdGhlciB0aGFuIGFuIGV4YWN0IAphbmQgZGVmaW5pdGUgc2Vuc2UtcGVyY2VwdGlvbiBjb21tdW5pY2F0ZWQgdGhyb3VnaCAKYSBzcGVjaWFsaXplZCBvcmdhbi4gCgpBcyBpbiBsYXRlciByYWNlcyBhbmQgYW1pZCBoaWdoZXIgZGV2ZWxvcG1lbnQgdGhlIApzdHJlbmd0aCBvZiB0aGUgbWFuIGlzIG1vcmUgYW5kIG1vcmUgdGhyb3duIGludG8gdGhlIApldm9sdXRpb24gb2YgdGhlIG1lbnRhbCBmYWN1bHRpZXMsIHRoaXMgdmFndWUgc2Vuc2l0aXZlLSAKbmVzcyB1c3VhbGx5IGRpc2FwcGVhcnMgOyBidXQgc3RpbGwgbGF0ZXIsIHdoZW4g4oCiIHRoZSBBIApzcGlyaXR1YWwgbWFuIGJlZ2lucyB0byB1bmZvbGQsIGhlIHJlZ2FpbnMgaGlzwqtkYWlyLSAKdm95YW50IHBvd2VyLiBUaGlzIHRpbWUsIGhvd2V2ZXIsIHRoZSBmYWN1bHR5IGlzIGEgCnByZWNpc2UgYW5kIGV4YWN0IG9uZSwgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIG1haWZzIAp3aWxsLCBhbmQgZXhlcmNpc2VkIHRocm91Z2ggYSBkZWZpbml0ZSBzZW5zZS1vcmdhbiA7IAphaWlmZiBpdCBpcyBub3Rld29ydGh5IHRoYXQgYW55IG5lcnZvdXMgYWN0aW9uIHNldCB1cCAKaW4gc3ltcGF0aHkgd2l0aCBpdCBpcyBub3cgYWxtb3N0IGV4Y2x1c2l2ZWx5IGluIHRoZSAKCgpeY15yZWJyb3NzcGluYWxzeXN0ZW0uIAoKT24gdGhpcyBzdWJqZWN0IE1ycy4gQmVzYW50cyB3cml0ZXMgOiDigJQg4oCcVGhlIGxvd2VyIAoKwqvigKIqwrsqwrvCqyoqKiAKCmZvcm1zIG9mIHBzeWNoaXNtIGFyZSBtb3JlIGZyZXF1ZW50IGluIGFuaW1hbHMgYW5kIAolWmcuclhTSj9qLlN0ZWxpaWdnUnQgaHVtYW4gYmVpbmdzXnRoYW4gaW4gbWVuIGFuZCAKV09mZmllbiBpbiB3aG9tIHRoZSBpbnRlbGxlY3R1bEp+cG9XZXIuc35eYXJlfn53ZnQxMSB+IAoKCkFORCBORVJWT1VTIFNZU1RFTSAKCgoyMyAKCgpUaGUgbGFyZ2UgbnVjbGVhdGVkIGdhbmdsaW9uaWMgY2VsbHMgaW4gdGhpcyBzeXN0ZW0gCmNvbnRhaW4gYSB2ZXJ5IGxhcmdlIHByb3BvcnRpb24gb2YgZXRoZXJpYyBtYXR0ZXIsIGFuZCAKYXJlIGhlbmNlIG1vcmUgZWFzaWx5IGFmZmVjdGVkIGJ5IHRoZSBjb2Fyc2VyIGFzdHJhbCAKdmlicmF0aW9ucyB0aGFuIGFyZSB0aGUgY2VsbHMgaW4gd2hpY2ggdGhlIHByb3BvcnRpb24gCmlzIGxlc3MuIEFzIHRoZSBjZXJlYnJvLXNwaW5hbCBzeXN0ZW0gZGV2ZWxvcHMsIGFuZCAKdGhlIGJyYWluIGJlY29tZXMgbW9yZSBoaWdobHkgZXZvbHZlZCwgdGhlIHN5bS0gCnBhdGhldGljIHN5c3RlbSBzdWJzaWRlcyBpbnRvIGEgc3Vib3JkaW5hdGUgcG9zaXRpb24sIAphbmQgdGhlIHNlbnNpdGl2ZW5lc3MgdG8gcHN5Y2hpYyB2aWJyYXRpb25zIGlzIGRvbWluLSAKYXRlZCBieSB0aGUgc3Ryb25nZXIgYW5kIG1vcmUgYWN0aXZlIHZpYnJhdGlvbnMgb2YgdGhlIApoaWdoZXIgbmVydm91cyBzeXN0ZW0uIEl0IGlzIHRydWUgdGhhdCBhdCBhIGxhdGVyIApzdGFnZSBvZiBldm9sdXRpb24gcHN5Y2hpYyBzZW5zaXRpdmVuZXNzIHJlYXBwZWFycywgYnV0IAppdCBpcyB0aGVuIGRldmVsb3BlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNlcmVicm8tIAoKCiwgwrsgT2NjYXNpb25hbCBmbGFzaGVzIG9mIGNsYWlydm95YW5jZSBkbywgaG93ZXZlciwgCgphIE1tbW1CbXFtIG1lbSAKCnNvbWV0aW1lcyBjb21lIHRvIHRoZSBoaWdobHkgY3VsdHVyZWQgYW5kIHNwaXJpdHVhbCAKbWluZGVkIG1hbiwgZXZlbiB0aG91Z2ggaGUgbWF5IG5ldmVyIGhhdmUgaGVhciAKCgpzcGluYWwgY2VudHJlcywsIGFuZCBpcyBicm91Z2h0IHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZXwsIAp3aWxsLiBCdWZldGhlIC5oeXN0ZXJpY2FsIGFuZCBpbGwtcmVndWxhdGVkIHBzeWNoaXNtIG9mIAp3aGljaCB3ZSBzZWUgc28gbWFueSBsYW1lbnRhYmxlIGV4YW1wbGVzIGlzIGR1ZSB0byAKdGhlIHNtYWxsIGRldmVsb3BtZW50IG9mIHRoZSBicmFpbiBhbmQgdGhlIGRvbWluYW5jZSAKCgoyNCAKCgpDTEFJUlZPWUFOQ0UgCgoKciAKCgpCZXR3ZWVuIHRob3NlIHdobyBhcmUgZW50aXJlbHkgdW5pbXByZXNzaWJsZSBhbmQgCnRob3NlIHdobyBhcmUgaW4gZnVsbCBwb3NzZXNzaW9uIG9mIGNsYWlydm95YW50IHBvd2VyIAp0aGVyZSBhcmUgbWFueSBpbnRlcm1lZGlhdGUgc3RhZ2VzLiBPbmUgdG8gd2hpY2ggaXQgCndpbGwgYmUgd29ydGggd2hpbGUgdG8gZ2l2ZSBhIHBhc3NpbmcgZ2xhbmNlIGlzIHRoZSAKXCBzdGFnZSBpbiB3aGljaCBhIG1hbiwgdGhvdWdoIGhlIGhhcyBubyBjbGFpcnZveWFudCAKXCBmYWN1bHR5IGluIG9yZGluYXJ5IGxpZmUsIHlldCBleGhpYml0cyBpdCBtb3JlIG9yIGxlc3MgCicgZnVsbHkgdW5kZXIgdGhlIGluZmx1ZW5jZSBvZiBtZXNtZXJpc20uIFRoaXMgaXMgYSAKdCBjYXNlIGluIHdoaWNoIHRoZSBwc3ljaGljIG5hdHVyZSBpcyBhbHJlYWR5IHNlbnNpdGl2ZSwgCgo6IGJ1dCB0aGUgY29uc2Npb3VzbmVzcyBpcyBub3QgeWV0IGNhcGFibGUgb2YgZnVuY3Rpb25pbmcgCj4gaW4gaXQgYW1pZHN0IHRoZSBtYW5pZm9sZCBkaXN0cmFjdGlvbnMgb2YgcGh5c2ljYWwgbGlmZS4gClNpdCBuZWVkcyB0byBiZSBzZXQgZnJlZSBieSB0aGUgdGVtcG9yYXJ5IHN1c3BlbnNpb24gCm9mIHRoZSBvdXRlciBzZW5zZXMgaW4gdGhlIG1lc21lcmljIHRyYW5jZSBiZWZvcmUgaXQgCiwgY2FuIHVzZSB0aGUgZGl2aW5lciBmYWN1bHRpZXMgd2hpY2ggYXJlIGJ1dCBqdXN0IApiZWdpbm5pbmcgdG8gZGF3biB3aXRoaW4gaXQuIEJ1dCBvZiBjb3Vyc2UgZXZlbiBpbiAKdGhlIG1lc21lcmljIHRyYW5jZSB0aGVyZSBhcmUgaW5udW1lcmFibGUgZGVncmVlcyBvZiAKbHVjaWRpdHksIGZyb20gdGhlIG9yZGluYXJ5IHBhdGllbnQgd2hvIGlzIGJsYW5rbHkgdW4tIAppbnRlbGxpZ2VudCB0byB0aGUgbWFuIHdob3NlIHBvd2VyIG9mIHNpZ2h0IGlzIGZ1bGx5IAp1bmRlciB0aGUgY29udHJvbCBvZiB0aGUgb3BlcmF0b3IsIGFuZCBjYW4gYmUgZGlyZWN0ZWQgCnIgd2hpdGhlcnNvZXZlciBoZSB3aWxscywgb3IgdG8gdGhlIG1vcmUgYWR2YW5jZWQgc3RhZ2UgCmluIHdoaWNoLCB3aGVuIHRoZSBjb25zY2lvdXNuZXNzIGlzIG9uY2Ugc2V0IGZyZWUsIGl0IAplc2NhcGVzIGFsdG9nZXRoZXIgZnJvbSB0aGUgZ3Jhc3Agb2YgdGhlIG1hZ25ldGl6ZXIsIAphbmQgc29hcnMgaW50byBmaWVsZHMgb2YgZXhhbHRlZCB2aXNpb24gd2hlcmUgaXQgaXMgCkkgZW50aXJlbHkgYmV5b25kIGhpcyByZWFjaC4gCgpBbm90aGVyIHN0ZXAgYWxvbmcgdGhlIHNhbWUgcGF0aCBpcyB0aGF0IHVwb24gCndoaWNoIHN1Y2ggcGVyZmVjdCBzdXBwcmVzc2lvbiBvZiB0aGUgcGh5c2ljYWwgYXMgdGhhdCAKd2hpY2ggb2NjdXJzIGluIHRoZSBoeXBub3RpYyB0cmFuY2UgaXMgbm90IG5lY2Vzc2FyeSwgCmJ1dCB0aGUgcG93ZXIgb2Ygc3VwZXJub3JtYWwgc2lnaHQsIHRob3VnaCBzdGlsbCBvdXQgCm9mIHJlYWNoIGR1cmluZyB3YWtpbmcgbGlmZSwgYmVjb21lcyBhdmFpbGFibGUgd2hlbiAKCgpBV0FLRU5JTkcgRkFDVUxUWSAKCgoyNSAKCgp0aGUgYm9keSBpcyBoZWxkIGluIHRoZSBib25kcyBvZiBvcmRpbmFyeSBzbGVlcC4gQXQgCnRoaXMgc3RhZ2Ugb2YgZGV2ZWxvcG1lbnQgc3Rvb2QgbWFueSBvZiB0aGUgcHJvcGhldHMgCmFuZCBzZWVycyBvZiB3aG9tIHdlIHJlYWQsIHdobyB3ZXJlIOKAnCB3YXJuZWQgb2YgCkdvZCBpbiBhIGRyZWFtIOKAnSBvciBjb21tdW5lZCB3aXRoIGJlaW5ncyBmYXIgaGlnaGVyIAp0aGFuIHRoZW1zZWx2ZXMgaW4gdGhlIHNpbGVudCB3YXRjaGVzIG9mIHRoZSBuaWdodC4gCgpNb3N0IGN1bHR1cmVkIHBlb3BsZSBvZiB0aGUgaGlnaGVyIHJhY2VzIG9mIHRoZSAKd29ybGQgaGF2ZSB0aGlzIGRldmVsb3BtZW50IHRvIHNvbWUgZXh0ZW50IDogdGhhdCBpcyAKdG8gc2F5LCB0aGUgc2Vuc2VzIG9mIHRoZWlyIGFzdHJhbCBib2RpZXMgYXJlIGluIGZ1bGwgCndvcmtpbmcgb3JkZXIsIGFuZCBwZXJmZWN0bHkgY2FwYWJsZSBvZiByZWNlaXZpbmcgaW0tIApwcmVzc2lvbnMgZnJvbSBvYmplY3RzIGFuZCBlbnRpdGllcyBvZiB0aGVpciBvd24gcGxhbmUuIAoKCkJ1dCB0byBtYWtlIHRoYXQgZmFjdCBvZiBhbmogdcKnZSBKbyggdGhlbSBkb3duIGguZXJlbCAKaW4gdGhlIAoKbmVjZXNzYXJ5IFleZ3QsIHRoYXQgdGhlIEVnbyBzaGFsbCBiZSBhd2FrZW5lZCB0byB0aGUgZiAKcmVhbGl0aWVzIG9mIHRoZSBhc3RyYWwgcGxhbmUsIGFuZCBpbmR1Y2VkIHRvIGVtZXJnZSAKZnJvbSB0aGUgY2hyeXNhbGlzIGZvcm1lZCBieSBoaXMgb3duIHdha2luZyAKdGhvdWdodHMsIGFuZCBsb29rIHJvdW5kIGhpbSB0byBvYnNlcnZlIGFuZCB0byBsZWFybiBJIAphbmQgc2Vjb25kbHksIHRoYXQgdGhlIGNvbnNjaW91c25lc3Mgc2hhbGwgYmUgc28gZmFpIApyZXRhaW5lZCBkdXJpbmcgdGhlIHJldHVybiBvZiB0aGUgRWdvIGludG8gaGlzIHBoeXNpY2FsIApib2R5IGFzIHRvIGVuYWJsZSBoaW0gdG8gaW1wcmVzcyB1cG9uIGhpcyBwaHlzaWNhIF4gCmJyYWluIHRoZSByZWNvbGxlY3Rpb24gb2Ygd2hhdCBoZSBoYXMgc2VlbiBvciBsZWFybnQuIAoKSWYgdGhlIGZpcnN0IG9mIHRoZXNlIGNoYW5nZXMgaGFzIHRha2VuIHBsYWNlLCB0aGUgCnNlY29uZCBpcyBvZiBsaXR0bGUgaW1wb3J0YW5jZSwgc2luY2UgdGhlIEVnbywgdGhlIHRydWUgCm1hbiwgd2lsbCBiZSBhYmxlIHRvIHByb2ZpdF4gYnkgdGhlIGluZm9ybWF0aW9uIHRvIGJlIGZ1cnQvaVQgCm9idGFpbmVkIHVwb24gdGhhdCBwbGFuZSwgZXZlbiB0aG91Z2ggaGUgbWF5IG5vdCAKaGF2ZSB0aGUgc2F0aXNmYWN0aW9uIG9mIGJyaW5naW5nIHRocm91Z2ggYW55IHJlbWVtLSAKYnJhbmNlIG9mIGl0IGludG8gaGlzIHdha2luZyBsaWZlIGRvd24gaGVyZS4gCgpTdHVkZW50cyBvZnRlbiBhc2sgaG93IHRoaXMgY2xhaXJ2b3lhbnQgZmFjdWx0eSB3aWxsIApmaXJzdCBiZSBtYW5pZmVzdGVkIGluIHRoZW1zZWx2ZXMg4oCUIGhvdyB0aGV5IG1heSAKCgoyIDYgCgoKQ0xBSVJWT1lBTkNFIAoKCmtub3cgd2hlbiB0aGV5IGhhdmUgcmVhY2hlZCB0aGUgc3RhZ2UgYXQgd2hpY2ggaXRzIApmaXJzdCBmYWludCBmb3Jlc2hhZG93aW5ncyBhcmUgYmVnaW5uaW5nIHRvIGJlIHZpc2libGUuIApDYXNlcyBkaWZmZXIgc28gd2lkZWx5IHRoYXQgaXQgaXMgaW1wb3NzaWJsZSB0byBnaXZlIHRvIAp0aGlzIHF1ZXN0aW9uIGFueSBhbnN3ZXIgdGhhdCB3aWxsIGJlIHVuaXZlcnNhbGx5IAphcHBsaWNhYmxlLiAKClNvbWUgcGVvcGxlIGJlZ2luIGJ5IGEgcGx1bmdlLCBhcyBpdCB3ZXJlLCBhbmQgCnVuZGVyIHNvbWUgdW51c3VhbCBzdGltdWx1cyBiZWNvbWUgYWJsZSBqdXN0IGZvciAKb25jZSB0byBzZWUgc29tZSBzdHJpa2luZyB2aXNpb24gOyBhbmQgdmVyeSBvZnRlbiBpbiAKc3VjaCBhIGNhc2UsIGJlY2F1c2UgdGhlIGV4cGVyaWVuY2UgZG9lcyBub3QgcmVwZWF0IAppdHNlbGYsIHRoZSBzZWVyIGNvbWVzIGluIHRpbWUgdG8gYmVsaWV2ZSB0aGF0IG9uIHRoYXQgCm9jY2FzaW9uIGhlIG11c3QgaGF2ZSBiZWVuIHRoZSB2aWN0aW0gb2YgaGFsbHVjaW5hLSAKdGlvbi4gT3RoZXJzIGJlZ2luIGJ5IGJlY29taW5nIGludGVybWl0dGVudGx5IApjb25zY2lvdXMgb2YgdGhlIGJyaWxsaWFudCBjb2xvdXJzIGFuZCB2aWJyYXRpb25zIG9mIAp0aGUgaHVtYW4gYXVyYTsgeWV0IG90aGVycyBmaW5kIHRoZW1zZWx2ZXMgd2l0aCwgCmluY3JlYXNpbmcgZnJlcXVlbmN5IHNlZWluZyBhbmQgaGVhcmluZyBzb21ldGhpbmcgdG8gCndoaWNoIHRob3NlIGFyb3VuZCB0aGVtIGFyZSBibGluZCBhbmQgZGVhZjsgb3RoZXJzLCAKYWdhaW4sIHNlZSBmYWNlcywgbGFuZHNjYXBlcywgb3IgY29sb3VyZWQgY2xvdWRzIGZsb2F0aW5nIApiZWZvcmUgdGhlaXIgZXllcyBpbiB0aGUgZGFyayBiZWZvcmUgdGhleSBzaW5rIHRvIHJlXnQgOyAKd2hpbGUgcGVyaGFwcyB0aGUgY29tbW9uZXN0IGV4cGVyaWVuY2Ugb2YgYWxsIGlzIHRoYXQgCm9mIHRob3NlIHdobyBiZWdpbiB0byByZWNvbGxlY3Qgd2l0aCBncmVhdGVyIGFuZCAKZ3JlYXRlciBjbGVhcm5lc3Mgd2hhdCB0aGV5IGhhdmUgc2VlbiBhbmQgaGVhcmQgb24gCnRoZSBvdGhlciBwbGFuZXMgZHVyaW5nIHNsZWVwLiAKCkhhdmluZyBub3cgdG8gc29tZSBleHRlbnQgY2xlYXJlZCBvdXIgZ3JvdW5kLCAKd2UgbWF5IHByb2NlZWQgdG8gY29uc2lkZXIgdGhlIHZhcmlvdXMgcGhlbm9tZW5hIApvZiBjbGFpcnZveWFuY2UuIAoKVGhleSBkaWZmZXIgc28gd2lkZWx5IGJvdGggaW4gY2hhcmFjdGVyIGFuZCBpbiAKZGVncmVlIHRoYXQgaXQgaXMgbm90IHZlcnkgZWFzeSB0byBkZWNpZGUgaG93IHRoZXkgCmNhbiBtb3N0IHNhdGlzZmFjdG9yaWx5IGJlIGNsYXNzaWZpZWQuIFdlIG1pZ2h0LCBmcHIgCgoKQ0xBU1NJRklDQVRJT04gCgoKMiA3IAoKCmV4YW1wbGUsIGFycmFuZ2UgdGhlbSBhY2NvcmRpbmcgdG8gdGhlIGtpbmQgb2Ygc2lnaHQgCmVtcGxveWVkIOKAlCB3aGV0aGVyIGl0IHdlcmUgbWVudGFsLCBhc3RyYWwsIG9yIG1lcmVseSAKZXRoZXJpYy4gV2UgbWlnaHQgZGl2aWRlIHRoZW0gYWNjb3JkaW5nIHRvIHRoZSAKY2FwYWNpdHkgb2YgdGhlIGNsYWlydm95YW50LCB0YWtpbmcgaW50byBjb25zaWRlcmEtIAp0aW9uIHdoZXRoZXIgaGUgd2FzIHRyYWluZWQgb3IgdW50cmFpbmVkIDsgd2hldGhlciAKaGlzIHZpc2lvbiB3YXMgcmVndWxhciBhbmQgdW5kZXIgaGlzIGNvbW1hbmQsIG9yIApzcGFzbW9kaWMgYW5kIGluZGVwZW5kZW50IG9mIGhpcyB2b2xpdGlvbiA7IHdoZXRoZXIgCmhlIGNvdWxkIGV4ZXJjaXNlIGl0IG9ubHkgd2hlbiB1bmRlciBtZXNtZXJpYyAKaW5mbHVlbmNlLCBvciB3aGV0aGVyIHRoYXQgYXNzaXN0YW5jZSB3YXMgdW5uZWNlc3NhcnkgCmZvciBoaW0gOyB3aGV0aGVyIGhlIHdhcyBhYmxlIHRvIHVzZSBoaXMgZmFjdWx0eSB3aGVuIAphd2FrZSBpbiB0aGUgcGh5c2ljYWwgYm9keSwgb3Igd2hldGhlciBpdCB3YXMgYXZhaWxhYmxlIApvbmx5IHdoZW4gaGUgd2FzIHRlbXBvcmFyaWx5IGF3YXkgZnJvbSB0aGF0IGJvZHkgCmluIHNsZWVwIG9yIHRyYW5jZS4gCgpBbGwgdGhlc2UgZGlzdGluY3Rpb25zIGFyZSBvZiBpbXBvcnRhbmNlLCBhbmQgd2UgCnNoYWxsIGhhdmUgdG8gdGFrZSB0aGVtIGFsbCBpbnRvIGNvbnNpZGVyYXRpb24gYXMgd2UgCmdvIG9uLCBidXQgcGVyaGFwcyBvbiB0aGUgd2hvbGUgdGhlIG1vc3QgdXNlZnVsISAKY2xhc3NpZmljYXRpb24gd2lsbCBiZSBvbmUgc29tZXRoaW5nIG9uIHRoZSBsaW5lcyBvZmYgCnQmYXQgYWRvcHRlZCBieSBNci4gU2lubmV0dCBpbiBoaXMgUmF0aW9uYWxlIG9uIApNZXNtZXJpc20g4oCUIGEgYm9vaywgYnkgdGhlIHdheSwgd2hpY2ggYWxsIHN0dWRlbnQhIApvZiBjbGFpcnZveWFuY2Ugb3VnaHQgdG8gcmVhZC4gSW4gZGVhbGluZyB3aXRoIHRoZSAKcGhlbm9tZW5hLCB0aGVuLCB3ZSB3aWxsIGFycmFuZ2UgdGhlbSByYXRoZXIgCmFjY29yZGluZyB0byB0aGUgY2FwYWNpdHkgb2YgdGhlIHNpZ2h0IGVtcGxveWVkIHRoYW4gCnRvIHRoZSBwbGFuZSB1cG9uIHdoaWNoIGl0IGlzIGV4ZXJjaXNlZCwgc28gdGhhdCB3ZSAKbWF5IGdyb3VwIGluc3RhbmNlcyBvZiBjbGFpcnZveWFuY2UgdW5kZXIgc29tZSBzdWNoIApoZWFkaW5ncyBhcyB0aGVzZSA6IAoKaS4gU2ltcGxlIGNsYWlydm95YW5jZSDigJQgdGhhdCBpcyB0byBzYXksIGEgbWVyZSAKb3BlbmluZyBvZiBzaWdodCwgZW5hYmxpbmcgaXRzIHBvc3Nlc3NvciB0byBzZWUgd2hhdC0gCmV2ZXIgYXN0cmFsIG9yIGV0aGVyaWMgZW50aXRpZXMgaGFwcGVuIHRvIGJlIHByZXNlbnQgCgoKMjggCgoKQ0xBSVJWT1lBTkNFIAoKCmFyb3VuZCBoaW0sIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBwb3dlciBvZiBvYnNlcnZpbmcgCmVpdGhlciBkaXN0YW50IHBsYWNlcyBvciBzY2VuZXMgYmVsb25naW5nIHRvIGFueSBvdGhlciAKdGltZSB0aGFuIHRoZSBwcmVzZW50LiAKCjIuIENsYWlydm95YW5jZSBpbiBzcGFjZSDigJQgdGhlIGNhcGFjaXR5IHRvIHNlZSBzY2VuZXMgCm9yIGV2ZW50cyByZW1vdmVkIGZyb20gdGhlIHNlZXIgaW4gc3BhY2UsIGFuZCBlaXRoZXIgCnRvbyBmYXIgZGlzdGFudCBmb3Igb3JkaW5hcnkgb2JzZXJ2YXRpb24gb3IgY29uY2VhbGVkIApieSBpbnRlcm1lZGlhdGUgb2JqZWN0cy4gCgozLiBDbGFpcnZveWFuY2UgaW4gdGltZSDigJQgdGhhdCBpcyB0byBzYXksIHRoZSBjYXBhY2l0eSAKdG8gc2VlIG9iamVjdHMgb3IgZXZlbnRzIHdoaWNoIGFyZSByZW1vdmVkIGZyb20gdGhlIApzZWVyIGluIHRpbWUsIG9yLCBpbiBvdGhlciB3b3JkcywgdGhlIHBvd2VyIG9mIGxvb2tpbmcgCmludG8gdGhlIHBhc3Qgb3IgdGhlIGZ1dHVyZS4gCgoKQ0hBUFRFUiBJSS4gCgoKU2ltcGxlIENsYWlydm95YW5jZTogRnVsbC4gCgpXZSBoYXZlIGRlZmluZWQgdGhpcyBhcyBhIG1lcmUgb3BlbmluZyBvZiBldGhlcmljIG9yIAphc3RyYWwgc2lnaHQsIHdoaWNoIGVuYWJsZXMgdGhlIHBvc3Nlc3NvciB0byBzZWUgd2hhdC0gCmV2ZXIgbWF5IGJlIHByZXNlbnQgYXJvdW5kIGhpbSBvbiBjb3JyZXNwb25kaW5nIApsZXZlbHMsIGJ1dCBpcyBub3QgdXN1YWxseSBhY2NvbXBhbmllZCBieSB0aGUgcG93ZXIgCm9mIHNlZWluZyBhbnl0aGluZyBhdCBhIGdyZWF0IGRpc3RhbmNlIG9yIG9mIHJlYWRpbmcgCsKrIGVpdGhlciB0aGUgcGFzdCBvciB0aGUgZnV0dXJlLiBJdCBpcyBoYXJkbHkgcG9zc2libGUgCmFsdG9nZXRoZXIgdG8gZXhjbHVkZSB0aGVzZSBsYXR0ZXIgZmFjdWx0aWVzLCBmb3IgYXN0cmFsIApzaWdodCBuZWNlc3NhcmlseSBoYXMgY29uc2lkZXJhYmx5IGdyZWF0ZXIgZXh0ZV5vcCAKdGhhbiBwaHlzaWNhbCwgYW5kIGZyYWdtZW50YXJ5IHBpY3R1cmVzIG9mIGJvdGggcGFzdCAKYW5kIGZ1dHVyZSBhcmUgb2Z0ZW4gY2FzdWFsbHkgdmlzaWJsZSBldmVuIHRvIGNsYWlyLSAKdm95YW50cyB3aG8gZG8gbm90IGtub3cgaG93IHRvIHNlZWsgc3BlY2lhbGx5IGZvciAKdGhlbSA7IGJ1dCB0aGVyZSBpcyBuZXZlcnRoZWxlc3MgYSB2ZXJnIHJlYWwgZGlzdGluY3Rpb24gCmJldHdlZW4gc3VjaCBpbmNpZGVudGFsIGdsaW1wc2VzIGFuZCB0aGUgZGVmaW5pdGUgCnBvd2VyIG9mIHByb2plY3Rpb24gb2YgdGhlIHNpZ2h0IGVpdGhlciBpbiBzcGFjZSBvciAKCldlIGZpbmQgYW1vbmcgc2Vuc2l0aXZlIHBlb3BsZSBhbGwgZGVncmVlcyBvZiB0aGlzIApraW5kIG9mIGNsYWlydm95YW5jZSwgZnJvbSB0aGF0IG9mIHRoZSBtYW4gd2hvIGdldHMgYSAKdmFndWUgaW1wcmVzc2lvbiB3aGljaCBoYXJkbHkgZGVzZXJ2ZXMgdGhlIG5hbWUgb2YgCnNpZ2h0IGF0IGFsbCwgdXAgdG8gdGhlIGZ1bGwgcG9zc2Vzc2lvbiBvZiBldGhlcmljIGFuZCAKCgozMCAKCgpDTEFJUlZPWUFOQ0UgCgoKYXN0cmFsIHZpc2lvbiByZXNwZWN0aXZlbHkuIFBlcmhhcHMgdGhlIHNpbXBsZXN0IAptZXRob2Qgd2lsbCBiZSBmb3IgdXMgdG8gYmVnaW4gYnkgZGVzY3JpYmluZyB3aGF0IAp3b3VsZCBiZSB2aXNpYmxlIGluIHRoZSBjYXNlIG9mIHRoaXMgZnVsbGVyIGRldmVsb3BtZW50IApvZiB0aGUgcG93ZXIsIGFzIHRoZSBjYXNlcyBvZiBpdHMgcGFydGlhbCBwb3NzZXNzaW9uIHdpbGwgCnRoZW4gYmUgc2VlbiB0byBmYWxsIG5hdHVyYWxseSBpbnRvIHRoZWlyIHBsYWNlcy4gCgpMZXQgdXMgdGFrZSB0aGUgZXRoZXJpYyB2aXNpb24sLCBmaXJzdCBUaGlzIGNvbnNpc3RzIApzaW1wbHksIGFzIGhhcyBhbHJlYWR5IGJlZW4gc2FpZCwgaW4gc3VzY2VwdGliaWxpdHkgdG8gCmEgZmFyIGxhcmdlciBzZXJpZXMgb2YgcGh5c2ljYWwgdmlicmF0aW9ucyB0aGFuIG9yZGluYXJ5LCAKYnV0IG5ldmVydGhlbGVzcyBpdHMgcG9zc2Vzc2lvbiBicmluZ3MgaW50byB2aWV3IGEgCmdvb2QgZGVhbCB0byB3aGljaCB0aGUgbWFqb3JpdHkgb2YgdGhlIGh1bWFuIHJhY2UgCnN0aWxsIHJlbWFpbnMgYmxpbmQuIExldCB1cyBjb25zaWRlciB3aGF0IGNoYW5nZXMgCml0cyBhY3F1aXNpdGlvbiBwcm9kdWNlcyBpbiB0aGUgYXNwZWN0IG9mIGZhbWlsaWFyIApvYmplY3RzLCBhbmltYXRlIGFuZCBpbmFuaW1hdGUsIGFuZCB0aGVuIHNlZSB0byB3aGF0IAplbnRpcmVseSBuZXcgZmFjdG9ycyBpdCBpbnRyb2R1Y2VzIHVzLiBCdXQgaXQgbXVzdCBiZSAKcmVtZW1iZXJlZCB0aGF0IHdoYXQgSSBhbSBhYm91dCB0byBkZXNjcmliZSBpc150aGUgCnJlc3VsdCBvZiB0aGUgZnVsbCBhbmQgcGVyZmVjdGx5LWNvbnRyb2xsZWQgcG9zc2Vzc2lvbiAKb2YgdGhlIGZhY3VsdHkgb25seSwgYW5kIHRoYXQgbW9zdCBvZiB0aGUgaW5zdGFuY2VzIAptZXQgd2l0aCBpbiByZWFsIGxpZmUgd2lsbCBiZSBsaWtlbHkgdG8gZmFsbCBmYXIgc2hvcnQgb2YgCml0IGluIG9uZSBkaXJlY3Rpb24gb3IgYW5vdGhlci4gCgoKVGhlIG1vc3Qgc3RyaWtpbmcgY2hhbmdlIHByb2R1Y2VkIGluIHRoZSBhcHBlXnItIApsYW5jZSBvZiBpbmFuaW1hdGUgb2JqZWN0cyBieSB0aGUgYWNxdWlzaXRpb24gb2YgdGhpcyAKbGFjdWx0eSBpcyB0aGF0IG1vc3Qgb2YgdGhlbSBiZWNvbWUgYWxtb2d0IF4gCgoKcGFyZW50LCBvd2luZyB0byB0aGUgZGlmZmVyZW5jZSBpbiB3YXZlZGVuZ3RoIApqampvbWUgb2YgdGhlIHZpYnJhdGlvbnMgdG8gd2hpY2ggdGhlIG1hbiBoYXMgbm93IApEZWNvbWUgc3VzY2VwdGlibGUuIEhlIGZpbmRzIGhpbXNlbGYgY2FwYWJsZSBvZiAKcGVyZm9ybWluZyB3aXRoIHRoZSB1dG1vc3QgZWFzZSB0aGUgcHJvdmVyYmlhbCBmZWF0IApvZiDigJwgc2VlaW5ndGhyb3VnaCBhIGJyaWNrIHdhbGws4oCdIGZvciB0byBoaXMgbmV3bHktIAphY3F1aXJlZCB2aXNpb24gdGhlIGJyaWNrIHdhbGwgc2VlbXMgdG8gaGF2ZSBhIGNvbi0gCgoKRVRIRVJJQyBWSVNJT04gCgoKMzEgCgoKNCAKCgpzaXN0ZW5jeSBubyBncmVhdGVyIHRoYW4gdGhhdCBvZiBhIGxpZ2h0IG1pc3QgSGUgCnRoZXJlZm9yZSBzZWVzIHdoYXQgaXMgZ29pbmcgb24gaW4gYW4gYWRqb2luaW5nIHJvb20gCmFsbW9zdCBhcyB0aG91Z2ggbm8gaW50ZXJ2ZW5pbmcgd2FsbCBleGlzdGVkIDsgaGUgCmNhbiBkZXNjcmliZSB3aXRoIGFjY3VyYWN5IHRoZSBjb250ZW50cyBvZiBhIGxvY2tlZCAKYm94LCBvciByZWFkIGEgc2VhbGVkLmxldHRlciA7IHdpdGggYSBsaXR0bGUgcHJhY3RpY2UgaGUgCmNhbiBmaW5kIGEgZ2l2ZW4gcGFzc2FnZSBpbiBhIGNsb3NlZCBib29rLiBUaGlzIGxhc3QgCmZlYXQsIHRob3VnaCBwZXJmZWN0bHkgZWFzeSB0byBhc3RyYWwgdmlzaW9uLCBwcmVzZW50cyAKY29uc2lkZXJhYmxlIGRpZmZpY3VsdHkgdG8gb25lIHVzaW5nIGV0aGVyaWMgc2lnaHQsIApiZWNhdXNlIG9mIHRoZSBmYWN0IHRoYXQgZWFjaCBwYWdlIGhhcyB0byBiZSBsb29rZWQgCmF0IHRocm91Z2ggYWxsIHRob3NlIHdoaWNoIGhhcHBlbiB0byBiZSBzdXBlcmltcG9zZWQgCnVwb24gaXQgCgpJdCBpcyBvZnRlbiBhc2tlZCB3aGV0aGVyIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMgCmEgbWFuIHNlZXMgYWx3YXlzIHdpdGggdGhpcyBhYm5vcm1hbCBzaWdodCwgb3Igb25seSAKd2hlbiBoZSB3aXNoZXMgdG8gZG8gc28uIFRoZSBhbnN3ZXIgaXMgdGhhdCBpZiB0aGkgLyAKZmFjdWx0eSBpcyBwZXJmZWN0bHkgZGV2ZWxvcGVkIGl0IHdpbGwuIGJlIGVudGlyZWx5IHVuZGU6IFsgCgpecG5eLC5hXmVeLi51cyxlIHReYXReb3IgLCAKCnZpc2lvbiBhdCB3aWxsLiBIZSBjaGFuZ2VzIGZyb20gb25lIHRvIHRoZSBvdGhlciBhPyAKcmVhZGlseSBhbmQgbmF0dXJhbGx5IGFzIHdlIG5vdyBjaGFuZ2UgdGhlIGZvY3VzIG9mIApvdXIgZXllcyB3aGVuIHdlIGxvb2sgdXAgZnJvbSBvdXIgYm9vayB0byBmb2xsb3cgCnRoZSBtb3Rpb25zIG9mIHNvbWUgb2JqZWN0IGEgbWlsZSBhd2F5LiBJdCBpcywgYXMgaXQgCndlcmUsIGEgZm9jdXNzaXBnLm9mIGNvbnNjaW91c25lc3Mgb24gdGhlIG9uZSBvciB0aGUgCm90aGVyIGFzcGVjdCBvZiB3aGF0IGlzIHNlZW4gOyBhbmQgdGhvdWdoIHRoZSBtYW4gCndvdWxkIGhhdmUgcXVpdGUgY2xlYXJseSBpbiBoaXMgdmlldyB0aGUgYXNwZWN0IHVwb258IAp3aGljaCBoaXMgYXR0ZW50aW9uIHdhcyBmb3IgdGhlIG1vbWVudCBmaXhlZC4sIGhlPyAKd291bGQgYWx3YXlzIGJlIHZhZ3VlbHkgY29uc2Npb3VzIG9mIHRoZSBvdGhlciEgCmFzcGVjdCB0b28sIGp1c3QgYXMgd2hlbiB3ZSBmb2N1cyBvdXIgc2lnaHQgdXBvbiBhbnkgOiAKb2JqZWN0IGhlbGQgaW4gb3VyIGhhbmRzIHdlIHlldCB2YWd1ZWx5IHNlZSB0aGUhIApvcHBvc2l0ZSB3YWxsIG9mIHRoZSByb29tIGFzIGEgYmFja2dyb3VuZC4gCgoKIyAKCgpcIG5vICogCgoKMzIgCgoKQ0xBSVJWT1lBTkNFIAoKCkFub3RoZXIgY3VyaW91cyBjaGFuZ2UsIHdoaWNoIGNvbWVzIGZyb20gdGhlIApvc3Nlc3Npb24gb2YgdGhpcyBzaWdodCwgaXMgdGhhdCB0aGUgc29saWQgZ3JvdW5kIHVwb24gCgoKaGljaCB0aGUgbWFuIHdhbGtzIGJlY29tZXMgdG8gYSBjZXJ0YWluIGV4dGVudCAKCgpFVEhFUklDIEVOVElUSUVTIAoKCjMzIAoKCnRoZSBkZW5zZXIgZXRoZXJpYyBtYXR0ZXIuIFRvIHRoaXMgY2xhc3MgYmVsb25nIAonbmVhcmx5IGFsbCB0aGUgZmVpcmllc14gZ25vbWVzLCBhbmQgYnJvd25pZXMsIGFib3V0IAp3aG9tIHRoZXJlIGFyZSBzdGlsbCBzbyBtYW55IHN0b3JpZXMgcmVtYWluaW5nIAphbW9uZyBTY290Y2ggYW5kIElyaXNoIG1vdW50YWlucyBhbmQgaW4gcmVtb3RlIApjb3VudHJ5IHBsYWNlcyBhbGwgb3ZlciB0aGUgd29ybGQuIAoKClRoZSB2YXN0IGtpbmdkb20gb2YgbmF0dXJlLSAKCgppdCB3aGljaCA7IAoKcGxhbmUsIGFuZCB0aGlzIHNlY3Rpb24sIG9mIGNvdXJzZSwgaXMgbXVjaCBtb3JlIGxpa2VseSAKdG8gY29tZSB3aXRoaW4gdGhlIGtlbiBvZiBvcmRpbmFyeSBwZW9wbGUgdGhhbiB0aGUgCm90aGVycy4gSW5kZWVkLCBpbiByZWFkaW5nIHRoZSBjb21tb24gZmFpcnkgc3RvcmllcyAKb25lIGZyZXF1ZW50bHkgY29tZXMgYWNyb3NzIGRpc3RpbmN0IGluZGljYXRpb25zIHRoYXQgCml0IGlzIHdpdGggdGhpcyBjbGFzcyB0aGF0IHdlIGFyZSBkZWFsaW5nLiBBbnkgc3R1ZGVudCAKb2YgZmFpcnkgbG9yZSB3aWxsIHJlbWVtYmVyIGhvdyBvZnRlbiBtZW50aW9uIGlzIArigKIgbWFkZSBvZiBzb21lIG15c3RlcmlvdXMgb2ludG1lbnQgb3IgZHJ1Zywgd2hpY2ggeWYgCndoZW4gYXBwbGllZCB0byBhIG1hbuKAmXMgZXllcyBlbmFibGVzIGhpbSB0byBzZWUgdGhlIAptZW1iZXJzIG9mIHRoZSBmYWlyeSBjb21tb253ZWFsdGggd2hlbmV2ZXIgaGUgCmhhcHBlbnMgdG8gbWVldCB0aGVtLiAKClRoZSBzdG9yeSBvZiBzdWNoIGFuIGFwcGxpY2F0aW9uIGFuZCBpdHMgcmVzdWx0cyBvY2N1cnMgCnNvIGNvbnN0YW50bHkgYW5kIGNvbWVzIGZyb20gc28gbWFueSBkaWZmZXJlbnQgcGFydHMgCm9mIHRoZSB3b3JsZCB0aGF0IHRoZXJlIG11c3QgY2VydGFpbmx5IGJlIHNvbWUgdHJ1dGpoIFYgCmJlaGluZCBpdCwgYXMgdGhlcmUgYWx3YXlzIGlzIGJlaGluZCByZWFsbHkgdW5pdmVyc2FsIFsgMSAKcG9wdWxhciB0cmFkaXRpb24uIE5vdyBubyBzdWNoIGFub2ludGluZyBvZiB0aGUgCmV5ZXMgYWxvbmUgY291bGQgYnkgYW55IHBvc3NpYmlsaXR5IG9wZW4gYSBtYW7igJlzIAphc3RyYWwgdmlzaW9uLCB0aG91Z2ggY2VydGFpbiBvaW50bWVudHMgcnViYmVkIGF2ZXIuIAp0aGUgd2hvbGUgYm9keSB3aWxsIHZlcnkgZ3JlYXRseSBhc3Npc3QgdGhlIGFzdHJhbCAKZmVpc3lyZSB0aGUgcGh5c2ljYWwgY29uc2Npb3VzbmVzc+KAlCBhIAoKZmFjdCB0aGUga25vd2xlZGdlIG9mIHdoaWNoIHNlZW1zIHRvIGhhdmUgc3Vydml2ZWQgCgozIAoKCjM0IAoKCkNMQUlSVk9ZQU5DRSAKCgpldmVuIHRvIG1lZGlhZXZhbCB0aW1lcywgYXMgd2lsbCBiZSBzZWVuIGZyb20gdGhlIApldmlkZW5jZSBnaXZlbiBhdCBzb21lIG9mIHRoZSB0cmlhbHMgZm9yIHdpdGNoY3JhZnQuIApCdXQgdGhlIGFwcGxpY2F0aW9uIHRvIHRoZSBwaHlzaWNhbCBleWUgbWlnaHQgdmVyeSAKZWFzaWx5IHNvIHN0aW11bGF0ZSBpdHMgc2Vuc2l0aXZlbmVzcyBhcyB0byBtYWtlIGl0IApzdXNjZXB0aWJsZSB0byBzb21lIG9mIHRoZSBldGhlcmljIHZpYnJhdGlvbnMuIAoKVGhlIHN0b3J5IGZyZXF1ZW50bHkgZ29lcyBvbiB0byByZWxhdGUgaG93IHdoZW4gCnRoZSBodW1hbiBiZWluZyB3aG8gaGFzIHVzZWQgdGhpcyBteXN0aWNhbCBvaW50bWVudCAKYmV0cmF5cyBoaXMgZXh0ZW5kZWQgdmlzaW9uIGluIHNvbWUgd2F5IHRvIGEgZmFpcnksIAp0aGUgbGF0dGVyIHN0cmlrZXMgb3Igc3RhYnMgaGltIGluIHRoZSBleWUsIHRodXMgZGUtIAolIHByaXZpbmcgaGltIG5vdCBvbmx5IG9mIHRoZSBldGhlcmljIHNpZ2h0LCBidXQgb2YgdGhhdCAKfCBvZiB0aGUgZGVuc2VyIHBoeXNpY2FsIHBsYW5lIGFzIHdlbGwuIChTZWUgVGhlIApTY2llbmNlIG9mIEZhaXJ5IFRhbGVzICwgYnkgRS4gUy4gSGFydGxhbmQsIGluIHRoZSAKCuKAnCBDb250ZW1wb3JhcnkgU2NpZW5jZSDigJ0gc2VyaWVzIOKAlCBvciBpbmRlZWQgYWxtb3N0IAoKYW55IGV4dGVuc2l2ZSBjb2xsZWN0aW9uIG9mIGZhaXJ5IHN0b3JpZXMuKSBJZiB0aGUgCnNpZ2h0IGFjcXVpcmVkIGhhZCBiZWVuIGFzdHJhbCwgc3VjaCBhIHByb2NlZWRpbmcgciAKd291bGQgaGF2ZSBiZWVuIGVudGlyZWx5IHVuYXZhaWxpbmcsIGZvciBub2puanVyeSB0LFHigJ4gCnRoZSBwaHlzaWNhbCBhcHBhcmF0dXMgd291bGQgYWZmZWN0IGFuIGFzdHJhbCBmYWN1bHR5IDsgCmJ1dCBpZiB0aGUgdmlzaW9uIHByb2R1Y2VkIGJ5IHRoZSBvaW50bWVudCB3ZXJlIApldGhlcmljLCB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHBoeXNpY2FsIGV5ZSB3b3VsZCBpbiAKbW9zdCBjYXNlcyBhdCBvbmNlIGV4dGluZ3Vpc2ggaXQsIHNpbmNlIHRoYXQgaXMgdGhlIAptZWNoYW5pc20gYnkgbWVhbnMgb2Ygd2hpY2ggaXQgd29ya3MuIAoKQW55b25lIHBvc3Nlc3NpbmcgdGhpcyBzaWdodCBvZiB3aGljaCB3ZSBhcmUgCnNwZWFraW5nIHdvdWxkIGFsc28gYmUgYWJsZSBKbyBwZXJnZWl2ZV50aHAuIC4gCmRvdWJsZSBvZiBtYW46IGJ1dCBzaW5jZSB0aGlzIGlzIHNvIG5lYXJseSBpZGVudGljYWwgCmluIHNpemUgd2l0aCB0aGUgcGh5c2ljYWwsIGl0IHdvdWxkIGhhcmRseSBiZSBsaWtlbHkgdG8gCmF0dHJhY3QgaGlzIGF0dGVudGlvbiB1bmxlc3MgaXQgd2VyZSBwYXJ0aWFsbHkgcHJvamVjdGVkIAppbiB0cmFuY2Ugb3IgdW5kZXIgdGhlIGluZmx1ZW5jZSBvZiBhbmFlc3RoZXRpY3MuIEFmdGVyIApkZWF0aCwgd2hlbiBpdCB3aXRoZHJhd3MgZW50aXJlbHkgZnJvbSB0aGUgZGVuc2UgCgoKTkVXIENPTE9VUlMgCgoKMzUgCgoKYm9keSwgaXQgd291bGQgYmUgY2xlYXJseSB2aXNpYmxlIHRvIGhpbSwgYW5kIGhpIAp3b3VsZCBmcmVxdWVudGx5IHNlZSBpdCBob3ZlcmluZyBvdmVyIG5ld2x5IG1hZCYgCmdyYXZlcyBhcyBoZSBwYXNzZWQgdGhyb3VnaCBhIGNodXJjaHlhcmReIG9yLiAKY2VtZXRlcnksIElmIGhlIHdlcmUgdG8gYXR0ZW5kIGEgc3Bpcml0dWFsaXN0aWMgCnN0YW5jZSBoZSB3b3VsZCBzZWUgdGhlIGV0aGVyaWMgbWF0dGVyIG9vemluZyBvdXQgCmZyb20gdGhlIHNpZGUgb2YgdGhlIG1lZGl1bSwgYW5kIGNvdWxkIG9ic2VydmUgdGhlIAp2YXJpb3VzIHdheXMgaW4gd2hpY2ggdGhlIGNvbW11bmljYXRpbmcgZW50aXRpZXMgCm1ha2UgdXNlIG9mIGl0IAoKQW5vdGhlciBmYWN0IHdoaWNoIGNvdWxkIGhhcmRseSBmYWlsIHNvb24gdG8gdGhydXN0IAppdHNlbGYgdXBvbiBoaXMgbm90aWNlIHdvdWxkIGJlIHRoZSBeIGV4dGVuc2lvbiBvZiBNIApwZXJjZXB0aW9uIG9mIGNvbG91ci4gSGUgd291bGQgZmluZCBoaW1zZWxmIGFibGUgdDwgCnNlZSBzZXZlcmFsIGVudGlyZWx5IG5ldyBjb2xvdXJzLCBub3QgaW4gdGhlIGxlYXNqIApyZXNlbWJsaW5nIGFueSBvZiBedGhvc2UgaW5jbHVkZWQgaW4gdGhlIHNwZWN0cnVtIGE6IAp3ZSBhdCBwcmVzZW50XmhvdyBpdCwgYW5kIHRoZXJlZm9yZSBvZiBjb3Vyc2UgcXVpdCAK4oCiIGluZGVmY3JpXmJsZWpuIGpteV4gdGVuXiBBbiAKCm5vdCBvbmx5IHdvdWxkIGhlIHNlZSBuZXcgb2JqZWN0cyB0aGF0IHdlcmUgd2hvbGx5IApvZiB0aGVzZSBuZXcgY29sb3VycywgYnV0IGhlIHdvdWxkIGFsc28gZGlzY292ZXIgdGhhdCAKbW9kaWZpY2F0aW9ucyBoYWQgYmVlbiBpbnRyb2R1Y2VkIGludG8gdGhlIGNvbG91ciBvZiAKbWFueSBvYmplY3RzIHdpdGggd2hpY2ggaGUgd2FzIHF1aXRlIGZhbWlsaWFyLCAKYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhleSBoYWQgb3IgaGFkIG5vdCBzb21lIAp0aW5nZSBvZiB0aGVzZSBuZXcgaHVlcyBpbnRlcm1pbmdsZWQgd2l0aCB0aGUgb2xkLiAKU28gdGhhdCB0d28gc3VyZmFjZXMgb2YgY29sb3VyIHdoaWNoIHRvIG9yZGluYXJ5IGV5ZXMgCgotLioqLi4qLCxe4oCYMSoqJycgKnktJyoqJyAnIAoKYXBwZWFyZWQgdG8gbWF0Y2ggcGVyZmVjdGx5IHdvdWxkIG9mdGVuIHByZXNlbnQgCgpXZSBoYXZlIG5vdyB0b3VjaGVkIHVwb24gc29tZSBvZiB0aGUgcHJpbmNpcGFsIApjaGFuZ2VzIHdoaWNoIHdvdWxkIGJlIGludHJvZHVjZWQgaW50byBhIG1hbuKAmXMgCndvcmxkIHdoZW4gaGUgZ2FpbmVkIGV0aGVyaWMgc2lnaHQ6IGFuZCBpdCBtdXN0IAphbHdheXMgYmUgcmVtZW1iZXJlZCB0aGF0IGluIG1vc3QgY2FzZXMgYSBjb3JyJkwgCgoKMzYgCgoKQ0xBSVJWT1lBTkNFIAoKCmF0IHRoZSBzYW1lIHRpbWUgYiAKanNqaWxzbywgc28gdGhhdCBoZSAKCmZjYXBhYmxlIG9mIGhnYXhpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gb2YgZmVlbGluZywgbW9yZSAKcGhhbiBtb3N0IG9mIHRob3NlIGFyb3VuZCBoaW0uIE5vdyBzdXBwb3NpbmcgdGhhdCAKaW4gYWRkaXRpb24gdG8gdGhpcyBoZSBvYnRhaW5lZCB0aGUgc2lnaHQgb2YgdGhlIAouIHBsYW5lLCB3aGF0IGZ1cnRoZXIgY2hhbmdlcyB3b3VsZCBiZSBvYnNlcnZhYmxlPyAKCldlbGw+IDsgaW4gCgpmYWN0IGEgd2hvbGUgbmV3IHdvcmxkIHdvdWxkLCBvcGVuIGJlZm9yZSBoaXMgZXZlcy4gCkxldCB1cyBjb25zaWRlciBpdHMgd29uZGVycyBicmllZmx5IGluIHRoZSBzYW1lIG9yZGVyIAphcyBiZWZvcmUsIGFuZCBzZWUgZmlyc3Qgd2hhdCBkaWZmZXJlbmNlIHRoZXJlIHdvdWxkIApiZSBpbiB0aGUgYXBwZWFyYW5jZSBvZiBpbmFuaW1hdGUgb2JqZWN0cy4gT24gdGhpcyAKcG9pbnQgSSBtYXkgYmVnaW4gYnkgcXVvdGluZyBhIHJlY2VudCBxdWFpbnQgYW5zd2VyIAoKZ2l2ZW4gaW4gCgrigJwgVGhlcmUgaXMgYSBkaXN0aW5jdCBkaWZmZXJlbmNlIGJldHdlZW4gZXRoZXJpYyBzaWdodCAKYW5kIGFzdHJhbCBzbGlnaHQsIGFuZCBpdCBpcyB0aGUgbGF0dGVyIHdoaWNoIHNlZW1zIHRvIOKAoiAKY29ycmVzcG9uZCB0byB0aGUgZm91cnRoIGRpbWVuc2lvbi4gCgrigJwgVGhlIGVhc2llc3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2UgaXMgdG8gCnRha2UgYW4gZXhhbXBsZS4gSWYgeW91IGxvb2tlZCBhdCBhIG1hbiB3aXRoIGJvdGggCnRoZSBzaWdodHMgaW4gdHVybiwgeW91IHdvdWxkIHNlZSB0aGUgYnV0dG9ucyBhdCB0aGUgCmJhY2sgb2YgaGlzIGNvYXQgaW4gYm90aCBjYXNlcyA7IG9ubHkgaWYgeW91IHVzZWQgCmV0aGVyaWMgc2lnaHQgeW91IHdvdWxkIHNlZSB0aGVtIHRocm91Z2ggaGltLCBhbmQgCndvdWxkIHNlZSB0aGUgc2hhbmstc2lkZSBhcyBuZWFyZXN0IHRvIHlvdSwgYnV0IGlmIAp5b3UgbG9va2VkIGFzdHJhbGx5LCB5b3Ugd291bGQgc2VlIGl0IG5vdCBvbmx5IGxpa2UgCnRoYXQsIGJ1dCBqdXN0IGFzIGlmIHlvdSB3ZXJlIHN0YW5kaW5nIGJlaGluZCB0aGUgbWFuIAphcyB3ZWxsLiAKCl4gOl5RciBpZiB5b3Ugd2VyZSBsb29raW5nIGV0aGVyaWNhbGx5IGF0IGEgd29vZGVuIApjdWJlIHdpdGggd3JpdGluZyBvbiBhbGwgaXRzIHNpZGVzLCBpdCB3b3VsZCBiZSBhcyAKdGhvdWdoIHRoZSBjdXRlIHdlcmUgZ2xhc3MsIHNvIHRoYXQgeW91IGNvdWxkIHNlZSAKCgpzIGJyb3VnaHQgCndvdWxkIGJlIAoKCmZlcG9uZGluZyBjaGFuZ2Ugd291bGQgCmphYm91dCBpbiBoaXMgb3RoZXIgc2Vuc2UgCgoKQVNUUkFMIFZJU0lPTiAKCgozNyAKCgp0aHJvdWdoIGl0LCBhbmQgeW91IHdvdWxkIHNlZSB0aGUgd3JpdGluZyBvbiB0aGUgCm9wcG9zaXRlIHNpZGUgYWxsIGJhY2t3YXJkcywgd2hpbGUgdGhhdCBvbiB0aGUgcmlnaHQgCmFuZCBsZWZ0IHNpZGVzIHdvdWxkIG5vdCBiZSBjbGVhciB0byB5b3UgYXQgYWxsIHVubGVzcyB1IAoK4pagIGpwICogCgp5b3UgbW92ZWQsIGJlY2F1c2UgeW91IHdvdWxkIHNlZSBpdCBlZGdld2lzZS4gQnV0aVYgCmlmIHlvdSBsb29rZWQgYXQgaXQgYXN0cmFsbHkgeW91IHdvdWxkIHNlZSBhbGwgdGhlIApzaWRlcyBhdCBvbmNlLCBhbmQgYWxsIHRoZSByaWdodCB3YXkgdXAsIGFzIHRob3VnXSAKdGhlIHdob2xlIGN1YmUgaGFkIGJlZW4gZmxhdHRlbmVkIG91dCBiZWZvcmUgeW91aiAKYW5kIHlvdSB3b3VsZCBzZWUgZXZlcnkgcGFydGljbGUgb2YgdGhlIGluc2lkZSBhOiAKd2VsbCDigJQgbm90IHRocm91Z2ggdGhlIG90aGVycywgYnV0IGFsbCBmbGF0dGVuZWQgb3V0IApZb3Ugd291bGQgYmUgbG9va2luZyBhdCBpdCBmcm9tIGFub3RoZXIgZGlyZWN0aW9uLOKAmSAKYXQgcmlnaHQgYW5nbGVzIHRvIGFsbCB0aGUgZGlyZWN0aW9ucyB0aGF0IHdlIGtub3cuIAoK4oCcSWYgeW91IGxvb2sgYXQgdGhlIGJhY2sgb2YgYSB3YXRjaCBldGhlcmljYWxseSB5b3UgCnNlZSBhbGwgdGhlIHdoZWVscyB0aHJvdWdoIGl0LCBhbmQgdGhlIGZhY2UgdGhyb3VnaCAKdGhlbSAsIGJ1dCBiYWNrd2FyZHMgOyBpZiB5b3UgbG9vayBhdCBpdCBhc3RyYWxseSwgeW91IApzZWUgdGhlIGZhY2UgcmlnaHQgd2F5IHVwIGFuZCBhbGwgdGhlIHdoZWVscyBseWluZyAKc2VwYXJhdGVseSwgYnV0IG5vdGhpbmcgb24gdGhlIHRvcCBvZiBhbnl0aGluZyEgCmVsc2Uu4oCdIH0gCgoqSGVyZSB3ZSBoYXZlIGF0IG9uY2UgdGhlIGtleW5vdGUsIHRoZSBwcmluY2lwYWwgCmZhY3RvciBvZiB0aGUgY2hhbmdlIDsgdGhlIG1hbiBpcyBsb29raW5nIGF0IGV2ZXJ5LSEgCnRoaW5nIGZyb20gYW4gYWJzb2x1dGVseSBuZXcgcG9pbnQgb2YgdmlldywgZW50aXJlbHkhIApvdXRzaWRlIG9mIGFueXRoaW5nIAoKYmVmb3JlLiBIZSBoYXMgbm8gbG9uZ2VyIHRoZSBzbGlnaHRlc3QgZGlmZmljdWx0IAppbiByZWFkaW5nIGFueSBwYWdlIGluIGEgY2xvc2VkIGJvb2ssIGJlY2F1c2UgaGUgCmlzIG5vdCBub3cgbG9va2luZyBhdCBpdCB0aHJvdWdoIGFsbCB0aGUgb3RoZXIgcGFnZXMgCmJlZm9yZSBpdCBvciBiZWhpbmQgaXQsIGJ1dCBpXmpval5pbGdecmFedCwgZG93biAKClRoZSBkZXB0aCBhdCB3aGljaCBhIHZlaW4gb2YgbWV0YWwgb3Igb2YgY29hbCBtYXkgCmxpZSBpcyBubyBsb25nZXIgYSBiYXJyaWVyIHRvIGhpcyBzaWdodCBvZiBpdCwgYmVjYXVzZSBoZSB8IAoKCjM4IAoKCkNMQUlSVk9ZQU5DRSAKCgppcyBub3Qgbm93IGxvb2tpbmcgdGhyb3VnaCB0aGUgaW50ZXJ2ZW5pbmcgZGVwdGggb2YgCi1hcnRoIGF0IGFsbC4gVGhedGZyaWRtZXNzIG9mLCBhLCB3YWxsLCBvciB0aGUsLmF1aWFoZXIgCjNmIHdhbGxzIGludGVydmVuaW5nIGJldHdlZW4gdGhlIG9ic2VydmVyIGFuZCB0aWllIApvYmplY3QsIHdvdWxkIG1ha2UgYSBncmVhdCBkZWFsIG9mIDQxU15KU1M5dHZsOV5lIAoKCkllYXJuZXNzIG9mIHRoZSBldGhlcmljIHNpZ2h0IDsgdGhleSB3b3VsZCBtYWtlIG5vIAppbmZlcmVuY2Ugd2hhdGV2ZXIgdG8gdGhlIAoKCmltIAoKaS0gJiQsIAoKCnNpZ2h0LCBiZWNhdXNlampCIAp0aGUgYXN0cmFsIHBsYW5lIHRoZXkgd291bGQgbm90IGludGVydmVuZSBiZXR3ZWVuIAppaWhlIG9ic2VyeWVyIGFuZCB0aGUgb2JqZWN0LiBPZiBjb3Vyc2UgdGhhdCBzb3VuZHMgCnBhcmFkb3hpY2FsIGFuZCBpbXBvc3NpYmxlLCBhbmQgaXQgaXMgcXVpdGUgaW5leHBsaS0gCmNhYmxlIHRvIGEgbWluZCBub3Qgc3BlY2lhbGx5IHRyYWluZWQgdG8gZ3Jhc3AgdGhlIApJZGVhOyB5ZXQgaXQgaXMgbm9uZSB0aGUgbGVzcyBhYnNvbHV0ZWx5IHRydWUuIAoKVGhpcyBjYXJyaWVzIHVzIHN0cmFpZ2h0IGludG8gdGhlIG1pZGRsZSBvZiB0aGUgbXVjaC0gCnZleGVkIHF1ZXN0aW9uIG9mIHRoZSBmb3VydGggZGltZW5zaW9uIOKAlCBhIHF1ZXN0aW9uIApvZiB0aGUgZGVlcGVzdCBpbnRlcmVzdCwgdGhvdWdoIG9uZSB0aGF0IHdlIGNhbm5vdCAKcHJldGVuZCB0byBkaXNjdXNzIGluIHRoZSBzcGFjZSBhdCBvdXIgZGlzcG9zYWwuIApUaG9zZSB3aG8gd2lzaCB0byBzdHVkeSBpdCBhcyBpdCBkZXNlcnZlcyBhcmUgCnJlY29tbWVuZGVkIHRvIGJlZ2luIHdpdGggTXIuIEMuIEguIEhpbnRvbidzIApYIFNjaWVudGlmaWMgUm9tYW5jZXMgb3IgRHIuIEEuIFQuIFNjaG9maWVsZCdzIEFub3RoZXIgClggV29ybGQgLCBhbmQgdGhlbiBmb2xsb3cgb24gd2l0aCB0aGUgZm9ybWVyIGF1dGhvcuKAmXMgCmxhcmdlciB3b3JrLCBBIE5ldyBFcmEgb2YgVGhvdWdodCBcIE1yLiBIaW50b24gCm5vdCBvbmx5IGNsYWltcyB0byBiZSBhYmxlIGhpbXNlbGYgdG8gZ3Jhc3AgbWVudGFsbHkgCnxzb21lIG9mIHRoZSBzaW1wbGVyIGZvdXJ0aC1kaW1lbnNpb25hbCBmaWd1cmVzLCBidXQgCmlsc28gc3RhdGVzIHRoYXQgYW55b25lIHdobyB3aWxsIHRha2UgdGhlIHRyb3VibGUgdG8gCmZvbGxvdyBvdXQgaGlzIGRpcmVjdGlvbnMgbWF5IHdpdGggcGVyc2V2ZXJhbmNlIApMY3F1aXJlIHRoYXQgbWVudGFsIGdyYXNwIGxpa2V3aXNlLiBJIGFtIG5vdCBjZXJ0YWluIApwYXQgdGhlIHBvd2VyIHRvIGRvIHRoaXMgaXMgd2l0aGluIHRoZSByZWFjaCBvZiAKZXZlcnlvbmUsIGFzIGhlIHRoaW5rcywgZm9yIGl0IGFwcGVhcnMgdG8gbWUgSm8gcmVxdWlyZSAKLiogY29uc2lkZXJhYmxlIG1hdGhlbWF0aWNhbCBhYmlsaXR5OyBidXQgSSBjYW4gYXQgYW55IAoKClRIUk9VR0hUSCAKCgozOSAKCgpyYXRlIGJlYXIgd2l0bmVzcyB0aGF0IHRoZSB0ZXNzZXJhY3Qgb3IgZm91cnRoLWRpbWVuLWogCnNpb25hbCBjdWJlIHdoaWNoIGhlIGRlc2NuXmVzXmlzKidhIHJlYWxpXlRmb3JeaWEgCgppZS4gSGUgCgoKLiAuIHIgIuKAmElUV2FjaVMgJyAnIMKrIAoKcXVpdGUgYSBmYW1pbGlhciBmaWd1cmUgdXBvbiB0aGUgLCAKaGFzIG5vdyBwZXJmZWN0ZWQgYSBuZXcgbWV0aG9kIG9mIHJlcHJlc2VudGluZyB0aGUgCgoKc2V2ZXJhbCBkaW1lbnNpb25zIGJ5IGNvbG91cnMgaW5zdGVhZCBvZiBieSBhcmJpdHJhcnkgCndyaXR0ZW4gc3ltYm9scy4gSGUgc3RhdGVzIHRoYXQgdGhpcyB3aWxsIHZlcnkgbXVjaCAKc2ltcGxpZnkgdGhlIHN0dWR5LCBhcyB0aGUgcmVhZGVyIHdpbGwgYmUgYWJsZSB0byAKZGlzdGluZ3Vpc2ggaW5zdGFudGx5IGJ5IHNpZ2h0IGFueSBwYXJ0IG9yIGZlYXR1cmUgb2YgCnRoZSB0ZXNzZXJhY3QuIEEgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGlzIG5ldyBtZXRob2QsIAp3aXRoIHBsYXRlcywgaXMgc2FpZCB0byBiZSByZWFkeSBmb3IgdGhlIHByZXNzLCBhbmQgaXMgCmV4cGVjdGVkIHRvIGFwcGVhciB3aXRoaW4gYSB5ZWFyLCBzbyB0aGF0IGludGVuZGluZyAKc3R1ZGVudHMgb2YgdGhpcyBmYXNjaW5hdGluZyBzdWJqZWN0IG1pZ2h0IGRvIHdlbGwgdG8gCmF3YWl0IGl0cyBwdWJsaWNhdGlvbi4gCgpJIGtub3cgdGhhdCBNYWRhbWUgQmxhdmF0c2t5LCBpbiBhbGx1ZGluZyB0byB0aGUgCnRoZW9yeSBvZiB0aGUgZm91cnRoIGRpbWVuc2lvbiwgaGFzIGV4cHJlc3NlZCBhbiAKb3BpbmlvbiB0aGF0IGl0IGlzIG9ubHkgYSBjbHVtc3kgd2F5IG9mIHN0YXRpbmcgdGhlIAppZGVhIG9mIHRoZSBlbnRpcmUgcGVybWVhYmlsaXR5IG9mIG1hdHRlciwgYW5kIHRoYXQgCk1yLiBXLiBULiBTdGVhZCBoYXNmb2xsb3dlZCBhbG9uZyB0aGUgc2FtZSBsaW5lcywgCnByZXNlbnRpbmcgdGhlIGNvbmNlcHRpb24gdG8gaGlzIHJlYWRlcnMgdW5kZXIgdGhlIApuYW1lIG9mIHRocm91Z2h0aCAuIENhcmVmdWwsIG9mdC1yZXBlYXRlZCBhbmQgZGV0YWlsZWQgCmludmVzdGlnYXRpb24gZG9lcywgaG93ZXZlciwgc2VlbSB0byBzaG93IHF1aXRlIGNvbi0gCmNsdXNpdmVseSB0aGF0IHRoaXMgZXhwbGFuYXRpb24gZG9lcyBub3QgY292ZXIgYWxsIHRoZSAKZmFjdHMuIEl0IGlzIGEgcGVyZmVjdCBkZXNjcmlwdGlvbiBvZiBldGhlcmljIHZpc2lvbiwgCmJ1dCB0aGUgZnVydGhlciBhbmQgcXVpdGUgZGlmZmVyZW50IGlkZWEgb2YgdGhlIGZvdXJ0aCAKZGltZW5zaW9uIGFzIGV4cG91bmRlZCBieSBNci4gSGludG9uIGlzIHRoZSBvbmx5IApvbmUgd2hpY2ggZ2l2ZXMgYW55IGtpbmQgb2YgZXhwbGFuYXRpb24gZG93biBoZXJlIApvZiB0aGUgY29uc3RhbnRseS1vYnNlcnZlZCBmYWN0cyBvZiBhc3RyYWwgdmlzaW9uLiBJIAp3b3VsZCB0aGVyZWZvcmUgdmVudHVyZSBkZWZlcmVudGlhbGx5IHRvIHN1Z2dlc3QgdGhhLnQgCgoKNDAgCgoKQ0xBSVJWT1lBTkNFIAoKCnIgCgoKd2hlbiBNYWRhbWUgQmxhdmF0c2t5IHdyb3RlIGFzIHNoZSBkaWQsIHNoZSBoYWQgCmluIG1pbmQgZXRoZXJpYyB2aXNpb24gYW5kIG5vdCBhc3RyYWwsIGFuZCB0aGF0IHRoZSAKZXh0cmVtZSBhcHBsaWNhYmlsaXR5IG9mIHRoZSBwaHJhc2UgdG8gdGhpcyBvdGhlciBhbmQgCmhpZ2hlciBmYWN1bHR5LCBvZiB3aGljaCBzaGUgd2FzIG5vdCBhdCB0aGUgbW9tZW50IAp0aGlua2luZywgZGlkIG5vdCBvY2N1ciB0byBoZXIuIAoKCkkgVGhlIHBvc3Nlc3Npb24gb2YgdGhpcyBleHRyYW9yZGluYXJ5IGFuZCBzY2FyY2VseSAKISBleHByZXNzaWJsZSBwb3dlciwgdGhlbiwgbXVzdCBhbHdheXMgYmUgYm9ybmUgaW4gCgoKaW1pbmQgdGhyb3VnaCBhbGwgdGhhdCBmb2xsb3dzLiBJdCBsYXlzIGV2ZXJ5IHBvaW50IAoneWluIHRoZSBpbnRlcmlvciBvZiBldmVyeSBzb2xpZCBib2R5IGFic29sdXRlbHkgb3BlbiB0byAKdGhlIGdhemUgb2YgdGhlIHNlZXIsIGp1c3QgYXMgZXZlcnkgcG9pbnQgaW4gdGhlIGludGVyaW9yIApvZiBhIGNpcmNsZSBsaWVzIG9wZW4gdG8gdGhlIGdhemUgb2YgYSBtYW4gbG9va2luZyAKZG93biB1cG9uIGl0LiAKCkJ1dCBldmVuIHRoaXMgaXMgYnkgbm8gbWVhbnMgYWxsIHRoYXQgaXQgZ2l2ZXMgdG8gCkkgaXRzIHBvc3Nlc3Nvci4gSGUgc2VlcyBub3Qgb25seSB0aGUgaW5zaWRlIGFzIHdlbGwgYXMgCkkgdGhlIG91dHNpZGUgb2YgZXZlcnkgb2JqZWN0LCBidXQgYWxzbyBpdHMgYXN0cmFsIGNvdW50ZXItIApcaXBhcnQgRXZlcnkgYXRvbSBhbmQgbW9sZWN1bGUgb2YgcGh5c2ljYWwgbWF0dGVyIArigJlXc14naXRzIGNvcnJlc3BvbmRpbmcgYXN0cmFsIGF0b21zIGFuZCBtb2xlY3VsZXMsIAphbmQgdGhlIG1hc3Mgd2hpY2ggaXMgYnVpbHQgdXAgb3V0IG9mIHRoZXNlIGlzIGNsZWFybHkgCnZpc2libGUgdG8gb3VyIGNsYWlydm95YW50LiBVc3VhbGx5IHRoZSBhc3RyYWwgb2YgYW55IApvYmplY3QgcHJvamVjdHMgc29tZXdoYXQgYmV5b25kIHRoZSBwaHlzaWNhbCBwYXJ0IAoKCm9mIGl0LCBhbmQgdGh1cyBtZXRhbHMsIHN0b25lcyBhbmQgb3RoZXIgdGhpbmVecyBhcmUgCnNlZW4gc3VmcmJobmRlZGl3IGFuIGFzdHJhbCBhdXJhLiAKCnUgXyBpIGkgXlRucGlyaWZscm4gbSAKCkl0IHdpbGwgYmUnIHNlZW4gImF0IG9uY2UgdGhhdCBldmVuIGluIHRoZSBzdHVkeSBvZiAKaW5vcmdhbmljIG1hdHRlciBhX2phbiAuLi5nYWlucyBpbWl4aWVvc2VMeS4uLiBqYnkgSmphZSAKYWNxdWlzaXRpb24gb2YgdGhpcyB2aXNpb24uIE5vdCBvbmx5IGRvZXMgaGUgc2VlIHRoZSAKdiBhc3RyYWwgcGFydCBvZiB0aGUgb2JqZWN0IGF0IHdoaWNoIGhlIGxvb2tzLCB3aGljaCAKYWVmb3JlIHdhcyB3aG9sbHkgaGlkZGVuIGZyb20gaGltIDsgbm90IG9ubHkgZG9lcyAKbGUgc8KnZSBtdWNoIG1vcmUgb2YgaXRzIHBoeXNpY2FsIGNvbnN0aXR1dGlvbiB0aGFuIGhlIAoKCkFEVkFOVEFHRVMgT0YgQVNUUkFMIFNJR0hUIAoKCjQxIAoKCmRpZCBiZWZvcmUsIGJ1dCBldmVuIHdoYXQgd2FzIHZpc2libGUgdG8gaGltIGJlZm9yZSB8IAppcyBub3cgc2VlbiBtdWNoIG1vcmUgY2xlYXJseSBhbmQgdHJ1bHkuIEFqIAptb21lbnTigJlzIGNvbnNpZGVyYXRpb24gd2lsbCBzaG93IHRoYXQgaGlzIG5ldyB2aXNpb24gCmFwcHJveGltYXRlcyBtdWNoIG1vcmUgY2xvc2VseSB0byB0cnVlIHBlcmNlcHRpb24gCnRoYW4gZG9lcyBwaHlzaWNhbCBzaWdodC4gRm9yIGV4YWdpcGxlLCBpZiBoZSBsb29rcyBpIAphc3RyYWxseSBhdCBhIGdsYXNzIGN1YmUsIGl0cyBzaWRlcyB3aWxsIGFsbCBhcHBlYXIgZXF1YWwsICogCmFzIHdlIGtub3cgdGhleSByZWFsbHkgYXJlLCB3aGVyZWFzIG9uIHRoZSBwaHlzaWNhbF0gCnBsYW5lIGhlIHNlZXMgdGhlIGZ1cnRoZXIgc2lkZSBpbiBwZXJzcGVjdGl2ZSDigJQgdGhhdCBpcyxeIAppdCBhcHBlYXJzIHNtYWxsZXIgdGhhbiB0aGUgbmVhcmVyIHNpZGUsIHdoaWNoIGlzLCBvZiAxIApjb3Vyc2UsIGEgbWVyZSBpbGx1c2lvbiBkdWUgdG8gaGlzIHBoeXNpY2FsIGxpbWl0YXRpb25zLCB3IAoKV2hlbiB3ZSBjb21lIHRvIGNvbnNpZGVyIHRoZSBhZGRpdGlvbmFsIGZhY2lsaXRpZXMgCndoaWNoIGl0IG9mZmVycyBpbiB0aGUgb2JzZXJ2YXRpb24gb2YgYW5pbWF0ZSBvYmplY3RzIAp3ZSBzZWUgc3RpbGwgbW9yZSBjbGVhcmx5IHRoZSBhZHZhbnRhZ2VzIG9mIHRoZSBhc3RyYWwgCnZpc2lvbi4gSXQgZXhoaWJpdHMgdG8gdGhlIGNsYWlydm95YW50IHRoZSBhdXJhIG9mIApwbGFuanMgYW5kIGFuaW1hbHMsIGFuZCB0aHVzIGluIHRoZSBjYXNlIG9mIHRoZSBsYXR0ZXIgCnRoZWlyIChKZXNUcmVzKl4gYW5kIGVtb3Rpb25zLCBhbmQgd2hhdGV2ZXIgdGhvdWdodHM7IAp0aGV5IG1heSBoYXZlLCBhcmUgYWxsIHBsYWlubHkgc2hvd24g4oCYIGJlZm9yZSBKamlzXSAKZXnigqxzISAiIAoKJyLigKLigJxCdXQgaXQgaXMgaW4gZGVhbGluZyB3aXRoIGh1bWFuIGJlaW5ncyB0aGF0IGhlIHdpbGw7IAptb3N0IGFwcHJlY2lhdGUgdGhlIHZhbHVlIG9mIHRoaXMgZmFjdWx0eSwgZm9yIGhlIHdpbGwsIApvZnRlbiBiZSBhYmxlIHRvIGhlbHAgdGhlbSBmYXIgbW9yZSBlZmZlY3R1YWxseSB3aGVuIApoZSBnaSAKCnRvMS0gCgpIZSB3aWxsIGJlIGFibGUgdG8gc2VlIHRoZSBhdXJhIGFzIGZhciB1cCBhcyB0aGUgCgoqIGFzdHJhbCBib2R5LCBhbmQgdGhvdWdoIHRoYXQgbGVhdmVzIGFsbCB0aGUgaGlnaGVyIHBhcnQgCm9mIGEgbWFuIHN0aWxsIGhpZGRlbiBmcm9tIGhpcyBnYXplLCBoZSB3aWxsIG5ldmVydGhlLSAKbGVzcyBmaW5kIGl0IHBvc3NpYmxlIGJ5IGNhcmVmdWwgb2JzZXJ2YXRpb24gdG8gbGVhcm4gYSAKZ29vZCBkZWFsIGFib3V0IHRoZSBoaWdoZXIgcGFydCBmcm9tIHdoYXQgaXMgd2l0aGluIAoKCmkgSUJTIAoKCjQyIAoKCkNMQUlSVk9ZQU5DRSAKCgpmIAoKCmZoaXMgcmVhY2guIEhpc18gY2FwYWNpdHkgb2YgZXhhbWluaW5nIHRoZSBldGhlcmljIApkb3VibGUgd2lsbCBnaXZlIGhpbSBjb25zaWRlcmFibGUgYWR2YW50YWdlIGluIGxvY2F0aW5nIAouYW5kIGNsYXNzaWZ5aW5nIGFueSBkZWZlY3RzIG9yIGRpc2Vhc2VzIG9mIHRoZSBuZXJ2b3VzIApzeXN0ZW0sIHdoaWxlIGZyb20gdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGFzdHJhbCBib2R5IApoZSB3aWxsIGJlIGF0IG9uY2UgYXdhcmUgb2YgYWxsIHRoZSBlbW90aW9ucywgcGFzc2lvbnMsIApkZXNpcmVzIGFuZCB0ZW5kZW5jaWVzIG9mIHRoZSBtYW4gYmVmb3JlIGhpbSwgYW5kIApeZXZlbiBvZiB2ZXJ5IG1hbnkgb2YgaGlzIHRob3VnaHRzIGFsc28uIAoKQXMgaGUgbG9va3MgYXQgYSBwZXJzb24gaGUgd2lsbCBzZWUgaGltIHN1cnJvdW5kZWQgCmJ5IHRoZSBsdW1pbm91cyBtaXN0IG9mIHRoZSBhc3RyYWwgYXVyYSwgZmxhc2hpbmcgd2l0aCAKaSBhbGwgc29ydHMgb2YgYnJpbGxpYW50IGNvbG91cnMsIGFuZCBjb25zdGFudGx5IGNoYW5naW5nIAp8IGluIGh1ZSBhbmQgYnJpbGxpYW5jeSB3aXRoIGV2ZXJ5IHZhcmlhdGlvbiBvZiB0aGUgCjogcGVyc29u4oCZcyB0aG91Z2h0cyBhbmQgZmVlbGluZ3MuIEhlIHdpbGwgc2VlIHRoaXMgYXVyYSAKZmxvb2RlZCB3aXRoIHRoZSBiZWF1dGlmdWwgcm9zZS1jb2xvdXIgb2YgcHVyZSBhZmZlY3Rpb24sIAp0aGUgcmljaCBibHVlIG9mIGRldm90aW9uYWwgZmVlbGluZywgdGhlIGhhcmQsIGR1bGwgCmJyb3duIG9mIHNlbGZpc2huZXNzLCB0aGVfX2RlZXAgIiJzY2FybGV0IOKAmG9mIGFuZ2VyIHRoZSAKaCdvcnJpQnJlIGx1cmlkIHJlZCBvZiBzZW5zdWFsaXR5LCB0aGUgbGl2aWQgZ3JleSAKeyBpIGJsYWNrIGNsb3VkcyBvZiBIYXRyZWQgYXJpZCBtYWxpY2UsIG9yIGFueSBvZiB0aGUgCn5pOyBhdGJlciBodW5kcmVkZm9sZCBpbmRpY2F0aW9ucyBzbyBlYXNpbHkgdG8gYmUgcmVhZGRuIAp0YnlhIHByYWN0aXNlZCBleWU7IGFuZCB0aHVzIGl0IHdpbGwgYmUgaW1wb3NzaWJsZSAKJ+KAlC1hdXlqZXJzb25zIHRvIGNvbmNlYWwgZnJvbSBoaW5UdGhlIHJlYWwgc3RhdGUgb2YgCmkgdGhlaXIgZmVlbGluZ3N3aVNpeV5zdV5pZWN0XiAKCmxoZXNnIC5ZYW5lZC5tZGljYWxpb25zIG9mIHRoZSBhdXJhLi4gYcKuZy4ub2YgCgrCsGYgLiAuWVN5LmRpY1AtIGludGVyZXN0IGJ1dCBJIGhhXlRubyAKc3BhY2UgdG8gZGVhbCB3aXRoIHRoZW0gaW4gZGV0YWlsIGhlcmUuIEEgbXVjaCAKZnVsbGVyLCBhY2NvdW50IG9mIHRoZW0sIHRvZ2V0aGVyIHdpdGggYSBsYXJnZSBudW1iZXIgKiAKaSBvZiBjb2xvdXJlZCBpbGx1c3RyYXRpb25zLCB3aWxsIGJlIGZvdW5kIGluIG15IHdvcmsgb24gCnRoZSBzdWJqZWN0IE1hbiBWaXNpYmxlIGFuZCBJbnZpc2libGUuIAoKTm90IG9ubHkgZG9lcyB0aGUgYXN0cmFsIGF1cmEgc2hvdyBoaW0gdGhlIAoKCkFVUkEgRVhQUkVTU0VTIENIQVJBQ1RFUiAKCgo0MyAKCgp0ZW1wb3JhcnkgcmVzdWx0IG9mIHRoZSBlbW90aW9uIHBhc3NpbmcgdGhyb3VnaCBpdCBhdCAKdGhlIG1vbWVudCwgYnV0IGl0IGFsc28gZ2l2ZXMgaGltLCBieSB0aGUgYXJyYW5nZW1lbnQgCmFuZCBwcm9wb3J0aW9uIG9mIGl0cyBjb2xvdXJzIHdoZW4gaW4gYSBjb25kaXRpb24gb2YgCmNvbXBhcmF0aXZlIHJlc3QsIGEgY2x1ZSB0byB0aGUgZ2VuZXJhbCBkaXNwb3NpdGlvbiAKYW5kIGNoYXJhY3RlciBvZiBpdHMgb3duZXIuIEZvciB0aGUgYXN0cmFsIGJvZHkgaXMgaiAKdGhlIGV4cHJlc3Npb24gb2YgYXMgbXVjaCBvZiB0aGUgbWFuIGFzIGNhbiBiZSBpIAptYW5pZmVzdGVkIG9uIHRoYXQgcGxhbmUsIHNvIHRoYXQgZnJvbSB3aGF0IGlzIHNlZW4gOyAKaW4gaXQgbXVjaCBtb3JlIHdoaWNoIGJlbG9uZ3MgdG8gaGlnaGVyIHBsYW5lcyBtYXleIApiZSBpbmZlcnJlZCB3aXRoIGNvbnNpZGVyYWJsZSBjZXJ0YWludHkuIAoKSW4gdGhpcyBqdWRnbWVudCBvZiBjaGFyYWN0ZXIgb3VyIGNsYWlydm95YW50IHdpbGwgCmJlIG11Y2ggaGVscGVkIGJ5IHNvIG11Y2ggb2YgdGhlIHBlcnNvbuKAmXMgdGhvdWdodCAKYXMgZXhwcmVzc2VzIGl0c2VsZiBvbiB0aGUgYXN0cmFsIHBsYW5lLCBhbmQgY29uc2UtIApxdWVudGx5IGNvbWVzIHdpdGhpbiBoaXMgcHVydmlldy4gVGhlIHRydWUgCgoKYm9keS4gQnV0IGlmIGl0IGJlIGluIGFueSB3YXkgYSBzZWxqanNoIHRob3VnaHQsIG9yIGlmanwgCml0IGJlIGNvbm5lY3RlZCBpbiBhbnkgd2F5IHdpdGggYW4gZW1vdGlvbiBvciBhLCAKZGVzaXJlLCBpdCBpbW1lZGlhdGVseSBkZWdnUy5vdGp84oCeaW50cS4gLiAudEVjVGFzdHJhbF4gcGxhbmVdIAphbmQgdGFrZXMgdG8gaXRzZWxmIGEgdmlzaWJsZSBmb3JtIG9mIGFzdHJhbCBtYXR0ZXIuIAoKSW4gdGhlIGNhc2Ugb2YgdGhlIG1ham9yaXR5IG9mIG1lbiBhbG1vc3QgYWxsIAp0aG91Z2h0IHdvdWxkIGZhbGwgdW5kZXIgb25lIG9yIG90aGVyIG9mIHRoZXNlIGhlYWRzLCAKc28gdGhhdCBwcmFjdGljYWxseSB0aGUganlqaW9sZS4gb2YgLmxpaWVpaTrCuzQ/P8Kjc29uYWxpZnlqIAp3b3VsZCBsaWUgY2xlYXJseSBiZWZvcmUgb3VyIGZyaWVuZOKAmXMgYXN0cmFsIHZpc2lvbiwgc2luY2UgCnRoZWlyIGFzdHJhbCBib2RpZXMgYW5kIHRoZSB0aG91Z2h0LWZvcm1zIGNvbnN0YW50bHkgCnJhZGlhdGluZ+KAmVRyb20gdGhlbSB3b3VsZCBiZScgdG8gaGltIGFzIGFuIG9wZW4gdG9vayAKaW4gd2hpY2ggdGhlaXIgY2hhcmFjdGVyaXN0aWNzIHdlcmUgd3JpdCBzbyBsYXJnZWx5IHRoYXQgCmhlIHdobyByYW4gbWlnaHQgcmVhZC4gQW55b25lIHdpc2hpbmcgdG8gZ2FpbiAKc29tZSBpZGVhIGFzIHRvIGhvdyB0aGUgdGhvdWdodC1mb3JtcyBwcmVzZW50IHRoYW4gCgoKNDQgCgoKQ0xBSVJWT1lBTkNFIAoKCnNlbHZlcyB0byBjbGFpcnZveWFudCB2aXNpb24gbWF5IHNhdGlzZnkgdGhlbXNlbHZlcyB0byAKc29tZSBleHRlbnQgYnkgZXhhbWluaW5nIHRoZSBpbGx1c3RyYXRpb25zIGFjY29tcGFueS0gClwgaW5nIE1ycy4gQmVzYW504oCZcyB2YWx1YWJsZSBhcnRpY2xlIG9uIHRoZSBzdWJqZWN0IGluIAoKKiBMdWNpZmVyIGZvciBTZXB0ZW1iZXIgMTg5Ni4gCgpXZSBoYXZlIHNlZW4gc29tZXRoaW5nIG9mIHRoZSBhbHRlcmF0aW9uIGluIHRoZSAKYXBwZWFyYW5jZSBvZiBib3RoIGFuaW1hdGUgYW5kIGluYW5pbWF0ZSBvYmplY3RzIAp3aGVuIHZpZXdlZCBieSBvbmUgcG9zc2Vzc2VkIG9mIGZ1bGwgY2xhaXJ2b3lhbnQgCnNpZ2h0IGFzIGZhciBhcyB0aGUgYXN0cmFsIHBsYW5lIGlzIGNvbmNlcm5lZCA7IC5sZXQgdXMgCm5vdyBjb25zaWRlciB3aGF0IGVudGlyZWx5IG5ldyBvYmplY3RzIGhlIHdpbGwgc2VlLiAKSGUgd2lsbCBiZSBjb25zY2lvdXMgb2YgYSBmYXIgZ3JlYXRlciBmdWxuZXNzIGluIG5hdHVyZSAKaW4gbWFueSBkaXJlY3Rpb25zLCBidXQgY2hpZWZseSBoaXMgYXR0ZW50aW9uIHdpbGwgYmUgCmF0dHJhY3RlZCBieSB0aGUgbGl2aW5nIGRlbml6ZW5zIG9mIHRoaXMgbmV3IHdvcmxkLiAKTm8gZGV0YWlsZWQgYWNjb3VudCBvZiB0aGVtIGNhbiBiZSBhdHRlbXB0ZWQgd2l0aGluIAp0aGUgc3BhY2UgYXQgb3VyIGRpc3Bvc2FsIDsgZm9yIHRoYXQgdGhlIHJlYWRlciBpcyByZWZlcnJlZCAKdG8gTm8uIFYuIG9mIHRoZSBUaGVvc29waGljYWwgTWFudWFscy4gSGVyZSB3ZV5hbiAKfCBkbyBubyBtb3JlIHRoYW4gYmFyZWx5IGVudW1lcmF0ZSBhIGZldyBjbGFzc2VzIG9ubHkgCgoqIG9mIHRoZSB2YXN0IGhvc3RzIG9mIGFzdHJhbCBpbmhhYml0YW50cy4gCgoxIEhlIHdpbGwgYmUgaW1wcmVzc2VkIGJ5IHRoZSBwcm90ZWFuIGZvcm1zIFFmIEpqU2UgCmprZ2FzZWxlc3MgYSAxIGVzc2VuY2UsIGV2ZXIgc3dpcmxpbmcgCgpJIGFyb3VuZCBoaW0sIG1lbmFjaW5nIG9mdGVuLCB5ZXQgYWx3YXlzIHJldGlyaW5nIGJlZm9yZSAKfHwgZGV0ZXJtaW5lZCBlZmZvcnRvZiB0aGUsLndpbGwgOyBoZSB3aWxsIG1hcnZlZmFmbHRoZSAKZW5vcm1vdXMgamlubnkgb2YgZW50aXRpZXMgdGVtcG9yYXJpbHleXiAKdGhpcywgb2NlYW4gaW50byBzZXBhcmF0ZSBleGlzdGVuY2UgYnkgdGhedGhvaXlebGl0cyAKYW5kXiB3aXNoZXMgb2YgbWFuLCB3aGV0aGVyIGdvb2Qgb3JeLCBldmlsLiBIZSB3aWxsIAp3YXRjaCB0aGUgbWFuaWZvbGQgdHJpYmVzIG9mIHRoZSBuYXR1cmUtc3Bpcml0cyBhdCB0aGVpciAKd29yayBvciBhdCB0aGVpciBwbGF5OyBoZSB3aWxsIHNvbWV0aW1lcyBiZSBhYmxlIHRvIApeZHkgd2l0aCBldmVyLWluY3JlYXNpbmcgZGVsaWdodCB0aGUgbWFnbmlmaWNlbnQgCmV2Z3RvXiB0aGUgbG93ZXIgb3JkZXJzIG9mIHRoZSBnbG9yaXB1cyAKCgpBU1RSQUwgSU5IQUJJVEFOVFMgCgoKNDUgCgoKa2luZ2RvbSBvZiB0aGUgZGV2YXMsIHdoaWNoIGNvcnJlc3BvbmRzIGFwcHJveGktIAptYXRlbHkgdG8gdGhlIGFuZ2VsaWMgaG9ndCBvZiBDaHJpc3RpYW4gdGVybWlub2xvZ3kuIAoKQnV0IHBlcmhhcHMgb2Yg4oCcZXZlbiBrZWVuZXIgaW50ZXJlc3QgdG8gaGltIHRoYW5eIAoKYW55IG9mIHRoZXNlIHdpbGwgYmUgdGhlIGh1bWFuIGRlbml6ZW5zIG9mIHRoZSBhc3RyYWkgCgosICwgLCAtIC4uLiB+IAoKd29ybGQsIGFuZCBoZSB3aWxsIGZpbmQgdGhlbSBkaXZpc2libGUgaW50byB0d28gZ3JlYV0gCmNsb3NlcyDigJQgdGhvc2Ugd2hvbSB3ZSBjYWxsIHRoZSBKaXZpbmcsIGFuZCB0aG9zZHwgCm90aGVycywgbW9zdCBvZiB0aGVtIGluZmluaXRlbHkgbW9yZSBhbGl2ZSwgd2hvbSB3cXwgCnNvIGZvb2xpc2hseSBtaXNuYS5tZUpoZWpkTGVqaWQuIEFtb25nIHRoZSBmb3JtZTogCmhlIHdpbGwgZmluZCBoZXJlIGFuZCB0aGVyZSBvbmUgO2pkZF4uLnxMd2FrZSBhbmQgZnVsbF7igJkgCmNvbnNjaW91cywgcGVyaGFwcyBzZW50IHRvIGJyaW5nIGhpbSBzb21lIG1lc3NhZ2UsIApvciBleGFtaW5pbmcgaGltIGtlZW5seSB0byBzZWUgd2hhdCBwcm9ncmVzcyBoZSBpcyAKbWFraW5nIDsgd2hpbGdqal5eIG9mIGhpcyBuZWlnaGJvdXJzLCB3aGVuIAoKYXdheSBmcm9tIHRoZWlyIHBoeXNpY2FsIGJvZGllcyBkdXJpbmcgc2xlZXAsIHdpbGwgCmRyaWZ0IGlkbHkgYnksIHNvIHdyYXBwZWQgdXAgaW4gdGhlaXIgb3duIGNvZ2l0YXRpb25zIAoKPiBhcyBmZW8gYmUgcHJhY3RpY2FsbHkgdW5jb25zY2lvdXMgb2Ygd2hhdCBpcyBnb2luZyBwbiAKCmFyb3VuZCB0aGVtLiAKCi8gQW1vbmcgdGhlIGdyZWF0IGhvc3Qgb2YgdGhlXmNeXl5eXiBoZSB3aWxsIApcIGZpbmQgYWxsIGRlZ3JlZXMgb2YgY29uc2Npb3VzbmVzcyBhbmQgaW50ZWxsaWdlbmNlLCBhbmQgCmZhbGwgc2hhZGVzIG9mIGNoYXJhY3RlciDigJQgZm9yIGRlYXRoLCB3aGljaCBzZWVtcyB0byAKCmpwIG1tIMK7IFYgCgpcZ1xpdCBsaW1pdGVkIHZpc2lvbiBzbyBhYnNvbHV0ZSBhIGNoYW5nZSwgaW4gcmVhbGl0eSBpIAphbHRlcnMgbm90aGluZyBvZiB0aGUgbWFuIGhpbXNlbGYuIE9uIHRoZSBkYXkgYWZ0ZXIgCmhpcyBkZWF0aCBoZSBpcyBwcmVjaXNlbHkgdGhlIHNhbWUgbWFuIGFzaGUgd2FzIHRoZSAKCuKAmCAndiB0IC0gaWYg4oCiIOKAmSDigJggJyA8alcgJyDigKIgSiAsQXQsIAoKb2Vmb3JlIGl0LCB3aXRoIHRoZSBzYW1lIGRpc3Bvc2l0aW9uLCB0aGUgc2FtZSAKcXVhbGl0aWVzLCB0aGUgc2FtZSB2aXJ0dWVzIGFuZCB2aWNlcywgc2F2ZSBvbmx5IHRoYXQgCmhlIGhhcyBjYXN0IGFzaWRlIGhpcyBwaHlzaWNhbCBib2R5OyBidXQgdGhlIGxvc3MgbzogCnRoYXQgbm8gbW9yZSBtYWtlcyBoaW0gaW4gYW55IHdheSBhIGRpZmZlcmVudCAn4oCcbWFuIAp0aGFuKiB3b3VsZCB0aGUgcmVtb3ZhbCBvZiBhbiBvdmVyY29hdC4gU28gYW1vbmcgdGhlIApkZWFkJnVyIHN0dWRlbnQgd2lsbCBmaW5kIG1lbiBpbnRlbGxpZ2VudCBhbmQgc3R1cGlkLCAKCgouIOKWoCAvLCAjIAoiai9MIAoKCjQ2IAoKCkNMQUlSVk9ZQU5DRSAKCgrigKJpaSB2IAp2ai0+IAoKdiAKCgpraW5kLWhlYXJ0ZWQgYW5kIG1vcm9zZSwgc2VyaW91cyBhbmQgZnJpdm9sb3VzLCAKc3Bpcml0dWFsbHktbWluZGVkIGFuZCBzZW5zdWFsbHktbWluZGVkLCBqdXN0IGFzIAphbW9uZyB0aGUgbGl2aW5nLiAKClNpbmNlIGhlIGNhbiBub3Qgb25seSBzZWUgdGhlIGRlYWQsIGJ1dCBzcGVhay4uLiB2Xml0aCAKO2hlbSwgaGUgY2FuIG9mdGVuIGJlIG9mIHZlcnkgZ3JlYXQgdXNlIHRvIHRoZW1eYW5kIApeaXZlIHRoZW0gaW5mb3JtYXRpb24gYW5kIGd1aWRhbmNlIHdoaWNoIGlzIG9mIHRoZSAKcnRtb3N0IHZhbHVlIHRvIHRoZW0uIE1hbnkgb2YgdGhlbSBhcmUgaW4gYSBjb24tIApkaXRpb24gb2YgZ3JlYXQgc3VycHJpc2UgYW5kIHBlcnBsZXhpdHksIGFuZCBzb21lLSAKdGltZXMgZXZlbiBvZiBhY3V0ZSBkaXN0cmVzcywgYmVjYXVzZSB0aGV5IGZpbmQgdGhlIApmYWN0cyBvZiB0aGUgbmV4dCB3b3JsZCBzbyB1bmxpa2UgdGhlIGNoaWxkaXNoIGxlZ2VuZHMgCndoaWNoIGFyZSBhbGwgdGhhdCBwb3B1bGFyIHJlbGlnaW9uIGluIHRoZSBXZ2d0IGhhcyB0byAKVjUgb2ZmZXIgd2l0aCByZWZlcmVuY2UgdG8gdGhpcyB0cmFuc2NlbmRlbnRseSBpbXBvcnRhbnQgCnN1YmplY3QgOyBhbmQgdGhlcmVmb3JlIGEgbWFuIHdobyB1bmRlcnN0YW5kcyB0aGlzIApuZXcgd29ybGQgYW5kIGNhbiBleHBsYWluIG1hdHRlcnMgaXMgZGlzdGluY3RseSBhIApmcmllbmQgaW4gbmVlZC4g4oCiIAoKSW4gbWFueSBvdGhlciB3YXlzIGEgbWFuIHdobyBmdWxseSBwb3NzZXNzZXMgCnRoaXMgZmFjdWx0eSBtYXkgYmUgb2YgdXNlIHRvIHRoZSBsaXZpbmcgYXMgd2VsbCBhcyB0byAKdGhlIGRlYWQ7IGJ1dCBvZiB0aGlzIHNpZGUgb2YgdGhlIHN1YmplY3QgSSBoYXZlIAphbHJlYWR5IHdyaXR0ZW4gaW4gbXkgbGl0dGxlIGJvb2sgb24gSW52aXNpYmxlIEhlbHBlcnMgLiAKCgpYIAoKCkl0aSBhZGRpdGlvbiB0byBhc3RyYWwgZW50aXRpZXMgaGUgd2lsbCBzZWUgYXN0cmFsIGNvcmdzZV4gCgoK4oCUc2hhZGVzIGFuZCBzaGVsbHMgaW4gYWxsIHN0YWdlcyBwZiBkZWNheTsgYnV0IHRoZXNlIApuZWVkIG9ubHkgYmUganVzdCBtZW50aW9uZWQgaGVyZSwgYXMgdGhlIHJlYWRlciAKZGVzaXJpbmcgYSBmdXJ0aGVyIGFjY291bnQgb2YgdGhlbSB3aWxsIGZpbmQgaXQgaW4gb3VyIApmaGlyZCBhbmQgZmlmdGggbWFudWFscy4gCgpBbm90aGVyIHdvbmRlcmZ1bCByZXN1bHQgd2hpY2ggdGhlIGZ1bGwgZW5qb3ltZW50IApjbGFpcnZveWFuY2UgYnJpbmdzIHRvIGEgbWFuIGlzIHRoYXQgaGUgaGFzIApfSnBuZ2VyIGFueSBicmVhayBpbiBjb25zY2lvdXNuZXNzLiBXaGVuIGhlIGxpZXMgClNTbk1uaWdeJ2ZpZScgbGVhdmVzICJmZXJwaHlzaWNhaSIgYm9keSB0aXAgdGhlIHJlc3QiIAoKCkkgTCAKCgpNQUdOSUZZSU5HIFBPV0VSIAoKCjQ3IAoKClkoaGljaCBpdCByZXF1aXJlcywgd2hpbGUgaGUgZ29lcyBhYm91dCBoaXMgYnVzaW5lc3MgCmluIHRoZSBmYXIgbW9yZSBjb21mb3J0YWJsZSBhc3RyYWwgdmVoaWNsZS4gSW4gdGhlIAptb3JuaW5nIGhlIHJldHVybnMuIHRvIGFuZCByZS1lbnRlcnMgaGlzIHBoeXNpY2FsIGJvZHksIApidXQgd2l0aG91dCBhbnkgbG9zcyBvZiBjb25zY2lvdXNuZXNzXlFYaS4uIG1lbW9yeSAKYmV0d2VlbiB0aGUgdHdvIHN0YXRlcywgYW5kIHRodXMgaGUgaXMgYWJsZSB0byBsaXZlLCBhcyAKaXQgd2VyZSwgYSBkb3VibGUgbGlmZSB3aGljaCB5ZXQgaXMgb25lLCBhbmQgdG8gYmUgdXNlLWogCmZ1bGx5IGVtcGxveWVkIGR1cmluZyB0aGUgd2hvbGUgb2YgaXQsIGluc3RlYWQgb2YgbG9zaW5nIApvbmUtdGhpcmQgb2YgaGlzIGV4aXN0ZW5jZSBpbiBibGFuayB1bmNvbnNjaW91c25lc3MuIAoKQW5vdGhlciBzdHJhbmdlIHBvd2VyIG9mIHdoaWNoIGhlIG1heSBmaW5kIGhpbS0gCnNlbGYgaW4gcG9zc2Vzc2lvbiAodGhvdWdoIGl0cyBmdWxsIGNvbnRyb2wgYmVsb25ncyAKcmF0aGVyIHRvIHRoZSBzdGlsbCBoaWdoZXIgZGV2YWNoYW5pYyBmYWN1bHR5KSwgaXMgdGhhdCAKb2YgbWFnbmlmeWluZyBhdCB3aWxsIHRoZSBtaW51dGVzdCBwaHlzaWNhbCBvciBhc3RyYWxdIAoKXlNmaXBpd2lzd2lpKl4gCgpzY29wZSDigJQgdGhvdWdoIG5vIG1pY3Jvc2NvcGUgZXZlciBtYWRlIFFpTGpCZ1AqISAKCi3igKIgbGlrZWx5IHRvIGJlIG1hZGUgcG9zc2Vzc2VzIGV2ZW4gYSB0aG91c2FuZHRoIHBhOiAKCm9mIHRoaWcgaHMgdmNNIEJ5IGl0cyBtZWFucyB0aGUgCgpoeXBvdGhldGljYWwgbW9sZVF1bC5eYW4gZC4gYXRvbSBwb3N0dWxhdGVkIGJ5c2NpZW5jPCAKYmVjb21lIHZpc2libGUgYW5kIGxpdmluZyByZWFsaXRpZXMgdG8gdGhlIG9jY3VsIApzdHVkZW50LCBhbmQgb24gdGhpcyBjbG9zZXIgZXhhbWluYXRpb24gaGUgZmluZHMgdGhlOiAKdG8gYmUgbXVjaCBtb3JlIGNvbXBsZXggaW4gdGhlaXIgc3RydWN0dXJlIHRoYW4gdGhlISAKc2NpZW50aWZpYyBtYW4gaGFzIHlldCByZWFsaXNlZCB0aGVtIHRvIGJlLiBJdCBhbHNvZiAKZW5hYmxlcyBoaW0gdG8gZm9sbG93IHdpdGggdGhlIGNsb3Nlc3QgYXR0ZW50aW9uIGFuZCAKdGhlIG1vc3QgbGl2ZWx5IGludGVyZXN0IGFsbCBraW5kcyBvZiBlbGVjdHJpY2FsLF4gCm0gbWFnbmV0aWMsIGFuZCBvdGhlciBldGhlcmljIGFjdGlvbiA7IGFuZCB3aGVuIHNvbWUqLSAKb2YgdGhlIHNwZWNpYWxpc3RzIGluIHRoZXNlIGJyYW5jaGVzIG9mIHNjaWVuY2UgYXJlIGFibGUgCnRvIGRldmVsb3AgdGhlIHBvd2VyIHRvIHNlZSB0aG9zZSB0aGluZ3Mgd2hlcmVvZiB0aGV5XiAKd3JpdGUgc28gZmFjaWxlbHksIHNvbWUgdmVyeSB3b25kZXJmdWwgYW5kIGJlYXV0aWZ1bCAKcmV2ZWxhdGlvbnMgbWF5IGJlIGV4cGVjdGVkLiAKCi4gMS4gNHUgJiBJWCBLTSogSy0gbCBLIiBeIDEgKiAlICUqKiAqIAoKCmYtfnZ2ICoqIF4gMSouICpadGprIHNqIAoKcC4uPiAKCgoxLiAqIAoKCjQ4IAoKCkNMQUlSVk9ZQU5DRSAKCgpUaGlzIGlzIG9uZSBvZiB0aGUgc2lkZGhpcyBvciBwb3dlcnMgZGVzY3JpYmVkIGluIApPcmllbnRhbCBib29rcyBhcyBhY2NydWluZyB0byB0aGUgbWFuIHdobyBkZXZvdGVzIApoaW1zZWxmIHRvIHNwaXJpdHVhbCBkZXZlbG9wbWVudCwgdGhvdWdoIHRoZSBuYW1lIAp1bmRlciB3aGljaCBpdCBpcyB0aGVyZSBtZW50aW9uZWQgbWlnaHQgbm90IGJlIAoKCmxpbW1lZGlhdGVseSByZWNvZ25pemFibGUuIEl0IGlzIHJlZmVycmVkIHRvIGFzIOKAnCB0aGUgLCAKRG93ZXIgb2YgbWFraW5nIG9uZXNlbGYgbGFyZ2Ugb3JfIHNtYWxsIGF0IHdpbGws4oCdIGFuZCAKfGZjaGUgcmVhc29uIG9mIGEgZGVzY3JpcHRpb24gd2hpY2ggYXBwZWFycyBzbyBvZGRseSB0byAKanJldmVyc2UgdGhlIGZhY3QgaXMgdGhhdCBpbiByZWFsaXR5IHRoZSBtZXRob2QgYnkgCmdoaWNoIC50aGlzLCBmZWF0IGlzLCAucGVyZm9yZ2lnZCwgaXNeZV5sai9KaGF0XmluU2ouLSAKYmF0ZWQgaW4gdGhlc15hXmVyal5eZ29rcy4gSXQgaXMgYnkgdGhlIHVzZSBvZiAKbGVtcG9yYXJ5IHZpc3VhbCBtYWNoaW5lcnkgb2YgaW5jb25jZWl2YWJsZSBtaW51dGUtIApuZXNzIHRoYXQgdGhlIHdvcmxkIG9mIHRoZSBpbmZpbml0ZWx5IGxpdHRsZSBpcyBzbyBjbGVhcmx5IApzZWVuIDsgYW5kIGluIHRoZSBzYW1lIHdheSAob3IgcmF0aGVyIGluIHRoZSBvcHBvc2l0ZSAKd2F5KSBpdCBpcyBieSB0ZW1wb3JhcmlseSBlbm9ybW91c2x5IGluY3JlYXNpbmcgdGhlIApzaXplIG9mIHRoZSBtYWNoaW5lcnkgdXNlZCB0aGF0IGl0IGJlY29tZXMgcG9zc2libGUgCnRvIGluY3JlYXNlIHRoZSBicmVhZHRoIG9mIG9uZSdzIHZpZXcg4oCUIGluIHRoZSBwaHlzaWNhbCAKc2Vuc2UgYXMgd2VsbCBhcywgbGV0IHVzIGhvcGUsIGluIHRoZSBtb3JhbCDigJQgZmFyIGJleW9uZCAKYW55dGhpbmcgdGhhdCBzY2llbmNlIGhhcyBldmVyIGRyZWFtdCBvZiBhcyBwb3NzaWJsZSAKZm9yIG1hbi4gU28gdGhhdCB0aGUgYWx0ZXJhdGlvbiBpbiBzaXplIGlzIHJlYWxseSBpbiAKdGhlIHZlaGljbGUgb2YgdGhlIHN0dWRlbnQncyBjb25zY2lvdXNuZXNzLCBhbmQgbm90IGluIAoKZiBhbnl0aGluZyBvdXRzaWRlIG9mIGhpbXNlbGYgOyBhbmQgdGhlIG9sZCBPcmllbnRhbCBib29rIAp0aWFzLCBhZnRlciBhbGwsIHB1dCB0aGUgY2FzZSBtb3JlIGFjY3VyYXRlbHkgdGhhbiB3ZS4gCgpQc3ljaG9tZXRyeSBhbmQgc2Vjb25kLXNpZ2h0IEpMeWkgZXhjZWxzaXMuIHdvdWxkIAphbHNvICcgYmUqIGFtbyBuZ3RoVGxhY1Mgd291bGQgCgpmaW5kIGF0IGhpcyBjb21tYW5kIDsgYnV0IHRob3NlIHdpbGwgYmUgbW9yZSBmaXRseSAKZGVhbHQgd2l0aCB1bmRlciBhIGxhdGVyIGhlYWRpbmcsIHNpbmNlIGluIGFsbW9zdCBhbGwgCnRoZWlyIG1hbmlmZXN0YXRpb25zIHRoZXkgaW52b2x2ZSBjbGFpcnZveWFuY2UgZWl0aGVyIAppbiBzcGFjZSBvciBpbiB0aW1lLiAKCgpESVJFQ1QgS05PV0xFREdFIAoKCjQ5IAoKCkkgaGF2ZSBub3cgaW5kaWNhdGVkLCB0aG91Z2ggb25seSBpbiB0aGUgcm91Z2hlc3QgCm91dGxpbmVzLCB3aGF0IGEgdHJhaW5lZCBzdHVkZW50LCBwb3NzZXNzZWQgb2YgZnVsbCAKYXN0cmFsIHZpc2lvbiwgd291bGQgc2VlIGluIHRoZSBpbW1lbnNlbHkgd2lkZXIgd29ybGQgCnRvIHdoaWNoIHRoYXQgdmlzaW9uIGludHJvZHVjZWQgaGltOyBidXQgSSBoYXZlIApzYWlkIG5vdGhpbmcgb2YgdGhlIHN0dXBlbmRvdXMgY2hhbmdlIGluIGhpcyBtZW50YWwgCmF0dGl0dWRlIHdoaWNoIGNvbWVzIGZyb20gdGhlIGV4cGVyaWVudGlhbCBjZXJ0YWludHkgCmFzIHRvIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHNvdWwsIGl0cyBzdXJ2aXZhbCBhZnRlciBkZWF0aCwgaiAKdGhlIGFjdGlvbiBvZiB0aGUgbGF3IG9mIGthcm1hLCBhbmQgb3RoZXIgcG9pbnRzIG9mIAplcXVhbGx5IHBhcmFtb3VudCBpbXBvcnRhbmNlLiBUaGUgZGlmZmVyZW5jZSBiZS0gCnR3ZWVuIGV2ZW4gdGhlIHByb2ZvdW5kZXN0IGludGVsbGVjdHVhbCBjb252aWN0aW9uIHYgCmFuZCB0aGUgcHJlY2lzZSBrbm93bGVkZ2UgZ2FpbmVkIGJ5IGRpcmVjdCBwZXJzb25hbCAKZXhwZXJpZW5jZSBtdXN0IGJlIGZlbHQgaW4gb3JkZXIgdG8gYmUgYXBwcmVjaWF0ZWQuIAoKCuKAoiDigKIgCgoKZiAKCgpDSEFQVEVSIElJSS4gCgoKU2ltcGxlIENsYWlydm95YW5jZTogUGFydGlhbC4gCgoKVGhlIGV4cGVyaWVuY2VzIG9mIHRoZSB1bnRyYWluZWQgY2xhaXJ2b3lhbnQg4oCUIGFuZCAKYmUgaXQgcmVtZW1iZXJlZCB0aGF0IHRoYXQgY2xhc3MgaW5jbHVkZXMgYWxsIApFdXJvanBeYW4gXmNsYWlydm95YW50cyBfIGV4Y2VwdCBhIF4gdmVyXmZldyDigJQgd2lsbCwgaG93LSAKZXZlciwgdXN1YWxseSBmYWxsIHZlcnkgZmFyIHNuV3Qgb2Ygd2hhdCBJIGhhdmUgCmF0dGVtcHRlZCB0byBpbmRpY2F0ZSA7IHRoZXkgd2lsTWFsbCBzaG9ydCBpbiBtYW55IAoKbCBhbmQgYWJvdmUgYWxsIGluIHByZWNpc2lvbi4gCgpTb21ldGltZXMsIGZvciBleGFtcGxlLCBhIG1hbidzIGNsYWlydm95YW5jZSAKd2lsbCBiZSBwZXJtYW5lbnQsIGJ1dCB2ZXJ5IHBhcnRpYWwsIGV4dGVuZGluZyAjb25seSAKcGVyaGFwcyB0byBvbmUgb3IgdHdvIGNsYXNzZXMgb2YgdGhlIHBoZW5vbWVuYSAKb2JzZXJ2YWJsZTsgaGUgd2lsbCBmaW5kIGhpbXNlbGYgZW5kb3dlZCB3aXRoIHNvbWUgCmlzb2xhdGVkIGpmaV5MZ21lbnQgb2YgaGlnaGVyIHZpc2lvbiwgd2l0aG91dCBhcHBhcmVudGx5IApwb3NzZXNzaW5nIG90aGVyIHBvd2VycyBvZiBzaWdodCB3aGljaCBvdWdodCBub3JtYWxseSAKdG8gYWNjb21wYW55IHRoYXQgZnJhZ21lbnQsIG9yIGV2ZW4gdG8gcHJlY2VkZSBpdCAKRm9yIGV4YW1wbGUsIG9uZSBvZiBteSBkZWFyZXN0IGZyaWVuZHMgaGFzIGFsbCBoaXMgCmxpZmUgaGFkIHRoZSBwb3dlciB0byBzZWUgdGhlIGF0b21pYyBldGhlciBhbmQgYXRvbWljIAphc3RyYWwgbWF0dGVyLCBhbmQgdG8gcmVjb2duaXplIHRoZWlyIHN0cnVjdHVyZSwgYWxpa2UgCmluIGRhcmtuZXNzIG9yIGluIGxpZ2h0LCBhcyBpbnRlcnBlbmV0cmF0aW5nIGV2ZXJ5dGhpbmcgCgplbHNlIDsgeWV0IGhlIGhhcyBvbmx5IHJhcmVseSBzZWVuIGVudGl0aWVzIHdob3NlIGJvZGllcyAKCjXCsCAKCgphcmUgY29tcG9zZWQgb2YgdGhlIG11Y2ggbW9yZSBvYnZpb3VzIGxvd2VyIGV0aGVycyAKb3IgZGVuc2VyIGFzdHJhbCBtYXR0ZXIsIGFuZCBhdCBhbnkgcmF0ZSBpcyBjZXJ0YWlubHkgCm5vdCBwZXJtYW5lbnRseSBhYmxlIHRvIHNlZSB0aGVtLiBIZSBzaW1wbHkgZmluZHMgCmhpbXNlbGYgaW4gcG9zc2Vzc2lvbiBvZiB0aGlzIHNwZWNpYWwgZmFjdWx0eSwgd2l0aG91dCAKYW55IGFwcGFyZW50IHJlYXNvbiB0byBhY2NvdW50IGZvciBpdCwgb3IgYW55IHJlY29nLSAKbml6YWJsZSByZWxhdGlvbiB0byBhbnl0aGluZyBlbHNlIDogYW5kIGJleW9uZCBwcm92aW5nIAp0byBoaW0gdGhlIGV4aXN0ZW5jZSBvZiB0aGVzZSBhdG9taWMgcGxhbmVzIGFuZCAKZGVtb25zdHJhdGluZyB0aGVpciBhcnJhbmdlbWVudCwgaXQgaXMgZGlmZmljdWx0IHRvIHNlZSAKb2Ygd2hhdCBwYXJ0aWN1bGFyIHVzZSBpdCBpcyB0byBoaW0gYXQgcHJlc2VudCBTdGlsbCwgCnRoZXJlIHRoZSB0aGluZyBpcywgYW5kIGl0IGlzIGFuIGVhcm5lc3Qgb2YgZ3JlYXRlciAKdGhpbmdzIHRvIGNvbWUg4oCUIG9mIGZ1cnRoZXIgcG93ZXJzIHN0aWxsIGF3YWl0aW5nIApkZXZlbG9wbWVudCAKClRoZXJlIGFyZSBtYW55IHNpbWlsYXIgY2FzZXMg4oCUIHNpbWlsYXIsIEkgbWVhbiwgbm90IAppbiB0aGUgcG9zc2Vzc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgZm9ybSBvZiBzaWdodCAKIyAod2hpY2ggaXMgdW5pcXVlIGluIG15IGV4cGVyaWVuY2UpLCBidXQgaW4gc2hvd2luZyAKdGhlIGRldmVsb3BtZW50IG9mIHNvbWUgb25lIHNtYWxsIHBhcnQgb2YgdGhlIGZ1bGwgCmFuZCBjbGVhciB2aXNpb24gb2YgdGhlIGFzdHJhbCBhbmQgZXRoZXJpYyBwbGFuZXMuIEluIApuaWk/ZSBjYXNlcyBvdXQgb2YgdGVuLCBob3dldmVyLCBzdWNoIHBhcnRpYWwgY2xhaXItIAp2b3lhbmNlIHdpbGwgYXQgdGhlIHNhbWUgdGltZSBsYWNrIHByZWNpc2lvbiBhbHNvIOKAlCAKdGhhdCBpcyB0byBzYXksIHRoZXJlIHdpbGwgQmUgYSBnb29kIGRlYWwgb2YgdmFndWUgISAKaW1wcmVzc2lvbiBhbmQgaW5mZXJlbmNlIGFib3V0IGl0LCBpbnN0ZWFkIG9mIHRoZSAKY2xlYXItY3V0IGRlZmluaXRpb24gYW5kIGNlcnRhaW50eSBvZiB0aGUgdHJhaW5lZCBtYW4uIApFeGFtcGxlcyBvZiB0aGlzIHR5cGUgYXJlIGNvbnN0YW50bHkgdG8gYmUgZm91bmQsIApeZXNwZWNpYWxseSBhbW9uZyB0aG9zZSB3aG8gYWR2ZXJ0aXNlIHRoZW1zZWx2ZXMgYXMgCuKAnCB0UWd0IGFuZCBidXNpbmVzcyBjbGFpcnZveWFudHMu4oCdIAoKVGhlbiwgYWdhaW4sIHRoZXJlIGFyZSB0aG9zZSB3aG8gYXJlIG9ubHkgdGVybi0gCnBvcmFyaWx5IGNsYWlydm95YW50LiB1bmRlciBjZXJ0YWluIHNnZWNpYWwgY29uZGl0aW9ucy4gCidBbW9uZyB0aGVzZSB0aGVyZSBhcmUgdmFyaW91cyBzdWJkaXZpc2lvbnMsIHNvbWUgCgoKNTIgCgoKQ0xBSVJWT1lBTkNFIAoKCmJlaW5nIGFibGUgdG8gcmVwcm9kdWNlIHRoZSBzdGF0ZSBvZiBjbGFpcnZveWFuY2UgCmF0IHdpbGwgYnkgYWdhaW4gc2V0dGluZyB1cCB0aGUgc2FtZSBjb25kaXRpb25zLCAKd2hpbGUgd2l0aCBvdGhlcnMgaXQgY29tZXMgc3BvcmFkaWNhbGx5LCB3aXRob3V0IGFueSAKb2JzZXJ2YWJsZSByZWZlcmVuY2UgdG8gdGhlaXIgc3Vycm91bmRpbmdzLCBhbmQgd2l0aCAKeWV0IG90aGVycyB0aGUgcG93ZXIgc2hvd3MgaXRzZWxmIG9ubHkgb25jZSBvciB0d2ljZSAKaW4gdGhlIHdob2xlIGNvdXJzZSBvZiB0aGVpciBsaXZlcy4gCgpUbyB0aGUgZmlyc3Qgb2YgdGhlc2Ugc3ViZGl2aXNpb25zIGJlbG9uZyB0aG9zZSB3aG8gCmFyZSBjbGFpcnZveWFudCBvbmx5IHdoZW4gaW4gdGhlIG1lc21lcmljIHRyc3lhZmlmaS0g4oCUIAp3aG8gd2hlbiBub3Qgc28gZW50cmFuY2VkIGFyZSBpbmNhcGFibGUgb2Ygc2VlaW5nIApvciBoZWFyaW5nIGFueXRoaW5nIGFibm9ybWFsLiBUaGVzZSBtYXkgc29tZS0gCnRpbWVzIHJlYWNoIGdyZWF0IGhlaWdodHMgb2Yga25vd2xlZGdlIGFuZCBiZSAKZXhjZWVkaW5nbHkgcHJlY2lzZSBpbiB0aGVpciBpbmRpY2F0aW9ucywgYnV0IHdoZW4gCnRoYXQgaXMgc28gdGhleSBhcmUgdXN1YWxseSB1bmRlcmdvaW5nIGEgY291cnNlIG9mIApyZWd1bGFyIHRyYWluaW5nLCB0aG91Z2ggZm9yIHNvbWUgcmVhc29uIHVuYWJsZSBhcyAKeWV0IHRvIHNldCB0aGVtc2VsdmVzIGZyZWUgZnJvbSB0aGUgbGVhZGVuIHdlaWdodCBvZi4gCmVhcnRobHkgbGlmZSB3aXRob3V0IGFzc2lzdGFuY2UuIAoKSW4gdGhlIHNhbWUgY2xhc3Mgd2UgbWF5IHB1dCB0aG9zZSDigJQgY2hpZWZseSAKT3JpZW50YWxzIOKAlCB3aG8gZ2FpbiBzb21lIHRlbXBvcmFyeSBzaWdodCBmbG5sdiAKdXBkZXIgdGhlIGluZmx1ZW5jZSBvZiBjZXJ0YWluIGRydWdzLCBvciBieSBtZWFucyBvZiAKdGhlIHBlcmZvcm1hbmNlIG9mIGNlcnRhaW4gY2VyZW1vbmllcy4gVGhlIGNlcmUtIAptb25pYWxpc3Qgc29tZXRpbWVzIGh5cG5vdGl6ZXMgaGltc2VsZiBieSBoaXMgCnJlcGV0aXRpb25zLCBhbmQgaW4gdGhhdCBjb25kaXRpb24gYmVjb21lcyB0byBzb21lIApleHRlbnQgY2xhaXJ2b3lhbnQgOyBtb3JlIG9mdGVuIGhlIHNpbXBseSByZWR1Y2VzIAoxIGhpbXNlbGYgdG8gYSBwYXNzaXZlIGNvbmRpdGlvbiBpbiB3aGljaCBzb21lIG90aGVyIApqIGVudGl0eSBjYW4gb2JzZXNzIGhpbSBhbmQgc3BlYWsgdGhyb3VnaCBoaW0uIFNvbWUtIAp0aW1lcywgYWdhaW4sIGhpcyBjZXJlbW9uaWVzIGFyZSBub3QgaW50ZW5kZWQgdG8gYWZmZWN0IApoaW1zZWxmIGF0IGFsbCwgYnV0IHRvIGludm9rZSBzb21lIGFzdHJhbCBlbnRpdHkgd2hvIAp3aWxsIGdpdmUgaGltIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbjsgYnV0IG9mIGNvdXJzZSAKCgpVTkRFU0lSQUJMRSBDTEFJUlZPWUFOQ0UgCgoKUzMgCgoKdGhhdCBpcyBhIGNhc2Ugb2YganJpYWdpYywgYW5kIG5vdCBvZiBjbGFpcnZveWFuY2UuIApCb3RoIHRoZSBkcnVncyBhbmQnbWUgY2VyZW1vbmllcyBhcmUgbWV0aG9kXiAKZW1waGF0aWNhbGx5IHRvIGJlIGF2b2lkZWQgQnkgYW55IG9uZSB3aG8gd2lzaGVzISAKdG8gYXBwcm9hY2ggY2xhaXJ2b3lhbmNlIGZyb20gdGhlIGhpZ2hlciBzaWRlLCBhbsKuIAoKdWlhSlVhciBKdXN1YWFhdWpqZ15zOy4gYW5kIC5eTGZlXkpeamFXJytmIAoKVGhlIENlbnRyYWwgQWZyaWNhbiBtZWRpY2luZS1tYW4gb3Igd2l0Y2gtIFwgCmRvY3RvciBhbmQgc29tZSBvZiB0aGUgVGFydGFyIFNoYW1hbnMgYXJlIGdvb2QgXSAKZXhhbXBsZXMgb2YgdGhlIHR5cGUuIAoKVGhvc2UgdG8gd2hvbSBhIGNlcnRhaW4gYW1vdW50IG9mIGNsYWlydm95YW50IApwb3dlciBoYXMgY29tZSBvY2Nhc2lvbmFsbHkgb25seSwgYW5kIHdpdGhvdXQgYW55IApyZWZlcmVuY2UgdG8gdGhlaXIgb3duIHdpc2gsIGhhdmUgb2Z0ZW4gYmVlbiBoeXN0ZXJpY2FsIApvciBoaWdobHkgbmVydlFVUyBwZXJzb25zLCB3aXRoIHdob20gdGhlIGZhY3VsdHkgCndhcyB0byBhIGxhcmdlIGV4dGVudCBvbmUgb2YgdGhlIHN5bXB0b21zIG9mIGEgCmRpc2Vhc2UuIEl0cyBhcHBlYXJhbmNlIHNob3dlZCB0aGF0IHRoZSBwaHlzaWNhbCAK4oCiIHZlaGljbGUgd2FzIHdlYWtlbmVkIHRvIHN1Y2ggYSBkZWdyZWUgdGhhdCBpdCBubyAKbG9uZ2VyIHByZXNlbnRlZCBhbnkgb2JzdGFjbGUgaW4gdGhlIHdheSBvZiBhIGNlcnRhaW4gCm1vZGljdW0gb2YgZXRoZXJpYyBvciBhc3RyYWwgdmlzaW9uLiBBbiBleHRyZW1lIApleGFtcGxlIG9mIHRoaXMgY2xhc3MgaXMgdGhlIG1hbiB3aG8gZHJpbmtzIGhpbXNlbGYgCmludG8gZGVsaXJpdW0gdHJlbWVucywgYW5kIGluIHRoZSBjb25kaXRpb24gb2YgeSAKYWJzb2xqdSZTTDReIHBzeWNoaWMgZXhjaXQmdGlwbiAKCmJyb3VnaHQgYWJvdXQgYnkgdGhlIHJhdmFnZXMgb2YgdGhhdCBmZWxsIGRpc2Vhc2UsIGlzIAphYmxlIHRvIHNlZSBmb3IgdGhlIHRpbWUgc29tZSBvZiB0aGUgbG9hdGhzb21lIAplbGVtZW50YWwgYW5kIG90aGVyIGVudGl0aWVzIHdoaWNoIGhlIGhhcyBkcmF3biAKI3JvdW5kIGhpbXNlbGYgYnkgaGlzIGxvbmcgY291cnNlIG9mIGRlZ3JhZGVkIGFuZCBKIApiZXN0aWFsIGluZHVsZ2VuY2UuIFRoZXJlIGFyZSwgaG93ZXZlciwgb3RoZXIgY2FzZXMgCndoZXJlIHRoZSBwb3dlciBvZiBzaWdodCBoYXMgYXBwZWFyZWQgYW5kIGRpcy0gCmFwcGVhcmVkIHdpdGhvdXQgYXBwYXJlbnQgcmVmZXJlbmNlIHRvIHRoZSBzdGF0ZSBvZiAKdGhlIHBoeXNpY2FsIGhlYWx0aCA7IGJ1dCBpdCBzZWVtcyBwcm9iYWJsZSB0aGF0IGV2ZW4gCgoKNTQgCgoKQ0xBSVJWT1lBTkNFIAoKCmluIHRob3NlLCBpZiB0aGV5IGNvdWxkIGhhdmUgYmVlbiBvYnNlcnZlZCBjbG9zZWx5IAplbm91Z2gsIHNvbWUgYWx0ZXJhdGlvbiBpbiB0aGUgY29uZGl0aW9uIG9mIHRoZSAKZXRoZXJpYyBkb3VibGUgd291bGQgaGF2ZSBiZWVuIG5vdGljZWQuIAoKVGhvc2Ugd2hvIGhhdmUgb25seSBvbmUgaW5zdGFuY2Ugb2YgY2xhaXJ2b3lhbmNlIAp0byByZXBvcnQgaW4gdGhlIHdob2xlIG9mIHRoZWlyIGxpdmVzIGFyZSBhIGRpZmZpY3VsdCAKYmFuZCB0byBjbGFzc2lmeSBhdCBhbGwgZXhoYXVzdGl2ZWx5LCBiZWNhdXNlIG9mIHRoZSAKZ3JlYXQgdmFyaWV0eSBvZiB0aGUgY29udHJpYnV0b3J5IGNpcmN1bXN0YW5jZXMuIApUaGVyZSBhcmUgbWFueSBhbW9uZyB0aGVtIHRvIHdob20gdGhlIGV4cGVyaWVuY2UgCmhhcyBjb21lIGF0IHNvbWUgc3VwcmVtZSBtb21lbnQgb2YgdGhlaXIgbGl2ZXMsIAp3aGVuIGl0IGlzIGNvbXByZWhlbnNpYmxlIHRoYXQgdGhlcmUgbWlnaHQgaGF2ZSBiZWVuIAphIHRlbXBvcmFyeSBleGFsdGF0aW9uIG9mIGZhY3VsdHkgd2hpY2ggd291bGQgYmUgCnN1ZmZpY2llbnQgdG8gYWNjb3VudCBmb3IgaXQuIAoKSW4gdGhlIGNhc2Ugb2YgYW5vdGhlciBzdWJkaXZpc2lvbiBvZiB0aGVtIHRoZSAKc29saXRhcnkgY2FzZSBoYXMgYmVlbiB0aGUgc2VlaW5nIG9mIGFuIGFwcGFyaXRpb24sIAptb3N0IGNvbW1vbmx5IG9mIHNvbWUgZnJpZW5kIOKAmSBvciDigJwgcmVsYXRpdmUgYXQgdGhlIDwgCnBvaW50IG9mIGRlYXRoLiBUd28gcG9zc2liaWxpdGllcyBhcmUgdGhlbiBvZmZlcmVkIAoKZm9yIG91ciBjaG9pY2UsIGFuZCBpbiBlYWNoIG9mIHRoZW0gdGhlIHN0cm9uZy4gd2lzaC4gCgpvZiB0aGUgZHlpbmcgLW1hbiBpYSwgSmhlIFRoYXQgZm9yY2UgCgptYXkgaGF2ZSBlbmFibGVkIGhpbSB0byBtYXRlcmlhbGl6ZSBoaW1zZWxmIGZvciBhIAptb21lbnQsIGluIHdoaWNoIGNhc2Ugb2YgY291cnNlIG5vIGNsYWlydm95YW5jZSAKd2FzIG5lZWRlZCA7IG9yIG1vcmUgcHJvYmFibHkgaXQgdm1heSBoYXZlIGFjdGVkIApqbWVzbWVyXiBhbmRtb21lbnRhcmlseSAKCjReIGR1bGxlZCBoaXMgcGh5c2ljYWwgYW5kIHN0aW11bGF0ZWQgaGhoaWdoZXIgc2Vuc2l0aXZlLSAKbmVzIEluIGVpdGhlciBjYXNlIHRoZSB2aXNpb24gaXMgdGhlIHByb2R1Y3Qgb2YgdGhlICwgCmVtZXJnZW5jeSwgYW5kIGlzIG5vdCByZXBlYXRlZCBzaW1wbHkgYmVjYXVzZSB0aGUgCm5lY2Vzc2FyeSBjb25kaXRpb25zIGFyZSBub3QgcmVwZWF0ZWQuIAoKVGhlcmUgcmVtYWlucywgaG93ZXZlciwgYW4gaXJyZXNvbHZhYmxlIHJlc2lkdXVtIApvZiBjYXNlcyBpbiB3aGljaCBhIHNvbGl0YXJ5IGluc3RhbmNlIG9jY3VycyBvZiB0aGUgCgoKQ09OQ0VSTklORyBJTlZFU1RJR0FUSU9OIAoKCjU1IAoKCmV4ZXJjaXNlIG9mIHVuZG91YnRlZCBjbGFpcnZveWFuY2UsIHdoaWxlIHlldCB0aGUgCm9jY2FzaW9uIHNlZW1zIHRvIHVzIHdob2xseSB0cml2aWFsIGFuZCB1bmltcG9ydGFudC4gCkFib3V0IHRoZXNlIHdlIGNhbiBvbmx5IGZyYW1lIGh5cG90aGVzZXMgOyB0aGUgCmdvdmVybmluZyBjb25kaXRpb25zIGFyZSBldmlkZW50bHkgbm90IG9uIHRoZSBwaHlzaWNhbCAKcGxhbmUsIGFuZCBhIHNlcGFyYXRlIGludmVzdGlnYXRpb24gb2YgZWFjaCBjYXNlIHdvdWxkIApiZSBuZWNlc3NhcnkgYmVmb3JlIHdlIGNvdWxkIHNwZWFrIHdpdGggYW55IGNlcnRhaW50eSAKYXMgdG8gaXRzIGNhdXNlcy4gSW4gc29tZSBzdWNoIGl0IGhhcyBhcHBlYXJlZCB0aGF0IAphbiBhc3RyYWwgZW50aXR5IHdhcyBlbmRlYXZvdXJpbmcgdG8gbWFrZSBzb21lIApjb21tdW5pY2F0aW9uLCBhbmQgd2FzIGFibGUgdG8gaW1wcmVzcyBvbmx5IHNvbWUgCnVuaW1wb3J0YW50IGRldGFpbCBvbiBpdHMgc3ViamVjdCDigJQgYWxsIHRoZSB1c2VmdWwgb3IgCnNpZ25pZmljYW50IHBhcnQgb2Ygd2hhdCBpdCBoYWQgdG8gc2F5IGZhaWxpbmcgdG8gZ2V0IAp0aHJvdWdoIGludG8gdGhlIHN1YmplY3QncyBjb25zY2lvdXNuZXNzLiAKCkluIHRoZSBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBwaGVub21lbmEgb2YgY2xhaXJ2b3ktIAphbmNlIGFsbCB0aGVzZSB2YXJpZWQgdHlwZXMgYW5kIG1hbnkgb3RoZXJzIHdpbGwgYmUgCmVuY291bnRlcmVkLCBhbmQgYSBjZXJ0YWluIG51bWJlciBvZmpjYXNlcyBvZiBtZXJlLyB5IApoYWxsdWNpbmF0aW9uIHdpbGwgYmUgYWxtb3N0IGpzdXJlIHRvIGFwcGVhciBhbHNvLCBhbmQgCndpbGwgaGF2ZSB0byBiZSBjYXJlZnVsbHkgd2VlZGVkIG91dCBmcm9tIHRoZSBsaXN0IG9mIApleGFtcGxlcy4gVGhlIHN0dWRlbnQgb2Ygc3VjaCBhIHN1YmplY3QgbmVlZHMgYW4gCmluZXhoYXVzdGlibGUgZnVuZCBvZiBwYXRpZW5jZSBhbmQgc3RlYWR5IHBlcnNldmVyLSAKYW5jZSwgYnV0IGlmIGhlIGdvZXMgb24gbG9uZyBlbm91Z2ggaGUgd2lsbCBiZWdpbiBWIAoKQSAKCgpkaW1seSB0byBkaXNjZXJuIG9yZGVyIGJlaGluZCB0aGUgY2hhb3MsIGFuZCB3aWxqIApncmFkdWFsbHkgZ2V0IHNvbWUgaWRlYSBvZiB0aGUgZ3JlYXQgbGF3cyB1bmNqaXIsIAp3aGljaCB0aGUgd2hvbGUgZXZvbHV0aW9uIGlzIHdvcmtpbmcuIAoKSXQgd2lsbCBoZWxwIGhpbSBncmVhdGx5IGluIGhpcyBlZmZvcnRzIGlmIGhlIHdpbGwgCmFkb3B0IHRoZSBvcmRlciB3aGljaCB3ZSBoYXZlIGp1c3QgZm9sbG93ZWQg4oCUIHRoYXQgCmlzLCBpZiBoZSB3aWxsIGZpcnN0IHRha2UgdGhlIHRyb3VibGUgdG8gZmFtaWxpYXJpemUgCmhpbXNlbGYgYXMgdGhvcm91Z2hseSBhcyBtYXkgYmUgd2l0aCB0aGUgYWN0dWFsIApmYWN0cyBjb25jZXJuaW5nIHRoZSBwbGFuZXMgd2l0aCB3aGljaCBvcmRpbmFyeSAKCgo1NiAKCgpDTEFJUlZPWUFOQ0UgCgoKZiAKCgpjbGFpcnZveWFuY2UgZGVhbHMuIElmIGhlIHdpbGwgbGVhcm4gd2hhdCB0aGVyZSByZWFsbHkgCmlzIHRvIGJlIHNlZW4gd2l0aCBhc3RyYWwgYW5kIGV0aGVyaWMgc2lnaHQsIGFuZCB3aGF0IAp0aGVpciByZXNwZWN0aXZlIGxpbWl0YXRpb25zIGFyZSwgaGUgd2lsbCB0aGVuIGhhdmUsIGFzIAppdCB3ZXJlLCBhIHN0YW5kYXJkIGJ5IHdoaWNoIHRvIG1lYXN1cmUgdGhlIGNhc2VzIAp3aGljaCBoZSBvYnNlcnZlcy4gU2luY2UgYWxsIGluc3RhbmNlcyBvZiBwYXJ0aWFsIApzaWdodCBtdXN0IG9mIG5lY2Vzc2l0eSBmaXQgaW50byBzb21lIG5pY2hlIGluIHRoaXMgCndob2xlLCBpZiBoZSBoYXMgdGhlIG91dGxpbmUgb2YgdGhlIGVudGlyZSBzY2hlbWUgaW4gCmhpcyBoZWFkIGhlIHdpbGwgZmluZCBpdCBjb21wYXJhdGl2ZWx5IGVhc3kgd2l0aCBhIApsaXR0bGUgcHJhY3RpY2UgdG8gY2xhc3NpZnkgdGhlIGluc3RhbmNlcyB3aXRoIHdoaWNoIGhlIAppcyBjYWxsZWQgdXBvbiB0byBkZWFsLiAKCiwgV2UgaGF2ZSBzYWlkIG5vdGhpbmcgYXMgeWV0IGFzIHRvIHRoZSBzdGlsbCBtb3JlIAoKLCB3b25kZXJmdWwgcG9zc2liaWxpdGllcyBvXjwgamNsYWlydm95YW5jZSAuIC4udXBwYSB0aGUgCgrigKIgY2VudGFsIHBsYW5lLCBub3IgaW5kZWVkIGlzIGl0IG5lY2Vzc2FyeSB0aGF0IG11Y2ggCmkgc2hvdWxkIGJlIHNhaWQsIGFzIGl0IGlzIGV4Y2VlZGluZ2x5IGltcHJvYmFibGUgdGhhdCAKaSB0aGUgaW52ZXN0aWdhdG9yIHdpbGwgZXZlciBtZWV0IHdpdGggYW55IGV4YW1wbGVeIG9mIAo7IGl0IGV4Y2VwdCBhbW9uZyBwdXBpbHMgcHJvcGVybHkgdHJhaW5lZCBpbiBzb21lIG9mIAoKSSBoZSB2ZXJ5IGhpZ2hlc3Qgc2Nob29scyBvZiBvY2N1bHRpc20uIEZvciB0aGVtIGl0IApwZW5zIHVwIHlldCBhbm90aGVyIG5ldyB3b3JsZCwgdmFzdGVyIGZhciB0aGFuIHNFbEwgCmFvc2UgYmVuZWF0aCBpdOKAlCBhIHdvcmxkIGluIHdoaWNoIGFsbCB0aGF0IHdlIGNhbiAKbmFnaW5lIG9mIHV0bW9zdCBnbG9yeSBhbmQgc3BsZW5kb3VyIGlzIHRoZSBjb21tb24tIApsYWNlIG9mIGV4aXN0ZW5jZS4gU29tZSBhY2NvdW50IG9mIGl0cyBtYXJ2ZWxsb3VzIAphY3VpdHksIGl0cyBlbmVmZmFibGUgYmxpc3MsIGl0cyBtYWduaWZpY2VudCBvcHBvcnR1bml0aWVzIApeSl5ybmluXmFtZCBmb3Igd29yaywgaXMgZ2l2ZW4gaW4gdGhlIHNpeHRoIG9mIApeVGhlb3NvcGhpZXMgYW5kIHRvIHRoYXQgdGhlIHN0dWRlbnQgCgpsYXkgYmUgcmVmZXJyZWQuIAoKPiBBbGwgdGhhdCBpdCBoYXMgdG8gZ2l2ZeKAlCBhbGwgb2YgaXQgYXQgbGVhc3QgdGhhdCBoZSBjYW4gCl5Tc2ltaWxhdGUg4oCUIGlzIHdpdGhpbiB0aGUgcmVhY2ggb2YgdGhlIHRyYWluZWQgcHVwaWwsIAo7ajsgZm9yIHRoZSB1bnRyYWluZWQgY2xhaXJ2b3lhbnQgdG8gdG91Y2ggaXQgaXMgCgoKSElHSEVSIENMQUlSVk9ZQU5DRSAKCgo1NyAKCgpoYXJkbHkgbW9yZSB0aGFuIGEgYmFyZSBwb3NzaWJpbGl0eS4gSXQgaGFzIGJlZW4gCgpkb25lIGluIG1lc21lcmljIHRyYW5jZSwgYnV0IHRoZSBvY2N1cnJlbmNlIGlzIG9mXiAKCmV4Y2VlZGluZyByYXJpdHksIGZvciBpdCBuZWVkcyBhbG1vc3Qgc3VwZXJodW1hbiAKCnF1YWxpZmljYXRpb25zIG0gdGhlIHdheSBvZmlvZnR5IHNwaXJpdHU7IAoKYW5kIGFic29sdXRlIHB1cml0eSBvZiB0aG91U210bGFuZCBpbnRlbnRpb24gdXBvbiEgCgpyIOKWoCAxIAoKdGhlIHBhcnQgYm90aCBvZiB0aGUgc3ViamVjdCBhbmQgdGhlIG9wZXJhdG9yLiAKClRvIGEgdHlwZSBvZiBjbGFpcnZveWFuY2Ugc3VjaCBhcyB0aGlzLCBhbmQgc3RpbGwgCm1vcmUgZnVsbHkgdG8gdGhhdCB3aGljaCBiZWxvbmdzIHRvIHRoZSBwbGFuZSBuZXh0IAphYm92ZSBpdCwgdGhlIG5hbWUgb2Ygc3Bpcml0dWFsIHNpZ2h0IG1heSByZWFzb25hYmx5IGJlIAphcHBsaWVkIDsgYW5kIHNpbmNlIHRoZSBjZWxlc3RpYWwgd29ybGQgdG8gd2hpY2ggaXQgCm9wZW5zIG91ciBleWVzIGxpZXMgYWxsIHJvdW5kIHVzIGhlcmUgYW5kIG5vdywgaXQgaXMgCgoKZml0IHRoYXQgb3VyIHBhc3NpbmcgcmVmZXJlbmNlIHRvIGl0IHNob3VsZCBiZSBtYWRlIAp1bmRlciB0aGUgaGVhZGluZyBvZiBzaW1wbGUgY2xhaXJ2b3lhbmNlLCB0aG91Z2ggaXQgCm1heSBiZSBuZWNlc3NhcnkgdG8gYWxsdWRlIHRvIGl0IGFnYWluIHdoZW4gZGVhbGluZyAKKiB3aXRoLCBjbGFpcnZveWFuY2UgaW4gc3BhY2UsIHRvIHdoaWNoIHdlIHdpbGwgbm93IApwYXNzIG9uLiAKCgpDSEFQVEVSIElWLiAKCgpDbGFpcnZveWFuY2UgaW4gU3BhY2U6IEludGVudGlvbmFsLiAKCldlIGhhdmUgZGVmaW5lZCB0aGlzIGFzIHRoZSBjYXBhY2l0eSB0byBzZWUgZXZlbnRzIApvciBzY2VuZXMgcmVtb3ZlZCBmcm9tIHRoZSBzZWVyIGluIHNwYWNlIGFuZCB0b28tSkVhciAKZGlzdGFudCBmb3Igb3JkaW5hcnkgb2JzZXJ2YXRpb24uIFRoZSBpbnN0YW5jZXMgb2YgCnRoaXMgYXJlIHNvIG51bWVyb3VzIGFuZCBzbyB2YXJpb3VzIHRoYXQgd2Ugc2hhbGwgCmZpbmQgaXQgZGVzaXJhYmxlIHRvIGF0dGVtcHQgYSBzb21ld2hhdCBtb3JlIGRldGFpbGVkIApjbGFzc2lmaWNhdGlvbiBvZiB0aGVtLiBJdCBkb2VzIG5vdCBtdWNoIG1hdHRlciB3aGF0ICogCnBhcnRpY3VsYXIgYXJyYW5nZW1lbnQgd2UgYWRvcHQsIHNvIGxvbmcgYXMgaXQgaXMgCmNvbXByZWhlbnNpdmUgZW5vdWdoIHRvIGluY2x1ZGUgYWxsIG91ciBjYXNlcyA7IApwZXJoYXBzIGEgY29udmVuaWVudCBvbmUgd2lsbCBiZSB0byBncm91cCB0aGVtIHVuY0plciAKdGhlIGJyb2FkIGRpdmlzaW9ucyBvZiBpbnRlbnRpb25hbCBhbmQgLCB8IHVuaW50ZW50aW9eIApkYWleb15hbmNlbSBzcGFjZSwgd2l0aCBhbiBpbnRlcm1lZGlhdGUgY2xhc3MgdGhhdCAKbWlnaHQgYmUgZGVzY3JpYmVkIGFzIHNlbWktaW50ZW50aW9uYWwg4oCUIGEgY3VyaW91cyAKdGl0bGUsIGJ1dCBJIHdpbGwgZXhwbGFpbiBpdCBsYXRlci4gCgpBcyBiZWZvcmUsIEkgd2lsbCBiZWdpbiBieSBzdGF0aW5nIHdoYXQgaXMgcG9zc2libGUgCmFsb25nIHRoaXMgbGluZSBmb3IgdGhlIGZ1bGx5LXRyYWluZWQgc2VlciwgYW5kIGVuLSBeIAoqIGRlYXZvdXJpbmcgdG8gZXhwbGFpbiBob3cgaGlzIGZhY3VsdHkgd29ya3MgYW5kIAoKPsKr4oCiKsKlLS0gcm53IG5yIGkgfmkgOiByLTwtciByeC1yaXItbiBtdCBpIDogaTtmbiAKCnVuZGVyIHdoYXQgbGltaXRhdGlvbnMgaXQgYWN0cy4gQWZ0ZXIgdGhhdCB3ZSBzaGFsbCAKCmZpbmQgb3Vyc2VsdmVzIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIHRyeSB0byB1bmRlcnN0YW5kIAoKdGhlIG1hbmlmb2xkIGV4YW1wbGVzIG9mIHBhcnRpYWwgYW5kIHVudHJhaW5lZCBzaWdodC4gCgo1OCAKCgpTRUVJTkcgQVQgQSBESVNUQU5DRSAKCgo1OSAKCgpMZXQgdXMgdGhlbiBpbiB0aGUgZmlywqd0IHBsYWNlIAoKY2xzXmNlLSBeIAoKSXQgd2lsbCBiZSBvYnZpb3VzIGZyb20gd2hhdCBoYXMgcHJldmlvdXNseSBiZWVyIApzYWlkIGFzIHRvIHRoZSBwb3dlciBvZiBhc3RyYWwgdmlzaW9uIHRoYXQgYW55IG8+bmQgCnBvc3Nlc3NpbmcgaXQgaW4gaXRzIGZ1bG5lc3Mgd2lsbCBiZSBhYmxlIHRvIHNlZSBieSBpdCEgCm1lYW5zIHByYWN0aWNhbGx5IGFueXRoaW5nIGluIHRoaXMgd29ybGQgdGhhdCBobSAKd2lzaGVzIHRnIHNlZS4gVGhlIG1vc3Qgc2VjcmV0IHBsYWNlcyBhcmUgb3BlbiB0byAKaGlzIGdhemUsIGFuZCBpbnRlcnZlbmluZyBvYnN0YWNsZXMgaGF2ZSBubyBleGlzdGVuY2UgCmZvciBoaW0sIGJlY2F1c2Ugb2YgdGhlIGNoYW5nZSBpbiBoaXMgcG9pbnQgb2YgdmlldyA7IApzbyB0aGF0IGlmIHdlIGdyYW50IGhpbSB0aGUgcG93Jkwgb2YuICxyYW95aW5naiomUWlqdCAKaW4gdGhlIGFzdHJhbCBib2R5IGhlIGNhbiB3aXRob3V0IGRpZmZpY3VsdHkgCmFueXdoZXJlIGFuZCBzZWUgYW55dGhpbmcgd2l0aGluIHRoZSBsaW1pdHMgb2YgdGhlOiAKCgpwbGFuZXQuIEluZGVlZCB0aGlzIGlzIHRvIGEgbGFyZ2UgZXh0ZW50IHBvc3NpYmxlIHRvbCAKaGltIGV2ZW4gd2l0aG91dCB0aGUgbmVjZXNzaXR5IG9mIG1vdmluZyB0aGUgYXN0cmFmIApib2R5IGF0IGFsbCwgYXMgd2Ugc2hhbGwgcHJlc2VudGx5IHNlZS4gCgpMZXQgdXMgY29uc2lkZXIgYSBsaXR0bGUgbW9yZSBjbG9zZWx5IHRoZSBqbmV0aG9kcyAKCgpiXiB3aGljaCB0aGlzIHN1cGVyXmh5J3NpY2QgdG8gCgpvYnNlcnZlIGV2ZW50cyB0YWtpbmcgcGxhY2UgYXQgYSBkaXN0YW5jZS4gV2hlbiwgCmZvciBleGFtcGxlLCBhIG1hbiBoZXJlIGluIEVuZ2xhbmQgc2VlcyBpbiBtaW51dGVzdCAKZGV0YWlsIHNvbWV0aGluZyB3aGljaCBpcyBoYXBwZW5pbmcgYXQgdGhlIHNhbWUgCm1vbWVudCBpbiBJbmRpYSBvciBBbWVyaWNhLCBob3cgaXMgaXQgZG9uZT8gCgpBIHZlcnkgaW5nZW5pb3VzIGh5cG90aGVzaXMgaGFzIGJlZW4gb2ZmZXJlZCB0byAKYWNjb3VudCBmb3IgdGhlIHBoZW5vbWVub24uIEl0IGhhcyBiZWVuIHN1Z2dlc3RlZCAKdGhhdCBldmVyeSBvYmplY3QgaXMgcGVycGV0dWFsbHkgdGhyb3dpbmcgb2ZmIHJhZGlhdGlvbnMgCmluIGFsbCBkaXJlY3Rpb25zLCBzaW1pbGFyIGluIHNvbWUgcmVzcGVjdHMgdG8sIHRob3VnaCAKW2luZmluaXRlbHkgZmluZXIgdGhhbiwgcmF5cyBvZiBsaWdodCwgYW5kIHRoYXQgY2xhaXJ2b3ktIAphbmNlIGlzIG5vdGhpbmcgYnV0IHRoZSBwb3dlciB0byBzZWUgYnkgbWVhbnMgb2YgCgoKdGhlc2U7IGZpbmVyIHJhZGlhdGlvbnMuIERpc3RhbmNlIHdvdWxkIGluIHRoYXQgY2FzZSAKCgpmIAoKCjYwIENMQUlSVk9ZQU5DRSAKCmJlIG5vIGJhciB0byB0aGUgc2lnaHQsIGFsbCBpbnRlcnZlbmluZyBvYmplY3RzIHdvdWxkIApiZSBwZW5ldHJhYmxlIGJ5IHRoZXNlIHJheXMsIGFuZCB0aGV5IHdvdWxkIGJlIGFibGUgCnRvIGNyb3NzIG9uZSBhbm90aGVyIHRvIGluZmluaXR5IGluIGFsbCBkaXJlY3Rpb25zIAp3aXRob3V0IGVudGFuZ2xlbWVudCwgcHJlY2lzZWx5IGFzIHRoZSB2aWJyYXRpb25zIG9mLSAKb3JkaW5hcnkgbGlnaHQgZG8uIAoKTm93IHRob3VnaCB0aGlzIGlzIG5vdCBleGFjdGx5IHRoZSB3YXkgaW4gd2hpY2ggCmNsYWlydm95YW5jZSB3b3JrcywgdGhlIHRoZW9yeSBpcyBuZXZlcnRoZWxlc3MgLnF1aXRlIAp0cnVlLCBpbiBtb3N0IG9mIGl0cyBwcmVtaXNlcy4gRXZlcnkgb2JqZWN0IHVuLSAK4pagIGRvdWJ0ZWRseSBpcyB0aHJvd2luZyBvZmYgcmFkaWF0aXBucyBpbiBhbGwgZGlyZWN0aW9ucywgCmFuZCBpdCBpcyBwcmVjaXNlbHkgaW4gdGhpcyB3YXksIHRob3VnaCBvbiBhIGhpZ2hlciAKSSBwbGFuZSwgdGhhdCB0aGUgYWthc2hpYyByZWNvcmRzIHNlZW0gdG8gYmUgZm9ybWVkLiAKCk9mIHRoZW0gaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gc2F5IHNvbWV0aGluZyB1bmRlciAKb3VyIG5leHQgaGVhZGluZywgc28gd2Ugd2lsbCBkbyBubyBtb3JlIHRoYW4gCm1lbnRpb24gdGhlbSBmb3IgdGhlIG1vbWVudC4gVGhlIHBoZW5vbWVuYSBvZiAKcHN5Y2hvbWV0cnkgYXJlIGFsc28gZGVwZW5kZW50IHVwb24gdGhlc2UgcmFkaWF0aWVucywgKiAKYXMgd2lsbCBwcmVzZW50bHkgYmUgZXhwbGFpbmVkLiAKClRoZXJlIGFyZSwgaG93ZXZlciwgY2VydGFpbiBwcmFjdGljYWwgZGlmZmljdWx0aWVzIGluIAp0aGUgd2F5IG9mIHVzaW5nIHRoZXNlIGV0aGVyaWMgdmlicmF0aW9ucyAoZm9yIHRoYXQgaXMsIApvZiBjb3Vyc2UsIHdoYXQgdGhleSBhcmUpIGFzIHRoZSBtZWRpdW0gYnkgbWVhbnMgb2YgCndoaWNoIG9uZSBtYXkgc2VlIGFueXRoaW5nIHRha2luZyBwbGFjZSBhdCBhIGRpc3RhbmNlLiAKSW50ZXJ2ZW5pbmcgb2JqZWN0cyBhcmUgbm90IGVudGlyZWx5IHRyYW5zcGFyZW50LCBhbmQgCmFzIHRoZSBhY3RvcnMgaW4gdGhlIHNjZW5lIHdoaWNoIHRoZSBleHBlcmltZW50ZXIgdHJpZWQgCnRvIG9ic2VydmUgd291bGQgcHJvYmFibHkgYmUgYXQgbGVhc3QgZXF1YWxseSB0cmFucy0gCnBhcmVudCwgaXQgaXMgb2J2aW91cyB0aGF0IHNlcmlvdXMgY29uZnVzaW9uIHdvdWxkIGJlIG0gCnF1aXRlIGxpa2VseSB0byByZXN1bHQuIAoKdCBUaGUgYWRkaXRpb25hbCBkaW1lbnNpb24gd2hpY2ggd291bGQgY29tZSBpbnRvIApbcGxheSBpZiBhc3RyYWwgcmFkaWF0aW9ucyB3ZXJlIHNlbnNlZCBpbnN0ZWFkIG9mIGV0aGVyaWMgClsgd291bGQgb2J2aWF0ZSBzb21lIG9mIHRoZSBkaWZmaWN1bHRpZXMsIGJ1dCB3b3VsZCBvbiAKCgpJTlZPQ0FUSU9OIEFORCBFVk9DQVRJT04gNiAxIAoKdGhlIG90aGVyIGhhbmQgaW50cm9kdWNlIHNvbWUgZnJlc2ggY29tcGxpY2F0aW9ucyBvZiAKaXRzIG93biA7IHNvIHRoYXQgZm9yIHByYWN0aWNhbCBwdXJwb3NlcywgaW4gZW5kZWF2b3VyLSBqIAppbmcgdG8gdW5kZXJzdGFuZCBjbGFpcnZveWFuY2UsIHdlIG1heSBkaXNtaXNzIHRoaXMgCmh5cG90aGVzaXMgb2YgcmFkaWF0aW9ucyBmcm9tIG91ciBtaW5kcywgYW5kIHR1cm4gdG8gaiAKdGhlIG1ldGhvZHMgb2Ygc2VlaW5nIGF0IGEgZGlzdGFuY2Ugd2hpY2ggYXJlIGFjdHVhbGx5IDsgCmF0IHRoZSBkaXNwb3NhbCBvZiB0aGUgc3R1ZGVudCBJdCB3aWxsIGJlIGZvdW5kIHRoYXQgCnRoZXJlIGFyZSBmaXZlLCBmb3VyIG9mIHRoZW0gYmVpbmcgcmVhbGx5IHZhcmlldGllcyBvZiBJIApjbGFpcnZveWFuY2UsIHdoaWxlIHRoZSBmaWZ0aCBkb2VzIG5vdCBwcm9wZXJseSBjb21lIGogCnVuZGVyIHRoYXQgaGVhZCBhdCBhbGwsIGJ1dCBiZWxvbmdzIHRvIHRoZSBkb21haW4gb2ZmIAptYWdpYy4gTGV0IHVzIHRha2UgdGhpcyBsYXN0IG9uZSBmaXJzdCwgYW5kIGdldCBpdCBvdXQgSiAKb2Ygb3VyIHdheS4gCgpJIC5CeSB0aGUgYXNzaXN0YW5jZSDigJQgVGhpcyBtZXRob2QgCmRvZXMgbm90IG5lY2Vzc2FyaWx5IGludm9sdmUgdGhlIHBvc3Nlc3Npb24gb2YgYW55IApwc3ljaGljIGZhY3VsdHkgYXQgYWxsIG9uIHRoZSBwYXJ0IG9mIHRoZSBleHBlcmltZW50ZXIgOyAKCiogaGUgamllZWQgb25seSBrbm93IGhvdyB0byBpbmR1Y2Ugc29tZSBkZW5pemVuIG9mIAp0aGUgYXN0cmFsIHdvcmxkIHRvIHVuZGVydGFrZSB0aGUgaW52ZXN0aWdhdGlvbiBmb3IgCmhpbS4gVGhpcyBtYXkgYmUgZG9uZSBlaXRoZXIgYnkgaW52b2NhdGlvbiBvciAuLmJ5IApeZ2ZvY2F0aW9uIDsgdGhhdCBpcyB0byBzYXksIHRoZSBvcGVyYXRvciBtYXkgZWl0aGVyIApwZXJzdWFkZSBoaXMgYXN0cmFsIGNvYWRqdXRvciBieSBwcmF5ZXJzIGFuZCBvZmZlcmluZ3MgCnRvIGdpdmUgaGltIHRoZSBoZWxwIGhlIGRlc2lyZXMsIG9yIGhlIG1heSBjb21wZWwgaGlzIAphaWQgYnkgdGhlIGRldGVybWluZWQgZXhlcmNpc2Ugb2YgYSBoaWdobHktZGV2ZWxvcGVkIAp3aWxsLiAKClRoaXMgbWV0aG9kIGhhcyBiZWVuIGxhcmdlbHkgcHJhY3Rpc2VkIGluIHRoZSBFYXN0IApeICh3aGVyZSB0aGUgZW50aXR5IGVtcGxveWVkIGlzIHVzdWFsbHkgYSBuYXR1cmUtc3Bpcml0KSAKYW5kIGluIDBJNCBKXmpkJm50aXMsIHdoZXJlIOKAnCB0aGUgbG9yZHMgb2YgdGhlIGRhcmsgZmFjZSDigJ0gLSAKCnVzZWQgYSBoaWdobHktc3BlY2lhbGl6ZWQgYW5kIHBlY3VsaWFybHkgeWVub21vbnMgXiDigKIgCmVsZW1lbnRhbCwgZm9yIHRoaXMgcHVycGhzZS4gSW4tIApmb3JtYXRpb24gaXMgc29tZXRpbWVzIG9idGFpbmVkIGluIHRoZSBzYW1lIHNvcnQgb2YgCgoKNjIgCgoKQ0xBSVJWT1lBTkNFIAoKCndheSBhdCB0aGUgc3Bpcml0dWFsaXN0aWMgc3RhbmNlIG9mIG1vZGVybiBkYXlzLCBidXQgaW4gCnRoYXQgY2FzZSB0aGUgbWVzc2VuZ2VyIGVtcGxveWVkIGlzIG1vcmUgbGlrZWx5IHRvIApiZSBhIHJlY2VudGx5LWRlY2Vhc2VkIGh1bWFuIGJlaW5nIGZ1bmN0aW9uaW5nIG1vcmUgCiVvciBsZXNzIGZyZWVseSBvbiB0aGUgYXN0cmFsIHBsYW5lIOKAlCB0aG91Z2ggZXZlbiBoZXJlIAphbHNvIGl0IGlzIHNvbWV0aW1lcyBhbiBvYmxpZ2luZyBuYXRUT14gLiAKCnwgYW11c2luZyBoaW1zZWxmIGJ5IHBvc2luZyBhcyBzb21lYm9keSdzIGRlcGFydGVkIApcIHJlbGF0aXZlLiBJbiBhbnkgY2FzZSwgLiBhcyBJIGhhdmUgc2FpZCwgdGhpcyBtZXRob2QgaXMgCm5vdCBjbGFpcnZveWFudCBhdCBhbGwsIGJ1dCBtYWdpY2FsIDsgYW5kIGl0IGlzIG1lbnRpb25lZCAKaGVyZSBvbmx5IGluIG9yZGVyIHRoYXQgdGhlIHJlYWRlciBtYXkgbm90IGJlY29tZSAKY29uZnVzZWQgaW4gdGhlIGVuZGVhdm91ciB0byBjbGFzc2lmeSBjYXNlcyBvZiBpdHMgdXNlIAp1bmRlciBzb21lIG9mIHRoZSBmb2xsb3dpbmcgaGVhZGluZ3MuIAoKMi4gQnkgbWVhbnMgb2YgYW4gYXN0cmFsIGN1cnJebkEg4oCUIFRoaXMgaXMgYSBwaHJhc2UgCmZyZXF1ZW50bHkgYW5kIHJhdGhlciBsb29zZWx5IGVtcGxveWVkIGluIHNvbWUgb2YgCm91ciBUaGVvc29waGljYWwgbGl0ZXJhdHVyZSB0byBjb3ZlciBhIGNvbnNpZGVyYWJsZSAKdmFyaWV0eSBvZiBwaGVub21lbmEsIGFuZCBhbW9uZyBvdGhlcnMgdGhhdCB3aF5jaCBJIAp3aXNoIHRvIGV4cGxhaW4uIFdoYXQgaXMgcmVhbGx5IGRvbmUgYnkgdGhlIHN0dWRlbnQgCndobyBhZG9wdHMgdGhpcyBtZXRob2QgaXMgbm90IHNvIG11Y2ggdGhlIHNldHRpbmcgaW4gCm1vdGlvbiBvZiBhIGN1cnJlbnQgaW4gYXN0cmFsIG1hdHRlciwgYXMgdGhlIGVyZWN0aW9uI29mIAosLjphIGtpbmQgb2YgdGVtcG9yYXJ5IHRlbGVwaG9uZSB0aHJvdWdoIGl0LiAKCgpJdCBpcyBpbXBvc3NpYmxlIGhlcmUgdG8gZ2l2ZSBhbiBleGhhdXN0aXZlIGRpc3F1aXNpLSAKdGlvbiBvbiBhc3RyYWwgcGh5c2ljcywgZXZlbiBoYWQgSSB0aGUgcmVxdWlzaXRlIGtub3ctIApsZWRnZSB0byB3cml0ZSBpdCA7IGFsbCBJIG5lZWQgc2F5IGlzIHRoYXQgaXQgaXMgcG9zc2libGUgCmZ0byBtYWtlIGluIGFzdHJhbCBtYXR0ZXIgYSBkZWZpbml0ZSBjb25uZWNkbkVybGluZSAKCkpeY29udmU7XiAKCnw+eSBtZWFucyBvZiB3aGljaCBhbGwgdGhhdCBpcyBnb2luZyBvbiBhdCB0aGUgIm90aGVyIAplbmQgb2YgaXQgbWF5IGJlIHNlZW4uIFN1Y2ggYSBsaW5lIGlzIGVzdGFibGlzaGVkLCBiZSAKaXQgdW5kZXJzdG9vZCwgbm90IGJ5IGEgZGlyZWN0IHByb2plY3Rpb24gdGhyb3VnaCBzcGFjZSAKb2YgYXN0cmFsIG1hdHRlciwgYnV0IGJ5IHN1Y2ggYWN0aW9uIHVwb24gYSBsaW5lIChvciAKCgpBU1RSQUwgVEVMRUdSQVBIIAoKCjYzIAoKCnJhdGhlciBtYW55IGxpbmVzKSBvZiBwYXJ0aWNsZXMgb2YgdGhhdCBtYXR0ZXIgYXMgd2lsbCAKcmVuZGVyIHRoZW0gY2FwYWJsZSBvZiBmb3JtaW5nIGEgY29uZHVjdG9yIGZvciB2aWJyYS0gCnRpb25zIG9mIHRoZSBjaGFyYWN0ZXIgcmVxdWlyZWQuIAoKVGhpcyBwcmVsaW1pbmFyeSBhY3Rpb24gY2FuIGJlIHNldCB1cCBpbiB0d28gd2F5c2ogCuKAlCBlaXRoZXIgYnkgdGhlIHRyYW5zbWlzc2lvbiBvZiBlbmVyZ3kgZnJvbSBwYXJ0aWNsZSAKdG8gcGFydGljbGUsIHVudGlsIHRoZSBsaW5lIGlzIGZvcm1lZCwgb3IgYnkgdGhlIHVzZSBvZmYqIApmb3JjZSBmcm9tIGEgaGlnaGVyIHBsYW5lIHdoaWNoIGlzIGNhcGFibGUgb2YgYWN0aW5nIAp1cG9uIHRoZSB3aG9sZSBsaW5lX3NpbXVsdGFuZW91c2x5LiBPZiBjb3Vyc2UgdGhpcyEgCmxhdHRlciBtZXRob2QgaW1wbGllcyBmYXIgZ3JlYXRlciBkZXZlbG9wbWVudCwgc2luY2UgCml0IGludm9sdmVzIHRoZSBrbm93bGVkZ2Ugb2YgKGFuZCB0aGUgcG93ZXIgdG8gdXNlKSAKZm9yY2VzIG9mIGEgY29uc2lkZXJhYmx5IGhpZ2hlciBsZXZlbCA7IHNvIHRoYXQgdGhlIG1hbiAKd2hvIGNvdWxkIG1ha2UgaGlzIGxpbmUgaW4gdGhpcyB3YXkgd291bGQgbm90LCBmb3IgCmhpcyBvd24gdXNlLCBuZWVkIGEgbGluZSBhdCBhbGwsIHNpbmNlIGhlIGNvdWxkIHNlZSBmYXIgCm1vcmUgZWFzaWx5IGFuZCBjb21wbGV0ZWx5IGJ5IG1lYW5zIG9mIGFuIGFsdG9nZXRoZXIgCmhpZ2hlciBmYWN1bHR5LiAKCkV2ZW4gdGhlIHNpbXBsZXIgYW5kIHB1cmVseSBhc3RyYWwgb3BlcmF0aW9uIGlzIGEgCmRpZmZpY3VsdCBvbmUgdG9qaWVzY3JpYmUsIHRob3VnaCBxdWl0ZSBhbiBlYXN5IG9uZSB0byAKcGVyZm9ybS4gSXQgbWF5IGJlIHNhaWQgdG8gcGFydGFrZSBzb21ld2hhdCBjIApuYXR1cmUgb2YgdGhlIG1hZ25ldGl6YXRpb24gb2wuYSBiYXIsLiBRbF50Yy5lbCA7IGZvciBpIApjb25zaXN0cyBpbiB3aGF0IHdlIG1pZ2h0IGNhbGwgdGhlIHBvbGFyaXphdGlvbiwgYnkgYSAKZWZmb3J0IG9mIHRoZSBodW1hbiwgd2lsbCBvZiBhIG51bWJlciBvZiBwYXJhbGxlbCBsaW5lcycgCgpmcm9tIHRoZSBvcGVyYXRvciB0byB0aGUgCkFsbCB0aGUgYXRvbXMgCgoKdGZjaWVmIAppIHRodXMhIAoKCm9mIGFzdHJhbCBhdG9tcyAKCnNjZW5lIHdoaWNoIGhlIHdpc2hlcyB0byBvYnNlcnZlLCAKYWZmZWN0ZWQgYXJlIGhlbGQgZm9yIHRoZSB0aW1lIHdpdGggdGhlaXIgYXhlcyByaWdpZGx5IApwYXJhbGxlbCB0byBvbmUgYW5vdGhlciwgc28gdGhhdCB0aGV5IGZvcm0gYSBraW5kIAp0ZW1wb3JhcnkgdHViZSwgYWxvbmUuIHdoaWNoIHRoZSBjbGFpcnZveWFudCBtYXkgbG9va2ogCicgVGhpcyBtZXRob2QgaGFzIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB0aGVUZWxlZ3JhcGggCmxpbmUgaXMgbGlhYmxlIHRvIGRpc2FycmFuZ2VtZW50IG9yIGV2ZW4gZGVzdHJ1Y3Rpb24gYnkgCgoKSSAKCgo2NCBDTEFJUlZPWUFOQ0UgCgoKYW55IHN1ZmZpY2llbnRseSBzdHJvbmcgYXN0cmFsIGN1cnJlbnQgd2hpY2ggaGFwcGVucyAKOyBidXQgaWYgdGhlIG9yaWdpbmFsIGVmZm9ydCBvZiB3aWxsIHdlcmUgCmhpcyB3b3VsZCBiZSBhIGNvbnRpbmdlbmN5IG9mIG9ubHkgCmluZnJlcXVlbnQgb2NjdXJyZW5jZS4gCgpmIFRoZSB2aWV3IG9mIGEgZGlzdGFudCBzY2VuZSBvYnRhaW5lZCBieSBtZWFucyBvZiAKSXRoaXMgIiBhc3RyYWwgY3VycmVudCDigJ0gaXMgaW4gbWFueSB3YXlzIG5vdCB1bmxpa2UgdGhhdCAKamZlZWVuIHRocm9maWdoIGEgdGVsZXNjb3BlLiBIdW1hbiBmaWd1cmVzIHVzdWFsbHkgCmFwcGVhciB2ZXJ5IHNtYWxDaGtlIHRob3NlIG9uIGEgZGlzdGFudCBzdGFnZSwgYnV0IAppbiBzcGl0ZSBvZiB0aGVpciBkaW1pbnV0aXZlIHNpemUgdGhleSBhcmUgYXMgY2xlYXIgYXMgCnRob3VnaCB0aGV5IHdlcmUgY2xvc2UgYnkuIFNvbWV0aW1lcyBpdCBpcyBwb3NzaWJsZSAKCgpmYWlybHkgZGVmaW5pdGUsIHQgCgoKYnkgdGhpcyBtZWFucyB0byBoZWFyIHdoYXQgaXMuIHNhaWQgYXMgLndlbGwgYXMgdG8gc2VlLCAKCndoYXRzaXMgZG9uZTsgYnV0IGFzIG0gdGhlIG1ham9yaXR5IG9mIGNhc2VzIHRoaXMgCgpkb2VzIG5vdCBoYXBwZW4sIHdlIG11c3QgY29uc2lkZXIgaXQgcmF0aGVyIGFzIHRoZSAKbWFuaWZlc3RhdGlvbiBvZiBhbiBhZGRpdGlvbmFsIHBvd2VyIHRoYW4gYXMgYSAKbmVjZXNzYXJ5IGNvcm9sbGFyeSBvZiB0aGUgZmFjdWx0eSBvZiBzaWdodCDigJ4gCgpJdCB3aWxsIGJlIG9ic2VydmVkIHRoYXQgaW4gdGhpcyBjYXNlIHRoZSwgc2VleSBkb2VzIAozdCB1c3VhbGx5IGxlYXZlIGhpcyBwaHlzaWNhbCBib2R5XmF0IGFsbCA6IHRoZXJlIGlzIG5vIApKc29ydCBvZiBwcm9qZWN0aW9uIG9mIGhpcyBhc3RyYWwgdmVoaWNsZSBvciBvZiBhbnkgcGZydCAKb2YgaGltc2VsZiB0b3dhcmRzIHRoYXQgYXQgd2hpY2ggaGUgaXMgbG9va2luZywgYnV0IGhlIApTaW1wbHkgbWFudWZhY3R1cmVzIGZvciBoaW1zZWxmIGEgXnRlbV5yYXJeXl5nYWwgCnRlbGVzY29wZS4gQ29uc2VxdWVudGx5IGhlIGhhcywgdG8gYSBjZXJ0YWluIGV4dGVudCwgCuKAonRoZSB1c2Ugb2YgaGlzIHBoeXNpY2FsIHBvd2VycyBldmVuIHdoaWxlIGhlIGlzIGV4YW1pbi0gCmluZyB0aGUgZGlzdGFudCBzY2VuZSA7IGZvciBleGFtcGxlLCBoaXMgdm9pY2Ugd291bGQgCmxzdWFsbHkgc3RpbGwgYmUgdW5kZXIgaGlzIGNvbnRyb2wsIHNvIHRoYXQgaGUgY291bGQgCgoKdmhhdCBoZSBzYXcgZXZlbiB3aGlsZSBoZSB3YXMgaW4gdGhlIGFjdCBvZiAKCmYtcmlmIC0gaWYgciBycmkgciAoV3JyKiAKCmhpcyBvYnNlcnZhdGlvbnMuIFRoZSBjb25zY2lvdXNuZXNzIG9mIHRoZSAKfG1hbiBpcywgaW4gZmFjdCwgZGlzdGluY3RseSBzdGlsbCBhdCB0aGlzIGVuZCBvZiB0aGUgbGluZS4gClRoaXMgZmFjdCwgaG93ZXZlciwgaGFzIGl0cyBsaSBtIGl0YXRscHBeXmpeY2xsIGFzZHRzID4gCgoKISAKCgrCuyAKCkEgUFNZQ0hJQyBURUxFU0NPUEUgNjUgCgoKYWR2YW50YWdlc14gYW5kIHRoZXNlIGFnYWluIGxhcmdlbHkgcmVzZW1ibGUgdGhlIGxpbWktIAp0YXRpb25zIG9mIHRoZSBtYW4gdXNpbmcgYSB0ZWxlc2NvcGUgb24gdGhlIHBoeXNpY2FsIApwbGFuZS4gVGhlIGV4cGVyaW1lbnRlciwgZm9yIGV4YW1wbGUsIGhhcyBqaW9qZ293ZXIgCnRvIHNoaWZ0IHRoaXMgcG9pbnQgb2YgdmlldyA7IGhpcyB0ZWxlc2NvcGUsIHNvIHRvIHNwZWFrLCAKaGFzIGEgcGFydGljdWxhciBmaWVsZCBvZiB2aWV3IHdoaWNoIGNhbm5vdCBiZSBlbmxhcmdlZCAKb3IgYWx0ZXJlZCA7IGhlIGlzIGxvb2tpbmcgYXQgaGlzIHNjZW5lIGZyb20gYSBjZXJ0YWluIApkaXJlY3Rpb24sIGFuZCBoZSBjYW5ub3Qgc3VkZGVubHkgdHVybiBpdCBhbGwgcm91bmQgCmFuZCBzZWUgaG93IGl0IGxvb2tzIGZyb20gdGhlIG90aGVyIHNpZGUuIElmIGhlIGhhcycgCnN1ZmZpY2llbnQgcHN5Y2hpYyBlbmVyZ3kgdG8gc3BhcmUsIGhlIG1heSBkcm9wIGFsLSAKdG9nZXRoZXIgdGhlIHRlbGVzY29wZSB0aGF0IGhlIGlzIHVzaW5nIGFuZCBtYW51ZmFjdHVyZSAKYW4gZW50aXJlbHkgbmV3IG9uZSBmb3IgaGltc2VsZiB3aGljaCB3aWxsIGFwcHJvYWNoIApoaXMgb2JqZWN0aXZlIHNvbWV3aGF0IGRpZmZlcmVudGx5OyBidXQgdGhpcyBpcyBub3QgYSAKY291cnNlIGF0IGFsbCBsaWtlbHkgdG8gYmUgYWRvcHRlZCBpbiBwcmFjdGljZS4gCgpCdXQsIGl0IG1heSBiZSBzYWlkLCB0aGUgbWVyZSBmYWN0IHRoYXQgaGUgaXMgdXNpbmcgCmFzdHJhaiBzaWdodCBvdWdodCB0byBlbmFibGUgaGltIHRvIHNlZSBpdCBmcm9tIGFsbCAKc2lkZXMgYXQgb25jZS4gU28gaXQgd291bGQgaWYgaGUgd2VyZSB1c2luZyB0aGF0IHNpZ2h0IAppbiB0aGUgbm9ybWFsIHdheSB1cG9uIGFuIG9iamVjdCB3aGljaCB3YXMgZmFpcmx5IApuZWFyIGhpbSDigJQgd2l0aGluIGhpcyBhc3RyYWwgcmVhY2gsIGFzIGl0IHdlcmUgOyBidXQgYXQgCmEgZGlzdGFuY2Ugb2YgaHVuZHJlZHMgb3IgdGhvdXNhbmRzIG9mIG1pbGVzIHRoZSBjYXNlIAppcyB2ZXJ5IGRpZmZlcmVudC4gQXN0cmFsIHNpZ2h0IGdpdmVzIHVzIHRoZSBhZHZhbnRhZ2UtIApvZiBhbiBhZGRpdGlvbmFsIGRpbWVuc2lvbiwgYnV0IHRoZXJlIGlzIHN0aWxsIHN1Y11oIGEgCnRoaW5nIGFzIHBvc2l0aW9uIGluIHRoYXQgZGltZW5zaW9uLCBhbmQgaXQgaXMgbmF0dXJhbGx5IAphIHBvdGVudCBmYWN0b3IgaW4gbGltaXRpbmcgdGhlIHVzZSBvZiB0aGUgcG93ZXJzIG9mIGl0cyAKcGxhbmUuIE91ciBvcmRpbmFyeSB0aHJlZS1kaW1lbnNpb25hbCBzaWdodCBlbmFibGVzKiAKdXMgdG8gc2VlIGF0IC5vbmNlIGV2ZXJ5IHBvaW50IG9mIHRoZSBpbnRlcmlvciBvZiBhLCB0d28tIApkaW1lbnNpb25hbCBmaWd1cmUsIHN1Y2ggYXMgYSBzcXVhcmUsIGJ1dCBpbiBvcmRlciB0byAKZG8gdGhhdCB0aGUgc3F1YXJlIG11c3QgYmUgd2l0aGluIGEgcmVhc29uYWJsZSBkaXMtIAp0YW5jZSBmcm90biBveXIgZXllcyA7IHRoZSBtZXJlIGFkZGl0aW9uYWwgZGltZW5zaW9uIAoKNSAKCgoxIAoKCjY2IAoKCkNMQUlSVk9ZQU5DRSAKCgp3aWxsIGF2YWlsIGEgbWFuIGluIExvbmRvbiBidXQgbGl0dGxlIGluIGhpcyBlbmRlYXZvdXIgCnRvIGV4YW1pbmUgYSBzcXVhcmUgaW4gQ2FsY3V0dGEuIAoKQXN0cmFsIHNpZ2h0LCB3aGVuIGl0IGlzIGNyYW1wZWQgYnkgYmVpbmcgZGlyZWN0ZWQgCmFsb25nIHdoYXQgaXMgcHJhY3RpY2FsbHkgYSB0dWJlLCBpcyBsaW1pdGVkIHZlcnkgbXVjaCAKYXMgcGh5c2ljYWwgc2lnaHQgd291bGQgYmUgdW5kZXIgc2ltaWxhciBjaXJjdW1zdGFuY2VzIDsgCnRob3VnaCBpZiBwb3NzZXNzZWQgaW4gcGVyZmVjdGlvbiBpdCB3aWxsIHN0aWxsIGNvbnRpbnVlIAp0byBzaG93LCBldmVuIGF0IHRoYXQgZGlzdGFuY2UsIHRoZSBhdXJhcywgYW5kIHRoZXJlLSAKZm9yZSBhbGwgdGhlIGVtb3Rpb25zIGFuZCBtb3N0IG9mIHRoZSB0aG91Z2h0cyBvZiB0aGUgCnBlb3BsZSB1bmRlciBvYnNlcnZhdGlvbi4gCgpUaGVyZSBhcmUgbWFueSBwZW9wbGUgZm9yIHdob20gdGhpcyB0eXBlIG9mIGNsYWlyLSAKdm95YW5jZSBpcyB2ZXJ5IHRuaiZjaCBqZmVjaWxpdGF0ZWQgaWYgXiB0aGV5IHJoYXZlIGF0LSBoZnRmcmQgCnNvbXNMXmdebC4gb2JqZWN0IHdoaWNoLCBjYWEgYmUgLnVzZWQgCmpqb2luaSBmb3IgdGhlaXIgYXN0cmFsIHR1YmXigJQgYSBwYXltZW50LCBmb2N1cyAuZm9yIAp0aGVpciBeaWxsLXBvd2VyLiBBIGJhbGwgb2YgY3J5c3RhbCBpcyB0aGUgY29tbW9uZXN0IAphbmQgbW9zdCBlZmZlY3R1YWwgb2Ygc3VjaCBmb2NpLCBzaW5jZSBpdCBoYXMgdGhlcmFkZGktIHIgCnRqb25hbCBhZHZhbnRhZ2Ugb2YgCgp3aGljaCBzdGltdWxhdGUgcHN5Y2hpYyA7IGJ1dCBvdGhlciBvYmplY3RzIAoKYXJlIGFsc28gZW1wbG95ZWQsIHRvIHdoaWNoIHdlIHNoYWxsIGZpbmQgaXQgbmVjZXNzYXJ5IAp0byByZWZlciBtb3JlIHBhcnRpY3VsYXJseSB3aGVuIHdlIGNvbWUgdG8gY29uc2lkZXIgCnNlbWktaW50ZW50aW9uYWwgY2xhaXJ2b3lhbmNlLiDilqAgCgpJbiBjb25uZWN0aW9uIHdpdGggdGhpcyBhc3RyYWwtY3VycmVudCBmb3JtIG9mIGNsYWlyLSAKdm95YW5jZSwgYXMgd2l0aCBvdGhlcnMsIHdlIGZpbmQgdGhhdCB0aGVyZSBhcmUgCi5mIHNvbWUgcHN5Y2hpY3Mgd2hvIGFyZSB1bmFibGUgdG8gdXNlIEl0IGV4Y2VwdCB3aGVuIAp5ICcgdW5kZXIgdGhlIGluZmx1ZW5jZSBvZiBtZXNtZXJpc20uIFRoZSBwZWN1bGlhcml0eSByIAp0aGlzIGNhc2UgaXMgdGhhdCBhbW9uZyBzdWNoIHBzeWNoaWNzIHRoZXJlIGFyZSB0d28gCnZhcmlldGllcyDigJQgb25lIGluIHdoaWNoIGJ5IGJlaW5nIHRodXMgc2V0IGZyZWUgdGhlIAptYW4gaXMgZW5hYmxlZCB0byBtYWtlIGEgdGVsZXNjb3BlIGZvciBoaW1zZWxmLCBhbmQgCmFub3RoZXIgaW4gd2hpY2ggdGhlIG1hZ25ldGl6ZXIgaGltc2VsZiBtYWtlcyB0aGUgCgoKQlkgQSBUSE9VR0hULUZPUk0gCgoKNjcgCgoKdGVsZXNjb3BlIGFuZCB0aGUgc3ViamVjdCBpcyBzaW1wbHkgZW5hYmxlZCB0byBzZWUgCnRocm91Z2ggaXQuIEluIHRoaXMgbGF0dGVyIGNhc2Ugb2J2aW91c2x5IHRoZSBzdWJqZWN0IApoYXMgbm90IGVub3VnaCB3aWxsIHRvIGZvcm0gYSB0dWJlIGZvciBoaW1zZWxmLCBhbmQgCnRoZSBvcGVyYXRvciwgdGhvdWdoIHBvc3Nlc3NlZCBvZiB0aGUgbmVjZXNzYXJ5IHdpbGwtIApwb3dlciwgaXMgbm90IGNsYWlydm95YW50LCBvciBoZSBjb3VsZCBzZWUgdGhyb3VnaCBoaSQgCm93biB0dWJlIHdpdGhvdXQgbmVlZGluZyBoZWxwLiAqIAoKT2NjYXNpb25hbGx5LCB0aG91Z2ggcmFyZWx5LCB0aGUgdHViZSB3aGljaCBpcyBmb3JtZWQgCnBvc3Nlc3NlcyBhbm90aGVyIG9mIHRoZSBhdHRyaWJ1dGVz4oCeb2YgYSB0ZWxlc2NvcGUg4oCUIHRoYXQgCgoKb2YgbWFnbmlmeWluZyB0aGUgb2JqZWN0cyBhdCB3aGljaCBpdCBpcyBkaXJlY3RlaW1uaWlsIAp0aGV5IHNlZW0gb2YgbGlmZS1zaXplLiBPZiBjb3Vyc2UgdGhlIG9iamVjdHMgbXVzdCAKYWx3YXlzIGJlIG1hZ25pZmllZCB0byBzb21lIGV4dGVudCwgb3IgdGhleSB3b3VsZCBiZSAKYWJzb2x1dGVseSBpbnZpc2libGUsIGJ1dCB1c3VhbGx5IHRoZSBleHRlbnQgaXMgZGV0ZXItIAptaW5lZCBieSB0aGUgc2l6ZSBvZiB0aGUgYXN0cmFsIHR1YmUsIGFuZCB0aGUgd2hvbGUgCnRoaW5nIGlzIHNpbXBseSBhIHRpbnkgbW92aW5nIHBpY3R1cmUuIEluIHRoZSBmZXcgCmNhc2RmZSB3aGVyZSB0aGUgZmlndXJlcyBhcmUgc2VlbiBhcyBvZiBsaWZlLXNpemUgYnkgdGhpcyAKbWV0aG9kLCBpdCBpcyBwcm9iYWJsZSB0aGF0IGFuIGFsdG9nZXRoZXIgbmV3IHBvd2VyIAppcyBiZWdpbm5pbmcgdG8gZGF3biA7IGJ1dCB3aGVuIHRoaXMgaGFwcGVucywgY2FyZWZ1bCAKb2JzZXJ2YXRpb24gaXMgbmVlZGVkIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoIHRoZW0gCmZyb20gZXhhbXBsZXMgb2Ygb3VyIG5leHQgY2xhc3MuIAoKMy4gQnkgdGx1XnJvamVjdGlvbiB8IOKAlCBUaGUgYWJpbGl0eSMgCgp0byB1c2UgdGhpcyBtZXRob2Qgb2YgY2xhaXJ2b3lhbmNlIGltcGxpZXMgYSBkZXZlbG9wLSAKbWVudCBzb21ld2hhdCBtb3JlIGFkdmFuY2VkIHRoYW4gdGhlbGFzTCBzaW5jZSBpZiAKbmVjZXNzaXRhdGVzIGEgY2VydGFpbiBhbW91bnQgbSBjb250cm9sIHVwb24gdGgoIAptZW50YWwgcGxhbmUuIEFsbCBzdHVkZW50cyBvZiBUaGVvc29waHkgYXJlIGF3YXJlIF4gCnRoYXQgdGhvdWdodCB0YWtlcyBmb3JtLCBhdCBhbmpyanJhdGUgdWZnZ010TVdsZiAKcGxhbmUsIHRmdGQgaW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgY2FzZXMgdXBhbiBKXmdqYXN0Y2FsIApeYW5eXXxvIDsgYnV0IGl0IG1heSBub3QgYmUgcXVpdGUgc28gZ2VuZXJhbGx5IGtub3dufCAKdGhhdCBpZiBhIG1hbiB0aGlua3Mgc3Ryb25nbHkgb2YgaGltc2VsZiBhcyBwcmVzZW50IGF0IAoKCjY4IAoKCkNMQUlSVk9ZQU5DRSAKCgphbnkgZ2l2ZW4gcGxhY2UsIHRoZSBmb3JtIGFzc3VtZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIAo7IHRob3VnaHQgd2lsbCBiZSBhIGxpa2VuZXNzIG9mIHRoZSB0aGlua2VyIGhpbXNlbGYsIHdoaWNoIApqIHdpbGwgYXBwZWFyIGF0IHRoZSBwbGFjZSBpbiBxdWVzdGlvbi4gCgpFc3NlbnRpYWxseSB0aGlzIGZvcm0gbXVzdCBiZSBjb21wb3NlZCBvZiB0aGUgCm1hdHRlciBvZiB0aGUgbWVudGFsIHBsYW5lLCBidXQgaW4gdmVyeSBtYW55IGNhc2VzIGl0IAp3b3VsZCBkcmF3IHJvdW5kIGl0c2VsZiBtYXR0ZXIgb2YgdGhlIGFzdHJhbCBwbGFuZSBhbHNvLCAKYW5kIHNvIHdvdWxkIGFwcHJvYWNoIG11Y2ggbmVhcmVyIHRvIHZpc2liaWxpdHkuIApUaGVyZSBhcmUsIGluIGZhY3QsIG1hbnkgaW5zdGFuY2VzIGluIHdoaWNoIGl0IGhhcyAKYmVlbiBzZWVuIGJ5IHRoZSBwZXJzb24gdGhvdWdodCBvZiDigJQgbW9zdCBwcm9iYWJseSAKYnkgbWVhbnMgb2YgdGhlIHVuY29uc2Npb3VzIG1lc21lcmljIGluZmx1ZW5jZSAKZW1hbmF0aW5nIGZyb20gdGhlIG9yaWdpbmFsIHRoaW5rZXIsIGheb25lIG9mIHRoZSAKY29uc2Npb3VzbmVzcyBvZiB0aGUgLCB0aGlua2VyIGlqZ3VsZCwgaG93ZXZlciwgYmUgaW4tIAplbHVkZWQgd2l0aGluIHRoaXMgdGhvdWdodC1mb3JtLiBXaGVuIG9uY2Ugc2VudCBvdXQgCmZyb20nIGhpbSwgaXQgd291bGQgbm9ybWFsbHkgYmUgYSBxdWl0ZSBzZXBhcmF0ZSBlbnRpdHkgCgoK4oCUIG5vdCBpbmRlZWQgYWJzb2x1dGVseSB1bmNvbm5lY3RlZCB3aXRoIGl0cyBtYWtlciwgCmJ1dCBwcmFjdGljYWxseSBzbyBhcyBmYXIgYXMgdGhlIHBvc3NpYmlsaXR5IG9mIHJlY2VpdmluZyAKYW55IGltcHJlc3Npb24gdGhyb3VnaCBpdCBpcyBjb25jZXJuZWQuIAoKVGhpcyB0aGlyZCB0eXBlIG9mIGNsYWlydm95YW5jZSBjb25zaXN0cywgdGhlbiwgaW4gdGhlIApwb3dlciB0byByZXRhaW4gc28gbXVjaCBDb25uZWN0aW9uIHdpdGggYW5kIHNvIG11Y2ggCmhvbGQgb3ZlciBhIG5ld2x5LWVyZWN0ZWQgdGhvdWdodC1mb3JtIGFzIHdpbGwgcmVuZGVyIAppdCBwb3NzaWJsZSB0byByZWNlaXZlIGltcHJlc3Npb25zIGJ5IG1lYW5zIG9mIGl0IApTdWNoIGltcHJlc3Npb25zIGFzIHdlcmUgbWFkZSB1cG9uIHRoZSBmb3JtIHdvdWxkIAppbiB0aGlzIGNhc2UgYmUgdHJhbnNtaXR0ZWQgdG8gdGhlIHRoaW5rZXIg4oCUIG5vdCBhbG9uZyAKXmFuIGFzdHJhbCB0ZWxlZ3JhcGggbGluZSwgYXMgYmVmb3JlLiBidXQgYnkgc3ltcGF0aGV0aWMsIAoKaSZmZSBJbiAKCuKAmGxhbmNlIGl0IGlzIGFsbW9zZmFzdG5vdWdoIHRoZSBzZWVyIHByb2plY3RlZCBhIHBhcnQgCmZNaGlzIGNvbnNjaW91c25lc3MgaW50byB0aGUgdGhvdWdodC1mb3JtLCBhbmQgdXNlZCAKZiBpdCBhcyBhIGtpbmQgb2Ygb3V0cG9zdCwgZnJvbSB3aGljaCBvYnNlcnZhdGlvbiB3YXMgCgoK4pagIFYvJyAKCi4gLi4gLiAsICfigKI8IAoKQVNUUkFMIFRSQVZFTExJTkcgPiAKCgpwb3NzaWJsZS4gSGUgc2VlcyBhbG1vc3QgYXMgd2VsbCBhcyBoZSB3b3VsZCBpZiBoZSAKaGltc2VsZiBzdG9vZCBpbiB0aGUgcGxhY2Ugb2YgaGlzIHRob3VnaHQtZm9ybS4gCgpUaGUgXmZpZ3VyZXMsIGF0IHdoaWNoIGhlIGlzIGxvb2tpbmcgd2lsbCBhcHBlYXIgdG8gCmhpbSBhcyBvZiBsaWZlLXNpemUgYW5kIGNsb3NlIGF0IGhhbmQsIGluc3RlYWQgb2YgdGlueSAKYW5kIGF0IGEgZGlzdGFuY2UsIGFzIGluIHRoZSBwcmV2aW91cyBjYXNlIDsgYW5kIGhlIHdpbGwgCmZpbmQgaXQgcG9zc2libGUgdG8gc2hpZnQgaGlzIHBvaW50IG9mIHZpZXcgaWYgaGUgd2lzaGVzIAp0byBkbyBzby4gQ2xhaXJhdWRpZW5jZSBpcyBwZXJoYXBzIGxlc3MgZnJlcXVlbnRseSAKYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHlwZSBvZiBjbGFpcnZveWFuY2UgdGhhbiB3aXRoIHRoZSAKbGFzdCwgYnV0IGl0cyBwbGFjZSBpcyB0byBzb21lIGV4dGVudCB0YWtlbiBieSBhIGtpbmQgCm9mIG1lbnRhbCBwZXJjZXB0aW9uIG9mIHRoZSB0aG91Z2h0cyBhbmQgaW50ZW50aW9uXiAKCmwuIOKAlCDilqAgSUkg4pagIG5yIEkgSUYtLCBy4oCUIFRyfi4gSC4tLi4uLicsLiAKCm9mIHRoZmleZSB3aG8gYXJlIHNnZ24uIAoKU2luY2UgdGhlIG1hbidzIGNvbnNjaW91c25lc3MgaXMgc3RpbGwgaW4gdGhlIHBoeXNpY2FsIApib2R5LCBoZSB3aWxsIGJlIGFibGUgKGV2ZW4gd2hpbGUgZXhlcmNpc2luZyB0aGUgZmFjdWx0eSkgCnRvIGhlYXIgYW5kIHRvIHNwZWFrLCBpbiBzbyBmYXIgYXMgaGUgY2FuIGRvIHRoaXMgd2l0aC0gCm91dCDCq215IGRpc3RyYWN0aW9uIG9mIGhpcyBhdHRlbnRpb24uIFRoZSBtb20gCnRoYXQgdGhlIGludGVudG5lc3Mgb2YgaGlzIHRob3VnaHQgZmFpbHMgdGhlIAoKCmpzLmlpZ21lLCBhbmQgaGUgd2lsbCBoYXZlIHRvIGNvbnN0cnVjdCBhIGZyZXNoIHRob3VnaHQtfCAKZm9ybSBiZWZvcmUgaGUgY2FuIHJlc3VtZSBpdCBJbnN0YW5jZXMgaW4gd2hpY2ggdGhpcyAKa2luZCBvZiBzaWdodCBpcyBwb3NzZXNzZWQgd2l0aCBhbnkgZGVncmVlIG9mIHBlcmZlY3Rpb24gCmJ5IHVudHJhaW5lZCBwZW9wbGUgYXJlIG5hdHVyYWxseSByYXJlciB0aGFuIGluIHRoZSAKY2FzZSBvZiB0aGUgcHJldmlvdXMgdHlwZSwgYmVjYXVzZSBvZiB0aGUgY2FwYWNpdHkgZm9yIAptZW50YWwgY29udHJvbCByZXF1aXJlZCwgYW5kIHRoZSBnZW5lcmFsbHkgZmluZXIgbmF0dXJlIApvZiB0aGUgZm9yY2VzIGVtcGxveWVkLiAKCjQuIEJ2QU1ydWRsaW5wIGluIHRoZSBhc3RyYWwgYm9keSAuIOKAlCBXIGUgZW50ZXIgaGVyZTsgCgoKdXBvbiBhbiBlbnRpcmVseSBuZXcgdmFyaWV0eSBvZiBjbGFpcnZveWFuY2UsIGluIHdoaWNoaiAKdGhlIGNvbnNjaW91c25lc3Mgb2YgdGhlIHNlZXIgcGdqb25nZXIgcmVtYWlucyBpOiAKb3IgY2xvc2VseSBjb25uZWN0ZWQgd2l0aCBoaXMgcGh5c2ljXiBpZCAKCmRlZmluaXRlbHkgdHJhbnNmZXJyZWQgdG8gdGhlIHNjZW5lIHdoaWNoIGhlIGlzIGV4XiAKCgpmIAoKCkNMQUlSVk9ZQU5DRSAKCgoubWluaW5nLiBUaG91Z2ggaXQgaGFzIG5vIGRvdWJ0IGdyZWF0ZXJeYW5maWVycywgCnxvciB0aGUgdW50cmFpbmVkIHNlZXIgdGhhbiBlaXRoZXIgb2YgdGhlIG1ldGhvZHMgCmRldmlvdXNseSBkZXNjcmliZWQsIGl0IGlzIHleT14gCgp0IDsgwrBQZW4gdDAgaGlt4oCZIGZvciB0aGUgaW0iIAoKbWVuc2VseSBzdXBlcmlvciB2YXJpZXR5IHdoaWNoIHdlIHNoYWxsIGNvbnNpZGVyIHVuZGVyIApvdXIgZmlmdGggaGVhZCBpcyBub3QgYXZhaWxhYmxlIGV4Y2VwdCBmb3Igc3BlY2lhbGx5IAp0cmFpbmVkIHN0dWRlbnRzLiAKCkluIHRoaXMgY2FzZSB0aGUgbWFu4oCZcyBib2R5IGlzIGVpdGhlciBhc2xlZXAgb3IgaW4gCnJhbmVlLCBhbmQgaXRzIG9yZ2FucyBhcmUgY29uc2VxdWVudGx5IG5vdCBhdmFpbGFibGUgCiJvciB1c2Ugd2hpbGUgdGhlIHZpc2lvbiBpcyBnb2luZyBvbiwgc28gdGhhdCBhbGwgZGVzY3JpcC0gCm9uIG9mIHdoYXQgaXMgc2VlbiwgYW5kIGFsbCBxdWVzdGlvbmluZyBhcyB0byBmdXJ0aGVyIAphcnRpY3VsYXJzLCBtdXN0IGJlIHBvc3Rwb25lZCB1bnRpbCB0aGUgd2FuZGVyZXIgCmV0dXJucyB0byB0aGlzIHBsYW5lLiBPbiB0aGUgb3RoZXIgaGFuZCB0aGVeZ2pqXnMgCgp0aGUgbWFuIGhlYXJzIGFzIHdlbGwgCgoKJ3MgaSBzZWVzIGV2ZXJ5dGhpbmcgLCB3aGljaF5hXl5lZm9yZSBoaW0sIGFuZGVhbiAKb3ZlIGFib3V0IGZyZWVseSBhdCB3aWxsIHdpdGhpbiB0aGUgdmVyeSB3aWRlIGxpbWl0cyAKZiB0aGUgYXN0cmFsIHBsYW5lLiBIZSBjYW4gc2VlIGFuZCBzdHVkeSBhdCBsZWlzdXJlIAphbGwgdGhlIG90aGVyIGluaGFiaXRhbnRzIG9mIHRoYXQgcGxhbmUsIHNvIHRoYXQgQ2hlIApncmVhdCB3b3JsZCBvZiB0aGUgbmF0dXJlLXNwaXJpdHMgKG9mIHdoaWNoIHRoZSB0cmFkaS0gCnRpb25hbCAuZmFpcnktbGFuZCBpcyBidXQgYSB2ZXJ5IHNtYWxsIHBhcnQpIGxpZXMgb3BlbiAKYmVmb3JlIGhpbSwgYW5kIGV2ZW4gdGhhdCBvZiBzb21lIG9mIHRoZSBsb3dlciBkZXZhcy4gCkhlIGhhcyAKCnxxLGpha2VqYXJ0LCBhc2p0anZlcmUsIGluIEpoZV5qY2VuZXNeIAoKfC5nZmUgaGlUZXllcy1vZiBjb252ZXJzaW5nXndpbGwgd2l0XmVzZyAKCmxpb24gdGhhdEpeXm1eIG1heSBiZSBvYnRhaW5lZC4gCgoKZmYgaW4gYWRkaXRpb24gaGUgY2FuIGxlYXJuIGhvdyB0byBtYXRlcmlhbGl6ZSBoaW1zZWxmIAphIG1hdHRlciBvZiBubyBncmVhdCBkaWZmaWN1bHR5IGZvciBoaW0gd2hlbiBvbmNlIHRoZSAKCgpBTiBJTExVU1RSQVRJT04gCgoKNzEgCgoKa25hY2sgaXMgYWNxdWlyZWQpLCBoZSB3aWxsIGJlIGFibGUgdG8gdGFrZSBwYXJ0IGluIApwaHlzaWNhbCBldmVudHMgb3IgY29udmVyc2F0aW9ucyBhdCBhIGRpc3RhbmNlLCBhbmQgdG8gCnNob3cgaGltc2VsZiB0byBhbiBhYnNlbnQgZnJpZW5kIGF0IHdpbGwuIAoKLiogdi1odS1pLiDCq+KWoC4gdioqIMK7PirCq+KAoiogSOKAmXYuwqsgLWkgPCsrIFYuIFcgwrvigKIgCgoKQWdhaW4sIGhlIGhhcyB0aGUgYWRkaXRpb25hbCBwb3dlciBvZiBiZWluZyBhYmxlIAp0byBodW50IGFib3V0IGZvciB3aGF0IGhlIHdhbnRzLiBCeSBtZWFucyBvZiB0aGUgCnZhcmlldGllcyBvZiBjbGFpcnZveWFuY2UgcHJldmlvdXNseSBkZXNjcmliZWQsIGZvciBhbGwgCnByYWN0aWNhbCBwdXJwb3NlcyBoZSBjb3VsZCBmaW5kIGEgcGVyc29uIG9yIGEgcGxhY2UgCm9ubHkgd2hlbiBoZSB3YXMgYWxyZWFkeSBhY3F1YWludGVkIHdpdGggaXQsIG9yIHdoZW4gCmhlIHdhcyBwdXQgZW4gcmFwcG9ydCB3aXRoIGl0IGJ5IHRvdWNoaW5nIHNvbWV0aGluZyAKcGh5c2ljYWxseSBjb25uZWN0ZWQgd2l0aCBpdCwgYXMgaW4gcHN5Y2hvbWV0cnkuIEl0IAppcyB0cnVlIHRoYXQgYnkgdGhlIHRoaXJkIG1ldGhvZCBhIGNlcnRhaW4gYW1vdW50IG9mIAptb3Rpb24gaXMgcG9zc2libGUsIGJ1dCB0aGUgcHJvY2VzcyBpcyBhIHRlZGlvdXMgb25lIApleGNlcHQgZm9yIHF1aXRlIHNob3J0IGRpc3RhbmNlcy4gCgoKQnkgdGhlIHVzZSBvZiB0aGUgYXN0cmFsIGJvZHksIGhvd2V2ZXIsIGEgbWFuIGNhbSAKbW92ZSBhYm91dCBxdWl0ZSBmcmVlbHkgYW5kIHJhcGlkbHkgaW4gYW55IGRpcmVjdGlvbiwgdCAKCiwgSlNMbW0g4oCUIC0gZnLigJQgVMK7IC0xLuKAlCcgcmEuKiouIHMnIDEgLCAKCmFuZCBjYW4gKGZvciBleGFtcGxlKSBmaW5kIHdpdGhvdXQgZGlmZmljdWx0eSBhbnkgMyAKcGxhY2UgcG9pbnRlZCBvdXQgdXBvbiBhIG1hcCwgd2l0aG91dCBlaXRoZXIgYW55IApwcmV2aW91cyBrbm93bGVkZ2Ugb2YgdGhlIHNwb3Qgb3IgYW55IG9iamVjdCB0byAKZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB3aXRoIGl0LiBIZSBjYW4gYWxzbyByZWFkaWx5IAoKCnJpc2UgaGlnaCBpbmZyIHRoXnJeYWFqZ15nXmpeIDsgCgpvZiB0aGUgY291bnRyeSB3aGljaCBoZSBpcyBleGFtaW5pbmcsIHNvIGFzIHRvIG9ic2VydmUgaiAKCgppdHMgZXh0ZW50LCB0aGUgY29udG91ciBvZiBpdHMgY29hc3QtbGluZSwgb3IgaXRzIGdlbmVyYWwgSSAKY2hhcmFjdGVyLiBJbmRlZWQsIGluIGV2ZXJ5IHdheSBoaXMgcG93ZXIgYW5kIGYgCmZyZWVkb20gYXJlIGZhciBncmVhdGVyIHdoZW4gaGUgdXNlcyB0aGlzIG1ldGhvZCBqIAp0aGFuIHRoZXkgaGF2ZSBiZWVuIGluIGFueSBvZiB0aGUgcHJldmlvdXMgY2FzZXMsIGYgCkEgZ29vZCBleGFtcGxlIG9mIHRoZSBmdWxsIHBvc3Nlc3Npb24gb2YgdGhpcyBwb3dlciAKaXMgZ2l2ZW4sIG9uIHRoZSBhdXRob3JpdHkgb2YgdGhlIEdlcm1hbiB3cml0ZXIgSnVuZyAKU3RpbGxpbmcsIGJ5IE1ycy4gQ3Jvd2UgaW4gVGhlIE5pZ2h0IFNpZGUgb2YgTmF0dXJlIAoKCmYgCgoKNzIgQ0xBSVJWT1lBTkNFIAoKKHAuIDEyNykuIFRoZSBzdG9yeSBpcyByZWxhdGVkIG9mIGEgc2VlciB3aG8gaXMgc3RhdGVkIAp0byBoYXZlIHJlc2lkZWQgaW4gdGhlIG5laWdoYm91cmhvb2Qgb2YgUGhpbGFkZWxwaGlhLCAKaW4gQW1lcmljYS4gSGlzIGhhYml0cyB3ZXJlIHJldGlyZWQsIGFuZCBoZSBzcG9rZSAKbGl0dGxlOyBoZSB3YXMgZ3JhdmUsIGJlbmV2b2xlbnQgYW5kIHBpb3VzLCBhbmQgCm5vdGhpbmcgd2FzIGtub3duIGFnYWluc3QgaGlzIGNoYXJhY3RlciwgZXhjZXB0IAp0aGF0IGhlIGhhZCB0aGUgcmVwdXRhdGlvbiBvZiBwb3NzZXNzaW5nIHNvbWUgc2VjcmV0cyAKdGhhdCB3ZXJlIGNvbnNpZGVyZWQgbm90IGFsdG9nZXRoZXIgbGF3ZnVsLiBNYW55IApleHRyYW9yZGluYXJ5IHN0b3JpZXMgd2VyZSB0b2xkIG9mIGhpbSwgYW5kIGFtb25nc3QgCnRoZSByZXN0IHRoZSBmb2xsb3dpbmcgOiDigJQgCgrigJxUaGUgd2lmZSBvZiBhIHNoaXAgY2FwdGFpbiAod2hvc2UgaHVzYmFuZCB3YXMgCm9uIGEgdm95YWdlIHRvIEV1cm9wZSBhbmQgQWZyaWNhLCBhbmQgZnJvbSB3aG9tIApzaGUgaGFkIGJlZW4gbG9uZyB3aXRob3V0IHRpZGluZ3MpLCBiZWluZyBvdmVyLSAKXCAtd2hlbG1lZCB3aXRoIGFueGlldHkgZm9yIGhpcyBzYWZldHksIHdhcyBpbmR1Y2VkIArigJ4gdG8gYWRkcmVzcyBoZXJzZWxmIHRvIHRoaXMgcGVyc29uLiBIYXZpbmcgbGlzdGVuZWQgCnQgdG8gaGVyIHN0b3J5IGhlIGJlZ2dlZCBoZXIgdG8gZXhjdXNlIGhpbSBmb3IgYSB3fGppbGUsIAoKLCB3aGVuIGhlIHdvdWxkIGJyaW5nIGhlciB0aGUgaW50ZWxsaWdlbmNlIHNoZSByZXF1aXJlZC4gCgo6IEhlIHRoZW4gcGFzc2VkIGludG8gYW4gaW5uZXIgcm9vbSBhbmQgc2hlIHNhdCAKISBoZXJzZWxmIGRvd24gdG8gd2FpdCA7IGJ1dCBoaXMgYWJzZW5jZSBjb250aW51aW5nIAoKKiA6IGxvbmdlciB0aGFuIHNoZSBleHBlY3RlZCwgc2hlIGJlY2FtZSBpbXBhdGllbnQsIAoKKiBrIHRoaW5raW5nIGhlIGhhZCBmb3Jnb3R0ZW4gaGVyLCBhbmQgc29mdGx5IGFwcHJvYWNoaW5nIApeIDsgbHRoZSBkb29yIHNoZSBwZWVwZWQgdGhyb3VnaCBzb21lIGFwZXJ0dXJlLCBhbmQgdG8gCmwgXCBJaGVyIHN1cnByaXNlIGJlaGVsZCBoaW0gbHlpbmcgb24gYSBzb2ZhIGFzIG1vdGlvbmxlc3MgCsK7IHxhcyBpZiBoZSB3ZXJlIGRlYWQuIFNoZSBvZiBjb3Vyc2UgZGlkIG5vdCB0aGluayBpdCAKCiwgfCBmXCBhZHZpc2FibGUgdG8gZGlzdHVyYiBoaW0sIGJ1dCB3YWl0ZWQgaGlzIHJldHVybiwgd2hlbiAKLSAqIGhlIHRvbGQgaGVyIHRoYXQgaGVyIGh1c2JhbmQgaGFkIG5vdCBiZWVuIGFibGUgdG8gCgoqKiAxIAoKayAqIFMgd3JpdGUgdG8gaGVyIGZvciBzdWNoIGFuZCBzdWNoIHJlYXNvbnMsIGJ1dCB0aGF0IGhlIAoKaSAsIEkgd2FzIHRoZW4gaW4gYSBjb2ZmZWUtaG91c2UgaW4gTG9uZG9uIGFuZCB3b3VsZCB2ZXJ5IAoK4oCiIHcgfCBzaG9ydGx5IGJlIGhvbWUgYWdhaW4uIAoKCnQgCgoKUEhFTk9NRU5BIE5PVCBFTkNPVVJBR0VEIAoK4oCcIEFjY29yZGluZ2x5IGhlIGFycml2ZWQsIGFuZCBhcyB0aGUgbGFkeSBsZWFybnQgCmZyb20gaGltIHRoYXQgdGhlIGNhdXNlcyBvZiBoaXMgdW51c3VhbCBzaWxlbmNlIGhhZCAKYmVlbiBwcmVjaXNlbHkgdGhvc2UgYWxsZWdlZCBieSB0aGUgbWFuLCBzaGUgZmVsdCAKZXh0cmVtZWx5IGRlc2lyb3VzIG9mIGFzY2VydGFpbmluZyB0aGUgdHJ1dGggb2YgdGhlIApJIHJlc3Qgb2YgdGhlIGluZm9ybWF0aW9uLiBJbiB0aGlzIHNoZSB3YXMgZ3JhdGlmaWVkLCAKCkkgZm9yIGhlIG5vIHNvb25lciBzZXQgaGlzIGV5ZXMgb24gdGhlIG1hZ2ljaWFuIHRoYW4gaGUgCgpmc2FpZCB0aGF0IGhlIGhhZCBzZWVuIGhpbSBiZWZvcmUgb24gYSBjZXJ0YWluIGRheSBpbiAKCkkgCgpqYSBjb2ZmZWUtaG91c2UgaW4gTG9uZG9uLCBhbmQgdGhhdCBoZSB0b2xkIGhpbSB0aGF0IAp0aGlzIHdpZmUgd2FzIGV4dHJlbWVseSB1bmVhc3kgYWJvdXQgaGltLCBhbmQgdGhhdCAKaGUsIHRoZSBjYXB0YWluLCBoYWQgdGhlcmVvbiBtZW50aW9uZWQgaG93IGhlIGhhZCAKYmVlbiBwcmV2ZW50ZWQgd3JpdGluZywgYWRkaW5nIHRoYXQgaGUgd2FzIG9uIHRoZSAKZXZlIG9mIGVtYmFya2luZyBmb3IgQW1lcmljYS4gSGUgaGFkIHRoZW4gbG9zdCA7IApzaWdodCBvZiB0aGUgc3RyYW5nZXIgYW1vbmdzdCB0aGUgdGhyb25nLCBhbmQga25ldyA7IApub3RoaW5nIG1vcmUgYWJvdXQgaGltIOKAnSA7IAoKIyBXJiBoYXZlIG9mIGNvdXJzZSBubyBtZWFucyBub3cgb2Yga25vd2luZyB3aGF0IApldmlkZW5jZSBKdW5nIFN0aWxsaW5nIGhhZCBvZiB0aGUgdHJ1dGggb2YgdGhpcyBzdG9yeSwgCnRob3VnaCBoZSBkZWNsYXJlcyBoaW1zZWxmIHRvIGhhdmUgYmVlbiBxdWl0ZSBzYXRpc2ZpZWQgCndpZnRpIHRoZSBhdXRob3JpdHkgb24gd2hpY2ggaGUgcmVsYXRlcyBpdCA7IGJ1dCBzbyAKbWFueSBzaW1pbGFyIHRoaW5ncyBoYXZlIGhhcHBlbmVkIHRoYXQgdGhlcmUgaXMgbm8gCnJlYXNvbiB0byBkb3VidCBpdHMgYWNjdXJhY3kuIFRoZSBzZWVyLCBob3dldmVyLCAKbXVzdCBlaXRoZXIgaGF2ZSBkZXZlbG9wZWQgaGlzIGZhY3VsdHkgZm9yIGhpbXNlbGYgb3IgCmxlYXJudCBpdCBpbiBzb21lIHNjaG9vbCBvdGhlciB0aGFuIHRoYXQgZnJvbSB3aGljaCAKbW9zdCBvZiBvdXIgVGhlb3NvcGhpY2FsIGluZm9ybWF0aW9uIGlzIGRlcml2ZWQgOyBmb3IgCl5pbiBvdXIgY2FzZSB0aGVyZSBpcyBhIHdlbGwtdW5kZXJzdG9vZCByZWd1bGF0aW9uIGV4LSAKcHJlc3NseSBmb3JiaWRkaW5nIHRoZSBwdXBpbHMgZnJvbSBnaXZpbmcgYW55IG1hbmktIEkgCmZlc3RhdGlvbiBvZiBzdWNoIHBvd2VyIHdoaWNoIGNhbiBiZSBIZWxpaFRmZUtycHJvdmVkIGogCgpIdSotLi4gLSAxIC0gLiA+ciBeIF8gaXJpcnx8IE18IC18fD58W3xUwqstIEkgCgphdCBib3RoIGVuZHMgaW4gdGhhdCB3YXksIGFuZCBzbyBjb25zdGl0dXRlIHdoYXQgaXMgCgpjYWxsZWQg4oCcYSBwaGVub21lbm9uL0psIFRoYXQgdGhpcy4gcmVndWxhdGlvbiBpcyAKCuKAojRTcCciJyBqKioqMCAKCgo3NCAKCgpDTEFJUlZPWUFOQ0UgCgoKWCAKCgovIFYgCgoKZW1waGF0aWNhbGx5IGEgd2lzZSBvbmUgaXMgcHJvdmVkIHRvIGFsbCB3aG8gCmtub3cgYW55dGhpbmcgb2YgdGhlIGhpc3Rvcnkgb2Ygb3VyIFNvY2lldHkgYnkgdGhlIApkaXNhc3Ryb3VzIHJlc3VsdHMgd2hpY2ggZm9sbG93ZWQgZnJvbSBhIHZlcnkgc2xpZ2h0IAp0ZW1wb3JhcnkgcmVsYXhhdGlvbiBvZiBpdC4gCgpJIGhhdmUgZ2l2ZW4gc29tZSBxdWl0ZSBtb2Rlcm4gY2FzZXMgYWxtb3N0IApleGFjdGx5IHBhcmFsbGVsIHRvIHRoZSBhYm92ZSBpbiBteSBsaXR0bGUgYm9vayBvbiAKSW52aXNpYmxlIEhlbHBlcnMuIEFuIGluc3RhbmNlIG9mIGEgbGFkeSB3ZWxsLWtub3duIAp0byBteXNlbGYsIHdobyBmcmVxdWVudGx5IHRodXMgYXBwZWFycyB0byBmcmllbmRzIGF0IAphIGRpc3RhbmNlLCBpcyBnaXZlbiBieSBNci4gU3RlYWQgaW4gUmVhbCBHaG9zdCBTdG9yaWVzIAoocC4gMjcpIDsgYW5kIE1yLiBBbmRyZXcqIExhbmcgZ2l2ZXMsIGluIGhpcyBEcmVhbXMgCmFuZCBHaG9zdHMgKHAuIDg5KSwgYW4gYWNjb3VudCBvZiBob3cgTXIuIENsZWF2ZSwgCnRoZW4gYXQgUG9ydHNtb3V0aCwgYXBwZWFyZWQgaW50ZW50aW9uYWxseSBvbiB0d28gCm9jY2FzaW9ucyB0byBhIHlvdW5nIGxhZHkgaW4gTG9uZG9uLCBhbmQgYWxhcm1lZCAKaGVyIGNvbnNpZGVyYWJseS4gVGhlcmUgaXMgYW55IGFtb3VudCBvZiBldmlkZW5jZSAKdG8gYmUgaGFkIG9uIHRoZSBzdWJqZWN0IGJ5IGFueSBvbmUgd2hvIGNhcmVzIHRvIApzdHVkeSBpdCBzZXJpb3VzbHkuIAoKVGhpcyBwYXlpbmcgb2YgaW50ZW50aW9uYWwgYXN0cmFsIHZpc2l0cyBzZWVtcyB2ZXJ5IApvZnRlbiB0byBiZWNvbWUgcG9zc2libGUgd2hlbiB0aGUgcHJpbmNpcGxlcyDCq0VyZSAKbG9vc2VuZWQgYXQgdGhlIGFwcHJvYWNoIG9mIGRlYXRoIGZvciBwZW9wbGUgd2hvIAp3ZXJlIHVuYWJsZSB0byBwZXJmb3JtIHN1Y2ggYSBmZWF0IGF0IGFueSBvdGhlciB0aW1lLiAKVGhlcmUgYXJlIGV2ZW4gbW9yZSBleGFtcGxlcyBvZiB0aGlzIGNsYXNzIHRoYW4gb2YgCnRoZSBvdGhlcjsgSSBlcGl0b21pemUgYSBnb29kIG9uZSBnaXZlbiBieSBNci4gCkFuZHhlM1ksLExhbmcgb24gcC4gMTAwIG9mIHRoZSBib29rIGxhc3QgY2l0ZWQg4oCUIG9uZSAKb2Ygd2hpY2ggaGUgaGltc2VsZiBzYXlzLCDigJxOb3QgbWFueSBzdG9yaWVzIGhhdmUgCnN1Y2ggZ29vZCBldmlkZW5jZSBpbiB0aGVpciBmYXZvdXIs4oCdIAoK4oCcTWFyeSwgdGhlIHdpZmUgb2YgSm9obiBHb2ZmZSBvZiBSb2NoZXN0ZXIsIGJlaW5nIAphZmZsaWN0ZWQgd2l0aCBhIGxvbmcgaWxsbmVzcywgcmVtb3ZlZCB0byBoZXIgZmF0aGVy4oCZcyAKaG91c2UgYXQgV2VzdCBNYWlsaW5nLCBhYm91dCBuaW5lIG1pbGVzIGZyb20gaGVyIG93bi4gCgoKaSAKCkNBU0UgT0YgTUFSWSBHT0ZGRSA3NSAKCuKAnFRoZSBkYXkgYmVmb3JlIGhlciBkZWF0aCBzaGUgZ3JldyB2ZXJ5IGltLSAKcGF0aWVudGx5IGRlc2lyb3VzIHRvIHNlZSBoZXIgdHdvIGNoaWxkcmVuLCB3aG9tIHNoZSAKaGFkIGxlZnQgYXQgaG9tZSB0byB0aGUgY2FyZSBvZiBhIG51cnNlLiBTaGUgd2FzIHRvbyAKaWxsIHRvIGJlIG1vdmVkLCBhbmQgYmV0d2VlbiBvbmUgYW5kIHR3byBv4oCZY2xvY2sgaW4gCnRoZSBtb3JuaW5nIHNoZSBmZWxsIGludG8gYSB0cmFuY2UuIE9uZSB3aWRvdyAKVHVybmVyLCB3aG8gd2F0Y2hlZCB3aXRoIGhlciB0aGF0IG5pZ2h0LCBzYXlzIHRoYXQgCmhlciBleWVzIHdlcmUgb3BlbiBhbmQgZml4ZWQsIGFuZCBoZXIgamF3IGZhbGxlbi4gCk1ycy4gVHVybmVyIHB1dCBoZXIgaGFuZCB1cG9uIGhlciBtb3V0aCwgYnV0IGNvdWxkIApwZXJjZWl2ZSBubyBicmVhdGguIFNoZSB0aG91Z2h0IGhlciB0byBiZSBpbiBhIGZpdCwgCmFuZCBkb3VidGVkIHdoZXRoZXIgc2hlIHdlcmUgZGVhZCBvciBhbGl2ZS4gCgrigJxUaGUgbmV4dCBtb3JuaW5nIHRoZSBkeWluZyB3b21hbiB0b2xkIGhlcnwhIAptb3RoZXIgdGhhdCBzaGUgaGFkIGJlZW4gYXQgaG9tZSB3aXRoIGhlciBjaGlsZHJlbiwgCnNheWluZywg4oCYIEkgd2FzIHdpdGggdGhlbSBsYXN0IG5pZ2h0IHdoZW4gSSB3YXMgYXNsZWVwLuKAmWogMSAK4oCcVGhlIG51cnNlIGF0IFJvY2hlc3Rlciwgd2lkb3cgQWxleGFuZGVyIGJ5IApuYW5eZSwgYWZmaXJtcyB0aGF0IGEgbGl0dGxlIGJlZm9yZSB0d28gb+KAmWNsb2NrIHRoYXQgCm1vcm5pbmcgc2hlIHNhdyB0aGUgbGlrZW5lc3Mgb2YgdGhlIHNhaWQgTWFyeSBHb2ZmZSAKY29tZSBvdXQgb2YgdGhlIG5leHQgY2hhbWJlciAod2hlcmUgdGhlIGVsZGVyIGNoaWxkIApsYWYgaW4gYSBiZWQgYnkgaXRzZWxmKSwgdGhlIGRvb3IgYmVpbmcgbGVmdCBvcGVuLCBhbmQgCnN0b29kIGJ5IGhlciBiZWRzaWRlIGZvciBhYm91dCBhIHF1YXJ0ZXIgb2YgYW4gaG91ciA7IAp0aGUgeW91bmdlciBjaGlsZCB3YXMgdGhlcmUgbHlpbmcgYnkgaGVyLiBIZXIgZXllcyAKbW92ZWQgYW5kIGhlciBtb3V0aCB3ZW50LCBidXQgc2hlIHNhaWQgbm90aGluZy4gClRoZSBudXJzZSwgbW9yZW92ZXIsIHNheXMgdGhhdCBzaGUgd2FzIHBlcmZlY3RseSAKYXdha2UgOyBpdCB3YXMgdGhlbiBkYXlsaWdodCwgYmVpbmcgb25lIG9mIHRoZSBsb25nZXN0IApkYXlzIGluIHRoZSB5ZWFyLiBTaGUgc2F0IHVwIGluIGJlZCBhbmQgbG9va2VkIAojIHN0ZWFkZmFzdGx5IG9uIHRoZSBhcHBhcml0aW9uLiBJbiB0aGF0IHRpbWUgc2hlIF4gCmhlYXJkIHRoZSBicmlkZ2UgY2xvY2sgc3RyaWtlIHR3bywgYW5kIGEgd2hpbGUgYWZ0ZXIgCnNhaWQ6IOKAmEluIHRoZSBuYW1lIG9mIHRoZSBGYXRoZXIsIFNvbiBhbmQgSG9seWogXCAKR2hvc3QsIHdoYXQgYXJ0IHRob3U/NSBUaGVyZXVwb24gdGhlIGFwcGFyaXRpb24gXCAKCgpDTEFJUlZPWUFOQ0UgCgoKYyAKCgpyZW1vdmVkIGFuZCB3ZW50IGF3YXkgOyBzaGUgc2xpcHBlZCBvbiBoZXIgY2xvdGhlcyAKYW5kIGZvbGxvd2VkLCBidXQgd2hhdCBiZWNhbWUgb24ndCwgc2hlIGNhbm5vdCB0ZWxsLuKAnSAKClRoZSBudXJzZSBhcHBhcmVudGx5IHdhcyBtb3JlIGZyaWdodGVuZWQgYnkgaXRzIApkaXNhcHBlYXJhbmNlIHRoYW4gaXRzIHByZXNlbmNlLCBmb3IgYWZ0ZXIgdGhpcyBzaGUgd2FzIAphZnJhaWQgdG8gc3RheSBpbiB0aGUgaG91c2UsIGFuZCBzbyBzcGVudCB0aGUgcmVzdCBvZiAKdGhlIHRpbWUgdW50aWwgc2l4IG8nY2xvY2sgaW4gd2Fsa2luZyB1cCBhbmQgZG93biAKb3V0c2lkZS4gV2hlbiB0aGUgbmVpZ2hib3VycyB3ZXJlIGF3YWtlIHNoZSB0b2xkIApoZXIgdGFsZSB0byB0aGVtLCBhbmQgdGhleSBvZiBjb3Vyc2Ugc2FpZCBzaGUgaGFkIApkcmVhbXQgaXQgYWxsIDsgc2hlIG5hdHVyYWxseSBlbm91Z2ggd2FybWx5IHJlLSAKcHVkaWF0ZWQgdGhhdCBpZGVhLCBidXQgY291bGQgb2J0YWluIG5vIGNyZWRlbmNlIAp1bnRpbCB0aGUgbmV3cyBvZiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgc3RvcnkgYXJyaXZlZCAKZnJvbSBXZXN0IE1haWxpbmcsIHdoZW4gcGVvcGxlIGhhZCB0byBhZG1pdCB0aGF0IAp0aGVyZSBtaWdodCBoYXZlIGJlZW4gc29tZXRoaW5nIGluIGl0LiAKCkEgbm90ZXdvcnRoeSBjaXJjdW1zdGFuY2UgaW4gdGhpcyBzdG9yeSBpcyB0aGF0IAp0aGUgbW90aGVyIGZvdW5kIGl0IG5lY2Vzc2FyeSB0byBwYXNzIGZyb20gb3JkaW5hcnkgCnNsZWVwIGludG8gdGhlIHByb2ZvdW5kZXIgdHJhbmNlIGNvbmRpdGlvbiBiZWZvcmUgc2hlIApqY291bGQgY29uc2Npb3VzbHkgdmlzaXQgaGVyIGNoaWxkcmVuIDsgaXQgY2FuLCBob3dldmVyLCAKYmUgcGFyYWxsZWxlZCBsaWVyZSBhbmQgdGhlcmUgYW1vbmcgdGhlIGxhcmdlIG51bUJlciAKb2Ygc2ltaWxhciBhY2NvdW50cyB3aGljaCBtYXkgYmUgZm91bmQgaW4gdGhlIApsaXRlcmF0dXJlIG9mIHRoZSBzdWJqZWN0LiAKClR3byBvdGhlciBzdG9yaWVzIG9mIHByZWNpc2VseSB0aGUgc2FtZSB0eXBlIOKAlCBpbiAKd2hpY2ggYSBkeWluZyBtb3RoZXIsIGVhcm5lc3RseSBkZXNpcmluZyB0byBzZWUgaGVyIApjaGlsZHJlbiwgZmFsbHMgaW50byBhIGRlZXAgc2xlZXAsIHZpc2l0cyB0aGVtIGFuZCAKcmV0dXJucyB0byBzYXkgdGhhdCBzaGUgaGFzIGRvbmUgc28g4oCUIGFyZSBnaXZlbiBieSAKIkRyLiBGLiBHLiBMZWUuIEluIG9uZSBvZiB0aGVtIHRoZSBtb3RoZXIsIHdoZW4gCmR5aW5nIGluIEVneXB0LCBhcHBlYXJzIHRvIGhlciBjaGlsZHJlbiBhdCBUb3JxdWF5LCAKamxmZWQgaXMgY2xlYXJseSBzZWVuIGluIGJyb2FkIGRheWxpZ2h0IGJ5IGFsbCBmaXZlIG9mIAp0aGUgY2hpbGRyZW4gYW5kIGFsc28gYnkgdGhlIG51cnNlbWFpZC4gKCBHbGltcHNlcyBvZiAKCgppIAoKCk9USEVSIEVYQU1QTEVTIAoKCjc3IAoKCnRoZSBTdXBlcm5hdHVyYWwgLCB2b2wuIGlpLiwgcC4gNjQuKSBJbiB0aGUgb3RoZXIgYSAKUXVha2VyIGxhZHkgZHlpbmcgYXQgQ29ja2VybW91dGggaXMgY2xlYXJseSBzZWVuIAphbmQgcmVjb2duaXplZCBpbiBkYXlsaWdodCBieSBoZXIgdGhyZWUgY2hpbGRyZW4gYXQgClNldHRsZSwgdGhlIHJlbWFpbmRlciBvZiB0aGUgc3RvcnkgYmVpbmcgcHJhY3RpY2FsbHkgCmlkZW50aWNhbCB3aXRoIHRoZSBvbmUgZ2l2ZW4gYWJvdmUuICggR2xpbXBzZXMgaW4gdGhlIC8gClR3aWxpZ2h0ICwgcC4gOTQuKSBUaG91Z2ggdGhlc2UgY2FzZXMgYXBwZWFyIHRvIGJlIApsZXNzIHdpZGVseSBrbm93biB0aGFuIHRoYXQgb2YgTWFyeSBHb2ZmZSwgdGhlIApldmlkZW5jZSBvZiB0aGVpciBhdXRoZW50aWNpdHkgc2VlbXMgdG8gYmUgcXVpdGUgYXMgCmdvb2QsIGFzIHdpbGwgYmUgc2VlbiBieSB0aGUgYXR0ZXN0YXRpb25zIG9idGFpbmVkIGJ5IAp0aGUgcmV2ZXJlbmQgYXV0aG9yIG9mIHRoZSB3b3JrcyBmcm9tIHdoaWNoIHRoZXkgCmFyZSBxdW90ZWQuIAoKVGhlIG1hbiB3aG8gZnVsbHkgcG9zc2Vzc2VzIHRoaXMgZm91cnRoIHR5cGUgb2YgCmNsYWlydm95YW5jZSBoYXMgbWFueSBhbmQgZ3JlYXQgYWR2YW50YWdlcyBhdCBoaXMgCmRpc3Bvc2FsLCBldmVuIGluIGFkZGl0aW9uIHRvIHRob3NlIGFscmVhZHkgbWVudGlvbmVkLiBJIArigKIgTm90IG9ubHkgY2FuIGhlIHZpc2l0IHdpdGhvdXReIEkgCgp0aGUgYmVhdXRpZnVsIGFuZCBmYW1vdXMgcGxhY2VzIG9mIHRoZSBlYXJ0aCwgYnV0IGlpIF0gCmhlIGhhcHBlbnMgdG8gYmUgYSBzY2hvbGFyLCB0aGluayB3aGF0IGl0IG11c3QgbWVhbjEgMSAKdG8gdHVybiB0aGF0IGhlIGhhcyBhY2Nlc3MgdG8gYWxsIHRoZSBsaWJyYXJpZXMgb2YgdGhlISAKd29ybGQgISBXaGF0IG11c3QgaXQgYmUgZm9yIHRoZSBzY2llbnRpZmljYWxseS1taW5kZWQgJyAKbWFuIHRvIHNlZSB0YWtpbmcgcGxhY2UgYmVmb3JlIGhpcyBleWVzIHNvIG1hbnkgb2YgCnRoZSBwcm9jZXNzZXMgb2YgdGhlIHNlY3JldCBjaGVtaXN0cnkgb2YgbmF0dXJlLCBvciBmb3IgCnRoZSBwaGlsb3NvcGhlciB0byBoYXYg4oCiOiByZXZlYWxlZCB0byBoaW0gc28gbXVjaCAKbW9yZSB0aGFuIGV2ZXIgYmVmb3JlIG9mIHRoZSB3b3JraW5nIG9mIHRoZSBncmVhIAp0aiBteXN0ZXJpZXMgb2YgbGlmZSBhbmQgZGVhdGg/IFRvIGhpbSB0aG9zZSB3aG8gYW4gCmZnb25lIGZyb20gdGhpcyBwbGFuZSBhcmUgZGVhZCBubyBsb25nZXIsIGJ1dCBsaXZpbmcgClwgfGFuZCB3aXRoaW4gcmVhY2ggZm9yIGEgbG9uZyB0aW1lIHRvIGNvbWUgOyBmb3IgaGltaiAKbGFueSBvZiB0aGUgY29uY2VwdGlvbnMgb2YgcmVsaWdpb24gYXJlIG5vIGxvbmdlciEgCm1hdHRlcnMgb2YgZmFpdGZyLCBidXQgb2Yga25vd2xlZGdlLiBBYm92ZSBhbGwsIGhlIAoKCnQgCgoKNzggCgoKQ0xBSVJWT1lBTkNFIAoKCm9mIHVzZSBvbiBhIGxhcmdlIHNjYWxlLiBVbmRvdWJ0ZWRseSBjbGFpcnZveWFuY2UsIApldmVuIHdoZW4gY29uZmluZWQgdG8gdGhlImFzdGZhbOKAmSBwbGFuZSwgaXMgYSBncmVhdCAKYm9vbiB0byB0aGUgc3R1ZGVudC4gCgpDZXJsYWxubHkgbHQgaGFzIGl0cyBkYW5nZXJzIGFsc28sIGVzcGVjaWFsbHkgZm9yLmp0aGUgCmp1bXRyYXlqZWQgOyBkYW5nZXIgZnJvbWV2aWwgZW50aXRpZXMgb2YgdmFyaW91cyBraW5kcywgCndoaWNoIG1heSB0ZXJyaWZ5IG9yIGluanVyZSB0aG9zZSB3aG8gYWxsb3cgdGhlbS0gCnNlbHZlcyB0byBsb3NlIHRoZSBjb3VyYWdlIHRvIGZhY2UgdGhlbSBib2xkbHkgOyBkYW5nZXIgCm9mIGRlY2VwdGlvbiBvZiBhbGwgc29ydHMsIG9mIG1pc2NvbmNlaXZpbmcgYW5kIG1pcy0gCmludGVycHJldGluZyB3aGF0IGlzIHNlZW4gOyBncmVhdGVzdCBvZiBhbGwsIHRoZSBkYW5nZXIgCm9mIGJlY29taW5nIGNvbmNlaXRlZCBhYm91dCB0aGUgdGhpbmcgYW5kIG9mIHRoaW5rLSAKaW5nIGl0IGltcG9zc2libGUgdG8gbWFrZSBhIG1pc3Rha2UuIEJ1dCBhIGxpdHRsZSAKY29tbW9uLXNlbnNlIGFuZCBhIGxpdHRsZSBleHBlcmllbmNlIHNob3VsZCBlYXNpbHkgCmd1YXJkIGEgbWFuIGFnYWluc3QgdGhlc2UuIAoKdDEgCgpUaGUgdmVoaWNsZSBlbXBsb3llZCBpcyBubyBsb25nZXIgdGhlIGFzanJyYWwgCmZib2R5LCBidXQgdGhlIG1pXmReeV52IOKAlCBhIHZlaGljbGUsIHRoZXJlZm9yZSwgYmUtIApsb25naW5nIHRvIHRoZSBtZW50YWwgcGxhbmUsIGFuYSB8YXlpbmcgCgosbmUsIAoKCnRlbnRpYWlpdGllcyAKCgoubnNjZW5kZW50IGluIGl0cyBhY3Rpb24geWV0IHNvIGltcG9zc2libGUgdG8gCmRlc2NyaWJlLiBBIG1hbiBmdW5jdGlvbmluZyBpbiB0aGlzIGxlYXZlcyBoaXMgYXN0cmFsIAoKSmJvXiB0aGUgcGh5c2ljYWleIGFuZCBpZiBoZSAKCnByaXNoZXMgdG8gc2hvdyBoaW1zZWxmIHVwb24gdGhlIGFzdHJhbCBwbGFuZSBmb3IgYW4geW0gCuKWoHJlYXNvbiwgaGUgZG9lcyBub3Qgc2VuZCBmb3IgaGlzIG93biBhc3RyYWwgdmVoaWNsZSwgCmp1c3QgYnkgYSBzaW5nbGUgYWN0aW9uIG9mIGhpcyB3aWxsIG1hdGVyaWFsaXplcyBvbmUgCmhpcyB0ZW1wb3JhcnkgbmVlZC4gU3VjaCBhbiBhU3JhbF5tYXRlcmlhbGl6YS0gCmlzIHNvbWV0aW1lcyBjYWxsZWQgdGhlIG1heWl2aXJ1cGEsIGFuZCB0byBmb3JtIDogCgoKVEhFIE1FTlRBTCBCT0RZIAoKCjc5IAoKCml0IGZvciB0aGUgZmlyc3QgdGltZSB1c3VhbGx5IG5lZWRzIHRoZSBhc3Npc3RhbmNlIG9mIGEgCgpndWFtZWZsanRhYXRnLiAKClRoZSBlbm9ybW91cyBhZHZhbnRhZ2VzIGdpdmVuIGJ5IHRoZSBwb3NzZXNzaW9uIApvZiB0aGlzIHBvd2VyIGFyZSB0aGUgY2FwYWNpdHkgb2YgZW50ZXJpbmcgdXBvbiBhbGwgCgp0aGUgZ2xvcnkgYW5kIHRoZSBiZWF1dHkgb2YgdGhlIGhpZ2hlciBsYW5kIC4gb2YgYmxpc3MsIAoKYW5kIHRoZSBwb3NzZXNzaW9uLCBldmVuIHdoZW4gd29ya2luZyBvbiB0aGUgYXN0cmFsIApwbGFuZSwgb2YgdGhlIGZhciBtb3JlIGNvbXByZWhlbnNpdmUgbWVudGFsIHNlbnNlIAp3aGljaCBvcGVucyB1cCB0byB0aGUgc3R1ZGVudCBzdWNoIG1hcnZlbGxvdXMgdmlzdGFzIApvZiBrbm93bGVkZ2UsIGFuZCBwcmFjdGljYWxseSByZW5kZXJzIGVycm9yIGFsbCBidXQgCmltcG9zc2libGUuIFRoaXMgaGlnaGVyIGZsaWdodHMgaG93ZXZlciwgaXMgcG9zc2libGUgaiAKZm9yIHRoZSB0cmFpbmVkIG1hbiBvbmx5LCBzaW5jZSBvbmx5IHVuZGVyIGRlZmluaXRlfCAKdHJhaW5pbmcgY2FuIGEgbWFuIGF0IHRoaXMgc3RhZ2Ugb2YgZXZvbHV0aW9uIGxlYXJuIHRvIGogCmVtcGxveSBoaXMgbWVudGFsIGJvZHkgYXMgYSB2ZWhpY2xlLiAqIAoKQmVmb3JlIGxlYXZpbmcgdGhlIHN1YmplY3Qgb2YtIGZ1bGwgYW5kIGludGVudGlvbmFsIArigKIgY2xhaXJ2b3lhbmNlLCBpdCBtYXkgYmUgd2VsbCB0byBkZXZvdGUgYSBmZXcgd29yZHMgdG8gCmFuc3dlcmluZyBvbmUgb3IgdHdvIHF1ZXN0aW9ucyBhcyB0byBpdHMgbGltaXRhdGlvbnMsIAp3aGljaCBjb25zdGFudGx5IG9jY3VyIHRvIHN0dWRlbnRzLiBJcyBpdCBwb3NzaWJsZSwgCndlIGFyZSBvZnRlbiBhc2tlZCwgZm9yIHRoZSBzZWVyIHRvIGZpbmQgYW55IHBlcnNvbiAKd2l0aCB3aG9tIGhlIHdpc2hlcyB0byBjb21tdW5pY2F0ZSwgYW55d2hlcmUgaW4gCnRoZSB3b3JsZCwgd2hldGhlciBoZSBiZSBsaXZpbmcgb3IgZGVhZCA/IAoKVG8gdGhpcyByZXBseSBtdXN0IGJlIGEgY29uZGl0aW9uYWwgYWZmaXJtYXRpdmUuIApZZXMsIOKAmGl0IGlzIHBvc3NpYmxlIHRvIGZpbmQgYW55IHBlcnNvbiBpZiB0aGUgZXhwZXJpLSAKbWVudGVyIGNhbiwgaW4gc29tZSB3YXkgb3Igb3RoZXIsIHB1dCBoaW1zZWxmIGVuIAptXCByYXBwb3J0IHdpdGggdGhhdCBwZXJzb24uIEl0IHdvdWxkIGJlIGhvcGVsZXNzIHRvIApwbHVuZ2UgdmFndWVseSBpbnRvIHNwYWNlIHRvIGZpbmQgYSB0b3RhbCBzdHJhbmdlciAKYW1vbmcgYWxsIHRoZSBtaWxsaW9ucyBhcm91bmQgdXMgd2l0aG91dCBhbnkga2luZCAKb2YgY2x1ZSA6IGJ1dCwgb24gdGhlIG90aGVyIGhhbmQsIGEgdmVyeSBzbGlnaHQgY2x1ZSAKd291bGQgdXN1YWxseSBiZSBzdWZmaWNpZW50LiAKCgo4byAKCgpDTEFJUlZPWUFOQ0UgCgoKSWYgdGhlIGNsYWlydm95YW50IGtub3dzIGFueXRoaW5nIG9mIHRoZSBtYW4gCnwgd2hvbSBoZSBzZWVrcywgaGUgd2lsbCBoYXZlIG5vIGRpZmZpY3VsdHkgaW4gZmluZGluZyAKQWhpbSwgZm9yIGV2ZXJ5IG1hbiBoYXMgd2hhdCBtYXkgYmUgY2FsbGVkIGFea2luZF5wZiAKSm11c2ljYWwgY2hvcmQgb2YgaGlzIG93biDigJQgYSBjaG9yZCB3aGljaCBpcyB0aGUgCmkgZXhwcmVzc2lvbiBvZiBoaW0gYXMgYSB3aG9sZSwgcHJvZHVjZWQgcGVyaGFwcyBieSAKayBzb3J0IG9mIGF2ZXJhZ2Ugb2YgdGhlIHJhdGVzIG9mIHZpYnJhdGlvbiAub2YgYWxsIGhpcyAKZGlmZmVyZW50IHZlaGljbGVzIG9uIHRoZWlyIHJlc3BlY3RpdmUgcGxhbmVzLiBJZiB0aGUgCk9wZXJhdG9yIGtub3dzIGhvdyB0byBkaXNjZXJuIHRoYXQgY2hvcmQgYW5kIHRvIArigKJTdHJpa2UgaXQsIGl0IHdpbGwgYnkgc3ltcGF0aGV0aWMgdmlicmF0aW9uIGF0dHJhY3QgdGhlIApmYXR0ZW50aW9uIG9mIHRoZSBtYW4gaW5zdGFudGx5IHdoZXJldmVyIGhlIG1heSBiZSwgCmlhbmQgd2lsbCBldm9rZSBhbiBpbW1lZGlhdGUgcmVzcG9uc2UgZnJvbSBoaW0uIAoKV2hldGhlciB0aGUgbWFuIHdlcmUgbGl2aW5nIG9yIHJlY2VudGx5IGRlYWQgCndvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSBhdCBhbGwsIGFuZCBjbGFpcnZveWFuY2Ugam9mIAp0aGUgZmlmdGggY2xhc3MgY291bGQgYXQgb25jZSBmaW5kIGhpbSBldmVuIGFtb25nIAp0aGUgY291bnRsZXNzIG1pbGxpb25zIGluIHRoZSBoZWF2ZW4tIHdvcmxkLCB0aG91Z2ggaW4gKCAKdGhhdCBjYXNlIHRoZSBtYW4gaGltc2VsZiB3b3VsZCBiZSB1bmNvbnNjaW91cyB0aGF0IApoZSB3YXMgdW5kZXIgb2JzZXJ2YXRpb24uIE5hdHVyYWxseSBhIHNlZXIgd2hvc2UgCmNvbnNjaW91c25lc3MgZGlkIG5vdCByYW5nZSBoaWdoZXIgdGhhbiB0aGUgYXN0cmFsIApwbGFuZSDigJQgd2hvIGVtcGxveWVkIHRoZXJlZm9yZSBvbmUgb2YgdGhlIGVhcmxpZXIgCm1ldGhvZHMgb2Ygc2VlaW5nIOKAlCB3b3VsZCBub3QgYmUgYWJsZSB0byBmaW5kIGEgcGVyc29uIAp1cG9uIHRoZSBtZW50YWwgcGxhbmUgYXQgYWxsIDsgeWV0IGV2ZW4gaGUgd291bGQgCmF0IGxlYXN0IGJlIGFibGUgdG8gdGVsbCB0aGF0IHRoZSBtYW4gc291Z2h0IGZvciB3YXMgCnVwb24gdGhhdCBwbGFuZSwgZnJvbSB0aGUgbWVyZSBmYWN0IHRoYXQgdGhlIHN0cmlraW5nIApvZiB0aGUgY2hvcmQgYXMgZmFyIHVwIGFzIHRoZSBhc3RyYWwgbGV2ZWwgcHJvZHVjZWQgbm8gCnJlc3BvbnNlLiAKCmc6IElmIHRoZSBtYW4gc291Z2h0IGJlIGEgc3RyYW5nZXIgdG8gdGhlIHNlZWtlciwgdGhlIApmbGF0dGVyIHdpbGwgbmVlZCBzb21ldGhpbmcgY29ubmVjdGVkIHdpdGggaGltIHRvIGFjdCAKbGFzIGEgY2x1ZeKAlCBhIHBob3RvZ3JhcGgsIGEgbGV0dGVyIHdyaXR0ZW4gYnktaGltLCBhbiAKCgpESVNUQU5DRSBMSU1JVCAKCgo4MSAKCgphcnRpY2xlIHdoaWNoIGhhcyBiZWxvbmdlZCB0byBoaW0sIGFuZCBpcyBpbXByZWduYXRlZCAKd2l0aCBoaXMgcGVyc29uYWwgbWFnbmV0aXNtIDsgYW55IG9mIHRoZXNlIHdvdWxkIGRvIAppbiB0aGUgaGFuZHMgb2YgYSBwcmFjdGlzZWQgc2Vlci4gCgpBZ2FpbiBJIHNheSwgaXQgbXVzdCBub3QgdGhlcmVmb3JlIGJlIHN1cHBvc2VkIHRoYXQgCnB1cGlscyB3aG8gaGF2ZSBiZWVuIHRhdWdodCBob3cgdG8gdXNlIHRoaXMgYXJ0IGFyZSBhdCAKbGliZXJ0eSB0byBzZXQgdXAgYSBraW5kIG9mIGludGVsbGlnZW5jZSBvZmZpY2UgdGhyb3VnaCAKd2hpY2ggY29tbXVuaWNhdGlvbiBjYW4gYmUgaGFkIHdpdGggbWlzc2luZyBvciAKZGVhZCByZWxhdGl2ZXMuIEEgbWVzc2FnZSBnaXZlbiBmcm9tIHRoaXMgc2lkZSB0byAKc3VjaCBhbiBvbmUgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGhhbmRlZCBvbiwgCmFjY29yZGluZyB0byBjaXJjdW1zdGFuY2VzLCBidXQgZXZlbiBpZiBpdCB3ZXJlLCBubyAKcmVwbHkgbWlnaHQgYmUgYnJvdWdodCwgbGVzdCB0aGUgdHJhbnNhY3Rpb24gc2hvdWxkIApwYXJ0YWtlIG9mIHRoZSBuYXR1cmUgb2YgYSBwaGVub21lbm9uIOKAlCBzb21ldGhpbmcgCndoaWNoIGNvdWxkIGJlIHByb3ZlZCBvbiB0aGUgcGh5c2ljYWwgcGxhbmUgdG8gaGF2ZSAKYmVlbiBhbiBhY3Qgb2YgbWFnaWMuIAoKCuKAoiBBbm90aGVyIHF1ZXN0aW9uIG9mdGVuIHJhaXNlZCBpJiBhcyB0byB3aGV0aGVyLCBpbiAKdGhlIGFjdGlvbiBvZiBwc3ljaGljIHZpc2lvbiwgdGhlcmUgaXMgYW4gdnUuIHwgXl5saXRhdGlvbiBhczsgCnRvIGRpc3RhbmNlLiBUaGUgcmVwbHkgd291bGQgc2VlbSB0byBiZSB0aGF0dGhecmUgCnNob3VsZGJlIG5vIGxpbWl0IGJ1dCB0aGF0IG9mIHRoZSByZXNwZWN0aXZlIHBsYW5lcy4gCkl0IG11c3QgYmUgcmVtZW1iZXJlZCB0aGF0IHRoZSBhc3RyYWwgYW5kIG1lbnRhbCAKcGxhbmVzIG9mIG91ciBlYXJ0aCBhcmUgYXMgZGVmaW5pdGVseSBpdHMgb3duIGFzIGl0cyAKYXRtb3NwaGVyZSwgdGhvdWdoIHRoZXkgZXh0ZW5kIGNvbnNpZGVyYWJseSBmdXJ0aGVyIApmcm9tIGl0IGV2ZW4gaW4gb3VyIHRocmVlLWRpbWVuc2lvbmFsIHNwYWNlIHRoYW4gCmRvZXMgdGhlIHBoeXNpY2FsIGFpci4gQ29uc2VxdWVudGx5IHRoZSBwYXNzYWdlIHRvLCAKZ3IgdGhlIGRldGFpbGVkIHNpZ2h0IG9mLCBvdGhlciBwbGFuZXRzIHdvdWxkIG5vdCBiZSAKcG9zc2libGUgZm9yIGFueSBzeXN0ZW0gb2YgY2xhaXJ2b3lhbmNlIGNvbm5lY3RlZCAKd2l0aCB0aGVzZSBwbGFuZXMuIEl0IGlzIHF1aXRlIHBvc3NpYmxlIGFuZCBlYXN5IGZvciAKdGhlIG1hbiB3aG8gY2FuIHJhaXNlIGhpcyBjb25zZWkmbnNuZXNzIHRvIHRoZSAKCgo4MiAKCgpDTEFJUlZPWUFOQ0UgCgoKMSAxIHRvIG91ciBjaGFpbiBvZiB3b3JsZHMsIGJ1dCB0aGF0IGlzIG91dHNpZGUgb3VyIHByZXNlbnQgCjExIHN1YmplY3QgCgosIFN0aWxsIGEgZ29vZCBkZWFsIG9mIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgCkpvdGhlciBwbGFuZXRzIGNhbiBiZSBvYnRhaW5lZCBieSB0aGUgdXNlIG9mIHN1Y2ggY2xhaXItIApmdm95YW50IGZhY3VsdGllcyBhcyB3ZSBoYXZlIGJlZW4gZGVzY3JpYmluZy4gSXQgaXMgCmkgcG9zc2libGUgdG8gbWFrZSBzaWdodCBlbm9ybW91c2x5IGNsZWFyZXIgYnkgcGFzc2luZyAKb3V0c2lkZSBvZiB0aGUgY29uc3RhbnQgZGlzdHVyYmFuY2VzIG9mIHRoZSBlYXJ0aCdzIAphdG1vc3BoZXJlLCBhbmQgaXQgaXMgYWxzbyBub3QgZGlmZmljdWx0IHRvIGxlYXJuIGhvdyB0byAKcHV0IG9uIGFuIGV4Y2VlZGluZ2x5IGhpZ2ggbWFnbmlmeWluZyBwb3dlciwgc28gdGhhdCAKZXZlbiBieSBvcmRpbmFyeSBjbGFpcnZveWFuY2UgYSBnb29kIGRlYWwgb2YgdmVpeSBpbi0gCiogZmp0IHRlcmVzdGluZyBhc3Ryb25vbWljYWwga25vd2xlZGdlIG1heSBiZSBnYWluZWQuIAoxIEJ1dCBhcyBmYXIgYXMgdGhpcyBlYXJ0aCBhbmQgaXRzIGltbWVkaWF0ZSBzdXJyb3VuZC0gCmluZ3MgYXJlIGNvbmNlcm5lZCwgdGhlcmUgaXMgcHJhY3RpY2FsbHkgbm8gbGltaXRhdGlvbi4gCgoKQ0hBUFRFUiBWLiAKCgpDbGFpcnZveWFuY2UsIC5pbiBTcGFjZSA6IFNlbWktSW54ZW4udDQ8d2FsLiAKClVOREVSIHRoaXMgcmF0aGVyIGN1cmlvdXMgdGl0bGUgSSBhbSBncm91cGluZyB0by0gCmdldGhlciB0aGUgY2FzZXMgb2YgYWxsIHRob3NlIHBlb3BsZSB3aG8gZGVmaW5pdGVseSBzZXQgCnRoZW1zZWx2ZXMgdG8gc2VlIHNvbWV0aGluZywgYnV0IGhhdmUgbm8gaWRlYSB3aGF0IAp0aGUgc29tZXRoaW5nIHdpbGwgYmUsIGFuZCBubyBjb250cm9sIG92ZXIgdGhlIHNpZ2h0IAphZnRlciB0aGUgdmlzaW9ucyBoYXZlIGJlZ3VuIOKAlCBwc3ljaGljIE1pY2F3YmVycywgd2hvIAojIHB1dCBmaGVtc2VsdmVzIGludG8gcCByZWNlcHRpdmUgY29uZGl0aW9uICwgYW5kIHRoZW4gCnNpbXBseSB3YWl0IGZvciBzb21ldGhBbl50cSAudGlpcm4gdXAuIE1hbnkgdHJhbmNlLSAKbWVkaXVtcyB3b3VsZCBjb21lIHVuZGVyIHRoaXMgaGVhZGluZyA7IHRoZXkgZWl0aGVyIAppbiBzb21lIHdheSBoeXBub3RpemUgdGhlbXNlbHZlcyBvciBhcmUgaHlwbm90aXNlZCAKCmJ5IC5zb21lIOKAnCBzcGlyaXQtZ3VpZGUsJyDigJ0gYW5kIHRoZW4gdGhleSBkZXNjcmliZSB0aGUgCgpzY2VuZXMgb3IgcGVyc29ucyB0aGF0IGhhcHBlbiB0byBmbG9hdCBiZWZvcmUgdGhlaXIgCnZpc2lvbi4gU29tZXRpbWVzLCBob3dldmVyLCB3aGVuIGluIHRoaXMgY29uZGl0aW9uIAp0aGV5IHNlZSB3aGF0IGlzIHRha2luZyBwbGFjZSBhdCBhIGRpc3RhbmNlLCBhbmQgc28gCnRoZXkgY29tZSB0byBoYXZlIGEgcGxhY2UgYW1vbmcgb3VyIOKAnCBjbGFpcnZveWFudHMgCuKAomluIHNwYWNlLuKAnSAKCkJ1dCB0aGUgbGFyZ2VzdCBhbmQgbW9zdCB3aWRlbHktc3ByZWFkIGJhbmQgb2YgCnRoZXNlIHNlbWktaW50ZW50aW9uYWwgY2xhaXJ2b3lhbnRzIGFyZSB0aGUgdmFyaW91cyAKa2luZHMgNmYgY3J5c3RhbC1nYXplcnMg4oCUIHRob3NlIHdobywgYXMgTXIuIEFuZHJldyAKTGFuZyBwdXRzIGl0LCDigJwgc3RhcmUgaW50byBhIGNyeXN0YWwgYmFsbCwgYSBjdXAsIGEgbWlycm9yLCAKCjgzIAoKCmYgCgoKODQgQ0xBSVJWT1lBTkNFIAoKYSBibG9iIG9mIGluayAoRWd5cHQgYW5kIEluZGlhKSwgYSBkcm9wIG9mIGJsb29kIAooYW1vbmcgdGhlIE1hb3JpZXMgb2YgTmV3IFplYWxhbmQpLCBhIGJvd2wgb2Ygd2F0ZXIgCihSZWQgSW5kaWFuKSwgYSBwb25kIChSb21hbiBhbmQgQWZyaWNhbiksIHdhdGVyIGluIAphIGdsYXNzIGJvd2wgKGluIEZleiksIG9yIGFsbW9zdCBhbnkgcG9saXNoZWQgc3VyZmFjZSDigJ0gCntEcmVhbXMgYW5kIEdob3N0cyAsIHAuLCA1NykuIAoKVHdvIHBhZ2VzIGxhdGVyIE1yLiBMYW5nIGdpdmVzIHVzIGEgdmVyeSBnb29kIApleGFtcGxlIG9mIHRoZSBraW5kIG9mIHZpc2lvbiBtb3N0IGZyZXF1ZW50bHkgc2VlbiBpbiAKdGhpcyB3YXkuIOKAnCBJIGhhZCBnaXZlbiBhIGdsYXNzIGJhbGws4oCdIGhlIHNheXMsIOKAnCB0byBhIAp5b3VuZyBsYWR5LCBNaXNzIEJhaWxsaWUsIHdobyBoYWQgc2NhcmNlbHkgYW55IHN1Y2Nlc3MgCndpdGggaXQgU2hlIGxlbnQgaXQgdG8gTWlzcyBMZXNsaWUsIHdobyBzYXcgYSBsYXJnZSAKc3F1YXJlLCBvbGQtZmFzaGlvbmVkIHJlZCBzb2ZhIGNvdmVyZWQgd2l0aCBtdXNsaW4sIAp3aGljaCBzaGUgZm91bmQgaW4gdGhlIG5leHQgY291bnRyeS1ob3VzZSBzaGUgdmlzaXRlZC4gCk1pc3MgQmFpbGxpZSBzIGJyb3RoZXIsIGEgeW91bmcgYXRobGV0ZSwgbGF1Z2hlZCBhdCAKdGhlc2UgZXhwZXJpbWVudHMsIHRvb2sgdGhlIGJhbGwgaW50byB0aGUgc3R1ZHksIGFuZCAKY2FtZSBiYWNrIGxvb2tpbmcg4oCYIGdleSBnYXNoLuKAmSBIZSBhZG1pdHRlZCB0aF50IGhlICMgCmhhZCBzZWVuIGEgdmlzaW9uIOKAlCBzb21lYm9keSBoZSBrbmV3IHVuZGVyIGEgbGFtcC4gCgrilqAgSGUgd291bGQgZGlzY292ZXIgZHVyaW5nIHRoZSB3ZWVrIHdoZXRoZXIgaGUgc2F3IApyaWdodCBvciBub3QgVGhpcyB3YXMgYXQgNS4zMCBvbiBhIFN1bmRheSBhZnRlcm5vb24uIAoK4oCcIE9uIFR1ZXNkYXksIE1yLiBCYWlsbGllIHdhcyBhdCBhIGRhbmNlIGluIGEgdG93biAKc29tZSBmb3J0eSBtaWxlcyBmcm9tIGhpcyBob21lLCBhbmQgbWV0IGEgTWlzcyAKUHJlc3Rvbi4g4oCYIE9uIFN1bmRheSwnIGhlIHNhaWQsIOKAmCBhYm91dCBoYWxmLXBhc3QgZml2ZSAKeW91IHdlcmUgc2l0dGluZyB1bmRlciBhIHN0YW5kYXJkIGxhbXAgaW4gYSBkcmVzcyBJIApuZXZlciBzYXcgeW91IHdlYXIsIGEgYmx1ZSBibG91c2Ugd2l0aCBsYWNlIG95ZXIgdGhlIApzaG91bGRlcnMsIHBvdXJpbmcgb3V0IHRlYSBmb3IgYSBtYW4gaW4gYmx1ZSBzZXJnZSwgCndob3NlIGJhY2sgd2FzIHRvd2FyZHMgbWUsIHNvIHRoYXQgSSBvbmx5IHNhdyB0aGUgCnRpcCBvZiBoaXMgbW91c3RhY2hlLicgCgrigJzigJhXaHksIHRoZSBibGluZHMgbXVzdCBoYXZlIGJlZW4gdXAsJyBzYWlkIE1pc3MgCuKAoiBQcmVzdG9uLiAKCgpDUllTVEFMLUdBWklORyA4NSAKCsKjwqM8IDEgd2FzIGF0IER1bGJ5LOKAmSBzYWlkIE1yLiBCYWlsbGllLCBhbmQgaGUgdW5kZW5pLSAKYWJseSB3YXMg4oCdIAoKVGhpcyBpcyBxdWl0ZSBhIHR5cGljYWwgY2FzZSBvZiBjcnlzdGFsLWdhemluZyDigJQgdGhlIApwaWN0dXJlIGNvcnJlY3QgaW4gZXZlcnkgZGV0YWlsLCB5b3Ugc2VlLCBhbmQgeWV0IGFic28tIApsdXRlbHkgdW5pbXBvcnRhbnQgYW5kIGJlYXJpbmcgbm8gYXBwYXJlbnQgc2lnbmlmaWNhLSDigKIgCnRpb24gb2YgYW55IHNvcnQgdG8gZWl0aGVyIHBhcnR5LCBleGNlcHQgdGhhdCBpdCBzZXJ2ZWQgCnRvIHByb3ZlIHRvIE1yLiBCYWlsbGllIHRoYXQgdGhlcmUgd2FzIHNvbWV0aGluZyBpbiAKY3J5c3RhbC1nYXppbmcuIFBlcmhhcHMgbW9yZSBmcmVxdWVudGx5IHRoZSB2aXNpb25zIAp0ZW5kIHRvIGJlIG9mIGEgcm9tYW50aWMgY2hhcmFjdGVyIOKAlCBtZW4gaW4gZm9yZWlnbiAKZHJlc3MsIG9yIGJlYXV0aWZ1bCB0aG91Z2ggZ2VuZXJhbGx5IHVua25vd24gbGFuZC0gCnNjYXBlcy4gCgpOb3cgd2hhdCBpcyB0aGUgcmF0aW9uYWxlIG9mIHRoaXMga2luZCBvZiBjbGFpcnZveS0gCmFucGUgPyBBcyBJIGhhdmUgaW5kaWNhdGVkIGFib3ZlLCBpdCBiZWxvbmdzIHVzdWFsbHkgCnRvIHRoZSDigJxhc3RyYWwtY3VycmVudOKAnSB0eXBlLCBhbmQgdGhlIGNyeXN0YWwgb3Igb3RoZXIgCgrigKIgb2YgdGhlIApzZWVyLCBhbmQgYSBjb252ZW5pZW50IHN0YXJ0aW5nLXBvaW50IGZvciBoaXMgYXN0cmFsIHR1YmUuIAoKVGhlbSBhcmUgc29tZSB3aG8gY2FuIGluZmx1ZW5jZSB3aGF0IHRoZXkgd2lsbCBzZWVsIApieSN0aGVpciB3aWxsLCB0aGF0IGlzIHRvIHNheSB0aGV5IGhhdmUgdGhlIHBvd2VyIG9maSAKcG9pbnRpbmcgdGhlaXIgdGVsZXNjb3BlIGFzIHRoZXkgd2lzaCA7IGJ1dCB0aGUgZ3JlYXQgCm1ham9yaXR5IGp1c3QgZm9ybSBhIGZvcnR1aXRvdXMgdHViZSBhbmQgc2VlIHdoYXRldmVyIApoYXBwZW5zIHRvIHByZXNlbnQgaXRzZWxmIGF0IHRoZSBlbmQgb2YgaXQuIAoKU29tZXRpbWVzIGl0IG1heSBiZSBhIHNjZW5lIGNvbXBhcmF0aXZlbHkgbmVhciBhdCAKaGFuZCwgYXMgaW4gdGhlIGNhc2UganVzdCBxdW90ZWQgOyBhdCBvdGhlciB0aW1lcyBpdCB3aWxsIApiZSBhIGZhci1hd2F5IE9yaWVudGFsIGxhbmRzY2FwZSA7IGF0IG90aGVycyB5ZXQgaXQgbWF5IApiZSBhIHJlZmxlY3Rpb24gb2Ygc29tZSBmcmFnbWVudCBvZiBhbiAmayZzaGljIHJlY29yZCwgCgphbmQgdGhlbiB0aGUgcGljdHVyZSB3aWxsIGNvbnRhaW4gZmlndXJlcyBpbiBzb21lIAoKJOKWoCAKCmFudGlxdWUgZHJlc3MsIGFuZCB0aGUgcGhlbm9tZW5vbiBiZWxvbmdzIHRvIG91ciAKdGhpcmQgbGFyZ2UgZGl2aXNpb24gb2Yg4oCcIGNsYWlydm95YW5jZSBpbiB0aW1lLuKAnSBpdCBpcyAKCgpmIAoKCjg2IENMQUlSVk9ZQU5DRSAKCnNhaWQgdGhhdCB2aXNpb25zIG9mIHRoZSBmdXR1cmUgYXJlIHNvbWV0aW1lcyBzZWVuIGluIApjcnlzdGFscyBhbHNvIOKAlCBhIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgdG8gd2hpY2ggd2UgCm11c3QgcmVmZXIgbGF0ZXIuIAoKSSBoYXZlIHNlZW4gYSBjbGFpcnZveWFudCB1c2UgaW5zdGVhZCBvZiB0aGUgb3JkaW5hcnkgCnNoaW5pbmcgc3VyZmFjZSBhIGRlYWQgYmxhY2sgb25lLCBwcm9kdWNlZCBieSBhIGhhbmQtIApmdWwgb2YgcG93ZGVyZWQgY2hhcmNvYWwgaW4gYSBzYXVjZXIuIEluZGVlZCBpdCBkb2VzIApub3Qgc2VlbSB0byBtYXR0ZXIgbXVjaCB3aGF0IGlzIHVzZWQgYXMgYSBmb2N1cywgCgoxIGV4Y2VwdCB0aGF0IHB1cmUgY3J5c3RhbCBoYXMgYW4gdW5kb3VidGVkIGFkdmFudGFnZSAKb3ZlciBvdGhlciBzdWJzdGFuY2VzIGluIHRoYXQgaXRzIHBlY3VsaWFyIGFycmFyaWdlbWVudCAKb2YgZWxlbWVudGFsIGVzc2VuY2UgcmVuZGVycyBpdCBzcGVjTWJMSlN0aW11bGF0aW7CoyB0byAKbWUgcHN5Y2hpYyBmYWN1bHRpZXMuIAoKSXQgc2VlbXMgcHJvYmFibGUsIGhvd2V2ZXIsIHRoYXQgaW4gY2FzZXMgd2hlcmUgYSAKdGlueSBicmlsbGlhbnQgb2JqZWN0IGlzIGVtcGxveWVkIOKAlCBzdWNoIGFzIGEgcG9pbnQgb2YgCmxpZ2h0LCBvciB0aGUgZHJvcCBvZiBibG9vZCB1c2VkIGJ5IHRoZSBNYW9yaWVzIOKAlCB0aGUgCmluc3RhbmNlIGlzIGluIHJlYWxpdHkgbWVyZWx5IG9uZSBvZiBzZWxmLWh5cG5vdGl6YXRpb24uIApBbW9uZyBub24tRXVyb3BlYW4gbmF0aW9ucyB0aGUgZXhwZXJpbWVudCBpcyB2ZXJ5IAoxIGZyZXF1ZW50bHkgcHJlY2VkZWQgb3IgYWNjb21wYW5pZWQgYnkgbWFnaWNhbCBjZXJlLSAKSSB8bm9uaWVzIGFuZCBpbnZvY2F0aW9ucywgc28gdGhhdCBpdCBpcyBxdWl0ZSBsaWtlbHkgdGhhdCAKfHB1Y2ggc2lnaHQgYXMgaXMgZ2FpbmVkIG1heSBzb21ldGltZXMgYmUgcmVhbGx5IHRoYXQgCnxkZiBzb21lIGZvcmVpZ24gZW50aXR5LCBhbmQgc28gdGhlIHBoZW5vbWVub24gbWF5IApebiBmYWN0IGJlIG1lcmVseSBhIGNhc2Ugb2YgdGVtcG9yYXJ5IHBvc3Nlc3Npb24sIGFuZCAKbW90IG9mIGNsYWlydm95YW5jZSBhdCBhbGwuIAoKCkNIQVBURVIgVkkuIAoKCkNsYWlydm95YW5jZSBpbiBTcGFjZSA6IFVuaW50ZW50aW9uYWwuIAoKClVuZGVyIHRoaXMgaGVhZGluZyB3ZSBtYXkgZ3JvdXAgdG9nZXRoZXIgYWxIIAp0aG9zZSBjYXNlcyBpbiB3aGljaCB2aXNpb25zIG9mIHNvbWUgZXZlbnQgd2hpY2ggaXNsIAp0YWtpbmcgcGxhY2UgYXQgYSBkaXN0YW5jZSBhcmUgc2VlbiBxdWl0ZSB1bmV4cGVjdGVkbHkhIAoKUCByICIg4pagIAoKYW5kIHdpdGhvdXQgYW55IGtpbmQgb2YgcHJlcGFyYXRpb24uIFRoZXJlIGFyZSBwZW9wbGV8IAoKd2hvIGFyZSBzdWJqZWN0IHRvIHN1Y2ggdmlzaW9ucywgd2hpbGUgdGhlcmUgYXJlIG1hbnkqIApvdGhlcnMgdG8gd2hvbSBzdWNoIGEgdGhpbmcgd2lsbCBoYXBwZW4gb25seSBvbmNlIGluIAphIGxpZmUtdGltZS4gVGhlIHZpc2lvbnMgYXJlIG9mIGFsbCBraW5kcyBhbmQgb2YgYWxsIApkZWdyZWVzIG9mIGNvbXBsZXRlbmVzcywgYW5kIGFwcGFyZW50bHkgbWF5IGJlIHByby0gCmR1Y2VkIGJ5IHZhcmlvdXMgY2F1c2VzLiBTb21ldGltZXMgdGhlIHJlYXNvbiBvZiAKdGhlIHZpc2lvbiBpcyBvYnZpb3VzLCBhbmQgdGhlIHN1YmplY3QtbWF0dGVyIG9mIHRoZSAKZ3JhdmVzdCBpbXBvcnRhbmNlIDsgYXQgb3RoZXIgdGltZXMgbm8gcmVhc29uIGF0IGFsbCBpcyAKZGlzY292ZXJhYmxlLCBhbmQgdGhlIGV2ZW50cyBzaG93biBzZWVtIG9mIHRoZSBtb3N0IAp0cml2aWFsIG5hdHVyZS4gCgpTb21ldGltZXMgdGhlc2UgZ2xpbXBzZXMgb2YgdGhlIHN1cGVyLXBoeXNpY2FsIyAKZmFjdWx0eSBjb21lIGFzIHdha2luZyB2aXNpb25zLCBhbmQgc29tZXRpbWVzIHRoZXlqIAo+IG1hbmlmZXN0IGR1cmluZyBzbGVlcCBhcyB2aXZpZCBvciBvZnQtcmVwZWF0ZWQgZHJlYW1zLiAKSW4gdGhpcyBsYXR0ZXIgY2FzZSB0aGUgc2lnaHQgZW1wbG95ZWQgaXMgcGVyaGFwcyB1c3VhbGx5IApvZiB0aGUga2luZCBhc3NpZ25lZCB0byBvdXIgZm91cnRoIHN1YmRpdmlzaW9uIG9mIGNsYWlyLSAKdm95YW5jZSBpbiBzcGFjZSwgZm9yIHRoZSBzbGVlcGluZyAKCgo4OCAKCgpDTEFJUlZPWUFOQ0UgCgoKRG90IHdpdGggd2hpY2ggaGlzIAoKCm9yIGludGVyZXN0cyBhcmUgY2xvc2VseSBjb21pZWNpRWVkdGFuZCBzaW1wbHkgd2F0Y2hlcy4gCgpeTWxmbF5mZV5yaXJeZm9yXnIgaXQgbF5UXm9FIAoKYWJsZSB0aGF0IHRoZSBzZWNvbmQgdHlwZSBvZiBjbGFpcnZveWFuY2UsIGJ5IG1lYW5zIApvZiB0aGUgYXN0cmFsIGN1cnJlbnQsIGlzIGNhbGxlZCBpbnRvIHJlcXVpc2l0aW9uLiBCdXQgaW4gCnRoaXMgY2FzZSB0aGUgY3VycmVudCBvciB0dWJlIGlzIGZvcm1lZCBxdWl0ZSB1bmNvbi0gCnNjaW91c2x5LCBhbmQgaXMgb2Z0ZW4gdGhlIGF1dG9tYXRpYyByZXN1bHQgb2YgYSBzdHJvbmcgCnRob3VnaHQgb3IgZW1vdGlvbiBwcm9qZWN0ZWQgZnJvbSBvbmUgZW5jIApEdGhlciDigJQgZWl0aGVyIGZyb20gdGhlIHNlZXIgb3IgdGhlIHBlcnNvbiB3aG8gaXMgc2Vlbi4gCgpUaGUgc2ltcGxlc3QgcGxhbiB3aWxsIGJlIHRvIGdpdmUgYSBmZXcgaW5zdGFuY2VzIApvZiB0aGUgZGlmZmVyZW50IGtpbmRzLCBhbmQgdG8gaW50ZXJzcGVyc2UgYW1vbmcgdGhlbSAKc3VjaCBmdXJ0aGVyIGV4cGxhbmF0aW9ucyBhcyBtYXkgc2VlbSBuZWNlc3NhcnkuIAoKClZNci4gU3RlYWQgaGFzIGNvbGxlY3RlZCBhIGxhcmdlIGFuZCB2YXJpZWQganleb3J0bWVudCAKSXFmIHJlY2VudCBhbmReZVUtYXV0aGVudGljXnRlVGNhc2VzIGluIGhpcyBSZWFsIEdob3N0IAp0IFN0b3JpZXMuIGFuZCBJIHdpbGwgc2VsZWN0IHNvbWUgb2YgbXkgZXhhbXBsZXMgZnJvbSAKdGhlbSwgb2NjYXNpb25hbGx5IGNvbmRlbnNpbmcgc2xpZ2h0bHkgdG8gc2F2ZSBzcGFjZS4gCgpUaGVyZSBhcmUgY2FzZXMgaW4gd2hpY2ggaXQgaXMgYXQgb25jZSBvYnZpb3VzIAp0byBhbnkgVGhlb3NvcGhpY2FsIHN0dWRlbnQgdGhhdCB0aGUgZXhjZXB0aW9uYWwgCmluc3RhbmNlIG9mIGNsYWlydm95YW5jZSB3YXMgc3BlY2lhbGx5IGJyb3VnaHQgYWJvdXQgCmlieSBvbmUgb2YgdGhlIGJhbmQgd2hvbSB3ZSBoYXZlIGNhbGxlZCDigJwgSW52aXNpYmxlIApqSGVscGVycyDigJ0gaW4gb3JkZXIgdGhhdCBhaWQgbWlnaHQgYmUgcmVuZGVyZWQgdG8gc29tZSAKbG9uZSBpbiBzb3JlIG5lZWQuIFRvIHRoaXMgY2xhc3MsIHVuZG91YnRlZGx5LCBiZWxvbmdzIAp0aGUgc3RvcnkgdG9sZCBieSBDYXB0YWluIFlvbm50LCBvZiB0aGUgTmFwYSBWYWxsZXkgCmluIENhbGlmb3JuaWEsIHRvIERyLiBCdXNobmVsbCwgd2hvIHJlcGVhdHMgaXQgaW4gaGlzIApOYXR1cmUgYW5kIHRoZSBTdXBlcm5hdHVyYWwgKHAuIDE0KS4gCgrigJwgQWJvdXQgc2l4IG9yIHNldmVuIHllYXJzIHByZXZpb3VzLCBpbiBhIG1pZC0gCndpbnRlcidzIG5pZ2h0LCBoZSBoYWQgYSBkcmVhbSBpbiB3aGljaCBoZSBzYXcgd2hhdCAKYXBwZWFyZWQgdG8gYmUgYSBjb21wYW55IG9mIGVtaWdyYW50cyBhcnJlc3RlZCBieSAKCgpyIAoKCkNBUFRBSU4gWU9OTlQgCgoKJyA4OSAKCnRoZSBzbm93cyBvZiB0aGUgbW91bnRhaW5zLCBhbmQgcGVyaXNoaW5nIHJhcGlkbHkgYnkgCmNvbGQgYW5kIGh1bmdlci4gSGUgbm90ZWQgdGhlIHZlcnkgY2FzdCBvZiB0aGUgCnNjZW5lcnksIG1hcmtlZCBieSBhIGh1Z2UsIHBlcnBlbmRpY3VsYXIgZnJvbnQgb2YgCndoaXRlIHJvY2sgY2xpZmYgOyBoZSBzYXcgdGhlIG1lbiBjdXR0aW5nIG9mZiB3aGF0IAphcHBlYXJlZCB0byBiZSB0cmVlLXRvcHMgcmlzaW5nIG91dCBvZiBkZWVwIGd1bGZzIG9mIApzbm93OyBoZSBkaXN0aW5ndWlzaGVkIHRoZSB2ZXJ5IGZlYXR1cmVzIG9mIHRoZSAKcGVyc29ucyBhbmQgdGhlIGxvb2sgb2YgdGhlaXIgcGFydGljdWxhciBkaXN0cmVzcy4gCgrigJwgSGUgYXdva2UgcHJvZm91bmRseSBpbXByZXNzZWQgYnkgdGhlIGRpc3RpbmN0LSEgCm5lc3MgYW5kIGFwcGFyZW50IHJlYWxpdHkgb2YgdGhlIGRyZWFtLiBIZSBhdCBsZW5ndGggCmZlbGwgYXNsZWVwLCBhbmQgZHJlYW1lZCBleGFjdGx5IHRoZSBzYW1lIGRyZWFtLCBvdmVyIAphZ2FpbjogSW4qIHRoZSBtb3JuaW5nIGhlIGNvdWxkIG5vdCBleHBlbCBpdCBmcm9tIGhpcyAK4pagIG1pbGZkLiBGYWxsaW5nIGluIHNob3J0bHkgYWZ0ZXIgd2l0aCBhbiBvbGQgaHVudGVyIApjb21yYWRlLCBoZSB0b2xkIGhpcyBzdG9yeSwgYW5kIHdhcyBvbmx5IHRoZSBtb3JlIApkZWVwbHkgaW1wcmVzc2VkIGJ5IGhpcyByZWNvZ25pemluZyB3aXRob3V0IGhlc2l0YXRpb24gCnRoZSAjc2NlbmVyeSBvZiB0aGUgZHJlYW0uIFRoaXMgY29tcmFkZSBjYW1lIG92ZXIgCnRoZSBTaWVycmEgYnkgdGhlIENhcnNvbiBWYWxsZXkgUGFzcywgYW5kIGRlY2xhcmVkIAp0aGF0IGEgc3BvdCBpbiB0aGUgUGFzcyBleGFjdGx5IGFuc3dlcmVkIGhpcyBkZXNjcmlwdGlvbi4gCgoqIEJ5IHRoaXMgdGhlIHVuc29waGlzdGljYWwgcGF0cmlhcmNoIHdhcyBkZWNpZGVkLiAKSGUgaW1tZWRpYXRlbHkgY29sbGVjdGVkIGEgY29tcGFueSBvZiBtZW4sIHdpdGggCm11bGVzIGFuZCBibGFua2V0cyBhbmQgYWxsIG5lY2Vzc2FyeSBwcm92aXNpb25zLiAKVGhlIG5laWdoYm91cnMgd2VyZSBsYXVnaGluZyBtZWFudGltZSBhdCBoaXMgCl5jcmVkdWxpdHkuIGNObyBtYXR0ZXIvIGhlIHNhaWQsIOKAmEkgYW0gYWJsZSB0byBkb2kgCmp0IHRoaXMsIGFuZCBJIHdpbGwsIGZvciBJIHZlcmlseSBiZWxpZXZlIHRoYXQgdGhlIGZhY3QgaXMhIAoKYWNjb3JkaW5nIHRvIG15IGRyZWFtLyBUaGUgbWVuIHdlcmUgc2VudCBpbnRvIAptIHRoZSBtb3VudGFpbnMgb25lIGh1bmRyZWQgYW5kIGZpZnR5IG1pbGVzIGRpc3RhbnQvIApkaXJlY3QgdG8gdGhlIENhcnNvbiBWYWxsZXkgUGFzcy4gQW5kIHRoZXJlIHRoZXkgaiAKZm91bmQgdGhlIGNvbXBhbnkgZXhhY3RseSBpbiB0aGUgY29uZGl0aW9uIG9mIHRoZSBqIApkcmVhbSwgYW5kIGJyb3VnaHQgaW4gdGhlIHJlbW5hbnQgYWxpdmUvJyAKCgo5MCAKCgpDTEFJUlZPWUFOQ0UgCgoKU2luY2UgaXQgaXMgbm90IHN0YXRlZCB0aGF0IENhcHRhaW4gWW9ubnQgd2FzIGluIAp0aGUgaGFiaXQgb2Ygc2VlaW5nIHZpc2lvbnMsIGl0IHNlZW1zIGNsZWFyIHRoYXQgc29tZSAKbGVscGVyLCBvYnNlcnZpbmcgdGhlIGZvcmxvcm4gY29uZGl0aW9uIG9mIHRoZSBlbWlncmFudCAKCgpqcGFydHksIHRvb2sgdGhlIG5lYXJlc3QgaW1wcmVzc2lvbmFibGUgYW5kIG90aGVyd2lzZSAKXnN1aXRhYmxlIHBlcnNvbiAod2hvIGhhcHBlbmVkIHRvIGJlIHRoZSBDYXB0YWluKSB0byAKZmhlIHNwb3QgaW4gdGhlIGFzdHJhbCBib2R5LCBhbmQgYXJvdXNlZCBoaW0gc3VmZmktIApjaWVudGx5IHRvIGZpeCB0aGUgc2NlbmUgZmlybWx5IGluIGhpcyBtZW1vcnkuIFRoZSAKJ2hlbHBlciBtYXkgcG9zc2libHkgaGF2ZSBhcnJhbmdlZCBhbiDigJwgYXN0cmFsIApjdXJyZW50IOKAnSBmb3IgdGhlIENhcHRhaW4gaW5zdGVhZCwgYnV0IHRoZSBmb3JtZXIgCnN1Z2dlc3Rpb24gaXMgbW9yZSBwcm9iYWJsZS4gQXQgYW55IHJhdGUgdGhlIAptb3RpdmUsIGFuZCBicm9hZGx5IHRoZSBtZXRob2QsIG9mIHRoZSB3b3JrIGFyZSAKb2J2aW91cyBlbm91Z2ggaW4gdGhpcyBjYXNlLiAKCgpTb21ldGltZXMgdGhlIOKAnCBhc3RyYWwgYyAKCgp0IGF0IHRoZSBvdGhlciBlbmQuIG9mIAoKCnRoZSBsaW5lLCBhbmQgdGhpcyBtYXkgaGFwcGVuIGV2ZW4gdGhvdWdoIHRoZSAKXl5eZVQnVGlhcyBubyBzdWNoIGludGVudGlvbiBpbiBoaXMgbWluZC4gSW4gdGhlIApyYXRoZXIgc3RyaWtpbmcgc3Rvcnkgd2hpY2ggSSBhbSBhYm91dCB0byBxdW90ZSwgaXQgaXMgCmV2aWRlbnQgdGhhdCB0aGUgbGluayB3YXNeZnBybW9kIC4uIGhYdy50aGVfZG9jdG9yLHMgCmZyZXF1ZW50IHRob3VnaHQgYWJvdXQgTXJzLiBCcm91Z2h0b24sIHlldCBoZSBoYWQgCmNUSFRIXiB0aGF0IHNoZSBzaG91bGQgc2VlIHdoYXQgaGUgCgoKd2FzIGRvaW5nIGF0IHRoZSB0aW1lLiBUaGF0IGl0IHdhcyB0aGlzIGtpbmQgb2YgCmNsYWlydm95YW5jZSB0aGF0IHdhcyBlbXBsb3llZCBpcyBzaG93biBieSB0aGUgCmZpeGl0eSBvZiBoZXIgcG9pbnQgb2YgdmlldyDigJQgd2hpY2gsIGJlIGl0IG9ic2VydmVkLCBpcyAKbm90IHRoZSBkb2N0b3IncyBwb2ludCBvZiB2aWV3IHN5bXBhdGhldGljYWxseSB0cmFucy0gCmZlcnJlZCAoYXMgaXQgbWlnaHQgaGF2ZSBiZWVuKSBzaW5jZSBzaGUgc2VlcyBoaXMgCmJhY2sgd2l0aG91dCByZWNvZ25pemluZyBoaW0uIFRoZSBzdG9yeSBpcyB0byBiZSAKZm91bmQgaXAgdGhlIFByb2NlZWRpbmdzIG9mIHRoZSBQc3ljaGljYWwgUmVzZWFyY2ggClNvY2lldHkgKHZvbC4gaWkuLCBwLiAxNjApLCAKCgpUSEUgRFVLRSBPRiBPUkxFQU5TIAoKCjkxIAoKCuKAnE1ycy4gQnJvdWdodG9uIGF3b2tlIG9uZSBuaWdodCBpbiAxODQ0LCBhbmQgCnJvdXNlZCBoZXIgaHVzYmFuZCwgdGVsbGluZyBoaW0gdGhhdCBzb21ldGhpbmcgCmRyZWFkZnVsIGhhZCBoYXBwZW5lZCBpbiBGcmFuY2UuIEhlIGJlZ2dlZCBoZXIgdG8gCmdvIHRvIHNsZWVwIGFnYWluLCBhbmQgbm90IHRyb3VibGUgaGltLiBTaGUgYXNzdXJlZCAKaGltIHRoYXQgc2hlIHdhcyBub3QgYXNsZWVwIHdoZW4gc2hlIHNhdyB3aGF0IHNoZSAKaW5zaXN0ZWQgb24gdGVsbGluZyBoaW0g4oCUIHdoYXQgc2hlIHNhdyBpbiBmYWN0IAoK4oCcIEZpcnN0IGEgY2FycmlhZ2UgYWNjaWRlbnQg4oCUIHdoaWNoIHNoZSBkaWQgbm90IGFjdHUtIAphbGx5IHNlZSwgYnV0IHdoYXQgc2hlIHNhdyB3YXMgdGhlIHJlc3VsdCDigJQgYSBicm9rZW4gCmNhcnJpYWdlLCBhIGNyb3dkIGNvbGxlY3RlZCwgYSBmaWd1cmUgZ2VudGx5IHJhaXNlZCBhbmQgCmNhcnJpZWQgaW50byB0aGUgbmVhcmVzdCBob3VzZSwgdGhlbiBhIGZpZ3VyZSBseWluZyBvbiAKYSBiZWQgd2hpY2ggc2hlIHRoZW4gcmVjb2duaXplZCBhcyB0aGUgRHVrZSBvZiAKT3JsZWFucy4gR3JhZHVhbGx5IGZyaWVuZHMgY29sbGVjdGluZyByb3VuZCB0aGUgYmVkIArigJQgYW1vbmcgdGhlbSBzZXZlcmFsIG1lbWJlcnMgb2YgdGhlIEZyZW5jaCByb3lhbCAKZmFtaWx5IOKAlCB0aGUgcXVlZW4sIHRoZW4gdGhlIGtpbmcsIGFsbCBzaWxlbnRseSwgdGVhci0gCmZ1bGx5LCB3YXRjaGluZyB0aGUgZXZpZGVudGx5IGR5aW5nIGR1a2UuIE9uZSBtYW4gCihzaGUgY291bGQgc2VlIGhpcyBiYWNrLCBidXQgZGlkIG5vdCBrbm93IHdobyBoZSAKd2FzKSB3YXMgYSBkb2N0b3IuIEhlIHN0b29kIGJlbmRpbmcgb3ZlciB0aGUgZHVrZSwgCmZlZWxpbmcgaGlzIHB1bHNlLCB3aXRoIGhpcyB3YXRjaCBpbiB0aGUgb3RoZXIgaGFuZC4gCkFuZCB0aGVuIGFsbCBwYXNzZWQgYXdheSwgYW5kIHNoZSBzYXcgbm8gbW9yZS4gCgrigJwgQXMgc29vbiBhcyBpdCB3YXMgZGF5bGlnaHQgc2hlIHdyb3RlIGRvd24gaW4gaGVyIApqb3VybmFsIGFsbCB0aGF0IHNoZSBoYWQgc2Vlbi4gSXQgd2FzIGJlZm9yZSB0aGUgCmRheXMgb2YgZWxlY3RyaWMgdGVsZWdyYXBoLCBhbmQgdHdvIG9yIG1vcmUgZGF5cyAKcGFzc2VkIGJlZm9yZSB0aGUgVGltZXMgYW5ub3VuY2VkIOKAmFRoZSBEZWF0aCBvZiAKdGhlIER1a2Ugb2YgT3JsZWFucy4nIFZpc2l0aW5nIFBhcmlzIGEgc2hvcnQgdGltZSAKYWZ0ZXJ3YXJkcyBzaGUgc2F3IGFuZCByZWNvZ25pemVkIHRoZSBwbGFjZSBvZiB0aGUgCmFjY2lkZW50IGFuZCByZWNlaXZlZCB0aGUgZXhwbGFuYXRpb24gb2YgaGVyIGltLSAKcHJlc3Npb24uIFRoZSBkb2N0b3Igd2hvIGF0dGVuZGVkIHRoZSBkeWluZyBkdWtlIAp3YXMgYW4gb2xkIGZyaWVuZCBvZiBoZXJzLCBhbmQgYXMgaGUgd2F0Y2hlZCBieSAKCgo5MiAKCgpDTEFJUlZPWUFOQ0UgCgoKJCAKCgp0aGUgYmVkIGhpcyBtaW5kIGhhZCBiZWVuIGNvbnN0YW50bHkgb2NjdXBpZWQgd2l0aCAKaGVyIGFuZCBoZXIgZmFtaWx5LuKAnSAKCkEgY29tbW9uZXIgaW5zdGFuY2UgaXMgdGhhdCBpbiB3aGtoXl5taWcgCmFmZmVjdGlvbiBzZXRzXnVnIAoKZmFoXlRzdFNecnNeZWFtIG11dHVhbCB0aG91Z2h0IGlzIGNvbnN0YW50bHkgCmZsb3dpbmcgYmV0d2VlbiB0aGUgdHdvIHBhcnRpZXMgaW4gdGhlIGNhc2UsIGFuZCBzb21lIApzdWRkZW4gbmVlZCBvciBkaXJlIGV4dHJlbWl0eSBvbiB0aGUgcGFydCBvZiBvbmUgCgpvZiB0aGVtIGVuZHVlcyB0aGlzIHN0cmVhbSB0ZW1wb3JhcmlseSB3aXRoIHRoZSAKCnBvbGFyaXppbmcgcG93ZXIgd2hpY2ggaXMgbmVlZGZ1bCB0byBjcmVhdGUgdGhlIAphc3RyYWwgdGVsZXNjb3BlLiBBbiBpbGx1c3RyYXRpdmUgZXhhbXBsZSBpcyBxdW90ZWQgCmZyb20gdGhlIHNhbWUgUHJvY2VlZGluZ3MgKHZvbC4gaS4sIHAuIDMwKS4gCgrigJxPbiBTZXB0ZW1iZXIgOXRoLCAxODQ4LCBhdCB0aGUgc2llZ2Ugb2YgTW9vbHRhbiwgCgpNYWpvci1HZW5lcmFsIFIgLCBDLkIuLCB0aGVuIGFkanV0YW50IG9mIGhpcyAKCnJlZ2ltZW50LCB3YXMgbW9zdCBzZXZlcmVseSBhbmQgZGFuZ2Vyb3VzbHkgCndvdW5kZWQgOyBhbmQsIHN1cHBvc2luZyBoaW1zZWxmIHRvIGJlIGR5aW5nLCBhXmtlZCAKb25lIG9mIHRoZSBvZmZpY2VycyB3aXRoIGhpbSB0byB0YWtlIHRoZSByaW5nIG9mZiBoaXMgCmZpbmdlciBhbmQgc2VuZCBpdCB0byBoaXMgd2lmZSwgd2hvIGF0IHRoZSB0aW1lIHdhcyBmdWxseSAKb25lIGh1bmRyZWQgYW5kIGZpZnR5IG1pbGVzIGRpc3RhbnQgYXQgRmVyb3plcG9yZS4gKiAK4oCc4oCYT24gdGhlIG5pZ2h0IG9mIFNlcHRlbWJlciA5dGgsIDE4NDgvIHdyaXRlcyBoaXMgCndpZmUsIOKAmCBJIHdhcyBseWluZyBvbiBteSBiZWQsIGJldHdlZW4gc2xlZXBpbmcgYW5kIAp3YWtpbmcsIHdoZW4gSSBkaXN0aW5jdGx5IHNhdyBteSBodXNiYW5kIGJlaW5nIApwYXJyaWVkIG9mZiB0aGUgZmllbGQgc2VyaW91c2x5IHdvdW5kZWQsIGFuZCBoZWFyZCBoaXMgCmpmIHZvaWNlIHNheWluZywg4oCcIFRha2UgdGhpcyByaW5nIG9mZiBteSBmaW5nZXIgYW5kIHNlbmQgCkkgbGl0IHRvIG15IHdpZmUu4oCdIEFsbCB0aGUgbmV4dCBkYXkgSSBjb3VsZCBub3QgZ2V0IHRoZSAKSSBqc2lnaHQgb3IgdGhlIHZvaWNlIG91dCBvZiBteSBtaW5kLiAKCuKAnOKAmEluIGR1ZSB0aW1lIEkgaGVhcmQgb2YgR2VuZXJhbCBSIGhhdmluZyAKCmJlZW4gc2V2ZXJlbHkgd291bmRlZCBpbiB0aGUgYXNzYXVsdCBvZiBNb29sdGFuLiAKSWZlIHN1cnZpdmVkLCBob3dldmVyLCBhbmQgaXMgc3RpbGwgbGl2aW5nLiBJdCB3YXMgbm90IAoKCm0gCgoKQ0FTVUFMIENMQUlSVk9ZQU5DRSAKCgo5MyAKCgpmb3Igc29tZSB0aW1lIApHZW5lcmFsIEwgCgoKYWZ0ZXIgdGhlIHNpZWdlIHRoYXQgSSBoZWFyZCBmcm9tIArigJQgLCB0aGUgb2ZmaWNlciB3aG8gaGVscGVkIHRvIGNhcnJ5IG15IAoKCmh1c2JhbmQgb2ZmIHRoZSBmaWVsZCwgdGhhdCB0aGUgcmVxdWVzdCBhcyB0byB0aGUgcmluZyAKd2FzIGFjdHVhbGx5IG1hZGUgYnkgaGltLCBqdXN0IGFzIEkgaGVhcmQgaXQgYXQgCkZlcm96ZXBvcmUgYXQgdGhhdCB2ZXJ5IHRpbWUu4oCZIOKAnSAKClRoZW4gdGhlcmUgaXMgdGhlIHZlcnkgbGFyZ2UgY2xhc3Mgb2YgY2FzdWFsIGNsYWlyLSAKdm95YW50IHZpc2lvbnMgd2hpY2ggaGF2ZSBubyB0cmFjZWFibGUgY2F1c2Ug4oCUIHdoaWNoIAphcmUgYXBwYXJlbnRseSBxdWl0ZSBtZWFuaW5nbGVzcywgYW5kIGhhdmUgbm8gcmVjb2ctIApuaXphYmxlIHJlbGF0aW9uIHRvIGFueSBldmVudHMga25vd24gdG8gdGhlIHNlZXIuIFRvIAp0aGlzIGNsYXNzIGJlbG9uZyBtYW55IG9mIHRoZSBsYW5kc2NhcGVzIHNlZW4gYnkgc29tZSAKcGVvcGxlIGp1c3QgYmVmb3JlIHRoZXkgZmFsbCBhc2xlZXAuIEkgcXVvdGUgYSBjYXBpdGFsIAphbmQgdmVyeSByZWFsaXN0aWMgYWNjb3VudCBvZiBhbiBleHBlcmllbmNlIG9mIHRoaXMgc29ydCAuIApmcm9tIE1yLiBXLiBULiBTdGVhZHkgUmVhbCBHaG9zdCBTdG9yaWVzIChwLiA2NSkuIAoK4oCcIEkgZ290IGludG8gYmVkIGJ1dCB3YXMgbm90IGFibGUgdG8gZ28gdG8gc2xlZXAuIApJIHNodXQgbXkgZXllcyBhbmQgd2FpdGVkIGZvciBzbGVlcCB0byBjb21lIDsgaW5zdGVhZCAKb2Ygc2xlZXAsIGhvd2V2ZXIsIHRoZXJlIGNhbWUgdG8gbWUgYSBzdWNjZXNzaW9uIG9mIApjdXJpb3VzbHkgdml2aWQgY2xhaXJ2b3lhbnQgcGljdHVyZXMuIFRoZXJlIHdhcyBubyAKbGlna3QgaW4gdGhlIHJvb20sIGFuZCBpdCB3YXMgcGVyZmVjdGx5IGRhcmsgOyBJIGhhZCAKbXkgZXllcyBzaHV0IGFsc28uIEJ1dCBub3R3aXRoc3RhbmRpbmcgdGhlIGRhcmstIApuZXNzIEkgc3VkZGVubHkgd2FzIGNvbnNjaW91cyBvZiBsb29raW5nIGF0IGEgc2NlbmUgb2YgCnNpbmd1bGFyIGJlYXV0eS4gSXQgd2FzIGFzIGlmIEkgc2F3IGEgbGl2aW5nIG1pbmlhdHVyZSAKYWJvdXQgdGhlIHNpemUgb2YgYSBtYWdpYy1sYW50ZXJuIHNsaWRlLiBBdCB0aGlzIAptb21lbnQgSSBjYW4gcmVjYWxsIHRoZSBzY2VuZSBhcyBpZiBJIHNhdyBpdCBhZ2Fpbi4gSXQgCl4gd2FzIGEgc2Vhc2lkZSBwaWVjZS4gVGhlIG1vb24gd2FzIHNoaW5pbmcgdXBvbiB0aGUgCndhdGVyLCB3aGljaCByaXBwbGVkIHNsb3dseSBvbiB0byB0aGUgYmVhY2guIFJpZ2h0IApiZWZvcmUgbWUgYSBsb25nIG1vbGUgcmFuIGludG8gdGhlIHdhdGVyLiAKCjzCoyBPbiBlaXRoZXIgc2lkZSBvZiB0aGUgbW9sZSBpcnJlZ3VsYXIgcm9ja3Mgc3Rvb2QgCnVwIGFib3ZlIHRoZSBzZWEtbGV2ZWwuIE9uIHRoZSBzaG9yZSBzdG9vZCBzZXZlcmFsIAoKCk0gCgoKKiAKCgo5NCAKCgpDTEFJUlZPWUFOQ0UgCgoKaG91c2VzLCBzcXVhcmUgYW5kIHJ1ZGUsIHdoaWNoIHJlc2VtYmxlZCBub3RoaW5nIAp0aGF0IEkgaGFkIGV2ZXIgc2VlbiBpbiBob3VzZSBhcmNoaXRlY3R1cmUuIE5vIG9uZSAKd2FzIHN0aXJyaW5nLCBidXQgdGhlIG1vb24gd2FzIHRoZXJlIGFuZCB0aGUgc2VhIGFuZCAKdGhlIGdsZWFtIG9mIHRoZSBtb29ubGlnaHQgb24gdGhlIHJpcHBsaW5nIHdhdGVycywgCmp1c3QgYXMgaWYgSSBoYWQgYmVlbiBsb29raW5nIG9uIHRoZSBhY3R1YWwgc2NlbmUuIAoK4oCcIEl0IHdhcyBzbyBiZWF1dGlmdWwgdGhhdCBJIHJlbWVtYmVyIHRoaW5raW5nIHRoYXQgCmlmIGl0IGNvbnRpbnVlZCBJIHNob3VsZCBiZSBzbyBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgCml0IHRoYXQgSSBzaG91bGQgbmV2ZXIgZ28gdG8gc2xlZXAuIEkgd2FzIHdpZGUgYXdha2UsIAphbmQgYXQgdGhlIHNhbWUgdGltZSB0aGF0IEkgc2F3IHRoZSBzY2VuZSBJIGRpc3RpbmN0bHkgCmhlYXJkIHRoZSBkcmlwcGluZyBvZiB0aGUgcmFpbiBvdXRzaWRlIHRoZSB3aW5kb3cuIApW4oCZVGhlYSBzdWRkZW5seSwgd2l0aG91dCBhbnkgYXBwYXJlbnQgb2JqZWN0IG9yIHJlYXNvbiwgCnRoZSBzY2VuZSBjaGFuZ2VkLiAKCnsg4oCcIFRoZSBtb29ubGl0IHNlYSB2YW5pc2hlZCwgYW5kIGluIGl0cyBwbGFjZSBJIHdhcyAKCmxvb2tpbmcgcmlnaHQgaW50byB0aGUgaW50ZXJpb3Igb2YgYSByZWFkaW5nLXJvb20uIApJdCBzZWVtZWQgYXMgaWYgaXQgaGFkIGJlZW4gdXNlZCBhcyBhIHNjaG9vbHJvb2ZoIGluIAp0aGUgZGF5dGltZSwgYW5kIHdhcyBlbXBsb3llZCBhcyBhIHJlYWRpbmctcm9vbSBpbiAKdGhlIGV2ZW5pbmcuIEkgcmVtZW1iZXIgc2VlaW5nIG9uZSByZWFkZXIgd2hvIElqYWQgCiF5Jj4gY3VyaW91cyByZXNlbWJsYW5jZSB0byBUaW0gSGFycmluZ3RvbiwgYWx0aG91Z2ggaXQgCnwgd2FzIG5vdCBoZSwgaG9sZCB1cCBhIG1hZ2F6aW5lIG9yIGJvb2sgaW4gaGlzIGhhbmQgCi98IGFuZCBsYXVnaC4gSXQgd2FzIG5vdCBhIHBpY3R1cmUg4oCUIGl0IHdhcyB0aGVyZS4gCgrigJxUaGUgc2NlbmUgd2FzIGp1c3QgYXMgaWYgeW91IHdlcmUgbG9va2luZyB0aHJvdWdoIAphbiBvcGVyYS1nbGFzcyA7IHlvdSBzYXcgdGhlIHBsYXkgb2YgdGhlIG11c2NsZXMsIHRoZSAKZ2xlYW1pbmcgb2YgdGhlIGV5ZSwgZXZlcnkgbW92ZW1lbnQgb2YgdGhlIHVua25vd24gCnBlcnNvbnMgaW4gdGhlIHVubmFtZWQgcGxhY2UgaW50byB3aGljaCB5b3Ugd2VyZSAKZ2F6aW5nLiBJIGphdyBhbGwgdGhhdCB3aXRob3V0IG9wZW5pbmcgbXkgZXllcywgbm9yIApjamQgbXkgZXllcyBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggaXQuIFlvdSBzZWUgCmZldWNoIHRoaW5ncyBhcyB0aGVzZSBhcyBpdCB3ZXJlIHdpdGggYW5vdGhlciBzZW5zZSAKd2hpY2ggaXMgbW9yZSBpbnNpZGUgeW91ciBoZWFkIHRoYW4gaW4geW91ciBleWVzLiAKCgpJIAoKCk1SLiBTVEVBROKAmVMgTElUVExFIFBFRVAgOTUgCgoK4oCcIFRoaXMgd2FzIGEgdmVyeSBwb29yIGFuZCBwYWx0cnkgZXhwZXJpZW5jZSwgYnV0IAppdCBlbmFibGVkIG1lIHRvIHVuZGVyc3RhbmQgYmV0dGVyIGhvdyBpdCBpcyB0aGF0IApjbGFpcnZveWFudHMgc2VlIHRoYW4gYW55wrthbW91bnQgb2YgZGlzcXVpc2l0aW9uLiAKCuKAnCBUaGUgcGljdHVyZXMgd2VyZSBhcHJvcG9zIG9mIG5vdGhpbmcgOyB0aGV5IGhhZCAKYmVlbiBzdWdnZXN0ZWQgYnkgbm90aGluZyBJIGhhZCBiZWVuIHJlYWRpbmcgb3IgCnRhbGtpbmcgb2YgOyB0aGV5IHNpbXBseSBjYW1lIGFzIGlmIEkgaGFkIGJlZW4gYWJsZSB0byAKbG9vayB0aHJvdWdoIGEgZ2xhc3MgYXQgd2hhdCB3YXMgb2NjdXJyaW5nIHNvbWV3aGVyZSAKZWxzZSBpbiB0aGUgd29ybGQuIEkgaGFkIG15IHBlZXAsIGFuZCB0aGVuIGl0IHBhc3NlZC8gCm5vciBoYXZlIEkgaGFkIGEgcmVjdXJyZW5jZSBvZiBhIHNpbWlsYXIgZXhwZXJpZW5jZS7igJ0gXCAKCk1yLiBTdGVhZCByZWdhcmRzIHRoYXQgYXMgYSA8wqMgcG9vciBhbmQgcGFsdHJ5IGV4cGVyaS0gCmVuY2Us4oCdIGFuZCBpdCBtYXkgcGVyaGFwcyBiZSBjb25zaWRlcmVkIHNvIHdoZW4gCmNvbXBhcmVkIHdpdGggdGhlIGdyZWF0ZXIgcG9zc2liaWxpdGllcywgeWV0IEkga25vdyAKbWFueSBzdHVkZW50cyB3aG8gd291bGQgYmUgdmVyeSB0aGFua2Z1bCB0byBoYXZlIApldmVuIHNvIG11Y2ggb2YgZGlyZWN0IHBlcnNvbmFsIGV4cGVyaWVuY2UgdG8gdGVsbC4gClNtYWxsIHRob3VnaCBpdCBtYXkgYmUgaW4gaXRzZWxmLCBpdCBhdCBvbmNlIGdpdmVzIHRoZSAKc2VlciBhIGNsdWUgdG8gdGhlIHdob2xlIHRoaW5nLCBhbmQgY2xhaXJ2b3lhbmNlIAp3b3VsZCBiZSBhIGxpdmluZyBhY3R1YWxpdHkgdG8gYSBtYW4gd2hvIGhhZCBzZWVuIApldmVuIHRoYXQgbXVjaCBpbiBhIHdheSB0aGF0IGl0IGNvdWxkIG5ldmVyIGhhdmUgYmVlbiAKd2l0aG91dCB0aGF0IGxpdHRsZSB0b3VjaCB3aXRoIHRoZSwgdW5zZWVuIHdvcmxkLiAKCgpUaGVzZSBwaWN0dXJlcyB3ZXJlIG11Y2ggdG9vIGNsZWFyIHRvIGhhdmUgYmVlbiAKbWVyZSByZWZsZWN0aW9ucyBvZiB0aGUgdGhvdWdodCBvZiBvdGhlcnMsIGFuZCBiZXNpZGVzLCAKdGhlIGRlc2NyaXB0aW9uIHVubWlzdGFrYWJseSBzaG93cyB0aGF0IHRoZXkgd2VyZSAKCgpnb2luZyBmb3LihKIgSGltc2VsZiwgb3IgKHdoaWNoIGlzIG11Y2ggbW9yZSBwcm9iYWJsZSkgCgoKc29tZSBraW5kbHkgYXN0cmFsIGVudGl0eSBzZXQgaXQgaW4gbW90aW9uIGZvciBoaW0sIG1pZCAKZ2F2ZSBoaW1eSUlMXmlpaWxlIGF3YXZhIEppZWRqb3VzIGRlbGF5LiBhbnYuLERpY3R1cmVzIAp0aGF0IGhhcHBlbmVkIHRvIGNvbWUgaGFuZHkgYXQgdGhlIGVuZCBvZiB0aGUgdHViZS4gCgoKIyAKCgokIAoKCkNIQVBURVIgVklJLiAKCkNsYWlydm95YW5jZSBpbiBUaW1lIDogdGhlIFBhc3QuIAoKQ2xhaXJ2b3lhbmNlIGluIHRpbWUg4oCUIHRoYXQgaXMgdG8gc2F5LCB0aGUgcG93ZXIgb2YgCnJlYS5kam5nLiB0aGUgcCZzdGFuZCB0aGUgZnV0dXJlIOKAlCBpcywgbGlrZSBhbGwgdGhlIG90aGVyIAp2YXJpZXRpZXMsIHBvc3Nlc3NlZCBieSBkaWZmZXJlbnQgcGVvcGxlIGluIHZlcnkgdmFyeWluZyAKZGVncmVlcywgcmFuZ2luZyBmcm9tIHRoZSBtYW4gd2hvIGhhcyBib3RoIGZhY3VsdGllcyAKZnVsbHkgYXQgaGlzIGNvbW1hbmQsIGRvd24gdG8gb25lIHdobyBvbmx5IG9jY2FzaW9uLSAKYWxseSBnZXRzIGludm9sdW50YXJ5IGFuZCB2ZXJ5IGltcGVyZmVjdCBnbGltcHNlcyBvciAwIApyZWZsZWN0aW9ucyBvZiB0aGVzZSBzY2VuZXMgb2Ygb3RoZXIgZGF5cy4gQSBwZXJzb24gb2YgCnRoZSBsYXR0ZXIgdHlwZSBtaWdodCBoYXZlLCBsZXQgdXMgc2F5LCBhIHZpc2lvbiBvZiBzb21lIApldmVudCBpbiB0aGUgcGFzdCA7IGJ1dCBpdCB3b3VsZCBiZSBsaWFibGUgdG8gdGhlIG1vc3QgCnNlcmlvdXMgZGlzdG9ydGlvbiwgYW5kIGV2ZW4gaWYgaXQgaGFwcGVuZWQgdG8gYmUgZmFpcmx5IAphY2N1cmF0ZSBpdCB3b3VsZCBhbG1vc3QgY2VydGFpbmx5IGJlIGEgbWVyZSBpc29sYXRlZCAKcGljdHVyZSwgYW5kIGhlIHdvdWxkIHByb2JhYmx5IGJlIHF1aXRlIHVuYWJsZSB0byAKcmVsYXRlIGl0IHRvIHdoYXQgaGFkIG9jY3VycmVkIGJlZm9yZSBvciBhZnRlciBpdCwgb3IgdG8gCmFjY291bnQgZm9yIGFueXRoaW5nIHVudXN1YWwgd2hpY2ggbWlnaHQgYXBwZWFyIGluIAppdCBUaGUgdHJhaW5lZCBtYW4sIG9uIHRoZSBvdGhlciBoYW5kLCBjb3VsZCBmb2xsb3cgCnRoZSBkcmFtYSBjb25uZWN0ZWQgd2l0aCBoaXMgcGljdHVyZSBiYWNrd2FyZHMgb3IgCmZvcndhcmRzIHRvIGFueSBleHRlbnQgdGhhdCBtaWdodCBzZWVtIGRlc2lyYWJsZSwgYW5kIAp0cmFjZSBvdXQgd2l0aCBlcXVhbCBlYXNlIHRoZSBjYXVzZXMgd2hpY2ggaGFkIGxlZCAKdXAgdG8gaXQgb3IgdGhlIHJlc3VsdHMgd2hpY2ggaXQgaW4gdHVybiB3b3VsZCBwcm9kdWNlIAoKOTYgCgoKKiAKCgo0KiAKCgpWSVNJT05TIE9GIFRIRSBQQVNUIAoKCiQ3IAoKCldlIHNoYWxsIHByb2JhYmx5IGZpbmQgaXQgZWFzaWVyIHRvIGdyYXNwIHRoaXMgc29tZS0gCndoYXQgZGlmZmljdWx0IHNlY3Rpb24gb2Ygb3VyIHN1YmplY3QgaWYgd2UgY29uc2lkZXIgaXQgCmluIHRoZSBzdWJkaXZpc2lvbnMgd2hpY2ggbmF0dXJhbGx5IHN1Z2dlc3QgdGhlbXNlbHZlcywgCmFuZCBkZWFsIGZpcnN0IHdpdGggdGhlIHZpc2lvbiB3aGljaCBsb29rcyBiYWMsazN5YXJkcyAKaW50b0poZSBwYXN0OyBsZWF2aW5nIGZvciBsYXRlciBleGFtaW5hdGlvbiB0aGF0IHdoaWNoIApwaWVyY2VzIHRoZSB2ZWlsIG9mIHRoZSBmdXR1cmUuIEluIGVhY2ggY2FzZSBpdCB3aWxsIGJlIAp3ZWxsIGZvciB1cyB0byB0cnkgdG8gdW5kZXJzdGFuZCB3aGF0IHdlIGNhbiBvZiB0aGUgCm1vZHVzIG9wZXJhbmQgaXkgZXZlbiB0aG91Z2ggb3VyIHN1Y2Nlc3MgY2FuIGF0IGJlc3QgCmJlIG9ubHkgYSB2ZXJ5IG1vZGlmaWVkIG9uZSwgb3dpbmcgZmlyc3QgdG8gdGhlIGltLSAKcGVyZmVjdCBpbmZvcm1hdGlvbiBvbiBzb21lIHBhcnRzIG9mIHRoZSBzdWJqZWN0IGF0IHggCnByZXNlbnQgcG9zc2Vzc2VkIGJ5IG91ciBpbnZlc3RpZ2F0b3JzLCBhbmQgc2Vjb25kbHkgCnRvIHRoZSBldmVyLXJlY3VycmluZyBmYWlsdXJlIG9mIHBoeXNpY2FsIHdvcmRzIHRvICwgCmV4cHJlc3MgYSBodW5kcmVkdGggcGFydCBldmVuIG9mIHRoZSBsaXR0bGUgd2UgZG8gfCBKIAprbm93IGFib3V0IGhpZ2hlciBwbGFuZXMgYW5kIGZhY3VsdGllcy4gCgoqIEluIHRqaWUgY2FzZSB0aGVuIG9mIGEgZGV0YWlsZWQqIHZpc2lvbiBvZiB0aGUgcmVtb3RlIApwYXN0LCBob3cgaXMgaXQgb2J0YWluZWQsIGFuZCB0byB3aGF0IHBsYW5lIG9mIG5hdHVyZSAKZG9lcyBpdCByZWFsbHkgYmVsb25nPyBUaGUgYW5zd2VyIHRvIAoKCk1pTSBNdE1nZ05SVyAKCmJvdGggdGhlc2UgCgpxdWVzdGlvbnMgaXMgY29udGFpbmVkIGluIHRoZSByZXBseSB0aGF0IGl0IGlzIHJlYWQgZnJvbSAKdGhlIGFrYXNoaWMgcmVjb3JkcyA7IGJ1dCB0aGF0IHN0YXRlbWVudCBpbiByZXR1cm4gd2lsbCAKcmVxdWlyZSBhIGNlcnRhaW4gYW1vdW50IG9mIGV4cGxhbmF0aW9uIGZvciBtYW55IApyZWFkZXJzLiBUaGUgd29yZCBpcyBpbiB0cnV0aCBzb21ld2hhdCBvZiBhIAptaXNub21lciwgZm9yIHRob3VnaCB0aGUgcmVjb3JkcyBhcmUgdW5kb3VidGVkbHkgCnJlYWQgZnJvbSB0aGUgYWtjaXNoYSwgb3IgbWF0dGVyIG9mIHRoZSBtZW50YWwgcGxhbmUsIAp5ZXQgaXQgaXMgbm90IHRvIEl0IHRoYXQgdGhleSByZWFsbHkgYmVsb25nLiBTdGlsbCB3b3JzZSAKaXMgdGhlIGFsdGVybmF0aXZlIHRpdGxlLCB0KCByZWNvcmRzIG9mIHRoZSBhc3RyYWwgbGlnaHQvMSAKd2hpY2ggaGFzIHNvbWV0aW1lcyBiZWVuIGVtcGxveWVkLCBmb3IgdGhlc2dqXk1kYSwgCgphbmQgYTExIHR0YXQgY2FuIGJlIApvYnRhaW5lZCBvbiBpdCBhcmUgb25seSBicm9rZW4gZ2xpbXBzZXMgb2YgYSBraW5kIAoKNyAKCgp0IAoKCjk4IENMQUlSVk9ZQU5DRSAKCgpvZiBkb3VibGUgcmVmbGVjdGlvbiBvZiB0aGVtLCBhcyB3aWxsIHByZXNlbnRseSBiZSAKZXhwbGFpbmVkLiAKCkxpa2Ugc28gbWFueSBvdGhlcnMgb2Ygb3VyIFRoZW9zb3BoaWNhbCB0ZXJtcywgdGhlIAp3b3JkIElrYXNoYSBoYXMgYmVlbiB2ZXJ5IEluIHNvbWUgb2YgCgpvdXIgZWFybmVyIGJvb2tzIGl0IHdhcyBjb25zaWRlcmVkIGFzIHN5bm9ueW1vdXMgCndpdGggamFzdHJhbCBsaWdodCwgYW5kIGluIG90aGVycyBpdCB3YXMgZW1wbG95ZWQgdG8gCnNpZ25pZnkgYW55IGtpbmQgb2YgaW52aXNpYmxlIG1hdHRlciwgZnJvbSBtZmlsYXByYWtqaXRpIApkb3duIHRvIHRoZSBwaHlzaWNhbCBldGhlci4gSW4gbGF0ZXIgYm9va3MgaXRzIHVzZSBoYXMgCmJlZW4gcmVzdHJpY3RlZCB0byB0aGUgbWF0dGVyIG9mIHRoZV5eXnReXmZecS4gYW5kIAo7IGl0IGlzIGluIHRoYXQgc2Vuc2UgdGhhdCB0aGUgcmVjb3JkcyBtYXkgYmUgc3Bva2VuIG9mIGFzIApJICZrJnNoaWMsIGZvciBhbHRob3VnaCB0aGV5IGFyZSBub3Qgb3JpZ2luYWxseSBtYWRlIG9yXCwgCiEgdGhhdCBwbGFuZSBhbnkgbW9yZSB0aGFuIG9uIHRoZSBhc3RyYWwsIHlldCBpdCBpcyB0aGVyZSAKdGhhdCB3ZSBmaXJzdCBjb21lIGRlZmluaXRlbHkgaW50byBjb250YWN0IHdpdGggdGhlbSAKYW5kIGZpbmQgaXQgcG9zc2libGUgdG8gZG8gcmVsaWFibGUgd29yayB3aXRoIHRoZW0uIAoKClRoaXMgc3ViamVjdCBvZiB0aGUgcmVjb3JkcyBpcyBieSBubyBtZWFucyBhwrsgZWFzeS4sIApwbmUgdG9eZGVeXnRoXiBmb3IgaXQgaXMgb25lIG9mIHRoYXQgbnVtZXJvdXMgY2xhc3MgCgoKaGF0IG51biAKCnRyaGljaCByZXF1aXJlcyBmb3IgaXRzIHBlcmZlY3QgY29tcHJlaGVuc2lvbiBmYWN1bHRpZXMgCmYgYSBmYXIgaGlnaGVyIG9yZGVyIHRoYW4gYW55IHdoaWNoIGh1bWFuaXR5IGhhcyAKL2V0IGV2b2x2ZWQuIFRoZSByZWFsIHNvbHV0aW9uIG9mIGl0cyBwcm9ibGVtcyBsaWVzIG9uIApsYW5lcyBmYXIgYmV5b25kIGFueSB0aGF0IHdlIGNhbiBwb3NzaWJseSBrbm93IGF0IApwcmVzZW50LCBhbmQgYW55IHZpZXcgdGhhdCB3ZSB0YWtlIG9mIGl0IG11c3QgbmVjZXMtIApzYXJpbHkgYmUgb2YgdGhlIG1vc3QgaW1wZXJmZWN0IGNoYXJhY3Rlciwgc2luY2Ugd2UgCmNhbm5vdCBidXQgbG9vayBhdCBpdCBmcm9tIGJlbG93IGluc3RlYWQgb2YgZnJvbSBhYm92ZS4gCl5UaGUgaWRlYSB3aGljaCB3ZSBmb3JtIG9mIGl0IG11c3QgdGhlcmVmb3JlIGJlIG9ubF4gCnBhcnRpYWwsIHlldCBpdCBuZWVkIG5vdCBtaXNsZWFkIHVzIHVubGVzcyB3ZSBhbGxvdyAKCgpvdXJzZWx2ZXMgdG8gdGhpbmsgb2YgdGhlXnRpcml5IGZyYWdtZW50IHdoaWNoIGlzIGFsbCAK4oCiICcgdGhhdCB3ZSBjYW4gc2VlIGFzIHRob3VnaCBpdCB3ZXJlIHRoZVRwZXJmZWN0IHdob2xlLiAKSWYgd2UgYXJlIGNhcmVmdWwgdGhhdCBzdWNoIGNvbmNlcHRpb25zIGFzIHdlIG1heSAKCgpUSEUgUkVDT1JEUyAKCgo5OSAKCgpmb3JtIHNoYWxsIGJlIGFjY3VyYXRlIGFzIGZhciBhcyB0aGV5IGdvLCB3ZSBzaGFsbCAKaGF2ZSBub3RoaW5nIHRvIHVubGVhcm4sIHRob3VnaCBtdWNoIHRvIGFkZCwgd2hlbiAKaW4gdGhlIGNvdXJzZSBvZiBvdXIgZnVydGhlciBwcm9ncmVzcyB3ZSBncmFkdWFsbHkgCmFjcXVpcmUgdGhlIGhpZ2hlciB3aXNkb20uIEJlIGl0IHVuZGVyc3Rvb2QgdGhlbiBhdHwgCnRoZSBjb21tZW5jZW1lbnQgdGhhdCBhIHRob3JvdWdoIGdyYXNwIG9mIG91ciBzdWJqZWN0IHwgCmlzIGFuIGltcG9zc2liaWxpdHkgYXQgdGhlIHByZXNlbnQgc3RhZ2Ugb2Ygb3VyIGV2b2x1LTEgCnRpb24sIGFuZCB0aGF0IG1hbnkgcG9pbnRzIHdpbGwgYXJpc2UgYXMgdG8gd2hpY2ggbmMgCmV4YWN0IGV4cGxhbmF0aW9uIGlzIHlldCBvYnRhaW5hYmxlLCB0aG91Z2ggaXQgbWFqIApvZnRlbiBiZSBwb3NzaWJsZSB0byBzdWdnZXN0IGFuYWxvZ2llcyBhbmQgdG8gaW5kaWNhdGUgCnRoZSBsaW5lcyBhbG9uZyB3aGljaCBhbiBleHBsYW5hdGlvbiBtdXN0IGxpZS4gCgpMZXQgdXMgdGhlbiB0cnkgdG8gY2FycnkgYmFjayBvdXIgdGhvdWdodHMgdG8gdGhlIApiZWdpbm5pbmcgb2YgdGhpcyBzb2xhciBzeXN0ZW0gdG8gd2hpY2ggd2UgYmVsb25nLiAKV2UgYXJlIGFsbCBmYW1pbGlhciB3aXRoIHRoZSBvcmRpbmFyeSBhc3Ryb25vbWljYWwgCnRoZW9yeSBvZiBpdHMgb3JpZ2luIOKAlCB0aGF0IHdoaWNoIGlzIGNvbW1vbmx5IGNhbGxlZCAK4pa6IHRoZSBebmVidWxhciBoeXBvdGhlc2lzIOKAlCBhY2NvcmRpbmcgdG8gd2hpY2ggaXQgZmlyc3QgCmNhbWUgaW50byBleGlzdGVuY2UgYXMgYSBnaWdhbnRpYyBnbG93aW5nIG5lYnVsYSwgb2YgCmEgZGlhbWV0ZXIgZmFyIGV4Y2VlSG1nLCB0aGF0IG9mIHRoZSBwaiZpdCBvZiBldmVuIHRoZSAKb3V0ZXJtb3N0IG9mIHRoZSBwbGFuZXRzLCBhbmQgdGhlbiwgYXMgaW4gdGhlIGNvdXJzZSAKb2YgY291bnRsZXNzIGFnZXMgdGhhdCBlbm9ybW91cyBzcGhlcmUgZ3JhZHVhbGx5IApjb29sZWQgYW5kIGNvbnRyYWN0ZWQsIHRoZSBzeXN0ZW0gYXMgd2Uga25vdyBpdCB3YXMgCmZvcm1lZC4gCgpPY2N1bHQgc2NpZW5jZSBhY2NlcHRzIHRoYXQgdGhlb3J5LCBpbiBpdHMgYnJvYWQgb3V0LSAKfmxpIG5lVGFzY29ycmVjdEteZW1eXl5eXnRLcHVyIGVseSBwaHlzaWNhbCBzaWRlIAojb2YgdGhlIGV2b2x1dGlvbiBvZiBvdXIgc3lzdGVtLCBodXQgaXQgd29tY3JeaWRkIHRoYXQgCmxUd2VUYm5maW5lIG91ciBhdHRlbnRpb24gdG8gdGhpcyBwaHlzaWNhbCBzaWRlIG9ubHkgCndlIHNoYWxsIGhhdmUgYSB2ZXJ5IGluY29tcGxldGUgYW5kIGluY29oZXJlbnQgaWRlYSAKb2Ygd2hhdCByZWFsbHkgaGFwcGVuZWQuIEl0IHdvdWxkIHBvc3R1bGF0ZSwgdG8gCmJlZ2luIHdpdGgsIHRoYXQgdGhlIGV4YWx0ZWQgQmVpbmdqd2hvIHVuZGVydGFrZXMgCgoKSU9PIENMQUlSVk9ZQU5DRSAKCnRoZSBmb3JtYXRpb24gb2YgYSBzeXN0ZW0gKHdob20gd2Ugc29tZXRpbWVzIGNhbGwgCnRoZSBMb2dvcyBvZiB0aGUgc3lzdGVtKSBmaXJzdCBvZiBhbGwgZm9ybXNqaWkgLMKjVSYsIG1pbmQgCmEgY29tcGxldGUgY29uY2VwdGlvbiBvZiB0aGUgd2hvbGUgb2YgaXQgd2l0aCBhbGwgaXRzIApzdWNjZXNzaXZlIGNoYWlucyBvZiB3b3JsZHMuIEJ5IHRoZSB2ZXJ5IGFjdCBvZiBmb3JtLSAKaW5nOyB0aGF0IGNvbmNlcHRpb24gSGUgY2FsbHMgdGhlIHdob2xlIGludG8gc2ltdWwtIAp0YW5lb3VzIG9iamVjdGl2ZSBleGlzdGVuY2Ugb24gdGhlIHBsYW5lIG9mIEhpcyAKdGhvdWdodCDigJQgYSBwbGFuZSBvdCBjb3Vyc2UgZmFyIGFib3ZlIGFuIHRob3NlIG9mIAoKCuKAlCBhIHBsYW5lIG9mIGNvdXJzZSBmYXIgYWJvdmUgYWxsIHRob3NlIG9mIAp2ZSBrbm93IGFueXRoaW5nIOKAlCBmcm9tIHdoaWNoIHRoZSB2YXJpb3VzIApkZXNjZW5kIHdoZW4gcmVxdWlyZWQgaW50byB3aGF0ZXZlciBzdGF0ZSBvZiAKb2JqZWN0aXZpdHkgbWF5IGJlIHJlc3BlY3RpdmVseSBkZXN0aW5lZCBmb3IgClVubGVzcyB3ZSBjb25zdGFudGx5IGJlYXIgaW4gbWluZCB0aGlzIGZhY3Qgb2YgCmV4aXN0ZW5jZSBvZiB0aGUgd2hvbGUgc3lzdGVtIGZyb20gdGhlIHZlcnkgCmJlZ2lubmluZyBvbiBhIGhpZ2hlciBwbGFuZSwgd2Ugc2hhbGwgYmUgcGVycGV0dWFsbHkgCm1pc3VuZGVyc3RhbmRpbmcgdGhlIHBoeXNpY2FsIGV2b2x1dGlvbiB3aGljaCB3ZSBzZWUgCnRha2luZyBwbGFjZSBkb3duIGhlcmUuIGMgCgpCdXQgb2NjdWx0aXNtIGhhcyBtb3JlIHRoYW4gdGhpcyB0byB0ZWFjaCB1cyBvbiAKdGhlIHN1YmplY3QuIEl0IHRlbGxzIHVzIG5vdCBvbmx5IHRoYXQgYWxsIHRoaXMgd29uZGVyLSAKZnVsIHN5c3RlbSB0byB3aGljaCB3ZSBiZWxvbmcgaXMgY2FsbGVkIGludG8gZXhpc3RlbmNlIApieSB0aGUgTG9nb3MsIGJvdGggb24gbG93ZXIgYW5kIG9uIGhpZ2hlciBwbGFuZXMsIApwJHV0IGFsc28gdGhhdCBpdHMgcmVsYXRpb24gdG8gSGltIGlzIGNsb3NlciBldmVuIHRoYW4gCgpyaGF04oCZIGZvciAKCmV4cHJlc3Npb24gb2YgSmlpbSB1cG9uIHRoZSBwaHlzaWNhbCBwbGFuZSDigJQgYW5kIHRoYXQgClNoZSBtb3ZlbWVudCBhbmQgZW5lcmd5IG9mIHRoZSB3aG9sZSBzdnN0ZW0gaXMgCgoKeSwgYW5kIGlzIGFsbCBjYXJyaWVkIG9uIHdpdGhpbiB0aGUsIGxpbWl0cyBvZiBIaSAKCgp1aWdrIFN0dXBlbmRvdXMgYXMgdGhpcyBjb25jZXB0aW9uIGlzLCBpdCB3aWxsIHlldCAKb3QgYmUgd2hvbGx5IHVudGhpbmthYmxlIHRvIHRob3NlIG9mIHVzIHdobyBoYXZlIAppYS5kZSBhbnkgc3R1ZHkgb2YgdGhlIHN1YmplY3Qgb2YgdGhlIGF1cmEuIAoKV2UgYXJlIGZhbWlsaWFyIHdpdGggdGhlIGlkZWEgdGhhdCBhcyBhIHBlcnNvbiBwcm8tIAoKCiogaWYgPiBpICcgOyBeICogciJ7J+KAmTUtIGoxLCBmdCwgKuKAniAnIDEtIAoKCmlpeWlNIEhpdEwgKSByIAoKClRIRSBBVVJBIAoKCmdyZXNzZXMgb24gdGhlIHVwd2FyZCAuIHBhdGggaGlzIGNhdXNhbCBib2R5LCB3aGljaCBpcyAKSnRoZSBkZXRlcm1pbmluZyBsaW1pdCBvZiBoaXMgYXVyYSwgZGlzdGluY3RseSBpbmNyZWFzZXMgCmluIHNpemUgYXMgd2VsbCBhcyBpbiBsdW1pbm9zaXR5IGFuZCBwdXJpdHkgb2YgY29sb3VyLiAKTWFueSBvZiB1cyBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZSBhdXJhIG9mIApwdXBpbCB3aG8gaGFzIGFscmVhZHkgbWFkZSBjb25zaWRlcmFibGUgYWR2YW5jZSBvbiAKdGhlIFBhdGggaXMgdmVyeSBtdWNoIGxhcmdlciB0aGFuIHRoYXQgb2Ygb25lIHdobyBpcyAKYnV0IGp1c3Qgc2V0dGluZyBoaXMgZm9vdCB1cG9uIGl0cyBmaXJzdCBzdGVwLCB3aGlsZSBpbiAKdGhlIGNhc2Ugb2YgYW4gQWRlcHQgdGhlIHByb3BvcnRpb25hbCBpbmNyZWFzZSBpcyBmYXIgCmdyZWF0ZXIgc3RpbGwuIFdlIHJlYWQgaW4gcXVpdGUgZXhvdGVyaWMgT3JpZW50YWwgCnNjcmlwdHVyZXMgb2YgdGhlIGltbWVuc2UgZXh0ZW5zaW9uIG9mIHRoZWpqdXJhIG9mIHRoZSwgCkJ1ZGNqaGEgOyBJIHRoaW5rIHRoYXQgdGhyZWUgam5pbGVzIGlzIG1lbnRpb25lZCBvbiAKb25lIG9jY2FzaW9uIGFzIGl0cyBsaW1pdCwgYnV0IHdoYXRldmVyIHRoZSBleGFjdCAKbWVhc3VyZW1lbnQgbWF5IGJlLCBpdCBpcyBvYnZpb3VzIHRoYXQgd2UgaGF2ZSBoZXJlIAphbm90aGVyIHJlY29yZCBvZiB0aGlzIGZhY3Qgb2YgdGhlIGV4dHJlbWVseSByYXBpZCAKCi4uLi5yIFhUIAoK4oCiIGdyb3d0aCBvZiB0aGUgY2F1c2FsIGJvZHkgYXMgbWFuIHBhc3NlcyBvbiBoaXMgdXAtIAp3YXJkIHdheS4gVGhlcmUgY2FuIGJlIGxpdHRsZSBkb3VidCB0aGF0IHRoZSByYXRlIG9mIAp0aGlzIGdyb3d0aCB3b3VsZCBpdHNlbGYgaW5jcmVhc2UgaW4gZ2VvbWV0cmljYWwgcHJvLSAKZ3Jlc3Npb24sIHNvIHRoYXQgaXQgbmVlZCBub3Qgc3VycHJpc2UgdXMgdG8gaGVhciBvZiBhbiAKQWRlcHQgb24gYSBzdGlsbCBoaWdoZXIgbGV2ZWx3aG9zZSBhdXJhIGlzIGNhcGFibGUgb2YgCmluZHVpbmcgdGhlIC4gZW50aGUgLiB2Z3BkZF5hdC4ub25jZSA7IGFuZCBmcm9tIHRoaXMgd2UgCgp0byB0aGUgY29uY2VwdGlvbiAKdGhhdCB0aGVyZSBpcyBhIEJlaW5nIHNvIGV4YWx0ZWQgYXMgdG8gY29tcHJlaGVuZCAKd2l0aGluIEhpbXNlbGYgdGhlIHdob2xlIG9mIG91ciBzb2xhciBzeXN0ZW0uIEFuZCAK4pmmIHdlIHNob3VsZCByZW1lbWJlciB0aGF0LCBlbm9ybW91cyBhcyB0aGlzIHNlZW1zIHRvIAp1cywgaXQgaXMgYnV0IGFzIHRoZSB0aW5pZXN0IGRyb3AgaW4gdGhlIHZhc3Qgb2NlYW4gb2Ygc3BhY2UuIAoKU28gb2YgdGhlIF5nZ2dvc153aG8gaGFzIGluIEhpbSBhbGwgdGhlIGNhcGFjaXRpZXMgCmFuZCBxdWFsaXRpZXMgd2l0aCB3aGljaCB3ZSBjYW4gcG9zc2libHkgZW5kb3cgdGhlIApoaWdoZXN0IEdvZCB3ZSBjYW4gaW1hZ2luZSkgaXQgaXMgbGl0ZXJhbGx5IHRydWUsIGFzIAoKCiQgCgoKMTAyIAoKCkNMQUlSVk9ZQU5DRSAKCgp3YXMgc2FpZCBvZiBvbGQsIHRoYXQg4oCcIG9mIEhpbSBhbmQgCgp0byA+IEhpbSAuIGFyZSA7IGFsbCB0aGluZ3PigJ0gYW5kIOKAnGluIFFpbmpeXmxpdmVqaW5kIG1vdmUgCgphbmQgaGF2ZSBvdXIgYmVpbmcu4oCdIAoKTm93IGlmIHRoaXMgYmUgc28sIGl0IGlzIGNsZWFyIHRoYXQgCmZudGhpbW91ciBzeXN0ZW0gaGFwcGVucyBhYnNvbHV0ZWx5IHdpdGhpbiB0aGUgY29uLSAKaWNpb3VzaV5lXixzamk7WyBhXkpeXm9nb3MsIGFuZCBzbyB3ZSBhdCBvbmNlIHNlZSB0aGF0IAp0aGUgdHJ1ZSByZWNvcmQgbXVzdCBiZSBIaXMgbWVtb3J5IDogYW5kIGZ1cnRoZXItIApmbW9yZSwgaXQgaXMgb2J2aW91cyB0aGF0IG9uIHdoYXRldmVyIHBsYW5lIHRoYXQgCmZ3b25kcm91cyBtZW1vcnkgZXhpc3RzLCBpdCBjYW5ub3QgYnV0IGJlLiBmYXIuwrthYm92ZSAKSSBhal50bG5uZ14gYW5kIGNvbnNlcXVlbnRseSB3aGF0ZXZlciAKCl5yZWNvcmRzIHdlXiBybmF5XmZpbmQgb3Vyc2VsdmVzXmFibGUgdG8gcmVhZF5tXnReYmUgCm9mIAoKdGhlIGRlbnNlciBtZWReIAoKT24gdGhlIGFedHJhTHBsYW5lIGl0IGlzIGF0IG9uY2UgZXZpZGVudCB0aGF0IHRoaXMgCmlzIHNvIOKAlCB0aGF0IHdoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBpcyBvbmx5ICYgcmUtIHIgCmZsZWN0aW9uIG9mIGEgcmVmbGVjdGlvbiwgYW5kIGFuIGV4Y2VlZGluZ2x5IGltcGVyZmVjdCAKb25lLCBmb3Igc3VjaCByZWNvcmRzIGFzIGNhbiBiZSByZWFjaGVkIHRoZXJlIGFyZSAKZnJhZ21lbnRhcnkgaW4gdGhlIGV4dHJlbWUsIGFuZCBvZnRlbiBzZXJpb3VzbHkgZGlzLSAKdG9ydGVkLiBXZSBrbm93IGhvdyB1bml2ZXJzYWxseSB3Xnx5IGlzIHVzZWQgYXMg4oCeIAoKMSBhIHN5bWJvbCBvZiB0aGUgYXN0cmFsIEpmaWdodCwgYW5kIGlubV5eYXJ0aWN1bGFyIAo6IGNhc2UgaXQgaXMgYSByZW1hcmthYmx5IGFwdCBvbmUuIEZyb20gdGhlIHN1cmZhY2Ugb2YgCnwgc3RpbGwgd2F0ZXIgd2UgbWF5IGdldCBhIGNsZWFyIHJlZmxlY3Rpb24gb2YgdGhlIHN1ci0gCkkgcm91bmRpbmcgb2JqZWN0cywganVzdCBhcyBmcm9tIGEgbWlycm9yOyBidXQgYXQgdGhlIApJamJlc3QgaXQgaXMgb25seSBhIHJlZmxlY3Rpb24g4oCUIGEgciBlcHIgZXNlbnQgYXRpb25eIEpuIF4gdHdvIG0gCmlpbWVuc2lvbnMgb2YgdGhyZWUtZGltZW5zaW9tTG9iamVjdHMsIGFuZCB0aGVyZWZvcmUgCkJlcmluZyBpbiBhbGwgaXRzIHF1YWxpdGllcywgZXhjZXB0IGNvbG91ciwgZnJvbSB0aGF0IApJIHdoaWNoIGl0IHJlcHJlc2VudHMgOyBhbmQgaW4gYWRkaXRpb24gdG8gdGhpcywgaXQgaXMgCjsgYWx3YXlzIHJldmVyc2VkLiAKCgpGUkFHTUVOVEFSWSBJTUFHRVMgCgoKSTAzIAoKCkJ1dCBsZXQgdGhlIHN1cmZhY2Ugb2YgdGhlIHdhdGVyIGJlIHJ1ZmZsZWQgSm95IHRoZSAKCnIgLCAuVHItd14gKicgCgp3aW5kIGFuZCB3aGF0IGRvIHdlIGZpbmQgdGhlbiA/IEEgcmVmbGVjdGlvbiBzdGlsbCwgCmNlcnRhaW5seSwgYnV0IHNvIGJyb2tlbiB1cCBhbmQgZGlzdG9ydGVkIGFzIHRvIGJlIApxdWl0ZSB1c2VsZXNzIG9yIGV2ZW4gbWlzbGVhZGluZyBhcyBhIGd1aWRlIHRvIHRoZSAKc2hhcGUgYW5kIHJlYWwgYXBwZWFyYW5jZSBvZiB0aGUgb2JqZWN0cyByZWZsZWN0ZWQu4oCZIApIZXJlIGFuZCB0aGVyZSBmb3IgYSBtb21lbnQgd2UgbWlnaHQgaGFwcGVuIHRvIApnZXQgYSBjbGVhciByZWZsZWN0aW9uIG9mIHNvbWUgbWludXRlIHBhcnQgb2YgdGhlIApzY2VuZSDigJQgb2YgYSBzaW5nbGUgbGVhZiBmcm9tIGEgdHJlZSwgZm9yIGV4YW1wbGU7IApidXQgaXQgd291bGQgbmVlZCBsb25nIGxhYm91ciBhbmQgY29uc2lkZXJhYmxlLCAKa25vd2xlZGdlIG9mIG5hdHVyYWwgbGF3cyB0byBidWlsZCB1cCBhbnl0aGluZyBsaWtlIAphIHRydWUgY29uY2VwdGlvbiBvZiB0aGUgb2JqZWN0IHJlZmxlY3RlZCBieSBwdXR0aW5nIAp0b2dldGhlciBldmVuIGEgbGFyZ2UgbnVtYmVyIG9mIHN1Y2ggaXNvbGF0ZWQgZnJhZy0gCm1lbnRzIG9mIGFuIGltYWdlIG9mIGl0IAoKTm93IGluIHRoZSBhc3RyYWwgcGxhbmUgd2UgY2FuIG5ldmVyIGhhdmUgYW55LSAKCiptbiBtdW0gKiAKCnRoacK7ZyBhcHByb2FjbnBndG8gd2hhdCB3ZSBoYXZlIGltYWdlZCBhcyBhLiBzdGlsbCAKLnN1cmZhY2UsLC4gYnV0IDA1KiB0aGUgY29udHJhcnkgd2UgaGF2ZSBhbHdheXMgdG8gZGVhbCAKd2l0aCBxbmUgaW5mL3JhcGlkIGFuZCBiZXdpbGRlcmluZyBtb3QgOyBqdWRnZSwgCnRoZXJlZm9yZSwgaG93IGxpdHRsZSB3ZSBjYW4gZGVwZW5kIHVwb24gZ2V0dGluZyBhIApjbGVhciBhbmQgZGVmaW5pdGUgcmVmbGVjdGlvbi4gVGh1cyBhIGNsYWlydm95YW50IHdobyBJIApwb3NzZXNzZXMgb25seSB0aGUgZmFjdWx0eSBvZiBhc3RyYWwgc2lnaHQgY2FuIG5ldmVyICggCnJlbHkgdXBvbiBhbnkgcGljdHVyZSBvZiB0aGUgcGFzdCB0aGF0IGNvbWVzIGJlZm9yZSBJIApoaW0gYXMgYmVpbmcgYWNjdXJhdGUgYW5kIHBlcmZlY3QgOyBoZXJlIGFuZCB0aGVyZSAxIFwgCnNvbWUgcGFydCBvZiBpdCBtYXkgYmUgc28sIGJ1dCBoZSBoYXMgbm8gbWVhbnMgb2YgXiAKa25vd2luZyB3aGljaCBpdCBpcy4gSWYgaGUgaXMgdW5kZXIgdGhlIGNhcmUgb2YgYSAKY29tcGV0ZW50IHRlYWNoZXIgaGUgbWF5LCBieSBsb25nIGFuZCBjYXJlZnVsIAp0cmFpbmluZywgYmUgc2hvd24gaG93IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gcmVsaWFibGUgCmFuZCB1bnJlbGlhYmxlIGltcHJlc3Npb25zLCBhbmQgdG8gY29uc3RydWN0IGZyb20gdGhlIApicm9rZW4gcmVmbGVjdGlvbnMgc29tZSBraW5kIG9mIGltYWdlIG9mIHRoZSBvYmplY3QgCgoKMTA0IAoKCkNMQUlSVk9ZQU5DRSAKCgomIAoKLCAvIAovYSAKCgpyZWZsZWN0ZWQ7IGJ1dCB1c3VhbGx5IGxvbmcgYmVmb3JlIGhlIGhhcyBtYXN0ZXJlZCAKdGhvc2UgZGlmZmljdWx0aWVzIGhlIHdpbGwgaGF2ZSBkZXZlbG9wZWQgdGhlIG1lbnRhbCAKc2lnaHQsIHdoaWNoIHJlbmRlcnMgc3VjaCBsYWJvdXIgdW5uZWNlc3NhcnksIAoKUW4gdGhlIG5leHQgcGxhbmUsIHdoaWNoIHdlIGNhbGwgdGhlXiBtZW50YWwuIGNvdGggCgpbZGl0aW9ucyBhcmUgdmVyeSBkaWZmZXJlbnQuIFRoZXJlIHRoZSByZWNvcmQgaXMgZnVsbCAKCuKAoiAKCmxhbmQgYWNjdXJhdGUsIGFuZCBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIG1ha2UgYW55IAptaXN0YWtlIl4gdGhlIHJlYWRpbmcuIFRoYXQgaXMgdG8gc2F5LCBpZiB0aHJlZSAKbGFpcnZveWFudHMgcG9zc2Vzc2luZyB0aGUgcG93ZXJzIG9mIHRoZSBtZW50YWwgCnBsYW5lIGFncmVlZCB0byBleGFtaW5lIGEgY2VydGFpbiByZWNvcmQgdGhlcmUsIHdoYXQgCndvdWxkIGJlIHByZXNlbnRlZCB0byB0aGVpciB2aXNpb24gd291bGQgYmUgYWJzb2x1dGVseSAKdGhlIHNhbWUgcmVmbGVjdGlvbiBpbiBlYWNoIGNhc2UsIGFuZCBlYWNoIHdvdWxkIAphY3F1aXJlIGEgY29ycmVjdCBpbXByZXNzaW9uIGZyb20gaXQgaW4gcmVhZGluZyBpdC4gSXQgCmRvZXMgbm90IGhvd2V2ZXIgZm9sbG93IHRoYXQgd2hlbiB0aGV5IGFsbCBjb21wYXJlZCAKbm90ZXMgbGF0ZXIgb24gdGhlIHBoeXNpY2FsIHBsYW5lIHRoZWlyIHJlcG9ydHMgd291bGQgCmFncmVlIGV4YWN0bHkuIEl0IGlzIHdlbGwga25vd24gdGhhdCBpZiB0aHJlZSBwZW9wbGUgCndobyB3aXRuZXNzIGFuIG9jY3VycmVuY2UgZG93biBoZXJlIGluIHRoZSBwaHlzaWNhbCAKd29ybGQgc2V0IHRvIHdvcmsgdG8gZGVzY3JpYmUgaXQgYWZ0ZXJ3YXJkcywgdGhlaXIgCmFjY291bnRzIHdpbGwgZGlmZmVyIGNvbnNpZGVyYWJseSwgZm9yIGVhY2ggd2lsbCBoYXZlIApub3RpY2VkIGVzcGVjaWFsbHkgdGhvc2UgaXRlbXMgd2hpY2ggbW9zdCBhcHBlYWwgdG8gCmhpbSwgYW5kIHdpbGwgaW5zZW5zaWJseSBoYXZlIG1hZGUgdGhlbSB0aGUgcHJvLSAKbWluZW50IGZlYXR1cmVzIG9mIHRoZSBldmVudCwgc29tZXRpbWVzIGlnbm9yaW5nIApvdGhlciBwb2ludHMgd2hpY2ggd2VyZSBpbiByZWFsaXR5IG11Y2ggbW9yZSAKaW1wb3J0YW50LiAKCk5vdyBpbiB0aGUgY2FzZSBvZiBhbiBvYnNlcnZhdGlvbiBvbiB0aGUgbWVudGFsIApwbGFuZSB0aGlzIHBlcnNvbmFsIGVxdWF0aW9uIHdvdWxkIG5vdCBhcHByZWNpYWJseSAKfHxhZmZlY3QgdGhlIGltcHJlc3Npb25zIHJlY2VpdmVkLCBmb3Igc2luY2UgZWFjaCB3b3VsZCAKdGhvcm91Z2hseSBncmFzcCB0aGUgZW50aXJlIHN1YmplY3QgaXQgd291bGQgYmUgaW0tIApwb3NzaWJsZSBmb3IgaGltIHRvIHNlZSBpdHMgcGFydHMgb3V0IG9mIGR1ZSBwcm9wb3J0aW9uICogCgoKY3ZpLiAKCgoxLyBUIAojKiAKCgp0IAoKClRIRSBQRVJTT05BTCBFUVVBVElPTiAKCgoxMDUgCgoKb3Qgd3IgCgoKYnV0LCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgY2FyZWZ1bGx5IHRyYWluZWQgYW5kISAKZXhwZXJpZW5jZWQgcGVyc29ucywgdGhpcyBmYWN0b3IgZG9lcyBjb21lIGludG8gcGxheWYgCmluIHRyYW5zZmVycmluZyB0aGUgaW1wcmVzc2lvbnMgdG8gdGhlIGxvd2VyIHBsYW5lc3wgCkl0IGlzIGluIHRoZSBuYXR1cmUgb2YgdGhpbmdzIGltcG9zc2libGUgdGhhdCAuIC5hbnkgCmFjY291bnQgZ2l2ZW4gZG93biBoZXJlIG9mIGEgdmlzaW9uIE9MwqNYRMKjcmllbmNlIG9uIAp0aGUgbWVudGFsLnJpYW5lIGNhbiBiZSBjb15ybmdsZWZlIHNpbmNlIG5pbmUtdGVudGggCnNlZW4gYW5hIGZlbHQgbWVyIAoKCsK7KncqKipXdHRsIAoKaixzIHNlZW4gYW5kIHRlbHQgdGhnZ14gY291bGQgbm90IGJlIGV4cHJlc3NlZCAKYnkgcGh5c2ljYWwgd29yZHMgYXQgY09UOyBhbmQsIHNpbmNlIGFsbCBleHByZXNzaW9uIAptdXN0IHRoZXJlZm9yZSBiZSBwYXJ0aWFsLCB0aGVyZSBpcyBvYnZpb3VzbHkgc29tZSAKcG9zc2liaWxpdHkgb2Ygc2VsZWN0aW9uIGFzIHRvIHRoZSBwYXJ0IGV4cHJlc3NlZC4gSXQgCmlzIGZvciB0aGlzIHJlYXNvbiB0aGF0IGluIGFsbCBvdXIgVGhlb3NvcGhpY2FsIGluLSAKdmVzdGlnYXRpb25zIG9mIHJlY2VudCB5ZWFycyBzbyBtdWNoIHN0cmVzcyBoYXMgYmVlbiAKbGFpZCB1cG9uIHRoZSBjb25zdGFudCBjaGVja2luZyBhbmQgdmVyaWZ5aW5nIG9mIApjbGFpcnZveWFudCB0ZXN0aW1vbnksIG5vdGhpbmcgd2hpY2ggcmVzdHMgdXBvbiB0aGUgCuKWuiB2aXNpb3JmIG9mIG9uZSBwZXJzb24gb25seSBoYXZpbmcgYmVlbiBhbGxvd2VkIHRvIAphcHBlYXIgaW4gb3VyIGxhdGVyIGJvb2tzLiAKCkJ1dCBldmVuIHdoZW4gdGhlIHBvc3NpYmlsaXR5IG9mIGVycm9yIGZyb20gdGhpcyAKZmFjdG9yIG9mIHBlcnNvbmFsIGVxdWF0aW9uIGhhcyBiZWVuIHJlZHVjZWQgdG8gYSAKbWluaW11bSBieSBhIGNhcmVmdWwgc3lzdGVtIG9mIGNvdW50ZXIgY2hlY2tpbmcsIAp0aGVyZSBzdGlsbCByZW1haW5zIHRoZSB2ZXJ5IHNlXiAKaV5pbmJlcmVudC0gLUhtciB0aGUtLW9wLGVyYXRpb24gbzogCgoKaXMgc29tZXRoaW5nIGFuYWxvZ291cyB0byBUaGUgZGlmZmljdWx0eSAKSmpeamFqal5pbnRlciBpbiBoaXMgZW5kZWF2b3VyIHRvIHJlcHJvZHVjZSBhIHRocmVlLSAKZGltZW5zaW9uYWwgbGFuZHNjYXBlIG9uIGEgZmxhdCBzdXJmYWNl4oCUIHRoYXQgCnByYWN0aWNhbGx5IGluIHR3byBkaW1lbnNpb25zLiBKdXN0IGFzIHRoZSBhcnRpcyAKbmVlZHMgbG9uZyBhbmQgY2FyZWZ1bCB0cmFpbmluZyBvZiBleWUgYW5kIGhhbmRdIApiZWZvcmUgaGUgY2FuIHByb2R1Y2UgYSBzYXRpc2ZhY3RvcnkgcmVwcmVzZW50YXRpb24nIAoKCjQgCgppbzYgCgoKQ0xBSVJWT1lBTkNFIAoKCm9mIG5hdHVyZSwgc28gZG9lcyB0aGUgY2xhaXJ2b3lhbnQgbmVlZCBsb25nIGFuZCAKY2FyZWZ1bCB0cmFpbmluZyBiZWZvcmUgaGUgY2FuIGRlc2NyaWJlIGFjY3VyYXRlbHkgb24gCmEgbG93ZXIgcGxhbmUgd2hhdCBoZSBzZWVzIG9uIGEgaGlnaGVyIG9uZSA7IGFuZCB0aGUgCnByb2JhYmlsaXR5IG9mIGdldHRpbmcgYW4gZXhhY3QgZGVzY3JpcHRpb24gZnJvbSBhbiAKW3VudHJhaW5lZCBwZXJzb24gaXMgYWJvdXQgZXF1YWwgdG8gdGhhdCBvZiBnZXR0aW5nIGEgCl5wZXJmZWN0bHktZmluaXNoZWQgbGFuZHNjYXBlIGZyb20gb25lIHdobyBoYXMgbmV2ZXIgCl8gZWFybnQgaG93IHRvIGRyYXcuIAoKSXQgbXVzdCBiZSByZW1lbWJlcmVkLCB0b28sIHRoYXQgdGhlIG1vc3QgcGVyZmVjdCAKcGljdHVyZSBpcyBpbiByZWFsaXR5IGluZmluaXRlbHkgZmFyIGZyb20gYmVpbmcgYSByZXByby0gCmR1Y3Rpb24gb2YgdGhlIHNjZW5lIHdoaWNoIGl0IHJlcHJlc2VudHMsIGZvciBoYXJkbHkgYSAKc2luZ2xlIGxpbmUgb3IgYW5nbGUgaW4gaXQgY2FuIGV2ZXIgYmUgdGhlIHNhbWUgYXMgCnRob3NlIGluIHRoZSBvYmplY3QgY29waWVkLiBJdCBpcyBzaW1wbHkgYSB2ZXJ5IAppbmdlbmlvdXMgYXR0ZW1wdCB0byBtYWtlIHVwb24gb25lIG9ubHkgb2Ygb3VyIGZpdmUgCiIgc2Vuc2VzLCBieSBtZWFucyBvZiBsaW5lcyBhbmQgY29sb3VycyBvbiBhIGZsYXQgc3VyZmFjZSwgCmFuIGltcHJlc3Npb24gc2ltaWxhciB0byB0aGF0IHdoaWNoIHdvdWxkIGhhdmVyIGJlZW4qLSAKbWFkZSBpZiB3ZSBoYWQgYWN0dWFsbHkgaGFkIGJlZm9yZSB1cyB0aGUgc2NlbmUgCmRlcGljdGVkLiBFeGNlcHQgYnkgYSBzdWdnZXN0aW9uIGRlcGVuZGVudCBlbnRpcmVseSAKb24gb3VyIG93biBwcmV2aW91cyBleHBlcmllbmNlLCBpdCBjYW4gY29udmV5IHRvIHVzIApub3RoaW5nIG9mIHRoZSByb2FyIG9mIHRoZSBzZWEsIG9mIHRoZSBzY2VudCBvZiB0aGUgCk1vd2Vycywgb2YgdGhlIHRhc3RlIG9mIHRoZSBmcnVpdCwgb3Igb2YgdGhlIHNvZnRuZXNzIG9yIApmaGFyZG5lc3Mgb2YgdGhlIHN1cmZhY2UgZHJhd24uIAoKT2YgZXhhY3RseSBzaW1pbGFyIG5hdHVyZSwgdGhvdWdoIGZhciBncmVhdGVyIGluIApkZWdyZWUsIGFyZSB0aGUgZGlmZmljdWx0aWVzIGV4cGVyaWVuY2VkIGJ5IGEgY2xhaXJ2b3lhbnQgCmluIGhpcyBhdHRlbXB0IHRvIGRlc2NyaWJlIHVwb24gdGhlIHBoeXNpY2FsIHBsYW4mIAp3aGF0IGhlIEpmYXMgc2VlbiB1cG9uIHRoZSBhc3RyYWwgOyBhbmQgdGhleSBhcmUgCgoKVEhFIEZPVVJUSCBESU1FTlNJT04gCgoKNCAKCjEwNyAKCgp0aGUgYXJ0aXN0IGRvZXMgd2hlbiBoZSBwYWludHMgbWVuIG9yIGFuaW1hbHMsLCBmaWVsZHMgMSAKMSAKCgpkciB0cmVlcywgSGUgaGFzIiBUbyAiZW5TZWF2b3VmXl5edEtlIHZlcnkgaW1wZXJmZWN0bHwgCm1lYW5zIGF0IGhpcyBkaXNwb3NhbCB0byBzdWdnZXN0IHRvIHRoZW0gY29uY2VwdGlvbnMhIAp3aGljaCBpbiBtb3N0IGNhc2VzIGFyZSBhYnNvbHV0ZWx5IG5ldyB0byB0aGVtLiAKClNtYWxsIHdvbmRlciB0aGVuIHRoYXQsIGhvd2V2ZXIgdml2aWQgYW5kIHN0cmlraW5nIApoaXMgZGVzY3JpcHRpb25zIG1heSBzZWVtIHRvIGhpcyBhdWRpZW5jZSwgaGUgaGltc2VsZiAKc2hvdWxkIGNvbnN0YW50bHkgYmUgaW1wcmVzc2VkIHdpdGggdGhlaXIgdG90YWwgaW4tIAphZGVxdWFjeSwgYW5kIHNob3VsZCBmZWVsIHRoYXQgaGlzIGJlc3QgZWZmb3J0cyBoYXZlIAplbnRpcmVseSBmYWlsZWQgdG8gY29udmV5IGFueSBpZGVhIG9mIHdoYXQgaGUgcmVhbGx5IApzZWVzLiBBbmQgd2UgbXVzdCByZW1lbWJlciB0aGF0IGluIHRoZSBjYXNlIG9mIHRoZSAKcmVwb3J0IGdpdmVuIGRvd24gaGVyZSBvZiBhIHJlY29yZCByZWFkIG9uIHRoZSBtZW50YWwgCnBsYW5lLCB0aGlzIGRpZmZpY3VsdCBvcGVyYXRpb24gb2YgdHJhbnNmZXJlbmNlIGZyb20gdGhlfCAKaGlnaGVyIHRvIHRoZSBsb3dlciBoYXMgdGFrZW4gcGxhY2Ugbm90IG9uY2UgYnV0IAp0d2ljZSwgc2luY2UgdGhlIG1lbW9yeSBoYXMgYmVlbiBicm91Z2h0IHRocm91Z2ggdGhlISAK4oCiIGZpZmVyXmVuaW5nIGFzdHJhbCBwbGFuZS4gRXZlbiBpbiBhIGNhc2Ugd2hlcmUgdGhlIAppbnZlc3RpZ2F0b3IgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgaGF2aW5nIGRldmVsb3BlZCAKaGlzIG1lbnRhbCBmYWN1bHRpZXMgc28gdGhhdCBoZSBoYXMgdGhlIHVzZSBvZiB0aGVtIAoK4oCiIGogCgp3aGlsZSBhd2FrZSBpbiB0aGUgcGh5c2ljYWwgYm9keSwgaGUgaXMgc3RpbGwgaGFtcGVyZWQgaiAKYnkgdGhlIGFic29sdXTCo2pmdF4gdG8gXCAKCmV4cHJlc3Mgd2hhdCBoZSBzZWVzLiAKClRyeSBmb3IgYSBtb21lbnQgdG8gcmVhbGl6ZSBmdWxseSB3aGF0IGlzIGNhbGxlZCBKamheIApmb3VydGggZGltZW5zaW9uLCBvZiB3aGljaCB3ZSBzYWlkIHNvbWV0aGluZyBpbiBhbiAKZWFybGllciBjaGFwdGVyLiBJdCBpcyBlYXN5IGVub3VnaCB0byB0aGluayBvZiBvdXIgb3duIArigKJ0aHJlZSBkaW1lbnNpb25zIOKAlCB0byBpbWFnZSBpbiBvdXIgbWluZHMgdGhlIGxlbmd0aCwgCmJyZWFkdGggYW5kIGhlaWdodCBvZiBhbnkgb2JqZWN0IDsgYW5kIHdlIHNlZSB0aGF0IAplYWNoIG9mIHRoZXNlIHRocmVlIGRpbWVuc2lvbnMgaXMgZXhwcmVzc2VkIGJ5IGEgbGluZSAKYXQgcmlnaHQgYW5nbGVzIHRvIGJvdGggb2YgdGhlIG90aGVycy4gVGhlIGlkZWEgb2YgdGhlIApmb3VydGggZGltZW5zaW9uIGlzIHRoYXQganQgbWlnaHQgYmUgcG9zc2libGUgdG8gZHJhdyAuIAoKCjQgCgppbzggCgoKQ0xBSVJWT1lBTkNFIAoKCmEgZm91cnRoIGxpbmUgd2hpY2ggc2hhbGwgYmUgYXQgcmlnaHQgYW5nbGVzIHRvIGFsbCB0aHJlZSAKb0xBalBeTGFscmVhZHkgZXhpc3RpbmcuIAoKTm93IHRoZSBvcmRpbmFyeSBtaW5kIGNhbm5vdCBncmFzcCB0aGlzIGlkZWEgaW4gCnRoZSBsZWFzdCwgdGhvdWdoIHNvbWUgZmV3IHdobyBoYXZlIG1hZGUgYSBzcGVjaWFsIApzdHVkeSBvZiB0aGUgc3ViamVjdCBoYXZlIGdyYWR1YWxseSBjb21lIHRvIGJlIGFibGUgdG8gCnJlYWxpemUgb25lIG9yIHR3byB2ZXJ5IHNpbXBsZSBmb3VyLWRpbWVuc2lvbmFsIGZpZ3VyZXMuIApTdGlsbCwgbm8gd29yZHMgdGhhdCB0aGV5IGNhbiB1c2Ugb24gdGhpcyBwbGFuZSBjYW4gCmJyaW5nIGFueSBpbWFnZSBvZiB0aGVzZSBmaWd1cmVzIGJlZm9yZSB0aGUgbWluZHMgb2YgCm90aGVycywgYW5kIGlmIGFueSByZWFkZXIgd2hvIGhhcyBub3Qgc3BlY2lhbGx5IHRyYWluZWQgCmhpbXNlbGYgYWxvbmcgdGhhdCBsaW5lIHdpbGwgbWFrZSB0aGUgZWZmb3J0IHRvIHZpc3VnLCleIApzdWNoIGEgc2hhcGUgaGUgd2lsbCBmaW5kIGl0IHF1aXRlIGltcG9zc2libGUuIE5vdyB0byAKZXhwcmVzcyBzdWNoIGEgZm9ybSBjbGVhcmx5IGluIHBoeXNpY2FsIHdvcmRzIHdvdWxkIApiZSwgaW4gZWZmZWN0LCB0byBkZXNjcmliZSBhY2N1cmF0ZWx5IGEgc2luZ2xlIG9iamVjdCBvbiAKaWZlIGFzdHJhbCBwbGFwZSA7IGJ1dCBpbiBleGFtaW5pbmcgdGhlIHJlY29yZHMgb24gCnRoZSBtZW50YWwgcGxhbmUgd2Ugc2hvdWxkIGhhdmUgdG8gZmFjZSB0aGUgYWRkaXRpb25hbCAqIApkaWZmaWN1bHRpZXMgb2YgYSBmaWZ0aCBkaW1lbnNtanFKIFNvIHRoYXQgdGhlIGlybi0gCl5NaWJpbGl0eSBvZiBmdWxseSBleHBsYWluaW5nIHRoZXNlIHJlY29yZHMgd2lsIEogYmUgCm9idmlvdXMgdG8gZXZlbiB0aGUgbW9zdCBzdXBlcmZpY2lhbCBvYnNlcnZhdGlvbi4gCgpXZSBoYXZlIHNwb2tlbiBvZiB0aGUgcmVjb3JkcyBhcyB0aGUgbWVtb3J5IG9mIAp0aGUgTG9nb3MsIHlldCB0aGV5IGFyZSB2ZXJ5IG11Y2ggbW9yZSB0aGFuIGEgCm1lbW9yeSBpbiBhbiBvcmRpbmFyeSBzZW5zZSBvZiB0aGUgd29yZC4gSG9wZWxlc3MgCmFzIGl0IG1heSBiZSB0byBpbWFnaW5lIGhvdyB0aGVzZSBpbWFnZXMgYXBwZWFyIApmcm9tIEhpcyBwb2ludCBvZiB2aWV3LCB3ZSB5ZXQga25vdyB0aGF0IGFzIHdlIHJpc2UgCgoKdHJ1ZSBtZW1vcnkg4oCUIG11c3QgCgoKbW9yZSBuZWFydCAKCuKAlCAsIOKAlCAKCuKAomlqc2Vlczogc28gdGhhdCBncmVhdCBpbnRlcmVzdCBhdHRhY2hlcyB0byB0aGUgZXhwZXJpZW5jZSAKCgpvZiB0aGUgY2xhaXJ2b3lhbnQgd2l0aCByZWZlcmVuY2UgdG8gdGhlc2UgcmVjb3JkcyB3aGVuIAp1cG9uIHRoZSBidWRkaGljLV5qaWFuZSDigJQgdGhlIGhpZ2hlc3QgCgoKVEhFIEVURVJOQUwgTk9XIAoKCndoaWNoIGhpcyBjb25zY2lvdXNuZXNzIGNhbiByZWFjaCBldmVuIHdoZW4gYXdheSAKZnJvbSB0aGUgcGh5c2ljYWwgYm9keSB1bnRpbCBoZSBhdHRhaW5zIHRoZSBsZXZlbCBvZiAKCgpIZXJlIHRpbWUgYW5kIHNwYWNlIG5vIGxvbnNyZXIgbGltaXQgaGltIDogaGUgbm8gCmxvbmdlciBuZWVkcywgYXMgb24gdGhlIG1lbnRhbCBwbGFuZSwgdG8gcGFzcyBhIHNlcmllcyAKb2YgZXZlbnRzIGluIHJldmlldywgZm9yIHBhc3QsIHByZXNlbnQgYW5kXmZ1dG9yZWpeXmwgCgptZWFuaW5nbGVzcyBhcyAKCnRoYXQgc291bmRzIGRvd24gaGVyZS4gSW5kZWVkLCBpbmZpbml0ZWx5IGJlbG93IHRoZSAKY29uc2Npb3VzbmVzcyBvZiB0aGUgTG9nb3MgYXMgZXZlbiB0aGF0IGV4YWx0ZWQgcGxhbmUgCmlzLCBpdCBpcyB5ZXQgYWJ1bmRhbnRseSBjbGVhciBmcm9tIHdoYXQgd2Ugc2VlIHRoZXJlIAp0aGF0IHRvIEhpbSB0aGUgcmVjb3JkIG11c3QgYmUgZmFyIG1vcmUgdGhhbiB3aGF0IAp3ZSBjYWxsIGEgbWVtb3J5LCBmb3IgYWxsIHRoYXQgaGFzIGhhcHBlbmVkIGluIHRoZSAKcGFzdCBhbmQgYWxsIHRoYXQgd2lsbCBoYXBwZW4gaW4gdGhlIGZ1dHVyZSBpcyBoYXBwZW5pbmctIApuZyAnamcgYmVmb3JlIEhpcyBleWVzIGp1c3QgYXMgYXJlIHRoZSBldmVudHMgb2Ygd2hhdCAKLHdlIGNhbGwgdGhlIHByZXNlbnQgdGltZS4gVXR0ZXJseSAKCklTVGF0dXJhbGx5IHdlIGNvdWxkIG5vdCBleHBlY3QgdG8gdW5kZXJzdGFuZCBhdCAKb3VyIHByZXNlbnQgc3RhZ2Ugb2Yga25vd2xlZGdlIGhvdyBzbyBtYXJ2ZWxsb3VzIGEgCnJlc3VsdCBpcyBwcm9kdWNlZCwgYW5kIHRvIGF0dGVtcHQgYW4gZXhwbGFuYXRpb24gCndvdWxkIG9ubHkgYmUgdG8gaW52b2x2ZSBvdXJzZWx2ZXMgaW4gYSBtaXN0IG9mIHdvcmRzIApmcm9tIHdoaWNoIHdlIHNob3VsZCBnYWluIG5vIHJlYWwgaW5mb3JtYXRpb24uIFlnZmM7IAphIGxpbmUgb2YgdGhvdWdodCByZWN1cnMgdG8gbXkgbWluZCB3aGljaCBwZXJoYXBzIApec3VnZ2VzdHMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoYXQgCmV4cGxhbmF0aW9uIG1heSBsaWUgOiBhbmQgd2hhdGV2ZXIgaGVscHMgdXMgdG8gcmVhbGl6ZSAKdGhhdCBzbyBhc3RvdW5kaW5nIGEgc3RhdGVtZW50IG1heSBhZnRlciBhbGwgcmlvdCBiZSAKd2hvbGx5IGltcG9zc2libGUgd2lsbCBiZSBvZiBhc3Npc3RhbmNlIDsgfGxpIGJyb2FkZW5pbmcgCm91ciBtaW5kcy4gLiAmIDsgLyAqIAoKCsK7IOKAoi4g4oCiIAoKCj4gCgpqZnItIAoKCign4oCiIAoKCifilqAqIFYgCgoK4oCcZiAKCklYTyBDTEFJUlZPWUFOQ0UgCgpTb21lIHRoaXJ0eSB5ZWFycyBhZ28gSSByZW1lbWJlciByZWFkaW5nIGEgdmVyeSAKY3VyaW91cyBsaXR0bGUgYm9vaywgY2FsbGVkLCBJIHRoaW5rLCBUaGUgU3RhcnMgYW5kIHRoZSAKRWFydGggLCB0aGUgb2JqZWN0IG9mIHdoaWNoIHdhcyB0byBlbmRlYXZvdXIgdG8gc2hvdyAKaG93IGl0IHdhcyBzY2llbnRpZmljYWxseSBwb3NzaWJsZSB0aGF0IHRvIHRoZSBtaW5kIG9mIApHb2QgdGhlIHBhc3QgYW5kIHRoZSBwcmVzZW50IG1pZ2h0IGJlIGFic29sdXRlbHkgCnNpbXVsdGFuZW91cy4gSXRzIGFyZ3VtZW50cyBzdHJ1Y2sgbWUgYXQgdGhlIHRpbWUgCmFzIGRlY2lkZWRseSBpbmdlbmlvdXMsIGFuZCBJIHdpbGwgcHJvY2VlZCB0byBzdW0tIAptYXJpemUgdGhlbSwgYXMgSSB0aGluayB0aGV5IHdpbGwgYmUgZm91bmQgc29tZXdoYXQgCnN1Z2dlc3RpdmUgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IHdoaWNoIHdlIApoYXZlIGJlZW4gY29uc2lkZXJpbmcuIAoKV2hlbiB3ZSBzZWUgYW55dGhpbmcsIHdoZXRoZXIgaXQgYmUgdGhlIGJvb2sgCndoaWNoIHdlIGhvbGQgaW4gb3VyIGhhbmRzIG9yIGEgc3RhciBtaWxsaW9ucyBvZiBtaWxlcyAKYXdheSwgd2UgZG8gc28gYnkgbWVhbnMgb2YgdmlicmF0aW9uIGpuX8KxaGUgZXRoZXJUIAoKY29tbW9ubHkgY2FsbGVkIGEgcmF5IG9mIGxpZ2h0LCB3aGljaCBwYXNzZXMgZnJvbSB0aGUgCm9iamVjdCBzZWVuIHRvIG91ciBleWVzLiBOb3cgdGhlIHNwZWVkIHdpdGggd2hpY2gg4oCiIAp0aGlzIHZpYnJhdGlvbiBwYXNzZXMgaXMgc28gZ3JlYXQg4oCUIGFib3hpdGFNeGlhUSBtaWxlcyAKaSA6aSBhLCBzZWNvbmQg4oCUIHRoYXQgd2hlbiB3ZSBhcmUgY29uc2lkZXJpbmcgYW55IG9iamVjdCAKaSAxIG91ciBvd24gd29ybGQgd2UgbWF5IHJlZ2FyZCBpdCBhcyBwcmFjdGljYWxseSBpbi0gCnN0YW50YW5lb3VzLiBXaGVuLCBob3dldmVyLCB3ZSBjb21lIHRvIGRlYWwgd2l0aCAKaW50ZXJwbGFuZXRhcnkgZGlzdGFuY2VzIHdlIGhhdmUgdG8gdGFrZSB0aGUgc3BlZWQgb2YgCmxpZ2h0IGludG8gY29uc2lkZXJhdGlvbiwgZm9yIGFuIGFwcHJlY2lhYmxlIHBlcmlvZCBpcyAKb2NjdXBpZWQgaW4gdHJhdmVyc2luZyB0aGVzZSB2YXN0IHNwYWNlcy4gRm9yIGV4YW1wbGUgCmZ0LCB0YWtlcyBlaWdodCBtaW51dGVzIGFuZCBhIHF1YXJ0ZXIgZm9yIGxpZ2ZyZiBmb3RyYXZlbF4gCnRvIHUucy4gZnJvbSB0aGUgc14sIHNvIHRoYXQgd2hlbiB3ZSBsb29rIGF0IHRoZSBzb2xhciBtIApvcmIgd2Ugc2VlIGl0IGJ5IG1lYW5zIG9mIGEgcmF5IG9mIGxpZ2h0IHdoaWNoIGxlZnQgaXQgCm1vcmUgdGhhbiBlaWdodCBtaW51dGVzIGFnby4gCgonIEZyb20gdGhpcyBmb2xsb3dzIGEgdmVyeSBjdXJpb3VzIHJlc3VsdC4gVGhlIHJheSAKb2YgbGlnaHQgYnkgd2hpY2ggd2Ugc2VlIHRoZSBzdW4gY2FuIG9idmlvdXNseSByZXBvcnQgCgoKU1RFTExBUiBESVNUQU5DRVMgCgoKSUlJIAoKCnRvIHVzIG9ubHkgdGhlIHN0YXRlIG9mIGFmZmFpcnMgd2hpY2ggZXhpc3RlZCBpbiB0aGF0IApsdW1pbmFyeSB3aGVuIGl0IHN0YXJ0ZWQgb24gaXRzIGpvdXJuZXksIGFuZCB3b3VsZCAKbm90IGJlIGluIHRoZSBsZWFzdCBhZmZlY3RlZCBieSBhbnl0aGluZyB0aGF0IGhhcHBlbmVkIAp0aGVyZSBhZnRlciBpdCBsZWZ0IDsgc28gdGhhdCAKClRoYXQgaXMgdG8gc2F5IAoKCmxlLiB3YXMgZWlnaHQgbWlqaiAKCnRoYXQgaWYgYW55dGhpbmcgaW1wb3J0YW50IHRvb2sgcGxhY2UgaW4gdGhlIHN1bi0gCnRoZSBmb3JtYXRpb24gb2YgYSBuZXcgc3VuLXNwb3QsIGZvciBpbnN0YW5jZSDigJQgYW4gCmFzdHJvbm9tZXIgd2hvIHdhcyB3YXRjaGluZyB0aGUgb3JiIHRocm91Z2ggaGlzIAp0ZWxlc2NvcGUgYXQgdGhlIHRpbWUgd291bGQgYmUgcXVpdGUgdW5hd2FyZSBvZiB0aGUgCmluY2lkZW50IHdoaWxlIGl0IHdhcyBoYXBwZW5pbmcsIHNpbmNlIHRoZSByYXkgb2YgbGlnaHQgCmJlYXJpbmcgdGhlIG5ld3Mgd291bGQgbm90IHJlYWNoIGhpbSB1bnRpbCBtb3JlIHRoYW4gCmVpZ2h0IG1pbnV0ZXMgbGF0ZXIuIAoKVGhlIGRpZmZlcmVuY2UgaXMgbW9yZSBzdHJpa2luZyB3aGVuIHdlIGNvbnNpZGVyISAKdGhlIGZpeGVUIHN0YXJzLCBiZWNhdXNlIGluIHRoZWlyIGNhc2UgdGhlIGRpc3RhbmNlcyBhcmUhIApzbyBlbm9ybW91c2x5IGdyZWF0ZXIuIFRoZSBeZ29sZSBzdGFyLCBmb3IgZXhhbXBsZSwhIAppcyBzbyBmYXIgb2ZmIHRoYXQgbGlnaHQsIHRyYXZlbGxpbmcgYXQgdGhlIGluY29uY2VpdmFibGUgJyAKc3BlZWQgYWJvdmUgbWVudGlvbmVkLCB0YWtlcyBhIGxpdHRsZSBtb3JlIAoK4oCUIOKAlCBucyZzciZpbCogdyBhIAoKeWVhcnMgdG8gcmVhY2ggb3VyIGV5ZXMgOyBhbmQgZnJvbSB0aGF0IGZvbGxvd3MgdGhlIEkgCgoKR3JhbmdlIAoKCmZyYW5nZSBidXQgaW5ldml0YWJsZSBpbmZlcmVuY2UgdGhhdCB3ZSBzZWUgCnN0YXIgbm90IGFqai4uYW40aXZoLmVqcmUgaXQgCgoKaXMgYXQgdGhpcyBtb21lbnQsIGJ1dCBhcyBhbmQgCndoZXJlIGl0IHdhcyBmaWZ0eSB5ZWFycyBhZ28uIE5heSwgaWYgdG8tbW9ycm93IHNvbWUgCmNvc21pYyBjYXRhc3Ryb3BoZSB3ZXJlIHRvIHNoYXR0ZXIgdGhlIHBvbGUgc3RhciBpbnRvIApmcmFnbWVudHMsIHdlIHNob3VsZCBzdGlsbCBzZWUgaXQgcGVhY2VmdWxseSBzaGluaW5nIGluIAojdGhlIHNreSBhbGwgdGg2IHJlc3Qgb2Ygb3VyIGxpdmVzIDsgb3VyIGNoaWxkcmVuIHdvdWxkIApncm93IHVwIHRvIG1pZGRsZSBhZ2UgYW5kIGdhdGhlciB0aGVpciBjaGlsZHJlbiAKYWJvdXQgdGhlbSBpbiB0dXJuIGJlZm9yZSB0aGUgbmV3cyBvZiB0aGF0IHRyZS0gCm1lbmRvdXMgYWNjaWRlbnQgcmVhY2hlZCBhbnkgdGVycmVzdHJpYWwgZXllLiBJbiAKdGhlIHNhbWUgd2F5IHRoZXJlIGFyZSBvdGhlciwgc3RhcnMgc28gZmFpTGpkaV5hYXQgCgoKQ0xBSVJWT1lBTkNFIAoKCnRoYXQgbGlnaHQgdGFrZXMgdGhvdXNhbmRzIG9mLiB5ZWFycyB0byB0cmF2ZWwgZnJvbSAKdGhlbSB0byB1cywgYW5kIHdpdGggcmVmZXJlbmNlIHRvIHRoZWlyIGNvbmRpdGlvbiBvdXJ2IAoKCnkgCgoKSSBOb3cgY2FycnkgdGhlIGFyZ3VtZW50IGEgc3RlcCBmYXJ0aGVyLiBTdXBwb3NlIApJIHRoYXQgd2Ugd2VyZSBhYmxlIHRvIHBsYWNlIGEgbWFuIGF0IHRoZSBkaXN0YW5jZSBvZiAKMTg2LDAwMCBtaWxlcyBmcm9tIHRoZSBlYXJ0aCwgYW5kIHlldCB0byBlbmRvdyBoaW0gCndpdGggdGhlIHdvbmRlcmZ1bCBmYWN1bHR5IG9mIGJlaW5nIGFibGUgZnJvbSB0aGF0IApkIOKAmSAtIGRpc3RhbmNlIHRvIHNlZSB3aGF0IHdhcyBoYXBwZW5pbmcgaGVyZSBhcyBjbGVhcmx5IApmYXMgdGhvdWdoIGhlIHdlcmUgc3RpbGwgY2xvc2UgYmVzaWRlIHVzLiMuIEl0IGlzIGV2aWRlbnQgCi50aGF0IGEgbWFuIHNvIHBsYWNlZCB3b3VsZCBzZWUgZXZlcnl0aGluZyBhIHNlY29uZCAKfSBhZnRlciB0aGUgdGltZSB3aGVuIGl0IHJlYWxseSBoYXBwZW5lZCwgYW5kIHNvIGF0IHRoZSAKcHJlc2VudCBtb21lbnQgaGUgd291bGQgYmUgc2VlaW5nIHdoYXQgaGFwcGVuZWQgCnlhIHNlY29uZCBhZ28uIERvdWJsZSB0aGUgZGlzdGFuY2UsIGFuZCBoZSB3b3VsZCAKXSEgYmUgdHdvIHNlY29uZHMgYmVoaW5kIHRpbWUsIGFuZCBzbyBvbiA7IHJlbW92ZV5oaW0gCnwgdG8gdGhlIGRpc3RhbmNlIG9mIHRoZSBzdWZpIChzdGlsbCBhbGxvd2luZyBoaW0gdG8gCnwgcHJlc2VydmUgdGhlIHNhbWUgbXlzdGVyaW91cyBwb3dlciBvZiBzaWdodCkgYW5kIApsbGhlIHdvdWxkIGxvb2sgZG93biBhbmQgd2F0Y2ggeW91IGRvaW5nIG5vdCB3aGF0IAo7IEkgbHlvdSBhcmUgZG9pbmcgbm93LCBidXQgd2hhdCB5b3Ugd2VyZSBkb2luZyBlaWdodCAKSSB8IGYgbWludXRlcyBhbmQgYSBxdWFydGVyIGFnby4gQ2FycnkgaGltIGF3YXkgdG8gCnx0aGUgcG9sZSBzdGFyLCBhbmQgaGUgd291bGQgc2VlIHBhc3NpbmcgYmVmb3JeIGhpcyAKSWlleWVzIHRoZSBldmVudHMgb2YgZmlmdHkgeWVhcnMgYWdvOyBoZSB3b3VsZCBiZSAKSSB3YXRjaGluZyB0aGUgY2hpbGRpc2ggZ2FtYm9scyBvZiB0aG9zZSB3aG8gYXQgdGhlIApiaXZlcnkgc2FtZSBtb21lbnQgd2VyZSByZWFsbHkgbWlkZGxlLWFnZWQgbWVuLiAK4pagTWFydmVsbG91cyBhcyB0aGlzIG1heSBzb3VuZCwgaXQgaXMgbGl0ZXJhbGx5IGFuZCAKCgpUaGUgbGl0dGxlIGJvb2sgd2VudCBvbiB0byBhcmd1ZSBsb2dpY2FsbHkgZW5vdWdoIApsYXQgR29kLCBiZWluZyBhbG1pZ2h0eSwgbXVzdCBwb3NzZXNzIHRoZSB3b25kZXJmdWwgCgoKT01OSVNDSUVOVCBWSVNJT04gCgoKMSozIAoKCnBvd2VyIG9mIHNpZ2h0IHdoaWNoIHdlIGhhdmUgYmVlbiBwb3N0dWxhdGluZyBmb3IiIApvdXIgb2JzZXJ2ZXI7IGFuZCBmdXJ0aGVyLCB0aGF0IGJlaW5nIG9tbmlwcmVzZW50LCAKCkhlIG11c3QgYmUgYXQgZWFjaCBvZiB0aGUgc3RhdGlvbnMgd2hpY2ggd2UgCgotICcg4oCiIAoKbWVudGlvbmVkLCBhbmQgYWxzbyBhdCBldmVyeSBpbnRlcm1lZGlhdGUgcG9pbnQsIApub3Qgc3VjY2Vzc2l2ZWx5IGJ1dCBzaW11bHRhbmVvdXNseS4gR3JhbnRpbmcgdGhlc2U7IApwcmVtaXNlcywgdGhlIGluZXZpdGFibGUgZGVkdWN0aW9uIGZvbGxvd3MgdGhhdCBldmVyeS0gCnRoaW5nIHdoaWNoIGhhcyBldmVyIGhhcHBlbmVkIGZyb20gdGhlIHZlcnkgCmJlZ2lubmluZyBvZiB0aGUgd29ybGQgbXVzdCBiZSBhdCB0aGlzIHZlcnkgbW9tZW50IAp0YWtpbmcg4oCYIHBsYWNlIGJlZm9yZSB0aGUgZXllIG9mIEdvZCDigJQgbm90IGEgbWVyZSAKbmllbW9yanIgb2YgaXQsIGJ1dCB0aGUgYWN0dWFsIG9jY3VycmVuY2UgaXRzZWxmIGJlaW5nIApub3cgdW5kZXIgSGlzIG9ic2VydmF0aW9uLiAKCl9BbGwuLnRoP3MgaXMgbWF0ZXJpYWxpc3RpYyBlbm91Z2gsIGFuZCBvbiB0aGUgcGxhbmUgCm9mIHB1cmVseSAucGh5c2ljYWwgc2NpZW5jZSwgYW5kIHdlIG1heSB0aGVyZWZvcmUgYmUgCmFzc3VyZWQgdGhhdCBpdCBpcyBub3QgdGhlIHdheSBpbiB3aGljaCB0aGUgbWVtb3J5IArigKIgb2YgdGhlIExvZ29zIGFjdHM7IHlldCBpdCBpcyBuZWF0bHkgd29ya2VkIG91dCBhbmQgCmFic29sdXRlbHkgaW5jb250cm92ZXJ0aWJsZSwgYW5kIGFzIEkgaGF2ZSBzYWlkIGJlZm9yZSwgCml0IGlzIG5vdCB3aXRob3V0IGl0cyB1c2UsIHNpbmNlIGl0IGdpdmVzIHVzIGEgZ2xpbXBzZSBvZiAKc29tZSBwb3NzaWJpbGl0aWVzIHdoaWNoIG90aGVyd2lzZSBtaWdodCBub3Qgb2NjdXIgCnRvIHVzLiAKCkJ1dCwgaXQgbWF5IGJlIGFza2VkLCBob3deaXMgal50IHBvc3NpYmxlLCBhbWlkXnRoZSAKYmV3aWxkZXJpbmcgY29uZnVzaW9uIG9mIHRoZXNlIHJlY29yZHMgb2YgdGhlIHBhc3QsIHRvIAoKPyBBcyAKCmEgbWF0dGVyIG9mIGZhY3QsIHRoZSB1bnRyYWluZWQgY2xhaXJ2b3lhbnQgdXN1YWxseSAKZ2Fubm90IGRvIHNvIHdpdGhvdXQgc29tZSBzcGVjaWFsIGxpbmsgdG8gcHV0IGhpbSAKZW4gcmFwcG9ydCB3aXRoIHRoZSBzdWJqZWN0IHJlcXVpcmVkLiBQc3ljaG9tZXRyeSAKaXMgYW4gaW5zdGFuY2UgaW4gcG9pbnQsIGFuZCBpdCBpcyBxdWl0ZS5wcm9iYWJsZSB0aGF0IApvdXIgb3JkaW5hcnkgbWVtb3J4SnMgcmVhbGx5IG9ubHkgYW5vdGhlciBwcmVzZW50LSAKCm1lbnQgb2YgdGhlIHNhbWUgaWRlYSwgSXQgc2VlbXMgYXMgdGhvdWdoIC0gdGhlcmUgCgo4IAoKCkNMQUlSVk9ZQU5DRSAKCgoxMTQgCgoKd2VyZSBhIHNvcnQgb2YgbWFnbmV0aWMgYXR0YWNobWVudCBvciAKCmFuIGFmZmluaXR5IHdoaWNoIGVuYWJsZXMgaXQgdG8gCmNvbmR1Y3RvciBiZXR3ZWVuIHRoYXQgcmVjb3JkIGFuZCAKZnRoZSBmYWN1bHRpZXMgb2YgYW55b25lIHdobyBjYW4gcmVhZCBpdC4gCgpGb3IgZXhhbXBsZSwgSSBvbmNlIGJyb3VnaHQgZnJvbSBTdG9uZWhlbmdlIGEgCnRpbnkgZnJhZ21lbnQgb2Ygc3RvbmUsIG5vdCBsYXJnZXIgdGhhbiBhIHBpbuKAmXMgaGVhZCwgCi4udCBhbjxeIG9uIHB1dHRpbmcgdGhpcyBpbnRvIGFuIGVudmVsb3BlIGFuZCBoYW5kaW5nIGl0IAp2aWlqIHRQLiBhIHBzeWNob21ldGVyIHdobyBoYWQgbm8gaWRlYSB3aGF0IGl0IHdhcywgc2hlIAoqIGF0IG9uY2UgYmVnYW4gdG8gZGVzY3JpYmUgdGhhdCB3b25kZXJmdWwgcnVpbiBhLm5kIHRoZSAKZGVzb2xhdGUgY291bnRyeSBzdXJyb3VuZGluZyBpdCwgYW5kIHRoZW4gd2VudCBvbnRvIApmIHBpY3R1cmUgdml2aWRseSB3aGF0IHdlcmUgZXZpZGVudGx5IHNjZW5lcyBmcm9tIGl0cyAKZWFybHkgaGlzdG9yeSwgc2hvd2luZyB0aGF0IHRoYXQgaW5maW5pdGVzaW1hbCBmcmFnbWVudDogCgoKaSAKCgpjYW5sZS0gVGhlIHNjZW5lcyB0aHJvdWdoIHdoaWNoIHdlIHBhc3MgaW4gdGhlIApwLW91cnNlIG9mIG91ciBsaWZlIHNlZW0gdG8gYWN0IGluIHRoZSBzYW1lIG1hbm5lciAKfCB1cG9uIHRoZSBjZWxscyBvZiBvdXIgYnJhaW4gYXMgZGlkIHRoZSBoaXN0b3J5IG9mIAppIFN0b25laGVuZ2UgdXBvbiB0aGF0IHBhcnRpY2xlIG9mIHN0b25lOiB0aGV5IGVzdGFibGlzaCAKISBhIGNvbm5lY3Rpb24gd2l0aCB0aG9zZSBjZWxscyBieSBtZWFucyBvZiB3aGljaCBvdXIgCmogbWluZCBpcyBwdXQgZW4gcmFwcG9ydCB3aXRoIHRoYXQgcGFydGljdWxhciBwb3J0aW9uIG9mIArigJ5pdGhlIHJlY29yZHMsIGFuZCBzbyB3ZSDigJwgcmVtZWphXmVyICIgd2hhdCB3ZSBoYXZlIApzZWVuLiAKCl52X2VybC4gLi5hLUpyYV5uZWQgY2xhaXJ2b3lhbnQgbmVlZHMgc29tZSBsaW5rIHRvIAoKdG9maW5kIHRoZXJlY29yZCEnb2ZeJ2Vecl5WaF4gCgo/ZS4gSWYsIGZvciBleGFtcGxlLCBoZSAKCgpeaGdKYiZzIHBvIHByZXZpb3VzIiBfIF9fIAoKd2lzaGVkIHRvIG9ic2VydmUgdGhlIGxhbmRpbmcgb2YgSnVsaXVzIENhZXNhciBvbiB0aGUgClNob3JlcyBvZiBFbmdsYW5kLCB0aGVyZSBhcmUgc2V2ZXJhbCB3YXlzIGluIHdoaWNoIAoKCkFTUEVDVCBPRiBUSEUgUkVDT1JEUyAKCgoxMTUgCgpoZSBtaWdodCBhcHByb2FjaCB0aGUgc3ViamVjdCBJZiBoZSBoYXBwZW5lZCB0b3QsIApoYXZlIHZpc2l0ZWQgdGhlIHNjZW5lIG9mIHRoZSBvY2N1cnJlbmNlLCB0aGUgc2ltcGxlc3QgaSAKd2F5IHdvdWxkIHByb2JhYmx5IGJlIHRvIGNhbGwgdXAgdGhlIGltYWdlIG9mIHRoYXQgcCAKc3BvdCwgYW5kIHRoZW4gcnVuIGJhY2sgdGhyb3VnaCBpdHMgcmVjb3JkcyB1bnRpbCBoZSAhIApyZWFjaGVkIHRoZSBwZXJpb2QgZGVzaXJlZC4gSWYgaGUgaGFkIG5vdCBzZWVuIHRoZSBcIDogCnBsYWNlLCBoZSBtaWdodCBydW4gYmFjayBpbiB0aW1lIHRvIHRoZSBkYXRlIG9mIHRoZSBKIApldmVudCwgYW5kIHRoZW4gc2VhcmNoIHRoZSBDaGFubmVsIGZvciBhIGZsZWV0IG9mIGogClJvbWFuIGdhbGxleXMgOyBvciBoZSBtaWdodCBleGFtaW5lIHRoZSByZWNvcmRzIG9mIHwgClJvbWFuIGxpZmUgYXQgYWJvdXQgdGhhdCBwZXJpb2QsIHdoZXJlIGhlIHdvdWxkIGhhdmUgZiAKbm8gZGlmZmljdWx0eSBpbiBpZGVudGlmeWluZyBzbyBwcm9taW5lbnQgYSBmaWd1cmUgYXMgwrs7IApDYXNzYXIsIG9yIGluIHRyYWNpbmcgaGltIHdoZW4gZm91bmQgdGhyb3VnaCBhbGwgaGlzIApHYWxsaWMgd2FycyB1bnRpbCBoZSBzZXQgaGlzIGZvb3QgdXBvbiBCcml0aXNoIGxhbmQuIAoKUGVvcGxlIG9mdGVuIGVucXVpcmUgYXMgdG8gdGhlIGFzcGVjdCBvZiB0aGVzZSAKcmVjb3JkcyDigJQgd2hldGhlciB0aGV5IGFwcGVhciBuZWFyIG9yIGZhciBhd2F5IGZyb20gCnRoZSDCo3llLCB3aGV0aGVyIHRoZSBmaWd1cmVzIGluIHRoZW0gYXJlIGxhcmdlIG9yIApzbWFsbCwgd2hldGhlciB0aGUgcGljdHVyZXMgZm9sbG93IG9uZSBhbm90aGVyIGFzIGluIAphIHBhbm9yYW1hIG9yIG1lbHQgaW50byBvbmUgYW5vdGhlciBsaWtlIGRpc3NvbHZpbmcgCnZpZXdzLCBhbmQgc28gb24uIE9uZSBjYW4gb25seSByXl4sSnRoYWl2PHRoZWs+IAoKYXBwZWFyYW5jZSB2YXJpZXMgdG8gYSBjZXJ0YWluIGV4dGVudCBhY2NvcmRpbmcgdG8gCgouIC4uLi4uLi4uLiAuICwgCgp0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGV5IGFyZSBzZWVuLiBVcHBuIHRoZSAKYXN0cmFsIHBsYW5lIHRoZSByZWZsZWN0aW9uIGlzIG1vc3Qgb2Z0ZW4gYSBzaW1wbGUgCnBpY3R1cmUsIHRob3VnaCBvY2Nhc2lvbmFsbHkgdGhlIGZpZ3VyZXMgc2VlbiB3b3VsZCAKYmUgZW5kb3dlZCB3aXRoIG1vdGlvbiA7IGluIHRoaXMgbGF0dGVyIGNhc2UsIGluc3RlYWQgCuKAom9mIGEgbWVyZSBzbmFwc2hvdCBhIHJhdGhlciBsb25nZXIgYW5kIG1vcmUgcGVyZmVjdCAKcmVmbGVjdGlvbiBoYXMgdGFrZW4gcGxhY2UuIAoKT24gdGhlIG1lbnRhbCBwbGFuZSB0aGV5IGhhdmUgdHdvIHdpZGVseSBkaWZmZXJlbnQgCmFzcGVjdHMuIFdoZW4gdGhlIHZpc2l0b3IgdG8gdGhhdCBwbGFuZSBpcyBub3QgdGhpbmstIAppbmcgc3BlY2lhbGx5IG9mIHRoZW0gaW4gYW55IHdheSwgdGhlIHJlY29yZHMgc2ltcGx5IAoKCkNMQUlSVk9ZQU5DRSAKCgoxMTYgCgpeIGZicm0gYSBiYWNrZ3JvdW5kIHRvIHdoYXRldmVyIGlzIGdvaW5nIG9uLCBqdXN0IGFzIApsIHw7dGhlIHJlZmxlY3Rpb25zIGluIGEgcGllci1nbGFzcyBhdCB0aGUgZW5kIG9mIGEgcm9vbSAKXCBJIG1pZ2h0IGZvcm0gYSBiYWNrZ3JvdW5kIHRvIHRoZSBsaWZlIG9mIHRoZSBwZW9wbGUgaW4gCml0IEl0IG11c3QgYWx3YXlzIGJlIGJvcm5lIGluIG1pbmQgdGhhdCB1bmRlciB0aGVzZSAKCsKrICcuY29uZGl0aW9ucyB0aGV5IGFyZSByZWFsbHkgbWVyZWx5IHJlZmxlY3Rpb25zIGZyb20gdGhlIAo7IGNlYXNlbGVzcyBhY3Rpdml0eSBvZiBhIGdyZWF0IENvbnNjaW91c25lc3MgdXBvbiBhIApqIGZhciBoaWdoZXIgcGxhbmUsIGFuZCBoYXZlIHZlcnkgbXVjaCB0aGUgYXBwZWFyYW5jZSAKb2YgYW4gZW5kbGVzcyBzdWNjZXNzaW9uIG9mIHRoZSByZWNlbnRseSBpbnZlbnRlZCAKY2luZW1hdG9ncmFwaGUsIG9yIGxpdmluZyBwaG90b2dyYXBocy4gVGhleSBkbyBub3QgCicgbWVsdCBpbnRvIG9uZSBhbm90aGVyIGxpa2UgZGlzc29sdmluZyB2aWV3cywgbm9yIGRvIGEgCnwgaiBzZXJpZXMgb2Ygb3JkaW5hcnkgcGljdHVyZXMgZm9sbG93IG9uZSBhbm90aGVyIDsgYnV0IApJIHRoZSBhY3Rpb24gb2YgdGhlIHJlZmxlY3RlZCBmaWd1cmVzIGNvbnN0YW50bHkgZ29lcyBvbiwgCgp8IGxhcyB0aG91Z2ggb25lIHdlcmUgd2F0Y2hpbmcgdGhlIGFjdG9ycyBvbiBhIGRpc3RhbnQgCi4gZmZzdGFnZS4gCgpKIEJ1dCBpZiB0aGUgdHJhaW5lZCBpbnZlc3RpZ2F0b3IgdHVybnMgaGlzIGF0dGVudGlvbiDCqyAKc3BlY2lhbGx5IHRvIGFueSBvbmUgc2NlbmUsIG9yIHdpc2hlcyB0byBjYWxsIGl0IHVwIAosSnIgYmVmb3JlIGhpbSwgYW4gZXh0cmFvcmRpbmFyeSBjaGFuZ2UgYXQgb25jZSB0YWtlcyAKLXBsYWNlLCBmb3IgdGhpcyBpcyB0aGUgcGxhbmUuLCBvZiAuLnRob3VnaHQsIGFuZCB0byB0aGluayBvZiAKJ2FueXRoaW5nIGlzIHRvIGJyaW5nIGl0IGluc3RhbnRhbmVvdXNseSBiZWZvcmUgeW91LiAKW0ZvciBleGFtcGxlLCBpZiBhIG1hbiB3aWxscyB0byBzZWUgdGhlIHJlY29yZCBvZiAKdGhhdCBldmVudCB0byB3aGljaCB3ZSBiZWZvcmUgcmVmZXJyZWQg4oCUIHRoZSBsYW5kaW5nIApsbGlvZiBKdWxpdXMgQ2Flc2FyIOKAlCBoZSBmaW5kcyBoaW1zZWxmIGluIGEgbW9tZW50IG5vdCAKbG9va2luZyBhdCBhbnkgcGljdHVyZSwgYnV0IHN0YW5kaW5nIG9uIHRoZSBzaG9yZSAKTHRub25nIHRoZSBsZWdpb25hcmllcywgd2l0aCB0aGUgd2hvbGUgc2NlbmUgYmVpbmdzIApybmFjdGVkIGFyb3VuZCBoaW0sIHByZWNpc2VseSBpbiBldmVyeSByZXNwZWN0IGFzIGhlIApyb3VsZCBoYXZlIHNlZW4gaXQgaWYgaGUgaGFkIHN0b29kIHRoZXJlIGluIHRoZSBmbGVzaCAKbSB0aGF0IGF1dHVtbiBtb3JuaW5nIGluIHRoZSB5ZWFyIDU1IEIuQy4gU2luY2UgCndoYXQgaGUgc2VlcyBpcyBidXQgYSByZWZsZWN0aW9uLCB0aGUgYWN0b3JzIGFyZSBvZiAKCgpDTEFJUlZPWUFOQ0UgSU4gSElTVE9SWSAKCgoxMTcgCgoKY291cnNlIGVudGlyZWx5IHVuY29uc2Npb3VzIG9mIGhpbSwgbm9yIGNhbiBhbnkgLiAKZWZmb3J0IG9mIGhpcyBjaGFuZ2UgdGhlIGNvdXJzZSBvZiB0aGVpciBhY3Rpb24gaW4gdGhlISAKc21hbGxlc3QgZGVncmVlLCBleGNlcHQgb25seSB0aGF0IGhlIGNhbiBjb250cm9sIHRoZWwgCnJhdGUgYXQgd2hpY2ggdGhlIGRyYW1hIHNoYWxsIHBhc3MgYmVmb3JlIGhpbSDigJQgY2FuIDsgCmhhdmUgdGhlIGV2ZW50cyBvZiBhIHdob2xlIHllYXIgcmVoZWFyc2VkIGJlZm9yZSBoaXNqbCAKZXllcyBpbiBhIHNpbmdsZSBob3VyLCBvciBjYW4gYXQgYW55IG1vbWVudCBzdG9wIHRoZTEhIAptb3ZlbWVudCBhbHRvZ2V0aGVyLCBhbmQgaG9sZCBhbnkgcGFydGljdWxhciBzY2VuZSAxIAppbiB2aWV3IGFzIGEgcGljdHVyZSBhcyBsb25nIGFzIGhlIGNob29zZXMuICogCgpJbiB0cnV0aCBoZSBvYnNlcnZlcyBub3Qgb25seSB3aGF0IGhlIHdvdWxkIGhhdjYgaiAKc2VlbiBpZiBoZSBoYWQgYmVlbiB0aGVyZSBhdCB0aGUgdGltZSBpbiB0aGUgZmxlc2gsIGJ1dCBKIAptdWNoIG1vcmUuIEhlIGhnYXJzIGFuZF91XnJzdGFeLl5eXmUgCnBlb3BsZSBzYXksIGFuZFRsaGUgaWpzXmNvLm5zY2lvdXMgb2YgYWxsIHRoZWlyIAphbmQgbW90aXZlczogYW5kIG9uZSBvZiB0aGUgbW9zdCBpbnRlcmVzdGluZyBvZiB0aGUgCm1hbnkgcG9zc2liaWxpdGllcyB3aGljaCBvcGVuIHVwIGJlZm9yZSBvbmUgd2hvIGhhcyDigKIgCmxlYXJudCB0bydyZWFmUHRoZSByZWNvcmRzIGlzIHRoZSBzdHVkeSBvZnRoZS4gCm9mIGxvbmdwfHN0IOKAlCB0aGUgdGhvdV5sXiBvZiB0aGUgY2F2ZS1tZW4gYW5kIDEgCgoibWUgImxhZmNlLWF3U0llcnMgYXMgd2VsbCBhcyB0aGF0IHdoaWNoIHJ1bGVkIHRoZWwgCm1pZ2h0eSBjaXZpbGlzYXRpb25zIG9mIEF0bGFudGlzLCBvZiBFZ3lwdCBvciBDaGFsZGFlYS47IApXaGF0IHNwbGVuZGlkIHBvc3NpYmlsaXRpZXMgb3BlbiB1cCBiZWZvcmUgdGhlIG1hbiAKd2hvIGlzIGluIGZ1bGwgcG9zc2Vzc2lvbiBvZiB0aGlzIHBvd2VyIG1heSBlYXNpbHkgYmUgCmltYWdpbmVkLiBIZSBoYXMgYmVmb3JlIGhpbSBhIEpqIGVsZCBvZiBoaXN0b3JpY2FsIAoKCnJlc2VhcmNoIG9mIG1vc3QgZW50cmFuY2luZyBpbnRlcmVzdC4gTm90IG9ubHkgY2FuISAKaGUgcmV2aWV3IGF0IGhpcyBsZWlzdXJlIGFsbCBoaXN0b3J5IHdpdGggd2hpY2ggd2UgYXJlfCAKYWNxdWFpbnRlZCwgY29ycmVjdGluZyBhcyBoZSBleGFtaW5lcyBpdCB0aGUgbWFueSAKZXJyb3JzIGFuZCBtaXNjb25jZXB0aW9ucyB3aGljaCBoYXZlIGNyZXB0IGludG8gdGhbZSBqIDsgCmFjY291bnRzIGhhbmRlZCBkb3duIHRvIHVzIDsgaGUgY2FuIGFsc28gcmFuZ2UgQSAhIAp3aWxsIG92ZXIgdGhlIHdob2xlIHN0b3J5IG9mIHRoZSB3b3JsZCBmcm9tIGl0cyB2ZXJeIEkgCmJlZ2lubmluZywgd2F0Y2hpbmcgdGhlIHNsb3cgZGV2ZWxvcG1lbnQgb2YgaW50ZWxsZWN0L14gCgoKQ0xBSVJWT1lBTkNFIAoKCnJpOCAKCgppbiBtYW4qIGRlc2NlbnQgb2YgdGhlIExvcmRzIG9mIHRoZSBGbGFtZSwgYW5kIHRoZSAKZ3Jvd3RoIG9mIHRoZSBtaWdodHkgY2l2aWxpc2F0aW9ucyB3aGljaCB0aGV5IGZvdW5kZWQuIAoKTm9yIGlzIGhpcyBzdHVkeSBjb25maW5lZCB0byB0aGUgcHJvZ3Jlc3Mgb2YgCmh1bWFuaXR5IGFsb25lOyBoXmhhcyBiZWZvcmUgaGltLCBhcyBpbiBhIG11c2V1bSwgCmFsbCB0aGUgc3RyYW5nZSBhbmltYWwgYW5kIHZlZ2V0YWJsZSBmb3JtcyB3aGljaCAKb2NjdXBpZWQgdGhlIHN0YWdlIGluIGRheXMgd2hlbiB0aGUgd29ybGQgd2FzIAp5b3VuZyA7IGhlIGNhbiBmb2xsb3cgYWxsIHRoZSB3b25kZXJmdWwgZ2VvbG9naWNhbCAKY2hhbmdlcyB3aGljaCBoYXZlIHRha2VuIHBsYWNlLCBhbmQgd2F0Y2ggdGhlIApjb3Vyc2Ugb2YgdGhlIGdyZWF0IGNhdGFjbHlzbXMgd2hpY2ggaGF2ZSBhbHRlcmVkIAp0aGUgd2hvbGUgZmFjZSBvZiB0aGUgZWFydGggYWdhaW4gYW5kIGFnYWluLiAKCgoqIGogSW4gb25lIGVzcGVjaWFsIGNhc2UgYW5eIGV2ZW4gY2xvc2VyIHN5bXBhdGh5IHdpdGggCjEgdGhlIHBhc3QgaXMgcG9zc2libGUgdG8gdGhlIHJlYWRlciBvZiB0aGUgcmVjb3Jkcy4gSWYgaW4gCkl0aGUgY291cnNlIG9mIGhpcyBlbnF1aXJpZXMgaGUgaGFzIHRvIGxvb2sgdXBvbiwgc29tZSAKc2NlbmUgaW4gd2hpY2ggaGUgaGltc2VsZiBoYXMgaW4gYSBmb3JtZXIgYmlydGguIHRha2VuIApwYXJ0LCBoZSBtYXkgZGVhbCB3aXRoIGl0IGluIHR3byB3YXlzIDsgaGUgY2FuIGVpdGhlciAKcmVnYXJkIGl0IGluIHRoZSB1c3VhbCBtYW5uZXIgYXMsIGEgc3BlY3RhdG9yICh0aG91Z2ggCuKAoiBhbHdheXMsIGJlIGl0IHJlbWVtYmVyZWQsIGFzIGEgc3BlY3RhdG9yIHdob3NlIGluc2lnaHQgCmFuZCBzeW1wYXRoeSBhcmUgcGVyZmVjdCkgb3IgaGUgbWF5IG9uY2UgbWdyZSAKaWRlbnRpZnkgaGltc2VsZiB3aXRoIHRoYXQgbG9uZy1kZWFkIHBlcnNvbmFsaXR5IG9mIGhpcyAK4oCUbWF5IHRocm93IGhpbXNlbGYgYmFjayBmb3IgdGhlIHRpbWUgaW50byB0aGF0IGxpZmUgCm9mIGxvbmcgYWdvLCBhbmQgYWJzb2x1dGVseSBleHBlcmllbmNlIG92ZXIgYWdhaW4gdGhlIAp0aG91Z2h0cyBhbmQgdGhlIGVtb3Rpb25zLCB0aGUgcGxlYXN1cmVzIGFuZCB0aGUgcGFpbnMgCm9mIGEgcHJlaGlzdG9yaWMgcGFzdC4gTm8gd2lsZGVyIGFuZCBtb3JlIHZpdmlkIGFkLSAKdmVudHVyZXMgY2FuIGJlIGNvbmNlaXZlZCB0aGFuIHNvbWUgb2YgdGhvc2UgdGhyb3VnaCAKeWhpY2ggaGUgdGh1cyBtYXkgcGFzcyA7IHlldHRocm91Z2ggaXReYWxsIGhlam1tc3QgCnxldl54LWlvYWUgaG9sZCBvZiB0aGUgY29uc2Npb3VzbmVzcyBvZiBoaXMgb3duLiAKZGl2aWR1YWh0diDigJQgbXVzdCByZXRhaW4gdGhlIHBvd2VyIHRvIHJldHVybiAKCgphdCAKCgpERVRFUk1JTklORyBBIERBVEUgCgoKMTE5IAoKSXQgaXMgb2Z0ZW4gYXNrZWQgaG93IGl0IGlzIHBvc3NpYmxlIGZvciBhbiBpbnZlc3RpLSAKZ2F0b3IgYWNjdXJhdGVseSB0byBkZXRlcm1pbmUgdGhlIGRhdGUgb2YgYW55IHBpY3R1cmUgCmZyb20gdGhlIGZhci1kaXN0YW50IHBhc3Qgd2hpY2ggaGUgZGlzaW50ZXJzIGZyb20gdGhlIApyZWNvcmRzLiBUaGUgZmFjdCBpcyB0aGF0IGl0IGlzIHNvbWV0aW1lcyByYXRoZXIgdGVkaW91cyAKd29yayB0byBmaW5kIGFuIGV4YWN0IGRhdGUsIGJ1dCB0aGUgdGhpbmcgY2FuIHVzdWFsbHkgCmJlIGRvbmUgaWYgaXQgaXMgd29ydGggd2hpbGUgdG8gc3BlbmQgdGhlIHRpbWUgYW5kIAp0cm91YmxlIG92ZXIgaXQuIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggR3JlZWsgb3IgClJvbWFuIHRpbWVzIHRoZSBzaW1wbGVzdCBtZXRob2QgaXMgdXN1YWxseSB0b2pvcGsgCmludG8gXiB0aGUgZ2lpcl5kIG9mIHRoZSBtb3N0IGludGVsbGlnZW50IHBlcnNvbiBwcmVzcV5uIGkgCnRoZSBwaWN0dXJlLCBhbmQgc2VlIHdoYXQgZGF0ZSBoZSBzdXBwb3NlcyBpdCB0byBiZSA7IG9yIAp0aGUgaW52ZXN0aWdhdG9yIG1pZ2h0IHdhdGNoIGhpbSB3cml0aW5nIGEgbGV0dGVyIG9yIApvdGhlciBkb2N1bWVudCBhbmQgb2JzZXJ2ZSB3aGF0IGRhdGUsIGlmIGFueSwgd2FzIAppbmNsdWRlZCBpbiB3aGF0IHdhcyB3cml0dGVuLiBXaGVuIG9uY2UgdGhlIFJvbWFuICcgCm9yIEdyZWVrIGRhdGUgaXMgdGh1cyBvYnRhaW5lZCwgdG8gcmVkdWNlIGl0IHRvIG91ciDigKIgCm93biBzeXN0ZW0gb2YgY2hyb25vbG9neSBpcyBtZXJlbHkgYSBtYXR0ZXIgb2YgY2FsLSAKY3VsYXRpb24uIAoKQW5vdGhlciB3YXkgd2hpY2ggaXMgZnJlcXVlbnRseSBhZG9wdGVkIGlzIHRvIHR1cm4gCmZyb20gdGhlIHNjZW5lIHVuZGVyIGV4YW1pbmF0aW9uIHRvIGEgY29udGVtcG9yYXJ5IApwaWN0dXJlIGluIHNvbWUgZ3JlYXQgYW5kIHdlbGwta25vd24gY2l0eSBzdWNoIGFzICogClJvbWUsIGFuZCBub3RlIHdoYXQgbW9uYXJjaCBpcyByZWlnbmluZyB0aGVyZSwgb3IgOyAKd2hvIGFyZSB0aGUgY29uc3VscyBmb3IgdGhlIHllYXIgOyBhbmQgd2hlbiBzdWNoIGRhdGEgCmFyZSBkaXNjb3ZlcmVkIGEgZ2xhbmNlIGF0IGFueSBnb29kIGhpc3Rvcnkgd2lsbCBnaXZlIF0gCnRoZSByZXN0LiBTb21ldGltZXMgYSBkYXRlIGNhbiBiZSBvYnRhaW5lZCBieV4gSiAKZXhhbWluaW5nIHNvbWUgcHVibGljIHByb2NsYW1hdGlvbiBvciBzb21lIGxlZ2FsIHIqIApkb2N1bWVudCA7IGluIGZhY3QgaW4gdGhlIHRpbWVzIG9mIHdoaWNoIHdlIGFyZSBzcGVhay0gfCAKaW5nIHRoZSBkaWZmaWN1bHR5IGlzIGVhc2lseSBzdXJtb3VudGVkLiAuIGYgCgpUaGUgbWF0dGVyIGlzIGJ5IG5vIG1lYW5zIHNvIHNpbXBsZSwgaG93ZXZlciwgd2hlbiBJOyAKd2UgY29tZSB0byBkZWFsIHdpdGggcGVyaW9kcyBtdWNoIGVhcmxpZXIgdGhhbiB0aGlzIDEgCgoKMTIwIAoKCkNMQUlSVk9ZQU5DRSAKCgrigJQgd2l0aCBhIHNjZW5lIGZyb20gZWFybHkgRWd5cHQsIENoYWxkYWVhLCBvciBDaGluYSwgCm9yIHRvIGdvIGZ1cnRoZXIgYmFjayBzdGlsbCwgZnJvbSBBdGxhbnRpcyBpdHNlbGYgb3IgYW55IApvZiBpdHMgbnVtZXJvdXMgY29sb25pZXMuIEEgZGF0ZSBjYW4gc3RpbGwgYmUgb2J0YWluZWQgCmVhc2lseSBlbm91Z2ggZnJvbSB0aGUgbWluZCBvZiBhbnkgZWR1Y2F0ZWQgbWFuLCAKYnV0IHRoZXJlIGlzIG5vIGxvbmdlciBhbnkgbWVhbnMgb2YgcmVsYXRpbmcgaXQgdG8gb3VyIApvd24gc3lzdGVtIG9mIGRhdGVzLCBzaW5jZSB0aGUgbWFuIHdpbGwgYmUgcmVja29uaW5nIApieSBlcmFzIG9mIHdoaWNoIHdlIGtub3cgbm90aGluZywgb3IgYnkgdGhlIHJlaWducyAKb2Yga2luZ3Mgd2hvc2UgaGlzdG9yeSBpcyBsb3N0IGluIHRoZSBuaWdodCBvZiB0aW1lLiAKCk91ciBtZXRob2RzLCBuZXZlcnRoZWxlc3MsIGFyZSBub3QgeWV0IF5leGhhdXN0ZWQuIApJdCBtdXN0IGJlIHJlbWVtYmVyZWQgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGluLSAKdmVzdGlnYXRvciB0byBwYXNzIHRoZSByZWNvcmRzIGJlZm9yZSBoaW0gYXQgYW55IHNwZWVkIAp0aGF0IGhlIG1heSBkZXNpcmUg4oCUIGF0IHRoZSByYXRlIG9mIGEgeWVhciBpbiBhIHNlY29uZCAKaWYgaGUgd2lsbCwgb3IgZXZlbiB2ZXJ5IG11Y2ggZmFzdGVyIHN0aWxsLiBOb3cgdGhlcmUgCmFyZSBvbmUgb3IgdHdvIGV2ZW50cyBpbiBhbmNpZW50IGhpc3Rvcnkgd2hvc2UgZGF0ZXMgCmhhdmUgYWxyZWFkeSBiZWVuIGFjY3VyYXRlbHkgZml4ZWQg4oCUIGFzLCBmb3IgZXhhbXBsZSwgCiwgXCB0aGUgc2lua2luZyBvZiBQb3NlaWRvbmlzIGluIHRoZSB5ZWFyIDk1NjQgQi5DLiBJdCBpcyAKSCB0aGVyZWZvcmUgb2J2aW91cyB0aGF0IGlmIGZyb20gdGhlIGdlbmVyYWwgYXBwZWFyYW5jZSAKb2YgdGhlIHN1cnJvdW5kaW5ncyBpdCBzZWVtcyBwcm9iYWJsZSB0aGF0IGEgcGljdHV0ZSAKc2VlbiBpcyB3aXRoaW4gbWVhc3VyYWJsZSBkaXN0YW5jZSBvZiBvbmUgb2YgdGhlc2UgCmV2ZW50cywgaXQgY2FuIGJlIHJlbGF0ZWQgdG8gdGhhdCBldmVudCBieSB0aGUgc2ltcGxlIApwcm9jZXNzIG9mIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcmVjb3JkIHJhcGlkbHksIGFuZCAKY291bnRpbmcgdGhlIHllYXJzIGJldHdlZW4gdGhlIHR3byBhcyB0aGV5IHBhc3MuIAoKU3RpbGwsIGlmIHRob3NlIHllYXJzIHJhbiBpbnRvIHRob3VzYW5kcywgYXMgdGhleSBtaWdodCAKc29tZXRpbWVzIGRvLCB0aGlzIHBsYW4gd291bGQgYmUgaW5zdWZmZXJhYmx5IHRlZGlvdXMuIApJbiB0aGF0IGNhc2Ugd2UgYXJlIGRyaXZlbiBiYWNrIHVwb24gdGhlIGFzdHJvbm9taWNhbCAKRGlzdGJvZC4gSW4gY29uc2VxdWVuY2Ugb2YgdGhlIG1vdmVtZW50IHdoaWNoIGlzIApjb21tb25seSBjYWxsZWQgdGhlIHByZWNlc3Npb24gb2YgdF4gCnRob3VnaCBpdCBtaWdodCBtb3JlIGFjY3VyYXRlbHkgYmUgZGVzY3JpYmVkIGFzIGEgCgoKVFJBSU5JTkcgTkVDRVNTQVJZIAoKCjEyMSAKCgpraW5kIG9mIHNlY29uZCByb3RhdGlvbiBvZiB0aGUgZWFydGgsIHRoZSBhbmdsZSBiZXR3ZWVuIApKOmhlIGVxdWF0b3IgYW5kIHRoZSBlY2xpcHRpYyBzdGVhZGlseSBidXQgdmVyeSBzbG93bHkgCnZhcmllcy4gVGh1cywgYWZ0ZXIgbG9uZyBpbnRlcnZhbHMgb2YgdGltZSB3ZSBmaW5kIHRoZSAKb2YgdGhlIGVhcnRoIG5vIGxvbmdlciBwb2ludGluZyB0b3dhcmRzIHRoZSBzYW1lIApzcG90IGluIHRoZSBhcHBhcmVudCBzcGhlcmUgb2YgdGhlIGhlYXZlbnMsIG9yIGluIG90aGVyIAp3b3Jkcywgb3VyIHBvbGUtc3RhciBpcyBub3QsIGFzIGF0IHByZXNlbnQsIGEgVXJzYWUgCk1pbm9yaXMsIGJ1dCBzb21lIG90aGVyIGNlbGVzdGlhbCBib2R5IDsgYW5kIGZyb20gdGhpcyAKcG9zaXRpb24gb2YgdGhlIHBvbGUgb2YgdGhlIGVhcnRoLCB3aGljaCBjYW4gZWFzaWx5IGJlIAphc2NlcnRhaW5lZCBieSBjYXJlZnVsIG9ic2VydmF0aW9uIG9mIHRoZSBuaWdodC1za3kgb2YgCnRoZSBwaWN0dXJlIHVuZGVyIGNvbnNpZGVyYXRpb24sIGFuIGFwcHJveGltYXRlIGRhdGUgCmNhbiBiZSBjYWxjdWxhdGVkIHdpdGhvdXQgZGlmZmljdWx0eS4gCgrilrogSW4gZXN0aW1hdGluZyB0aGUgZGF0ZSBvZiBvY2N1cnJlbmNlcyB3aGljaCB0b29rIApwbGFjZSBtaWxsaW9ucyBvZiB5ZWFycyBhZ28gaW4gZWFybGllciByYWNlcywgdGhlIHBlcmlvZCAKb2YgYSBzZWNvbmRhcnkgcm90YXRpb24gKG9yIHRoZSBwcmVjZXNzaW9uIG9mIHRoZSBlcXVpLSAKIyBub3hlZykgaXMgZnJlcXVlbnRseSB1c2VkIGFzIGEgdW5pdCwgYnV0IG9mIGNvdXJzZSAKYWJzb2x1dGUgYWNjdXJhY3kgaXMgbm90IHVzdWFsbHkgcmVxdWlyZWQgaW4gc3VjaCBjYXNlcywgCnJvdW5kIG51bWJlcnMgYmVpbmcgc3VmZmljaWVudCBmb3IgYWxsIHByYWN0aWNhbCBwdXItIApwb3NTcyBpbiBkZWFsaW5nIHdpdGggZXBvY2hzIHNvIHJlbW90ZS4gCgoKVGhlIGFjY3VyYXRlIHJlYWRpbmcgb2YgdGhlIHJlY29yZHMsIHdoZXRoZXIgb2Ygb25l4oCZcyEgCm93biBwYXN0IGxpdmVzIG9yIHRob3NlIG9mIG90aGVycywgbXVzdCBub3QsIGhvd2V2ZXIhIApiZSB0aG91Z2h0IG9mIGFzIGFuIGFjaGlldmVtZW50IHBvc3NpYmxlIHRvIGFueW9uZSAKd2l0aG91dCBjYXJlZnVsIHByZXZpb3VzIHRyYWluaW5nLiBBcyBoYXMgYmVlbiBhbHJlYWR5IApyZW1hcmtlZCwgdGhvdWdoIG9jY2FzaW9uYWwgcmVmbGVjdGlvbnMgbWF5IGJlIGhhZFQgCgp1cG9uIHRoZSBhc3RyYWwgcGxhbmUsIHRoZSBnb3dlciB0byB1c2UgdGhlIC5JREhmdGlpMSDigKI7IAoKc2Vuc2UgaXMgbmVjZXNzYXJ5IGJlZm9yZSBeIGFueSByZWxpYWJsZSByZWFkaW5nIGNhbiBmZWUgCmRvbiQuIEluZGVlZCwgdG8gbWluaW1pemUgdGhlIHBvc3NpYmlsaXR5IG9mIGVycm9yLCB8IAoKCmxhdCBzZW5zZSBvdWdodCB0byBiZSBmdWxseSBhdCB0aGUgY29tbWFuZCBvZiBKaCogCmludmVzdGlnYXRvciB3aGlsZSBhd2FrZSBpbiB0aGUgcGh5c2ljYWwgYm9keSA7IHAgCgoKMTIyIAoKCkNMQUlSVk9ZQU5DRSAKCgp0byBhY3F1aXJlIHRoYXQgZmFjdWx0eSBuZWVkcyB5ZWFycyBvZiBjZWFzZWxlc3MgbGFib3VyIAphbmQgcmlnaWQgc2VsZi1kaXNjaXBsaW5lLiAKCk1hbnkgcGVvcGxlIHNlZW0gdG8gZXhwZWN0IHRoYXQgYXMgc29vbiBhcyB0aGV5IApoYXZlIHNpZ25lZCB0aGVpciBhcHBsaWNhdGlvbiBhbmQgam9pbmVkIHRoZSBUaGVvLSAKc29waGljYWwgU29jaWV0eSB0aGV5IHdpbGwgYXQgb25jZSByZW1lbWJlciBhdCBsZWFzdCAKdGhyZWUgb3IgZm91ciBvZiB0aGVpciBwYXN0IGJpcnRocyA7IGluZGVlZCwgc29tZSBvZiAKdGhlbSBwcm9tcHRseSBiZWdpbiB0byBpbWFnaW5lIHJlY29sbGVjdGlvbnMgYW5kIGRlLSAKY2xhcmUgdGhhdCBpbiB0aGVpciBsYXN0IGluY2FybmF0aW9uIHRoZXkgd2VyZSBNYXJ5IApRdWVlbiBvZiBTY290cywgQ2xlb3BhdHJhLCBvciBKdWxpdXMgQ2Flc2FyICEgT2YgY291cnNlIApzdWNoIGV4dHJhdmFnYW50IGNsYWltcyBzaW1wbHkgYnJpbmcgZGlzY3JlZGl0IHVwb24gCkkgLiB0aG9zZSB3aG8gYXJlIHNvIGZvb2xpc2ggYXMgdG8gbWFrZSB0aGVtIDsgYnV0IHVuZm9yLSAKfCAoIHR1bmF0ZWx5IHNvbWUgb2YgdGhhdCBkaXNjcmVkaXQgaXMgbGlhYmxlIHRvIGJlIHJlZmxlY3RlZCwgCkkgaG93ZXZlciB1bmp1c3RseTsgdXBvbiB0aGUgU29jaWV0eSB0byB3aGljaCB0aGV5IApiZWxvbmcsIHNvIHRoYXQgYSBtYW4gd2hvIGZlZWxzIHNlZXRoaW5nIHdpdGhpbiBoaW0gCnRoZSBjb252aWN0aW9uIHRoYXQgaGUgd2FzIEhvbWVyIG9yIFNoYWtlc3BlYXJlIAp3b3VsZCBkbyB3ZWxsIHRvIHBhdXNlIGFuZCBhcHBseSBjb21tb24tc2Vuc2UgdGVzdHMgCm9uIHRoZSBwaHlzaWNhbCBwbGFuZSBiZWZvcmUgcHVibGlzaGluZyB0aGUgbmV3cyB0byAKdGhlIHdvcmxkLiAqIAoKSXQgaXMgcXVpdGUgdHJ1ZSB0aGF0IHNvbWUgcGVvcGxlIGhhdmUgaGFkIGdsaW1wc2VzIApvZiBzY2VuZXMgZnJvbSB0aGVpciBwYXN0IGxpdmVzIGluIGRyZWFtcywgYnV0IG5hdHVyYWxseSAKdGhlc2UgYXJlIHVzdWFsbHkgZnJhZ21lbnRhcnkgYW5kIHVucmVsaWFibGUuIExKYWFkLSAKCm15c2VsZiBpbiBlYXJsaWVyIGxpZmUgYWEgLWV4cGVySWVuX2NlIC4ub2YgdGhpYS5qYWF0dXJlLiAKCkFtb25nIG15IGRyZWFtcyBJIGZvdW5kIHRoYXQgb25lIHdhcyBjb25zdGFudGx5IApyZWN1cnJpbmcg4oCUIGEgZHJlYW0gb2YgYSBob3VzZSB3aXRoIGEgcG9ydGljbyBvdmVyLSAKbG9va2luZyBhIGJlYXV0aWZ1bCBiYXksIG5vdCBmYXIgZnJvbSBhIGhpbGwgb24gdGhlIHRvcCAKb2Ygd2hpY2ggcm9zZSBhIGdyYWNlZnVsIGJ1aWxkaW5nLiBJIGtuZXcgdGhhdCBob3VzZSAKcGVyZmVjdGx5LCBhbmQgd2FzIGFzIGZhbWlsaWFyIHdpdGggdGhlIHBvc2l0aW9uIG9mIGl0cyAKcm9vbXMgYW5kIHRoZSB2aWV3IGZyb20gaXRzIGRvb3IgYXMgSSB3YXMgd2l0aCB0aG9zZSAKCgpUUkFDSU5HIFBBU1QgTElWRVMgCgoKMTIzIAoKCm9mIG15IGhvbWUsIGluIHRoaXMgcHJlc2VudCBsaWZlLiBJbiB0aG9zZSBkYXlzIEkga25ldyAsIApub3RoaW5nIGFib3V0IHJlaW5jYXJuYXRpb24sIHNvIHRoYXQgaXQgc2VlbWVkIHRvIG1lIApzaW1wbHkgYSBjdXJpb3VzIGNvaW5jaWRlbmNlIHRoYXQgdGhpcyBkcmVhbSBzaG91bGQgCnJlcGVhdCBpdHNlbGYgc28gb2Z0ZW4gOyBhbmQgaXQgd2FzIG5vdCB1bnRpbCBzb21lIHRpbWUgMSAKYWZ0ZXIgSSBoYWQgam9pbmVkIHRoZSBTb2NpZXR5IHRoYXQsIHdoZW4gb25lIHdobyAKa25ldyB3YXMgc2hvd2luZyBtZSBzb21lIHBpY3R1cmVzIG9mIG15IGxhc3QgaW4tIApjYXJuYXRpb24sIEkgZGlzY292ZXJlZCB0aGF0IHRoaXMgcGVyc2lzdGVudCBkcmVhbSBoYWQgCmJlZW4gaW4gcmVhbGl0eSAuXiBuYXJ0aWFsIHJlY29sbGVjdGlvbiwgYW5kIHRoYXQgdGggCmhvdV53U2NeSSBrbmV3IHNvIHdlbGwgd2FzIHRoZSBvbmUgaW4gd2hpY2ggSSAKd2FzIGJvcm4gbW9yZSB0aGFuIHR3byB0aG91c2FuZCB5ZWFycyBhZ28uIAoKKiBTJ+KAmS0nKicqKionICcg4pagIC4uICcg4oCZZ3VTaWleICcgMCAKCkJ1dCBhbHRob3VnaCB0aGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyBvbiByZWNvcmQgaW4gCjEgd2hpY2ggc29tZSB3ZWxsLXJlbWVtYmVyZWQgc2NlbmUgaGFzIHRodXMgY29tZSAKdGhyb3VnaCBmcm9tIG9uZSBsaWZlIHRvIGFub3RoZXIsIGEgY29uc2lkZXJhYmxlISAKZGV2ZWxvcG1lbnQgb2Ygb2NjdWx0IGZhY3VsdHkgaXMgbmVjZXNzYXJ5IGJlZm9yZSBhbnQgCiwgaW52ZXN0aWdhdG9yIGNhbiBkZWZpbml0ZWh5IHRyYWNlIGEgbGluZSBvZiBpbmNhcm5hdGlvbnMsISAKd2hldGhlciB0aGV5IGJlIGhpcyBvd24gb3IgYW5vdGhlciBtYW7igJlzLiBUaGlzIHdpbGwsIApiZSBvYnZpb3VzIGlmIHdlIHJlbWVtYmVyIHRoZSBjb25kaXRpb25zIG9mIHRoZSBwcm9iLSAKbGVtKiB3aGljaCBoYXMgdG8gYmUgd29ya2VkIG91dC4gVG8gZm9sbG93IGEgcGVyc29uIApmcm9tIHRoaXMgbGlmZSB0byB0aGUgb25lIHByZWNlZGluZyBpdCwgaXQgaXMgbmVjZXNzYXJ5IApmaXJzdCBvZiBhbGwgdG8gdHJhY2UgaGlzIHByZXNlbnQgbGlmZSBiYWNrd2FyZHNedG9eYmlzIApiaXJ0aCBhbmQgdGhlbiB0byBmb2xsb3cgdXAgaW4gcmV2ZXJzZSBvcmRlciAudC5owqMuLiBTdGFnZXMgCmJ5IHdoaWNoIHRoZSBFZ28gZGVzY2VuZGVkIEludG8gaW5jYXJuYXRpb24uIAoKVGhpcyB3aWxsIG9idmlvdXNseSB0YWtlIHVzIGJhY2sgZXZlbnR1YWxseSB0byAKXnRoZSBjb25kaXRpb24gb2YgdGhlIEVnbyB1cG9uIHRoZSBoaWdoZXIgbGV2ZWxzIApvZiB0aGUgbWVudGFsIHBsYW5lIDsgc28gaXQgd2lsbCBiZSBzZWVuIHRoYXQgdG8gCnBlcmZvcm0gdGhpcyB0YXNrIGVmZmVjdHVhbGx5IHRoZSBpbnZlc3RpZ2F0b3IgbXVzdCAKYmUgYWJsZSB0byB1c2UgdGhlIHNlbnNlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCAKZXhhbHRlZCBsZXZlbCB3aGlsZSBhd2FrZSBpbiBoaXMgcGh5c2ljYWwgYm9keSDigJQgCgoKMTI0IAoKCkNMQUlSVk9ZQU5DRSAKCgppbiBvdGhlciB3b3JkcywgaGlzIGNvbnNjaW91c25lc3MgbXVzdCBiZSBjZW50cmVkIAppbiB0aGUgcmVpbmNhcm5hdGluZyBFZ28gaXRzZWxmLCBhbmQgbm8gbG9uZ2VyIGluIHRoZSAKbG93ZXIgcGVyc29uYWxpdHkuIEluIHRoYXQgY2FzZSwgdGhlIG1lbW9yeSBvZiB0aGUgCkVnbyBiZWluZyBhcm91c2VkLCBoaXMgb3duIHBhc3QgaW5jYXJuYXRpb25zIHdpbGwgYmUgCnNwcmVhZCBvdXQgYmVmb3JlIGhpbSBsaWtlIGFuIG9wZW4gYm9vaywgYW5kIGhlIHdvdWxkIApiZSBhYmxlLCBpZiBoZSB3aXNoZWQsIHRvIGV4YW1pbmUgdGhlIGNvbmRpdGlvbnMgb2YgCmFub3RoZXIgRWdvIHVwb24gdGhhdCBsZXZlbCBhbmQgdHJhY2UgaGltIGJhY2t3YXJkcyAKdGhyb3VnaCB0aGUgbG93ZXIgbWVudGFsIGFuZCBhc3RyYWwgbGl2ZXMgd2hpY2ggbGVkIAp1cCB0byBpdCwgdW50aWwgaGUgY2FtZSB0byB0aGUgbGFzdCBwaHlzaWNhbCBkZWF0aCBvZiAKdGhhdCBFZ28sIGFuZCB0aHJvdWdoIGl0IHRvIGhpcyBwcmV2aW91cyBsaWZlLiAKClRoZXJlIGlzIG5vIHdheSBidXQgdGhpcyBpbiB3aGljaCB0aGUgY2hhaW4gb2YgCmxpdmVzIGNhbiBiZSBmb2xsb3dlZCB0aHJvdWdoIHdpdGggYWJzb2x1dGUgY2VydGFpbnR5IDogCmFuZCBjb25zZXF1ZW50bHkgd2UgbWF5IGF0IG9uY2UgcHV0IGFzaWRlIGFzIGNvbi0gCnNjaW91cyBvciB1bmNvbnNjaW91cyBpZ3xnb3N0cHJzIHRob3NlIHBlb3BsZSB3aG8gYWQtIAp2ZXJ0aXNlIHRoYXQgdGhleSBhcmUgYWJsZSB0byB0cmFjZSBvdXQgYW55b25l4oCZc15wYXN0IAppbmNhcm5hdGlvbnMgZm9yIHNvIG1hbnkgc2hpbGxpbmdzIGEgaGVhZC4gTmVlZGxlc3MgCgoKdG8gc2F5LCB0aGUgdHJ1ZSBvY2N1bHRpc3QgZG9lcyBtb3QgYWR2ZXJ0aXNlLCBhbmQgbmV2ZXIgCgoKdW5kZXJ2YW55IGNpcmN1bXN0YW5jZXMgYWNjZXB0cyBtb25leSB0b3IgYW55IGV4aGktIApiaXRpb24gb2YgaGlzIHBvd2Vycy4gCgpBc3N1cmVkbHkgdGhlIHN0dWRlbnQgd2hvIHdpc2hlcyB0byBhY3F1aXJlIHRoZSAKcG93ZXIgb2YgZm9sbG93aW5nIHVwIGEgbGluZSBvZiBpbmNhcm5hdGlvbnMgY2FuIGRvIHNvIApvbmx5IGJ5IGxlYXJuaW5nIGZyb20gYSBxdWFsaWZpZWQgdGVhY2hlciBob3cgdGhlIAp3b3JrIGlzIHRvIGJlIGRvbmUuIFRoZXJlIGhhdmUgYmVlbiB0aG9zZSB3aG8gCnBlcnNpc3RlbnRseSBhc3NlcnRlZCB0aGF0IGl0IHdhcyBvbmx5IG5lY2Vzc2FyeSBmb3IgYSAKbWFuIHRvIGZlZWwgZ29vZCBhbmQgZGV2b3Rpb25hbCBhbmQg4oCcIGJyb3RoZXJseS/igJkgCmFuZCBhbGwgdGhlIHdpc2RvbSBvZiB0aGUgYWdlcyB3b3VsZCBpbW1lZGlhdGVseSAKZmxvdyBpbiB1cG9uIGhpbSA7IGJ1dCBhIGxpdHRsZSBjb21tb24tc2Vuc2Ugd2lsbCBhdCAKb25jZSBleHBvc2UgdGhlIGFic3VyZGl0eSBvZiBzdWNoIGEgcG9zaXRpb24uIEhvdy0gCgoKVEhFIFZBTFVFIE9GIEtOT1dMRURHRSAKCgoxMjUgCgoKZXZlciBnb29kIGEgY2hpbGQgbWF5IGJlLCBpZiBoZSB3YW50cyB0byBrbm93IHRoZSBcIAptdWx0aXBsaWNhdGlvbiB0YWJsZSBoZSBtdXN0IHNldCB0byB3b3JrIGFuZCBsZWFybiBpdCA7IAphbmQgdGhlIGNhc2UgaXMgcHJlY2lzZWx5IHNpbWlsYXIgd2l0aCB0aGUgY2FwYWNpdHkgdG8gLiAKdXNlIHNwaXJpdHVhbCBmYWN1bHRpZXMuIFRoZSBmYWN1bHRpZXMgdGhlbXNlbHZlcyB3aWxsIApubyBkb3VidCBtYW5pZmVzdCBhcyB0aGUgbWFuIGV2b2x2ZXMsIGJ1dCBoZSBjYW4gbGVhcm4gCmhvdyB0byB1c2UgdGhlbSByZWxpYWJseSBhbmQgdG8gdGhlIGJlc3QgYWR2YW50YWdlIApvbmx5IGJ5IHN0ZWFkeSBoYXJkIHdvcmsgYW5kIHBlcnNldmVyaW5nIGVmZm9ydC4gCgpUYWtlIHRoZSBjYXNlIG9mIHRob3NlIHdobyB3aXNoIHRvIGhlbHAgb3RoZXJzIAoKLiAsIC4gdnIuIC4uLi4uLi4uLi4gLiAuIOKAosKrIOKAoiByIC0gLjEsIC7Cuy08aWlpbnd3aWlpbk1NaT4gaSI+IDEgCgp3aGlsZSBvbiB0aGUgYXN0cmFsIHBsYW5lIGR1cmluZyBzbGVlcCA7IGl0IGlzIG9idmlvdXMgCgp0aGF0IHRoZSBtb3JlIGtub3dsZWRnZSB0aGV5IHBvc3Nlc3MgaGVyZSwgdGhlIG1vcmUgfCAKCnZhbHVhYmxlIHdpbGwgdGhlaXIgc2VydmljZXMgYmUgb24gdGhhdCBoaWdoZXIgcGxhbmUuIAoKRm9yIGV4YW1wbGUsIHRoZSBrbm93bGVkZ2Ugb2YgbGFuZ3VhZ2VzIHdvdWxkIGJlIAp1c2VmdWwgdG8gdGhlbSwgZm9yIHRob3VnaCBvbiB0aGUgbWVudGFsIHBsYW5lIG1lbiAKY2FuIGNvbW11bmljYXRlIGRpcmVjdGx5IGJ5IHRob3VnaHQtdHJhbnNmZXJlbmNlLCAKd2hhdGV2ZXIgdGhlaXIgbGFuZ3VhZ2VzIG1heSBiZSwgb24gdGhlIGFzdHJhbCBwbGFuZSBeIG4gXiBKaSAKCnRoaXMgaXMgbm90IHNvLCBhbmQgYSB0aG91Z2h0IG11c3QgYmUgZGVmaW5pdGVseSAmIAoKZm9ybXVsYXRlZCBpbiB3b3JkcyBiZWZvcmUgaXQgaXMgY29tcHJlaGVuc2libGUuIElmLCAKdGhlcmVmb3JlLCB5b3Ugd2lzaCB0byBoZWxwIGEgbWFuIG9uIHRoYXQgcGxhbmUsIHlvdSAKbXVzdCBoYXZlIHNvbWUgbGFuZ3VhZ2UgaW4gY29tbW9uIGJ5IG1lYW5zIG9mIAp3aGljaCB5b3UgY2FuIGNvbW11bmljYXRlIHdpdGggaGltLCBhbmQgY29uc2UtIApxdWVudGx5IHRoZSBtb3JlIGxhbmd1YWdlcyB5b3Uga25vdyB0aGUgbW9yZSAKd2lkZWx5IHVzZWZ1bCB5b3Ugd2lsbCBiZS4gSW4gZmFjdCB0aGVyZSBpcyBwZXJoYXBzIGogCgpubyBraW5kIG9mIGtub3dsZWRnZSBmb3Igd2hpY2ggYSB1c2UgY2Fubm90IGJlIFMgCgojIGZvdW5kIGluIHRoZSB3b3JrIG9mIHRoZSBvY2N1bHRpc3QgSiAKCkl0IHdvdWxkIGJlIHdlbGwgZm9yIGFsbCBzdHVkZW50cyB0byBiZWFyIGluIG1pbmQgYSAKCnRoYXQgXiAuQ1FtbW9uLXNlbnNlLCAKCmFuZCB0aGF0IGV2ZXJ5IHZpc2lvbiB3aGljaCBjb21lcyB0byB0aGVtIGlzIG5vdCAqIOKAoiAKCm5lY2Vzc2FyaWx5IGEgcGljdHVyZSBmcm9tIHRoZSAma2lzaGljIHJlY29yZHMsIG5vciAKCgoxMjYgCgoKQ0xBSVJWT1lBTkNFIAoKCmV2ZXJ5IGV4cGVyaWVuY2UgYSByZXZlbGF0aW9uIGZyb20gb24gaGlnaC4gSXQgaXMgCmliZXR0ZXIgZmFyIHRvIGVyciBvbiB0aGUgc2lkZSBvZiBoZWFsdGh5IHNjZXB0aWNpc20gCkp0aGFuIG9mXm92ZXItcHJlZHVsaXR5IDsgYW5kIGl0IGlzIGFuIGFkbWpyYWJsZSBydWxlIApebmV2ZXIgdG8gaHVudCBhYm91dCBmb3IgYW4gb2NjdWx0IGpleHBsIGFuIGF0aW9uIG9mIAppYW55IHRoaW5nIHdoZW4gYSAsIHBsYWluIGFuZCBvYnZpb3VzIHBoeXNpY2FsIG9uZSBpcyAKbXZhaWxhYmxlLiBPdXIgZHV0eSBpcyB0byBlbmRlYXZvdXIgdG8ga2VlcCBvdXIgCmJhbGFuY2UgYWx3YXlzLCBhbmQgbmV2ZXIgdG8gbG9zZSBvdXIgc2VsZi1jb250cm9sLCBidXQgCnRvIHRha2UgYSByZWFzb25hYmxlLCBjb21tb24tc2Vuc2UgdmlldyBvZiB3aGF0ZXZlciAKbWF5IGhhcHBlbiB0byB1cyA7IHNvIHNoYWxsIHdlIGJlIGJldHRlciBUaGVvc29waGlzdHMsIAp3aXNlciBvY2N1bHRpc3RzLCBhbmQgbW9yZSB1c2VmdWwgaGVscGVycyB0aGFuIHdlIGhhdmUgCmV2ZXIgYmVlbiBiZWZvcmUuIAoKQXMgdXN1YWwsIHdlIGZpbmQgZXhhbXBsZXMgb2YgYWxsIGRlZ3JlZXMgb2YgdGhlIApwb3dlciB0byBzZWUgaW50byB0aGlzIG1lbW9yeSBvZiBuYXR1cmUsIGZyb20gdGhlIAp0cmFpbmVkIG1hbiB3aG8gY2FuIGNvbnN1bHQgdGhlIHJlY29yZCBmb3IgaGltc2VsZiAKYXQgd2lsbCwgZG93biB0byB0aGUgcGVyc29uIHdobyBnZXRzIG5vdGhpbmcgYnV0ICogCm9jY2FzaW9uYWwgdmFndWUgZ2xpbXBzZXMsIG9yIGhhcyBldmVuIHBlcmhhcHMgaGFkIApvbmx5IG9uZSBzdWNoIGdsaW1wc2UuIEJ1dCBldmVuIHRoZSBtYW4gXnZobyAKcG9zc2Vzc2VzIHRoaXMgZmFjdWx0eSBvbmx5IHBhcnRpYWxseSBhbmQgb2NjYXNpb25hbGx5IAppIHN0aWxsIGZpbmRzIGl0IG9mIHRoZSBkZWVwZXN0IGludGVyZXN0LiBUaGUgcHN5Y2hvbWV0Z3IsIAp3aG8gbmVlZHMgYW4gb2JqZWN0IHBoeXNpY2FsbHkgY29ubmVjdGVkIHdpdGggdGhlIApwYXN0IGluIG9yZGVyIHRvIGJyaW5nIGl0IGFsbCBpbnRvIGxpZmUgYWdhaW4gYXJvdW5kIApoaW0sIGFuZF5KaF5eIHdobyBjYW4gc29tZXRpbWVzIGRpcmVjdCAKCmhpcyBsZXNzIGNlcnRhaW4gYXN0cmFsIHRlbGVzY29wZSB0byBzb21lIGhpc3RvcmljIHNjZW5lIApvZiBsb25nIGFnbywgbWF5IGJvdGggZGVyaXZlIHRoZSBncmVhdGVzdCBlbmpveW1lbnQgCmZyb20gdGhlIGV4ZXJjaXNlIG9mIHRoZWlyIHJlc3BlY3RpdmUgZ2lmdHMsIGV2ZW4gdGhvdWdoIAp0aGV5IG1heSBub3QgYWx3YXlzIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlaXIgCnJlc3VsdHMgYXJlIHByb2R1Y2VkLCBhbmQgbWF5IG5vdCBoYXZlIHRoZW0gZnVsbHkgCuKAonVuZGVyIGNvbnRyb2wgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMuIAoKClVOQ09OU0NJT1VTIFBTWUNIT01FVFJZIAoKCjEyNyAKCgpJbiBtYW55IGNhc2VzIG9mIHRoZSBsb3dlciBtYW5pZmVzdGF0aW9ucyBvZiB0aGVzZSAKcG93ZXJzIHdlIGZpbmQgdGhhdCB0aGV5IGFyZSBleGVyY2lzZWQgdW5jb25zY2lvdXNseSA7IAptYW55IGEgY3J5c3RhbC1nYXplciB3YXRjaGVzIHNjZW5lcyBmcm9tIHRoZSBwYXN0IAp3aXRob3V0IGJlaW5nIGFibGUgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHZpc2lvbnMgCm9mIHRoZSBwcmVzZW50LCBhbmQgbWFueSBhIHZhZ3VlbHktcHN5Y2hpYyBwZXJzb24gCmZpbmRzIHBpY3R1cmVzIGNvbnN0YW50bHkgYXJpc2luZyBiZWZvcmUgaGlzIGV5JnMgd2l0aC0gCm91dCBldmVyIHJlYWxpemluZyB0aGF0IGhlIGlzIGluIGVmZmVjdCBwc3ljaG9tZXRyaXppbmcgaiAKdGhlIHZhcmlvdXMgb2JqZWN0cyBhcm91bmQgaGltIGFzIGhlIGhhcHBlbnMgdG8gCnRvdWNoIHRoZW0gb3Igc3RhbmQgbmVhciB0aGVtLiAKCkFuIGludGVyZXN0aW5nIHZhcmlhbnQgb2YgdGhpcyBjbGFzcyBvZiBwc3ljaGljcyBpcyAKdGhlIG1hbiB3aG8gaXMgYWJsZSB0byBwc3ljaG9tZXRyaXplIHBlcnNvbnMgb25seSwgCmFuZCBub3QgaW5hbmltYXRlIG9iamVjdHMgYXMgaXMgbW9yZSB1c3VhbC4gSW4gbW9zdCAKY2FzZXMgdGhpcyBmYWN1bHR5IHNob3dzIGl0c2VsZiBlcnJhdGljYWxseSwgc28gdGhhdCAKc3VjaCBhIHBzeWNoaWMgd2lsbCwgd2hlbiBpbnRyb2R1Y2VkIHRvIGEgc3RyYW5nZXIsIApvZnRlbiBzZWUgaW4gYSBmbGFzaCBzb21lIHByb21pbmVudCBldmVudCBpbiB0aGF0IApzdHJhbmdlcuKAmXMgZWFybGllciBsaWZlLCBidXQgb24gb3RoZXIgc2ltaWxhciBvY2Nhc2lvbnMgCndpbGwgcmVjZWl2ZSBubyBzcGVjaWFsIGltcHJlc3Npb24uIE1vcmUgcmFyZWx5IHdlIDsgCm1lZXQgd2l0aCBzb21lb25lIHdobyBnZXRzIGRldGFpbGVkIHZpc2lvbnMgb2YgdGhlIApwYXN0IGxpZmUgb2YgZXZlcnlvbmUgd2hvbSBoZSBlbmNvdW50ZXJzLiBQZXJoYXBzIHIgCm9uZSBvZiB0aGUgYmVzdCBleGFtcGxlcyBvZiB0aGlzIGNsYXNzIHdhcyB0aGUgR2VybWFuIDEgCl5yaXRvIFpzY2hva2tlLCB3aG8gZGVzY3JpYmVzIGluIGhpcyBhdXRvYmlvZ3JhcGh5IF4gCgp3aGlzayBoZSBmb3VuZCAKCnBvc3Nlc3NlZC4gSGUgc2F5cyA6IOKAlCAKCmhhcyBoYXBwZW5lZCB0byBtZSBvY2Nhc2lvbmFsbHkgYXQgdGhlIGZpcnN0IAptZWV0aW5nIHdpdGggYSB0b3RhbCBzdHJhbmdlciwgd2hlbiBJIGhhdmUgYmVlbiAKbGlzdGVuaW5nIGluIHNpbGVuY2UgdG8gaGlzIGNvbnZlcnNhdGlvbiwgdGhhdCBoaXMgcGFzdCAKbGlmZSB1cCB0byB0aGUgcHJlc2VudCBtb21lbnQsIHdpdGggbWFueSBtaW51dGUgCmNpcmN1bXN0YW5jZXMgYmVsb25naW5nIHRvIG9uZSBvciBvdGhlciBwYXJ0aWN1bGFyIAoKCjEyOCAKCgpDTEFJUlZPWUFOQ0UgCgoKc2NlbmUgaW4gaXQsIGhhcyBjb21lIGFjcm9zcyBtZSBUaWtlIGEgZHJlYW0sIGJ1dCAKZGlzdGluY3RseSwgZW50aXJlbHkgaW52b2x1bnRhcmlseSBhbmQgdW5zb3VnaHQsIApvY2N1cHlpbmcgaW4gZHVyYXRpb24gYSBmZXcgbWludXRlcywgCgrigJxGb3IgYSBsb25nIHRpbWUgSSB3YXMgZGlzcG9zZWQgdG8gY29uc2lkZXIgdGhlc2UgCmZsZWV0aW5nIHZpc2lvbnMgYXMgYSB0cmljayBvZiB0aGUgZmFuY3kg4oCUIHRoZSBtb3JlIHNvIAphcyBteSBkcmVhbS12aXNpb24gZGlzcGxheWVkIHRvIG1lIHRoZSBkcmVzcyBhbmQgCm1vdmVtZW50cyBvZiB0aGUgYWN0b3JzLCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgcm9vbSwgCnRoZSBmdXJuaXR1cmUsIGFuZCBvdGhlciBhY2NpZGVudHMgb2YgdGhlIHNjZW5lIDsgdGlsbCAKO29uIG9uZSBvY2Nhc2lvbiwgaW4gYSBnYW1lc29tZSBtb29kLCBJIG5hcnJhdGVkIApqIHRvIG15IGZhbWlseSB0aGUgc2VjcmV0IGhpc3Rvcnkgb2YgYSBzZW1wc3RyZXNzIHdobyAKMSBoYWQganVzdCBiZWZvcmUgcXVpdHRlZCB0aGUgcm9vbS4gSSBoYWQgbmV2ZXIgc2VlbiAKdGhlIHBlcnNvbiBiZWZvcmUuIE5ldmVydGhlbGVzcyB0aGUgaGVhcmVycyB3ZXJlIG0gbSAKYXN0b25pc2hlZCwgYW5kIGxhdWdoZWQgYW5kIHdvdWxkIG5vdCBiZSBwZXJzdWFkZWQgCklidXQgdGhhdCBJIGhhZCBhIHByZXZpb3VzIGFjcXVhaW50YW5jZSB3aXRoIHRoZSAKaiBmb3JtZXIgbGlmZSBvZiB0aGUgcGVyc29uLCBpbmFzbXVjaCBhcyB3aGF0IGwgaGFkIOKAoiAKL3N0YXRlZCB3YXMgcGVyZmVjdGx5IHRydWUuIAoK4oCcIEkgd2FzIG5vdCBsZXNzIGFzdG9uaXNoZWQgdG8gZmluZCB0aGF0IG15IGRyZWFtLSAKdmlzaW9uIGFncmVlZCB3aXRoIHJlYWxpdHkuIEkgdGhlbiBnYXZlIG1vcmUgYXR0ZW4tIAp0aW9uIHRvIHRoZSBzdWJqZWN0LCBhbmQgYXMgb2Z0ZW4gYXMgcHJvcHJpZXR5IGFsbG93ZWQgCm9mIGl0LCBJIHJlbGF0ZWQgdG8gdGhvc2Ugd2hvc2UgbGl2ZXMgaGFkIHNvIHBhc3NlZCAKYmVmb3JlIG1lIHRoZSBzdWJzdGFuY2Ugb2YgbXkgZHJlYW0tdmlzaW9uLCB0byAKb2J0YWluIGZyb20gdGhlbSBpdHMgY29udHJhZGljdGlvbiBvciBjb25maXJtYS0gCnRpb24uIE9uIGV2ZXJ5IG9jY2FzaW9uIGl0cyBjb25maXJtYXRpb24gZm9sbG93ZWQsIApub3Qgd2l0aG91dCBhbWF6ZW1lbnQgb24gdGhlIHBhcnQgb2YgdGhvc2Ugd2hvIyAKZ2F2ZSBpdCAKCuKAnCBPbiAnYSBjZXJ0YWluIGZhaXItZGF5IEkgd2VudCBpbnRvIHRoZSB0b3duIG9mIApXYWxkc2h1dCBhY2NvbXBhbmllZCBieSB0d28geW91bmcgZm9yZXN0ZXJzLCB3aG8gCmFyZSBzdGlsbCBhbGl2ZS4gSXQgd2FzIGV2ZW5pbmcsIGFuZCwgdGlyZWQgd2l0aCBvdXIgCgoKQU5FQ0RPVEUgT0YgWlNDSE9LS0UgCgoKSTI5IAoKCndhbGssIHdlIHdlbnQgaW50byBhbiBpbm4gY2FsbGVkIHRoZSDigJhWaW5lLuKAmSBXZSAKdG9vayBvdXIgc3VwcGVyIHdpdGggYSBudW1lcm91cyBjb21wYW55IGF0IHRoZSAKcHVibGljIHRhYmxlLCB3aGVuIGl0IGhhcHBlbmVkIHRoYXQgdGhleSBtYWRlIAp0aGVtc2VsdmVzIG1lcnJ5IG92ZXIgdGhlIHBlY3VsaWFyaXRpZXMgYW5kIHNpbXBsaWNpdHkgCm9mIHRoZSBTd2lzcyBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGJlbGllZiBpbiAKbWVzbWVyaXNtLCBMYXZhdGVy4oCZcyBwaHlzaW9nbm9taWNhbCBzeXN0ZW0qIGFuZCAKdGhlIGxpa2UuIE9uZSBvZiBteSBjb21wYW5pb25zLCB3aG9zZSBuYXRpb25hbCAKcHJpZGUgd2FzIHRvdWNoZWQgYnkgdGhlaXIgcmFpbGxlcnksIGJlZ2dlZCBtZSB0byAKbWFrZSBzb21lIHJlcGx5LCBwYXJ0aWN1bGFybHkgaW4gYW5zd2VyIHRvIGEgeW91bmcgCm1hbiBvZiBzdXBlcmlvciBhcHBlYXJhbmNlIHdobyBzYXQgb3Bwb3NpdGUsIGFuZCAKaGFkIGluZHVsZ2VkIGluIHVucmVzdHJhaW5lZCByaWRpY3VsZS4gCgrigJxJdCBoYXBwZW5lZCB0aGF0IHRoZSBldmVudHMgb2YgdGhpcyBwZXJzb24ncyBsaWZlIApoYWQganVzdCBwcmV2aW91c2x5IHBhc3NlZCBiZWZvcmUgbXkgbWluZC4gSSAKdHVybmVkIHRvIGhpbSB3aXRoIHRoZSBxdWVzdGlvbiB3aGVeIC4gd291bGQgCgrimaZyZXBseSB0byBtZSB3aXRoIHRydXRoIGFuZCBjYW5kb3VyIGlmIEkgbmFycmF0ZWQgdG8gCmhpbSB0aGUgbW9zdCBzZWNyZXQgcGFzc2FnZXMgb2YgaGlzIGhpc3RvcnksIGppZV5iXml1YWcgCmFzVGx0dGxlIGtub3duIHRvIG1lIGFzIEkgdG8gaGltID8gVGhhdCB3b3VsZCwgSSAKCi5WIC0gJ1YtIDcgCgpzdWdnZXN0ZWQsIGdvIHNvbWV0aGluZyBiZXlvbmQgTGF2YXRlcuKAmXMgcGh5c2lvZy0gCm5vbWljYWwgc2tpbGwuIEhlIHByb21pc2VkIGlmIEkgdG9sZCB0aGUgdHJ1dGggdG8gCmFkbWl0IGl0IG9wZW5seS4gVGhlbiBJIG5hcnJhdGVkIHRoZSBldmVudHMgd2l0aCAKd2hpY2ggbXkgZHJlYW0tdmlzaW9uIGhhZCBmdXJuaXNoZWQgbWUsIGFuZCB0aGUgCnRhYmxlIGxlYXJudCB0aGUgaGlzdG9yeSBvZiB0aGUgeW91bmcgdHJhZGVzbWFuJ3MgbGlmZSwgCm9mIGhpcyBzY2hvb2wgeWVhcnMsIGhpcyBwZWNjYWRpbGxvZXMsIGFuZCwgZmluYWxseSwgb2YgYSAKSmlmY3RsZSBhY3Qgb2Ygcm9ndWVyeSBjb21taXR0ZWQgYnkgaGltIG9udyB0aGUgc3Ryb25nLSAKYm94IHFKXkVeZW1wbG95ZXIuIEkgZGVzY3JpYmVkIHRoZSB1bmluaGFiaXRlZCAKcm9vbSB3aXRoIGl0cyB3aGl0ZSB3YWxscywgd2hlcmUgdG8gdGhlIHJpZ2h0IG9mIHRoZSAKYnJvd24gZG9vciB0aGVyZSBoYWQgc3Rvb2QgdXBvbiB0aGUgdGFibGUgdGhlIHNtYWxsIApibGFjayBtb25leS1jaGVzdCwgZXRjLiBUaGUgbWFuLCBtdWNoIHN0cnVjaywgCgo5IAoKCjEzMCAKCgpDTEFJUlZPWUFOQ0UgCgoKYWRtaXR0ZWQgdGhlIGNvcnJlY3RuZXNzIG9mIGVhY2ggY2lyY3Vtc3RhbmNlIOKAlCBldmVuLCAKd2hpY2ggSSBjb3VsZCBub3QgZXhwZWN0LCBvZiB0aGUgbGFzdC7igJ0gCgpBbmQgYWZ0ZXIgbmFycmF0aW5nIHRoaXMgaW5jaWRlbnQsIHRoZSB3b3J0aHkgClpzY2hva2tlIGNhbG1seSBnb2VzIG9uIHRvIHdvbmRlciB3aGV0aGVyIHBlcmhhcHMgCmFmdGVyIGFsbCB0aGlzIHJlbWFya2FibGUgcG93ZXIsIHdoaWNoIGhlIGhhZCBzbyAKb2Z0ZW4qIGRpc3BsYXkgZWQsIG1pZ2h0IG5vdCByZWFsbHkgaGF2ZSBiZWVuIGFsd2F5cyAKLnRoZSByZXN1bHQgb2YgbWVyZSBjaGFuY2UgY29pbmNpZGVuY2UhIAoKQ29tcGFyYXRpdmVseSBmZXcgYWNjb3VudHMgb2YgcGVyc29ucyBwb3NzZXNzaW5nIAp0aGlzIGZhY3VsdHkgb2YgbG9va2luZyBiYWNrIGludG8gdGhlIHBhc3QgYXJlIHRvIGJlIApmb3VuZCBpbiB0aGUgbGl0ZXJhdHVyZSBvZiB0aGUgc3ViamVjdCwgYW5kIGl0IG1pZ2h0IAp0aGVyZWZvcmUgYmUgc3VwcG9zZWQgdG8gYmUgbXVjaCBsZXNzIGNvbW1vbiB0aGFuIApwcmV2aXNpb24uIEkgc3VzcGVjdCwgaG93ZXZlciwgdGhhdCAKdGhhdC5qJmlzIG11Y2gsIGxlc3MgY29tbW9ubHkgQXMgSSBzYWlkIAoKYmVmb3JlLCBpdCBtYXkgdmVyeSBlYXNpbHkgaGFwcGVuIHRoYXQgYSBwZXJzb24gbWF5IApzZWUgYSBwaWN0dXJlIG9mIHRoZSBwYXN0IHdpdGhvdXQgcmVjb2duaXppbmcgaXQgYV4gCnN1Y2gsIHVubGVzcyB0aGVyZSBoYXBwZW5zIHRvIGJlIGluIGl0IHNvbWV0aGluZyAKd2hpY2ggYXR0cmFjdHMgc3BlY2lhbCBhdHRlbnRpb24sIHN1Y2ggYXMgYSBmaWd1cmUgaW4gCmFybW91ciBvciBpbiBhbnRpcXVlIGNvc3R1bWUuIEEgcHJldmlzaW9uKiBhbHNvIAptaWdodCBub3QgYWx3YXlzIGJlIHJlY29nbml6ZWQgYXMgc3VjaCBhdCB0aGUgdGltZSA7IApidXQgdGhlIG9jY3VycmVuY2Ugb2YgdGhlIGV2ZW50IGZvcmVzZWVuIHJlY2FsbHMgaXQgCnZpdmlkbHkgYXQgdGhlIHNhbWUgdGltZSB0aGF0IGl0IG1hbmlmZXN0cyBpdHMgbmF0dXJlLCAKc28gdGhhdCBpdCBpcyB1bmxpa2VseSB0byBiZSBvdmVybG9va2VkLiBJdCBpcyBwcm9iYWJsZSwgCnRoZXJlZm9yZSwgdGhhdCBvY2Nhc2lvbmFsIGdsaW1wc2VzIG9mIHRoZXNlIGFzdHJhbCAKcmVmbGVjdGlvbnMgb2YgdGhlIGFrYXNoaWMgcmVjb3JkcyBhcmUgY29tbW9uZXIgdGhhbiAKdGhlIHB1Ymxpc2hlZCBhY2NvdW50cyB3b3VsZCBsZWFkIHVzIHRvIGJlbGlldmUuIAoKCkNIQVBURVIgVklJSS4gCgpDbGFpcnZveWFuY2UgaW4gVGltZTogdGhlIEZ1dHVyZS4gCgpFdmVuIGlmLCBpbiBhIGRpbSBzb3J0IG9mIHdheSwgd2UgZmVlbCBvdXJzZWx2ZXMgYWJsZSAKdG8gZ3Jhc3AgdGhlIGlkZWEgdGhhdCB0aGUgd2hvbGUgb2YgdGhlIHBhc3QgbWF5IGJlIApzaW11bHRhbmVvdXNseSBhbmQgYWN0aXZlbHkgcHJlc2VudCBpbiBhIHN1ZmZpY2llbnRseSAKZXhhbHRlZCBjb25zY2lvdXNuZXNzLCB3ZSBhcmUgY29uZnJvbnRlZCBieSBhIGZhciAKZ3JlYXRlciBkaWZmaWN1bHR5IHdoZW4gd2UgZW5kZWF2b3VyIHRvIHJlYWxpemUgaG93IAphbGwgdF1qLmUgZnV0dXJlIG1heSBhbHNvIGJlIGNvbXByZWhlbmRlZCBpbiB0aGF0IApjb25zY2lvdXNuZXNzLiBJZiB3ZSBjb3VsZCBiZWxpZXZlIGluIHRoZSBNb2hhbW1lLSAKZGFuZHBjdHJpbmUgb2YgXiBvciB0aGUgQ2FseWluaXN0aWMgdGhlb3J5IG9mIApncmVmbGVzdGluYXRpb24sIHRoZSBjb25jZXB0aW9uIHdvdWxkIGJlIGVhc3kgZW5vdWdoLCAKYnV0IGtub3dpbmcgYXMgd2UgZG8gdGhhdCBib3RoIHRoZXNlIGFyZSBncm90ZXNxdWUhIApkaXN0b3J0aW9ucyBvZiB0aGUgdHJ1dGgsIHdlIG11c3QgbG9vayByb3VuZCBmb3IgYSBtb3JlfCAKYWNjZXB0YWJsZSBoeXBvdGhlc2lzLiAKClRoZXJlIG1heSBzdGlsbCBiZSBzb21lIHBlb3BsZSB3aG8gZGVueSB0aGUgCnBvc3NpYmlsaXR5IG9mIHByZXZpc2lvbiwgYnV0IHN1Y2ggZGVuaWFsIHNpbXBseSBzaG93cyAKdGhlaXIgaWdub3JhbmNlIG9mIHRoZSBldmlkZW5jZSBvbiB0aGUgc3ViamVjdC4gVGhlIApsYXJnZSBudW1iZXIgb2YgYXV0aGVudGljYXRlZCBjYXNlcyBsZWF2ZXMgbm8gcm9vbSAKZm9yIGRvdWJ0IGFzIHRvIHRoZSBmYWN0LCBidXQgbWFueSBvZiB0aGVtIGFyZSBvZiBzdWNoIAphIG5hdHVyZSBhcyB0byByZW5kZXIgYSByZWFzb25hYmxlIGV4cGxhbmF0aW9uIGJ5IG5vIAptZWFucyBlYXN5IHRvIGZpbmQuIEl0IGlzIGV2aWRlbnQgdGhhdCB0aGUgRWdvIAoKCjEzMiAKCgpDTEFJUlZPWUFOQ0UgCgoKcG9zc2Vzc2VzIGEgY2VydGFpbiBhbW91bnQgb2YgcHJldmlzaW9uYWwgZmFjdWx0eSwgCmFuZCBpZiB0aGUgZXZlbnRzIGZvcmVzZWVuIHdlcmUgYWx3YXlzIG9mIGdyZWF0IGltLSAKcG9ydGFuY2UsIG9uZSBtaWdodCBzdXBwb3NlIHRoYXQgYW4gZXh0cmFvcmRpbmFyeSAKc3RpbXVsdXMgaGFkIGVuYWJsZWQgaGltIGZvciB0aGF0IG9jY2FzaW9uIG9ubHkgdG8gCm1ha2UgYSBjbGVhciBpbXByZXNzaW9uIG9mIHdoYXQgaGUgc2F3IHVwb24gaGlzIApsb3dlciBecGVyc29uYWxpdHkuIE5vIGRvdWJ0IHRoYXQgaXMgdGhlIGV4cGxhbmF0aW9uIApvZiBtYW55IG9mIHRoZSBjYXNlcyBpbiB3aGljaCBkZWF0aCBvciBncmF2ZSBkaXNhc3RlciAKaXMgZm9yZXNlZW4sIGJ1dCB0aGVyZSBhcmUgYSBsYXJnZSBudW1iZXIgb2YgaW5zdGFuY2VzIOKAoiAKb24gcmVjb3JkIHRvIHdoaWNoIGl0IGRvZXMgbm90IHNlZW0gdG8gYXBwbHksIHNpbmNlIAp0aGUgZXZlbnRzIGZvcmV0b2xkIGFyZSBmcmVxdWVudGx5IGV4Y2VlZGluZ2x5IHRyaXZpYWwgCmFuZCB1bmltcG9ydGFudCAKCkFfIHdlbGwta25vd24gc3Rvcnkgb2Ygc2Vjb25kLXNpZ2h0IGluIFNjb3RsYW5kICoqIAp3aWxsIGlsbHVzdHJhdGUgd2hhdCBJIG1lYW4uIEEgbWFuIHdobyBoYWQgbm8gCmJlbGllZiBpbiB0aGUgb2NjdWx0IHdhcyBmb3Jld2FybmVkIGJ5IGEgSGlnaGxhbmQgCnNlZXIgb2YgdGhlIGFwcHJvYWNoaW5nIGRlYXRoIG9mIGEgbmVpZ2hib3VyLCBjIFRoZSAKcHJvcGhlY3kgd2FzIGdpdmVuIHdpdGggY29uc2lkZXJhYmxlIHdlYWx0aCBvZiBkZXRhaWwsIAppbmNsdWRpbmcgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5lcmFsLCB3aXRoIHRoZSAKbmFtZXMgb2YgdGhlIGZvdXIgcGFsbC1iZWFyZXJzIGFuZCBvdGhlcnMgd2hvIHdvdWxkIApiZSBwcmVzZW50IFRoZSBhdWRpdG9yIHNlZW1zIHRvIGhhdmUgbGF1Z2hlZCBhdCAKdGhlIHdob2xlIHN0b3J5IGFuZCBwcm9tcHRseSBmb3Jnb3R0ZW4gaXQsIGJ1dCB0aGUgCmRlYXRoIG9mIGhpcyBuZWlnaGJvdXIgYXQgdGhlIHRpbWUgZm9yZXRvbGQgcmVjYWxsZWQgCnRoZSB3YXJuaW5nIHRvIGhpcyBtaW5kLCBhbmQgaGUgZGV0ZXJtaW5lZCB0byBmYWxzaWZ5IApwYXJ0IG9mIHRoZSBwcmVkaWN0aW9uIGF0IGFueSByYXRlIGJ5IGJlaW5nIG9uZSBvZiB0aGUgCnBhbGwtYmVhcmVycyBoaW1zZWxmLiBIZSBzdWNjZWVkZWQgaW4gZ2V0dGluZyBtYXR0ZXJ5IAphcnJhbmdlZCBhcyBoZSB3aXNoZWQsIGJ1dCBqdXN0IGFzIHRoZSBmdW5lcmFsIHdhcyAKYWJvdXQgdG8gc3RhcnQgaGUgd2FzIGNhbGxlZCBhd2F5IGZyb20gaGlzIHBvc3QgYnkgCnNvbWUgc21hbGwgbWF0dGVyIHdoaWNoIGRldGFpbmVkIGhpbSBvbmx5IGEgbWludXRlIApPciB0d28uIEFzIGhlIGNhbWUgaHVycnlpbmcgYmFjayBoZSBzYXcgd2l0aCAKCgpQUkVESUNUSU9OIAoKCjEzMyAKCgpzdXJwcmlzZSB0aGF0IHRoZSBwcm9jZXNzaW9uIGhhZCBzdGFydGVkIHdpdGhvdXQgaGltLCAKYW5kIHRoYXQgdGhlIHByZWRpY3Rpb24gaGFkIGJlZW4gZXhhY3RseSBmdWxmaWxsZWQsIGZvciAKdGhlIGZvdXIgcGFsbC1iZWFyZXJzIHdlcmUgdGhvc2Ugd2hvIGhhZCBiZWVuIGluZGktIApjYXRlZCBpbiB0aGUgdmlzaW9uLiAKCk5vdyBoZXJlIGlzIGEgdmVyeSB0cmlmbGluZyBtYXR0ZXIsIHdoaWNoIGNvdWxkIGhhdmUgCmJlZW4gb2Ygbm8gcG9zc2libGUgaW1wb3J0YW5jZSB0byBhbnlib2R5LCBkZWZpbml0ZWx5IApmb3Jlc2VlbiBtb250aHMgYmVmb3JlaGFuZCA7IGFuZCBhbHRob3VnaCBhIG1hbiAKbWFrZXMgYSBkZXRlcm1pbmVkIGVmZm9ydCB0byBhbHRlciB0aGUgYXJyYW5nZW1lbnQgCmluZGljYXRlZCBoZSBmYWlscyBlbnRpcmVseSB0byBhZmZlY3QgaXQgaW4gdGhlIGxlYXN0IApDZXJ0YWlubHkgdGhpcyBsb29rcyB2ZXJ5IG11Y2ggbGlrZSBwcmVkZXN0aW5hdGlvbiwgCuKWoCBldmVuIGRvd24gdG8gdGhlIHNtYWxsZXN0IGRldGFpbCwgYW5kIGl0IGlzIG9ubHkgd2hlbiAKbSB3ZSBleGFtaW5lIHRoaXMgcXVlc3Rpb24gZnJvbSBoaWdoZXIgcGxhbmVzIHRoYXQgd2UgCmFyZSBhYmxlIHRvIHNlZSBvdXIgd2F5IHRvIGVzY2FwZSB0aGF0IHRoZW9yeS4gT2YgCmNvdXJzZSwgYXMgSSBzYWlkIGJlZm9yZSBhYm91dCBhbm90aGVyIGJyYW5jaCBvZiB0aGUgCuKAoiBzdWJqZWN0LCBhIGZ1bGwgZXhwbGFuYXRpb24gZWx1ZGVzIHVzIGFzIHlldCwgYW5kIApvYnZpb3VzbHkgbXVzdCBkbyBzbyB1bnRpbCBvdXIga25vd2xlZGdlIGlzIGluZmluaXRlbHkgCmdyZWF0ZXIgdGhhbiBpdCBpcyBub3cgOyB0aGUgbW9zdCB0aGF0IHdlIGNhbiBob3BlIHRvIApkbyBmb3IgdGhlIHByZXNlbnQgaXMgdG8gaW5kaWNhdGUgdGhlIGxpbmUgYWxvbmcgd2hpY2ggCmFuIGV4cGxhbmF0aW9uIG1heSBiZSBmb3VuZC4=

Nessun commento:

Posta un commento

[AL CORPUS] Occult Chemistry [2/2]

VGhlc2UgdW5pdHMgYXJlIGFsbCBhbGlrZSwgc3BoZXJpY2FsIGFuZCBhYnNvbHV0ZWx5IHNpbXBsZSBpbiAKY29uc3RydWN0aW9uLiBUaG91Z2ggdGhleSBhcmUgdGhlIGJhc2lzIG9m...