VGhlIHllYXIgMTg2NiB3YXMgbWFya2VkIGJ5IGEgYml6YXJyZSBkZXZlbG9wbWVudCwgYW4gdW5leHBsYWluZWQgYW5kIGRvd25yaWdodCBpbmV4cGxpY2FibGUgcGhlbm9tZW5vbiB0aGF0IHN1cmVseSBubyBvbmUgaGFzIGZvcmdvdHRlbi4gV2l0aG91dCBnZXR0aW5nIGludG8gdGhvc2UgcnVtb3JzIHRoYXQgdXBzZXQgY2l2aWxpYW5zIGluIHRoZSBzZWFwb3J0cyBhbmQgZGVyYW5nZWQgdGhlIHB1YmxpYyBtaW5kIGV2ZW4gZmFyIGlubGFuZCwgaXQgbXVzdCBiZSBzYWlkIHRoYXQgcHJvZmVzc2lvbmFsIHNlYW1lbiB3ZXJlIGVzcGVjaWFsbHkgYWxhcm1lZC4gVHJhZGVycywgc2hpcG93bmVycywgY2FwdGFpbnMgb2YgdmVzc2Vscywgc2tpcHBlcnMsIGFuZCBtYXN0ZXIgbWFyaW5lcnMgZnJvbSBFdXJvcGUgYW5kIEFtZXJpY2EsIG5hdmFsIG9mZmljZXJzIGZyb20gZXZlcnkgY291bnRyeSwgYW5kIGF0IHRoZWlyIGhlZWxzIHRoZSB2YXJpb3VzIG5hdGlvbmFsIGdvdmVybm1lbnRzIG9uIHRoZXNlIHR3byBjb250aW5lbnRzLCB3ZXJlIGFsbCBleHRyZW1lbHkgZGlzdHVyYmVkIGJ5IHRoZSBidXNpbmVzcy4NCkluIGVzc2VuY2UsIG92ZXIgYSBwZXJpb2Qgb2YgdGltZSBzZXZlcmFsIHNoaXBzIGhhZCBlbmNvdW50ZXJlZCAiYW4gZW5vcm1vdXMgdGhpbmciIGF0IHNlYSwgYSBsb25nIHNwaW5kbGUtc2hhcGVkIG9iamVjdCwgc29tZXRpbWVzIGdpdmluZyBvZmYgYSBwaG9zcGhvcmVzY2VudCBnbG93LCBpbmZpbml0ZWx5IGJpZ2dlciBhbmQgZmFzdGVyIHRoYW4gYW55IHdoYWxlLg0KVGhlIHJlbGV2YW50IGRhdGEgb24gdGhpcyBhcHBhcml0aW9uLCBhcyByZWNvcmRlZCBpbiB2YXJpb3VzIGxvZ2Jvb2tzLCBhZ3JlZWQgcHJldHR5IGNsb3NlbHkgYXMgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0IG9yIGNyZWF0dXJlIGluIHF1ZXN0aW9uLCBpdHMgdW5wcmVjZWRlbnRlZCBzcGVlZCBvZiBtb3ZlbWVudCwgaXRzIHN0YXJ0bGluZyBsb2NvbW90aXZlIHBvd2VyLCBhbmQgdGhlIHVuaXF1ZSB2aXRhbGl0eSB3aXRoIHdoaWNoIGl0IHNlZW1lZCB0byBiZSBnaWZ0ZWQuICBJZiBpdCB3YXMgYSBjZXRhY2VhbiwgaXQgZXhjZWVkZWQgaW4gYnVsayBhbnkgd2hhbGUgcHJldmlvdXNseSBjbGFzc2lmaWVkIGJ5IHNjaWVuY2UuICBObyBuYXR1cmFsaXN0LCBuZWl0aGVyIEN1dmllciBub3IgTGFj6XDoZGUsIG5laXRoZXIgUHJvZmVzc29yIER1bWVyaWwgbm9yIFByb2Zlc3NvciBkZSBRdWF0cmVmYWdlcywgd291bGQgaGF2ZSBhY2NlcHRlZCB0aGUgZXhpc3RlbmNlIG9mIHN1Y2ggYSBtb25zdGVyIHNpZ2h0IHVuc2VlbiAtLSBzcGVjaWZpY2FsbHksIHVuc2VlbiBieSB0aGVpciBvd24gc2NpZW50aWZpYyBleWVzLg0KU3RyaWtpbmcgYW4gYXZlcmFnZSBvZiBvYnNlcnZhdGlvbnMgdGFrZW4gYXQgZGlmZmVyZW50IHRpbWVzIC0tIHJlamVjdGluZyB0aG9zZSB0aW1pZCBlc3RpbWF0ZXMgdGhhdCBnYXZlIHRoZSBvYmplY3QgYSBsZW5ndGggb2YgMjAwIGZlZXQsIGFuZCBpZ25vcmluZyB0aG9zZSBleGFnZ2VyYXRlZCB2aWV3cyB0aGF0IHNhdyBpdCBhcyBhIG1pbGUgd2lkZSBhbmQgdGhyZWUgbG9uZy0teW91IGNvdWxkIHN0aWxsIGFzc2VydCB0aGF0IHRoaXMgcGhlbm9tZW5hbCBjcmVhdHVyZSBncmVhdGx5IGV4Y2VlZGVkIHRoZSBkaW1lbnNpb25zIG9mIGFueXRoaW5nIHRoZW4ga25vd24gdG8gaWNodGh5b2xvZ2lzdHMsIGlmIGl0IGV4aXN0ZWQgYXQgYWxsLg0KTm93IHRoZW4sIGl0IGRpZCBleGlzdCwgdGhpcyB3YXMgYW4gdW5kZW5pYWJsZSBmYWN0OyBhbmQgc2luY2UgdGhlIGh1bWFuIG1pbmQgZG90ZXMgb24gb2JqZWN0cyBvZiB3b25kZXIsIHlvdSBjYW4gdW5kZXJzdGFuZCB0aGUgd29ybGR3aWRlIGV4Y2l0ZW1lbnQgY2F1c2VkIGJ5IHRoaXMgdW5lYXJ0aGx5IGFwcGFyaXRpb24uIEFzIGZvciByZWxlZ2F0aW5nIGl0IHRvIHRoZSByZWFsbSBvZiBmaWN0aW9uLCB0aGF0IGNoYXJnZSBoYWQgdG8gYmUgZHJvcHBlZC4NCkluIGVzc2VuY2UsIG9uIEp1bHkgMjAsIDE4NjYsIHRoZSBzdGVhbWVyIEdvdmVybm9yIEhpZ2dpbnNvbiwgZnJvbSB0aGUgQ2FsY3V0dGEgJiBCdXJuYWNoIFN0ZWFtIE5hdmlnYXRpb24gQ28uLCBlbmNvdW50ZXJlZCB0aGlzIG1vdmluZyBtYXNzIGZpdmUgbWlsZXMgb2ZmIHRoZSBlYXN0ZXJuIHNob3JlcyBvZiBBdXN0cmFsaWEuIENhcHRhaW4gQmFrZXIgYXQgZmlyc3QgdGhvdWdodCBoZSB3YXMgaW4gdGhlIHByZXNlbmNlIG9mIGFuIHVua25vd24gcmVlZjsgaGUgd2FzIGV2ZW4gYWJvdXQgdG8gZml4IGl0cyBleGFjdCBwb3NpdGlvbiB3aGVuIHR3byB3YXRlcnNwb3V0cyBzaG90IG91dCBvZiB0aGlzIGluZXhwbGljYWJsZSBvYmplY3QgYW5kIHNwcmFuZyBoaXNzaW5nIGludG8gdGhlIGFpciBzb21lIDE1MCBmZWV0LiAgU28sIHVubGVzcyB0aGlzIHJlZWYgd2FzIHN1YmplY3QgdG8gdGhlIGludGVybWl0dGVudCBlcnVwdGlvbnMgb2YgYSBnZXlzZXIsIHRoZSBHb3Zlcm5vciBIaWdnaW5zb24gaGFkIGZhaXIgYW5kIGhvbmVzdCBkZWFsaW5ncyB3aXRoIHNvbWUgYXF1YXRpYyBtYW1tYWwsIHVudGlsIHRoZW4gdW5rbm93biwgdGhhdCBjb3VsZCBzcHVydCBmcm9tIGl0cyBibG93aG9sZXMgd2F0ZXJzcG91dHMgbWl4ZWQgd2l0aCBhaXIgYW5kIHN0ZWFtLg0KU2ltaWxhciBldmVudHMgd2VyZSBsaWtld2lzZSBvYnNlcnZlZCBpbiBQYWNpZmljIHNlYXMsIG9uIEp1bHkgMjMgb2YgdGhlIHNhbWUgeWVhciwgYnkgdGhlIENocmlzdG9waGVyIENvbHVtYnVzIGZyb20gdGhlIFdlc3QgSW5kaWEgJiBQYWNpZmljIFN0ZWFtIE5hdmlnYXRpb24gQ28uICBDb25zZXF1ZW50bHksIHRoaXMgZXh0cmFvcmRpbmFyeSBjZXRhY2VhbiBjb3VsZCB0cmFuc2ZlciBpdHNlbGYgZnJvbSBvbmUgbG9jYWxpdHkgdG8gYW5vdGhlciB3aXRoIHN0YXJ0bGluZyBzd2lmdG5lc3MsIHNpbmNlIHdpdGhpbiBhbiBpbnRlcnZhbCBvZiBqdXN0IHRocmVlIGRheXMsIHRoZSBHb3Zlcm5vciBIaWdnaW5zb24gYW5kIHRoZSBDaHJpc3RvcGhlciBDb2x1bWJ1cyBoYWQgb2JzZXJ2ZWQgaXQgYXQgdHdvIHBvc2l0aW9ucyBvbiB0aGUgY2hhcnRzIHNlcGFyYXRlZCBieSBhIGRpc3RhbmNlIG9mIG1vcmUgdGhhbiA3MDAgbmF1dGljYWwgbGVhZ3Vlcy4NCkZpZnRlZW4gZGF5cyBsYXRlciBhbmQgMiwwMDAgbGVhZ3VlcyBmYXJ0aGVyLCB0aGUgSGVsdmV0aWEgZnJvbSB0aGUgQ29tcGFnbmllIE5hdGlvbmFsZSBhbmQgdGhlIFNoYW5ub24gZnJvbSB0aGUgUm95YWwgTWFpbCBsaW5lLCBydW5uaW5nIG9uIG9wcG9zaXRlIHRhY2tzIGluIHRoYXQgcGFydCBvZiB0aGUgQXRsYW50aWMgbHlpbmcgYmV0d2VlbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgRXVyb3BlLCByZXNwZWN0aXZlbHkgc2lnbmFsZWQgZWFjaCBvdGhlciB0aGF0IHRoZSBtb25zdGVyIGhhZCBiZWVuIHNpZ2h0ZWQgaW4gbGF0aXR1ZGUgNDIgZGVncmVlcyAxNScgbm9ydGggYW5kIGxvbmdpdHVkZSA2MCBkZWdyZWVzIDM1JyB3ZXN0IG9mIHRoZSBtZXJpZGlhbiBvZiBHcmVlbndpY2guICBGcm9tIHRoZWlyIHNpbXVsdGFuZW91cyBvYnNlcnZhdGlvbnMsIHRoZXkgd2VyZSBhYmxlIHRvIGVzdGltYXRlIHRoZSBtYW1tYWwncyBtaW5pbXVtIGxlbmd0aCBhdCBtb3JlIHRoYW4gMzUwIEVuZ2xpc2ggZmVldDsgdGhpcyB3YXMgYmVjYXVzZSBib3RoIHRoZSBTaGFubm9uIGFuZCB0aGUgSGVsdmV0aWEgd2VyZSBvZiBzbWFsbGVyIGRpbWVuc2lvbnMsIGFsdGhvdWdoIGVhY2ggbWVhc3VyZWQgMTAwIG1ldGVycyBzdGVtIHRvIHN0ZXJuLiBOb3cgdGhlbiwgdGhlIGJpZ2dlc3Qgd2hhbGVzLCB0aG9zZSByb3JxdWFsIHdoYWxlcyB0aGF0IGZyZXF1ZW50IHRoZSB3YXRlcndheXMgb2YgdGhlIEFsZXV0aWFuIElzbGFuZHMsIGhhdmUgbmV2ZXIgZXhjZWVkZWQgYSBsZW5ndGggb2YgNTYgbWV0ZXJzLS1pZiB0aGV5IHJlYWNoIGV2ZW4gdGhhdC4NCk9uZSBhZnRlciBhbm90aGVyLCByZXBvcnRzIGFycml2ZWQgdGhhdCB3b3VsZCBwcm9mb3VuZGx5IGFmZmVjdCBwdWJsaWMgb3BpbmlvbjogIG5ldyBvYnNlcnZhdGlvbnMgdGFrZW4gYnkgdGhlIHRyYW5zYXRsYW50aWMgbGluZXIgUGVyZWlyZSwgdGhlIElubWFuIGxpbmUncyBFdG5hIHJ1bm5pbmcgYWZvdWwgb2YgdGhlIG1vbnN0ZXIsIGFuIG9mZmljaWFsIHJlcG9ydCBkcmF3biB1cCBieSBvZmZpY2VycyBvbiB0aGUgRnJlbmNoIGZyaWdhdGUgTm9ybWFuZHksIGRlYWQtZWFybmVzdCByZWNrb25pbmdzIG9idGFpbmVkIGJ5IHRoZSBnZW5lcmFsIHN0YWZmIG9mIENvbW1vZG9yZSBGaXR6LUphbWVzIGFib2FyZCB0aGUgTG9yZCBDbHlkZS4gSW4gbGlnaHRoZWFydGVkIGNvdW50cmllcywgcGVvcGxlIGpva2VkIGFib3V0IHRoaXMgcGhlbm9tZW5vbiwgYnV0IHN1Y2ggc2VyaW91cywgcHJhY3RpY2FsIGNvdW50cmllcyBhcyBFbmdsYW5kLCBBbWVyaWNhLCBhbmQgR2VybWFueSB3ZXJlIGRlZXBseSBjb25jZXJuZWQuDQpJbiBldmVyeSBiaWcgY2l0eSB0aGUgbW9uc3RlciB3YXMgdGhlIGxhdGVzdCByYWdlOyB0aGV5IHNhbmcgYWJvdXQgaXQgaW4gdGhlIGNvZmZlZSBob3VzZXMsIHRoZXkgcmlkaWN1bGVkIGl0IGluIHRoZSBuZXdzcGFwZXJzLCB0aGV5IGRyYW1hdGl6ZWQgaXQgaW4gdGhlIHRoZWF0ZXJzLiAgVGhlIHRhYmxvaWRzIGZvdW5kIGl0IGEgZmluZSBvcHBvcnR1bml0eSBmb3IgaGF0Y2hpbmcgYWxsIHNvcnRzIG9mIGhvYXhlcy4gSW4gdGhvc2UgbmV3c3BhcGVycyBzaG9ydCBvZiBjb3B5LCB5b3Ugc2F3IHRoZSByZWFwcGVhcmFuY2Ugb2YgZXZlcnkgZ2lnYW50aWMgaW1hZ2luYXJ5IGNyZWF0dXJlLCBmcm9tICJNb2J5IERpY2ssIiB0aGF0IGRyZWFkZnVsIHdoaXRlIHdoYWxlIGZyb20gdGhlIEhpZ2ggQXJjdGljIHJlZ2lvbnMsIHRvIHRoZSBzdHVwZW5kb3VzIGtyYWtlbiB3aG9zZSB0ZW50YWNsZXMgY291bGQgZW50d2luZSBhIDUwMC10b24gY3JhZnQgYW5kIGRyYWcgaXQgaW50byB0aGUgb2NlYW4gZGVwdGhzLiBUaGV5IGV2ZW4gcmVwcmludGVkIHJlcG9ydHMgZnJvbSBhbmNpZW50IHRpbWVzOiB0aGUgdmlld3Mgb2YgQXJpc3RvdGxlIGFuZCBQbGlueSBhY2NlcHRpbmcgdGhlIGV4aXN0ZW5jZSBvZiBzdWNoIG1vbnN0ZXJzLCB0aGVuIHRoZSBOb3J3ZWdpYW4gc3RvcmllcyBvZiBCaXNob3AgUG9udG9wcGlkYW4sIHRoZSBuYXJyYXRpdmVzIG9mIFBhdWwgRWdlZGUsIGFuZCBmaW5hbGx5IHRoZSByZXBvcnRzIG9mIENhcHRhaW4gSGFycmluZ3RvbiAtLSB3aG9zZSBnb29kIGZhaXRoIGlzIGFib3ZlIHN1c3BpY2lvbi0taW4gd2hpY2ggaGUgY2xhaW1zIGhlIHNhdywgd2hpbGUgYWJvYXJkIHRoZSBDYXN0aWxpYW4gaW4gMTg1Nywgb25lIG9mIHRob3NlIGVub3Jtb3VzIHNlcnBlbnRzIHRoYXQsIHVudGlsIHRoZW4sIGhhZCBmcmVxdWVudGVkIG9ubHkgdGhlIHNlYXMgb2YgRnJhbmNlJ3Mgb2xkIGV4dHJlbWlzdCBuZXdzcGFwZXIsIFRoZSBDb25zdGl0dXRpb25hbGlzdC4NCg==