ICAgICAgICAgICAgICAgICAgICAgICAgVGFnU291cCAtIEp1c3QgS2VlcCBPbiBUcnVja2luJwoKICBJbnRyb2R1Y3Rpb24KCiAgIFRoaXMgaXMgdGhlIGhvbWUgcGFnZSBvZiBUYWdTb3VwLCBhIFNBWC1jb21wbGlhbnQgcGFyc2VyIHdyaXR0ZW4gaW4KICAgSmF2YSB0aGF0LCBpbnN0ZWFkIG9mIHBhcnNpbmcgd2VsbC1mb3JtZWQgb3IgdmFsaWQgWE1MLCBwYXJzZXMgSFRNTCBhcwogICBpdCBpcyBmb3VuZCBpbiB0aGUgd2lsZDogWzFdcG9vciwgbmFzdHkgYW5kIGJydXRpc2gsIHRob3VnaCBxdWl0ZSBvZnRlbgogICBmYXIgZnJvbSBzaG9ydC4gVGFnU291cCBpcyBkZXNpZ25lZCBmb3IgcGVvcGxlIHdobyBoYXZlIHRvIHByb2Nlc3MgdGhpcwogICBzdHVmZiB1c2luZyBzb21lIHNlbWJsYW5jZSBvZiBhIHJhdGlvbmFsIGFwcGxpY2F0aW9uIGRlc2lnbi4gQnkKICAgcHJvdmlkaW5nIGEgU0FYIGludGVyZmFjZSwgaXQgYWxsb3dzIHN0YW5kYXJkIFhNTCB0b29scyB0byBiZSBhcHBsaWVkCiAgIHRvIGV2ZW4gdGhlIHdvcnN0IEhUTUwuIFRhZ1NvdXAgYWxzbyBpbmNsdWRlcyBhIGNvbW1hbmQtbGluZSBwcm9jZXNzb3IKICAgdGhhdCByZWFkcyBIVE1MIGZpbGVzIGFuZCBjYW4gZ2VuZXJhdGUgZWl0aGVyIGNsZWFuIEhUTUwgb3Igd2VsbC1mb3JtZWQKICAgWE1MIHRoYXQgaXMgYSBjbG9zZSBhcHByb3hpbWF0aW9uIHRvIFhIVE1MLgoKICAgVGhpcyBpcyBhbHNvIHRoZSBSRUFETUUgZmlsZSBwYWNrYWdlZCB3aXRoIFRhZ1NvdXAuCgogICBUYWdTb3VwIGlzIGZyZWUgYW5kIE9wZW4gU291cmNlIHNvZnR3YXJlLiBBcyBvZiB2ZXJzaW9uIDEuMiwgaXQgaXMKICAgbGljZW5zZWQgdW5kZXIgdGhlIFsyXUFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCwgd2hpY2ggYWxsb3dzCiAgIHByb3ByaWV0YXJ5IHJlLXVzZSBhcyB3ZWxsIGFzIHVzZSB3aXRoIEdQTCAzLjAgb3IgR1BMIDIuMC1vci1sYXRlcgogICBwcm9qZWN0cy4gKElmIGFueW9uZSBuZWVkcyBhIEdQTCAyLjAgbGljZW5zZSBmb3IgYSBHUEwgMi4wLW9ubHkKICAgcHJvamVjdCwgZmVlbCBmcmVlIHRvIGFzay4pCgogIFdhcm5pbmc6IFRhZ1NvdXAgd2lsbCBub3QgYnVpbGQgb24gc3RvY2sgSmF2YSA1Lnggb3IgNi54IQoKICAgRHVlIHRvIGEgYnVnIGluIHRoZSB2ZXJzaW9ucyBvZiBYYWxhbiBzaGlwcGVkIHdpdGggSmF2YSA1LnggYW5kIDYueCwKICAgVGFnU291cCB3aWxsIG5vdCBidWlsZCBvdXQgb2YgdGhlIGJveC4gWW91IG5lZWQgdG8gcmV0cmlldmUgWzNdU2F4b24KICAgNi41LjUsIHdoaWNoIGRvZXMgbm90IGhhdmUgdGhlIGJ1Zy4gVW5wYWNrIHRoZSB6aXBmaWxlIGluIGFuIGVtcHR5CiAgIGRpcmVjdG9yeSBhbmQgY29weSB0aGUgc2F4b24uamFyIGFuZCBzYXhvbi14bWwtYXBpcy5qYXIgZmlsZXMgdG8KICAgJEFOVF9IT01FL2xpYi4gVGhlIEFudCBidWlsZCBwcm9jZXNzIGZvciBUYWdTb3VwIHdpbGwgdGhlbiBub3RpY2UgdGhhdAogICBTYXhvbiBpcyBhdmFpbGFibGUgYW5kIHVzZSBpdCBpbnN0ZWFkLgoKICBUYWdTb3VwIDEuMiByZWxlYXNlZAoKICAgVGhlcmUgYXJlIGEgZ3JlYXQgbWFueSBjaGFuZ2VzLCBtb3N0IG9mIHRoZW0gZml4ZXMgZm9yIGxvbmctc3RhbmRpbmcKICAgYnVncywgaW4gdGhpcyByZWxlYXNlLiBPbmx5IHRoZSBtb3N0IGltcG9ydGFudCBhcmUgbGlzdGVkIGhlcmU7IGZvciB0aGUKICAgcmVzdCwgc2VlIHRoZSBDSEFOR0VTIGZpbGUgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uIFZlcnkgc3BlY2lhbAogICB0aGFua3MgdG8gSm9qbyBEaWphbWNvLCB3aG9zZSBpbnRlbnNpdmUgZWZmb3J0cyBhdCBkZWJ1Z2dpbmcgbWFkZSB0aGlzCiAgIHJlbGVhc2UgYSB1c2FibGUgdXBncmFkZSByYXRoZXIgdGhhbiBhIHVzZWxlc3MgbWFzcyBvZiB1bmRldGVjdGVkIGJ1Z3MuCiAgICAgKiBBcyBub3RlZCBhYm92ZSwgSSBoYXZlIGNoYW5nZWQgdGhlIGxpY2Vuc2UgdG8gQXBhY2hlIDIuMC4KICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgbW9kZWwgZm9yIGJvZ29ucyAodW5rbm93biBlbGVtZW50cykgaXMgbm93IEFOWQogICAgICAgcmF0aGVyIHRoYW4gRU1QVFkuIFRoaXMgaXMgYSBicmVha2luZyBjaGFuZ2UsIHdoaWNoIEkgaGF2ZSBkb25lCiAgICAgICBvbmx5IGJlY2F1c2UgdGhlcmUgd2FzIHNvIG11Y2ggZGVtYW5kIGZvciBpdC4gSXQgY2FuIGJlIHVuZG9uZSBvbgogICAgICAgdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSAtLWVtcHR5Ym9nb25zIHN3aXRjaCwgb3IgcHJvZ3JhbW1hdGljYWxseQogICAgICAgd2l0aCBwYXJzZXIuc2V0RmVhdHVyZShQYXJzZXIuZW1wdHlCb2dvbnNGZWF0dXJlLCB0cnVlKS4KICAgICAqIFRoZSBwcm9jZXNzaW5nIG9mIGVudGl0eSByZWZlcmVuY2VzIGluIGF0dHJpYnV0ZSB2YWx1ZXMgaGFzIGZpbmFsbHkKICAgICAgIGJlZW4gZml4ZWQgdG8gZG8gd2hhdCBicm93c2VycyBkby4gVGhhdCBpcywgYSByZWZlcmVuY2UgaXMgb25seQogICAgICAgcmVjb2duaXplZCBpZiBpdCBpcyBwcm9wZXJseSB0ZXJtaW5hdGVkIGJ5IGEgc2VtaWNvbG9uOyBvdGhlcndpc2UKICAgICAgIGl0IGlzIHRyZWF0ZWQgYXMgcGxhaW4gdGV4dC4gVGhpcyBtZWFucyB0aGF0IFVSSXMgbGlrZQogICAgICAgZm9vP2Nkb3duPTMyJmN1cD00MiBhcmUgbm8gbG9uZ2VyIHNlZW4gYXMgY29udGFpbmluZyBhbiBpbnN0YW5jZSBvZgogICAgICAgdGhlIClVIGNoYXJhY3RlciAod2hvc2UgbmFtZSBoYXBwZW5zIHRvIGJlIGN1cCkuCiAgICAgKiBTZXZlcmFsIG5ldyBzd2l0Y2hlcyBoYXZlIGJlZW4gYWRkZWQ6CiAgICAgICAgICArIC0tZG9jdHlwZS1zeXN0ZW0gYW5kIC0tZG9jdHlwZS1wdWJsaWMgZm9yY2UgYSBET0NUWVBFCiAgICAgICAgICAgIGRlY2xhcmF0aW9uIHRvIGJlIG91dHB1dCBhbmQgYWxsb3cgc2V0dGluZyB0aGUgc3lzdGVtIGFuZAogICAgICAgICAgICBwdWJsaWMgaWRlbnRpZmllcnMuCiAgICAgICAgICArIC0tc3RhbmRhbG9uZSBhbmQgLS12ZXJzaW9uIGFsbG93IGNvbnRyb2wgb2YgdGhlIFhNTAogICAgICAgICAgICBkZWNsYXJhdGlvbiB0aGF0IGlzIG91dHB1dC4gKE5vdGUgdGhhdCBUYWdTb3VwJ3MgWE1MIG91dHB1dCBpcwogICAgICAgICAgICBhbHdheXMgdmVyc2lvbiAxLjAsIGV2ZW4gaWYgeW91IHVzZSAtLXZlcnNpb249MS4xLikKICAgICAgICAgICsgLS1ub3Jvb3Rib2dvbnMgY2F1c2VzIHVua25vd24gZWxlbWVudHMgbm90IHRvIGJlIGFsbG93ZWQgYXMKICAgICAgICAgICAgdGhlIGRvY3VtZW50IHJvb3QgZWxlbWVudC4gSW5zdGVhZCwgdGhleSBhcmUgbWFkZSBjaGlsZHJlbiBvZgogICAgICAgICAgICB0aGUgZGVmYXVsdCByb290IGVsZW1lbnQgKHRoZSBodG1sIGVsZW1lbnQgZm9yIEhUTUwpLgogICAgICogVGhlIFRhZ1NvdXAgY29yZSBub3cgc3VwcG9ydHMgY2hhcmFjdGVyIGVudGl0aWVzIHdpdGggdmFsdWVzIGFib3ZlCiAgICAgICBVK0ZGRkYuIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBIVE1MIHNjaGVtYSBub3cgc3VwcG9ydHMgYWxsIDIsMjEwCiAgICAgICBzdGFuZGFyZCBjaGFyYWN0ZXIgZW50aXRpZXMgZnJvbSB0aGUgWzRdMjAwNy0xMi0xNCBkcmFmdCBvZiBYTUwKICAgICAgIEVudGl0eSBEZWZpbml0aW9ucyBmb3IgQ2hhcmFjdGVycywgZXhjZXB0IHRoZSA5NCB3aGljaCByZXF1aXJlIG1vcmUKICAgICAgIHRoYW4gb25lIFVuaWNvZGUgY2hhcmFjdGVyIHRvIHJlcHJlc2VudC4KICAgICAqIFRoZSBTQVggZXZlbnRzIHN0YXJ0UHJlZml4TWFwcGluZyBhbmQgZW5kUHJlZml4TWFwcGluZyBhcmUgbm93CiAgICAgICBiZWluZyByZXBvcnRlZCBmb3IgYWxsIGNhc2VzIG9mIGZvcmVpZ24gZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuCiAgICAgKiBBbGwgYnVncyBhcm91bmQgbmV3bGluZSBwcm9jZXNzaW5nIG9uIFdpbmRvd3Mgc2hvdWxkIG5vdyBiZSBnb25lLgogICAgICogQSBudW1iZXIgb2YgY29udGVudCBtb2RlbHMgaGF2ZSBiZWVuIGxvb3NlbmVkIHRvIGFsbG93IGVsZW1lbnRzIHRvCiAgICAgICBhcHBlYXIgaW4gbmV3IGFuZCBub24tc3RhbmRhcmQgKGJ1dCBjb21tb25seSBmb3VuZCkgcGxhY2VzLiBJbgogICAgICAgcGFydGljdWxhciwgdGFibGVzIGFyZSBub3cgYWxsb3dlZCBpbnNpZGUgcGFyYWdyYXBocywgYWdhaW5zdCB0aGUKICAgICAgIGxldHRlciBvZiB0aGUgVzNDIHNwZWNpZmljYXRpb24uCiAgICAgKiBTaW5jZSB0aGUgc3BhbiBlbGVtZW50IGlzIGludGVuZGVkIGZvciBmaW5lIGNvbnRyb2wgb2YgYXBwZWFyYW5jZQogICAgICAgdXNpbmcgQ1NTLCBpdCBzaG91bGQgbmV2ZXIgaGF2ZSBiZWVuIGEgcmVzdGFydGFibGUgZWxlbWVudC4gVGhpcwogICAgICAgdmVyeSBsb25nLXN0YW5kaW5nIGJ1ZyBoYXMgbm93IGJlZW4gZml4ZWQuCiAgICAgKiBUaGUgZm9sbG93aW5nIG5vbi1zdGFuZGFyZCBlbGVtZW50cyBhcmUgbm93IGF0IGxlYXN0IHBhcnRseQogICAgICAgc3VwcG9ydGVkOiBiZ3NvdW5kLCBibGluaywgY2FudmFzLCBjb21tZW50LCBsaXN0aW5nLCBtYXJxdWVlLCBub2JyLAogICAgICAgcmJjLCByYiwgcnAsIHJ0YywgcnQsIHJ1YnksIHdiciwgeG1wLgogICAgICogSW4gSFRNTCBvdXRwdXQgbW9kZSwgYm9vbGVhbiBhdHRyaWJ1dGVzIGxpa2UgY2hlY2tlZCBhcmUgbm93IG91dHB1dAogICAgICAgYXMgc3VjaCwgcmF0aGVyIHRoYW4gaW4gWE1MIHN0eWxlIGFzIGNoZWNrZWQ9ImNoZWNrZWQiLgogICAgICogUnVucyBvZiA8IGNoYXJhY3RlcnMgc3VjaCBhcyA8PCBhbmQgPDw8IGFyZSBub3cgaGFuZGxlZCBjb3JyZWN0bHkKICAgICAgIGluIHRleHQgcmF0aGVyIHRoYW4gYmVpbmcgdHJhbnNmb3JtZWQgaW50byBleHRyZW1lbHkgYm9ndXMKICAgICAgIHN0YXJ0LXRhZ3MuCgogICBbNV1Eb3dubG9hZCB0aGUgVGFnU291cCAxLjIgamFyIGZpbGUgaGVyZS4gSXQncyBhYm91dCA4N0sgbG9uZy4KICAgWzZdRG93bmxvYWQgdGhlIGZ1bGwgVGFnU291cCAxLjIgc291cmNlIGhlcmUuIElmIHlvdSBkb24ndCBoYXZlIHppcCwKICAgeW91IGNhbiB1c2UgamFyIHRvIHVucGFjayBpdC4KICAgWzddRG93bmxvYWQgdGhlIGN1cnJlbnQgQ0hBTkdFUyBmaWxlIGhlcmUuCgogIFRhZ1NvdXAgMS4xIHJlbGVhc2VkCgogICBUYWdTb3VwIDEuMSBhZGRzIFRhdHUgU2Fsb3JhbnRhJ3MgSkFYUCBzdXBwb3J0IGZvciBUYWdTb3VwLiBUbyB1c2UKICAgVGFnU291cCB3aXRoaW4gdGhlIEpBWFAgZnJhbWV3b3JrICh3aGljaCBpcyBub3Qgc29tZXRoaW5nIEkgbmVjZXNzYXJpbHkKICAgcmVjb21tZW5kLCBidXQgaXQgaXMgcGFydCBvZiB0aGUgSmF2YSBYTUwgcGxhdGZvcm0pLCB5b3UgY2FuIGNyZWF0ZSBhCiAgIFNBWFBhcnNlciBieSBjYWxsaW5nCiAgIG9yZy5jY2lsLmNvd2FuLnRhZ3NvdXAuamF4cC5TQVhQYXJzZXJJbXBsLm5ld0luc3RhbmNlKCkuIFlvdSBjYW4gYWxzbwogICBzZXQgdGhlIHN5c3RlbSBwcm9wZXJ0eSBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5IHRvCiAgIG9yZy5jY2lsLmNvd2FuLnRhZ3NvdXAuamF4cC5TQVhGYWN0b3J5SW1wbCwgYnV0IGJlIGF3YXJlIHRoYXQgZG9pbmcKICAgdGhpcyB3aWxsIGNhdXNlIGFsbCBKQVhQLWJhc2VkIFhNTCBwYXJzaW5nIHRvIGdvIHRocm91Z2ggVGFnU291cCwgd2hpY2gKICAgaXMgYSBCYWQgVGhpbmcgaWYgeW91ciBhcHBsaWNhdGlvbiBhbHNvIHJlYWRzIFhNTCBkb2N1bWVudHMuCgogIFdoYXQgVGFnU291cCBkb2VzCgogICBUYWdTb3VwIGlzIGRlc2lnbmVkIGFzIGEgcGFyc2VyLCBub3QgYSB3aG9sZSBhcHBsaWNhdGlvbjsgaXQgaXNuJ3QKICAgaW50ZW5kZWQgdG8gcGVybWFuZW50bHkgY2xlYW4gdXAgYmFkIEhUTUwsIGFzIFs4XUhUTUwgVGlkeSBkb2VzLCBvbmx5CiAgIHRvIHBhcnNlIGl0IG9uIHRoZSBmbHkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgY29udmVydCBwcmVzZW50YXRpb24KICAgSFRNTCB0byBDU1Mgb3IgYW55dGhpbmcgc2ltaWxhci4gSXQgZG9lcyBndWFyYW50ZWUgd2VsbC1zdHJ1Y3R1cmVkCiAgIHJlc3VsdHM6IHRhZ3Mgd2lsbCB3aW5kIHVwIHByb3Blcmx5IG5lc3RlZCwgZGVmYXVsdCBhdHRyaWJ1dGVzIHdpbGwKICAgYXBwZWFyIGFwcHJvcHJpYXRlbHksIGFuZCBzbyBvbi4KCiAgIFRoZSBzZW1hbnRpY3Mgb2YgVGFnU291cCBhcmUgYXMgZmFyIGFzIHByYWN0aWNhbCB0aG9zZSBvZiBhY3R1YWwgSFRNTAogICBicm93c2Vycy4gSW4gcGFydGljdWxhciwgbmV2ZXIsIG5ldmVyIHdpbGwgaXQgdGhyb3cgYW55IHNvcnQgb2Ygc3ludGF4CiAgIGVycm9yOiB0aGUgVGFnU291cCBtb3R0byBpcyBbOV0iSnVzdCBLZWVwIE9uIFRydWNraW4nIi4gQnV0IHRoZXJlJ3MKICAgbXVjaCwgbXVjaCBtb3JlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpcnN0IHRhZyBpcyBMSSwgaXQgd2lsbCBzdXBwbHkKICAgdGhlIGFwcGxpY2F0aW9uIHdpdGggZW5jbG9zaW5nIEhUTUwsIEJPRFksIGFuZCBVTCB0YWdzLiBXaHkgVUw/IEJlY2F1c2UKICAgdGhhdCdzIHdoYXQgYnJvd3NlcnMgYXNzdW1lIGluIHRoaXMgc2l0dWF0aW9uLiBGb3IgdGhlIHNhbWUgcmVhc29uLAogICBvdmVybGFwcGluZyB0YWdzIGFyZSBjb3JyZWN0bHkgcmVzdGFydGVkIHdoZW5ldmVyIHBvc3NpYmxlOiB0ZXh0IGxpa2U6ClRoaXMgaXMgPEI+Ym9sZCwgPEk+Ym9sZCBpdGFsaWMsIDwvYj5pdGFsaWMsIDwvaT5ub3JtYWwgdGV4dAoKICAgZ2V0cyBjb3JyZWN0bHkgcmV3cml0dGVuIGFzOgpUaGlzIGlzIDxiPmJvbGQsIDxpPmJvbGQgaXRhbGljLCA8L2k+PC9iPjxpPml0YWxpYywgPC9pPm5vcm1hbCB0ZXh0LgoKICAgQnkgaW50ZW50aW9uLCBUYWdTb3VwIGlzIHNtYWxsIGFuZCBmYXN0LiBJdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhlCiAgIGV4aXN0ZW5jZSBvZiBhbnkgZnJhbWV3b3JrIG90aGVyIHRoYW4gU0FYLCBhbmQgc2hvdWxkIGJlIGFibGUgdG8gd29yawogICB3aXRoIGFueSBmcmFtZXdvcmsgdGhhdCBjYW4gYWNjZXB0IFNBWCBwYXJzZXJzLiBJbiBwYXJ0aWN1bGFyLCBbMTBdWE9NCiAgIGlzIGtub3duIHRvIHdvcmsuCgogICBZb3UgY2FuIHJlcGxhY2UgdGhlIGxvdy1sZXZlbCBIVE1MIHNjYW5uZXIgd2l0aCBvbmUgYmFzZWQgb24gU2VhbgogICBNY0dyYXRoJ3MgWzExXVBZWCBmb3JtYXQgKHZlcnkgY2xvc2UgdG8gSmFtZXMgQ2xhcmsncyBFU0lTIGZvcm1hdCkuIFlvdQogICBjYW4gYWxzbyBzdXBwbHkgYW4gQXV0b0RldGVjdG9yIHRoYXQgcGVla3MgYXQgdGhlIGluY29taW5nIGJ5dGUgc3RyZWFtCiAgIGFuZCBndWVzc2VzIGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBpdC4gT3RoZXJ3aXNlLCB0aGUgcGxhdGZvcm0KICAgZGVmYXVsdCBpcyB1c2VkLiBJZiB5b3UgbmVlZCBhbiBhdXRvZGV0ZWN0b3Igb2YgY2hhcmFjdGVyIHNldHMsCiAgIGNvbnNpZGVyIHRyeWluZyB0byBhZGFwdCB0aGUgWzEyXU1vemlsbGEgb25lOyBpZiB5b3Ugc3VjY2VlZCwgbGV0IG1lCiAgIGtub3cuCgogIE5vdGU6IFRhZ1NvdXAgaW4gSmF2YSAxLjEKCiAgIElmIHlvdSBnbyB0aHJvdWdoIHRoZSBUYWdTb3VwIHNvdXJjZSBhbmQgcmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0bwogICBIYXNoTWFwIHdpdGggSGFzaHRhYmxlIGFuZCByZWNvbXBpbGUsIFRhZ1NvdXAgd2lsbCB3b3JrIGZpbmUgaW4gSmF2YQogICAxLjEgVk1zLiBUaGFua3MgdG8gVGhvcmJq+HJuIFZpbm5lIGZvciB0aGlzIGRpc2NvdmVyeS4KCiAgVGhlIFRTYXhvbiBYU0xULWZvci1IVE1MIHByb2Nlc3NvcgoKICAgWzEzXUkgYW0gYWxzbyBkaXN0cmlidXRpbmcgWzE0XVRTYXhvbiwgYSByZXBhY2thZ2luZyBvZiB2ZXJzaW9uIDYuNS41CiAgIG9mIE1pY2hhZWwgS2F5J3MgU2F4b24gWFNMVCB2ZXJzaW9uIDEuMCBpbXBsZW1lbnRhdGlvbiB0aGF0IGluY2x1ZGVzCiAgIFRhZ1NvdXAuIFRTYXhvbiBpcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIFNheG9uLCBhbmQgY2FuIGJlIHVzZWQgdG8KICAgcHJvY2VzcyBlaXRoZXIgSFRNTCBvciBYTUwgZG9jdW1lbnRzIHdpdGggWFNMVCBzdHlsZXNoZWV0cy4KCiAgVGFnU291cCBhcyBhIHN0YW5kLWFsb25lIHByb2dyYW0KCiAgIEl0IGlzIHBvc3NpYmxlIHRvIHJ1biBUYWdTb3VwIGFzIGEgcHJvZ3JhbSBieSBzYXlpbmcgamF2YSAtamFyCiAgIHRhZ3NvdXAtMS4wLjEgW29wdGlvbiAuLi5dIFtmaWxlIC4uLl0uIEZpbGVzIG1lbnRpb25lZCBvbiB0aGUgY29tbWFuZAogICBsaW5lIHdpbGwgYmUgcGFyc2VkIGluZGl2aWR1YWxseS4gSWYgbm8gZmlsZXMgYXJlIHNwZWNpZmllZCwgdGhlCiAgIHN0YW5kYXJkIGlucHV0IGlzIHJlYWQuCgogICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVuZGVyc3Rvb2Q6CgogICAtLWZpbGVzCiAgICAgICAgICBPdXRwdXQgaW50byBpbmRpdmlkdWFsIGZpbGVzLCB3aXRoIGh0bWwgZXh0ZW5zaW9ucyBjaGFuZ2VkIHRvCiAgICAgICAgICB4aHRtbC4gT3RoZXJ3aXNlLCBhbGwgb3V0cHV0IGlzIHNlbnQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KCiAgIC0taHRtbAogICAgICAgICAgT3V0cHV0IGlzIGluIGNsZWFuIEhUTUw6IHRoZSBYTUwgZGVjbGFyYXRpb24gaXMgc3VwcHJlc3NlZCwgYXMKICAgICAgICAgIGFyZSBlbmQtdGFncyBmb3IgdGhlIGtub3duIGVtcHR5IGVsZW1lbnRzLgoKICAgLS1vbWl0LXhtbC1kZWNsYXJhdGlvbgogICAgICAgICAgVGhlIFhNTCBkZWNsYXJhdGlvbiBpcyBzdXBwcmVzc2VkLgoKICAgLS1tZXRob2Q9aHRtbAogICAgICAgICAgRW5kLXRhZ3MgZm9yIHRoZSBrbm93biBlbXB0eSBIVE1MIGVsZW1lbnRzIGFyZSBzdXBwcmVzc2VkLgoKICAgLS1kb2N0eXBlLXN5c3RlbT1zeXN0ZW1pZAogICAgICAgICAgRm9yY2VzIHRoZSBvdXRwdXQgb2YgYSBET0NUWVBFIGRlY2xhcmF0aW9uIHdpdGggdGhlIHNwZWNpZmllZAogICAgICAgICAgc3lzdGVtaWQuCgogICAtLWRvY3R5cGUtcHVibGljPXB1YmxpY2lkCiAgICAgICAgICBGb3JjZXMgdGhlIG91dHB1dCBvZiBhIERPQ1RZUEUgZGVjbGFyYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkCiAgICAgICAgICBwdWJsaWNpZC4KCiAgIC0tdmVyc2lvbj12ZXJzaW9uCiAgICAgICAgICBTZXRzIHRoZSB2ZXJzaW9uIHN0cmluZyBpbiB0aGUgWE1MIGRlY2xhcmF0aW9uLgoKICAgLS1zdGFuZGFsb25lPVt5ZXN8bm9dCiAgICAgICAgICBTZXRzIHRoZSBzdGFuZGFsb25lIGRlY2xhcmF0aW9uIHRvIHllcyBvciBuby4KCiAgIC0tcHl4CiAgICAgICAgICBPdXRwdXQgaXMgaW4gUFlYIGZvcm1hdC4KCiAgIC0tcHl4aW4KICAgICAgICAgIElucHV0IGlzIGluIFBZWG9pZCBmb3JtYXQgKG5lZWQgbm90IGJlIHdlbGwtZm9ybWVkKS4KCiAgIC0tbm9ucwogICAgICAgICAgTmFtZXNwYWNlcyBhcmUgc3VwcHJlc3NlZC4gTm9ybWFsbHksIGFsbCBlbGVtZW50cyBhcmUgaW4gdGhlCiAgICAgICAgICBYSFRNTCAxLnggbmFtZXNwYWNlLCBhbmQgYWxsIGF0dHJpYnV0ZXMgYXJlIGluIG5vIG5hbWVzcGFjZS4KCiAgIC0tbm9ib2dvbnMKICAgICAgICAgIEJvZ29ucyAodW5rbm93biBlbGVtZW50cykgYXJlIHN1cHByZXNzZWQuCgogICAtLW5vZGVmYXVsdHMKICAgICAgICAgIHN1cHByZXNzIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcwoKICAgLS1ub2NvbG9ucwogICAgICAgICAgY2hhbmdlIGV4cGxpY2l0IGNvbG9ucyBpbiBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMgdG8KICAgICAgICAgIHVuZGVyc2NvcmVzCgogICAtLW5vcmVzdGFydAogICAgICAgICAgZG9uJ3QgcmVzdGFydCBhbnkgbm9ybWFsbHkgcmVzdGFydGFibGUgZWxlbWVudHMKCiAgIC0taWdub3JhYmxlCiAgICAgICAgICBvdXRwdXQgd2hpdGVzcGFjZSBpbiBlbGVtZW50cyB3aXRoIGVsZW1lbnQtb25seSBjb250ZW50CgogICAtLWVtcHR5Ym9nb25zCiAgICAgICAgICBCb2dvbnMgYXJlIGdpdmVuIGEgY29udGVudCBtb2RlbCBvZiBFTVBUWSByYXRoZXIgdGhhbiBBTlkuCgogICAtLWFueQogICAgICAgICAgQm9nb25zIGFyZSBnaXZlbiBhIGNvbnRlbnQgbW9kZWwgb2YgQU5ZIHJhdGhlciB0aGFuIEVNUFRZCiAgICAgICAgICAoZGVmYXVsdCkuCgogICAtLW5vcm9vdGJvZ29ucwogICAgICAgICAgRG9uJ3QgYWxsb3cgYm9nb25zIHRvIGJlIHJvb3QgZWxlbWVudHM7IG1ha2UgdGhlbSBzdWJvcmRpbmF0ZSB0bwogICAgICAgICAgdGhlIHJvb3QuCgogICAtLWxleGljYWwKICAgICAgICAgIFBhc3MgdGhyb3VnaCBIVE1MIGNvbW1lbnRzIGFuZCBET0NUWVBFIGRlY2xhcmF0aW9ucy4gSGFzIG5vCiAgICAgICAgICBlZmZlY3Qgd2hlbiBvdXRwdXQgaXMgaW4gUFlYIGZvcm1hdC4KCiAgIC0tcmV1c2UKICAgICAgICAgIFJldXNlIGEgc2luZ2xlIGluc3RhbmNlIG9mIFRhZ1NvdXAgcGFyc2VyIHRocm91Z2hvdXQuIE5vcm1hbGx5LAogICAgICAgICAgYSBuZXcgb25lIGlzIGluc3RhbnRpYXRlZCBmb3IgZWFjaCBpbnB1dCBmaWxlLgoKICAgLS1ub2NkYXRhCiAgICAgICAgICBDaGFuZ2UgdGhlIGNvbnRlbnQgbW9kZWxzIG9mIHRoZSBzY3JpcHQgYW5kIHN0eWxlIGVsZW1lbnRzIHRvCiAgICAgICAgICB0cmVhdCB0aGVtIGFzIG9yZGluYXJ5ICNQQ0RBVEEgKHRleHQtb25seSkgZWxlbWVudHMsIGFzIGluCiAgICAgICAgICBYSFRNTCwgcmF0aGVyIHRoYW4gd2l0aCB0aGUgc3BlY2lhbCBDREFUQSBjb250ZW50IG1vZGVsLgoKICAgLS1lbmNvZGluZz1lbmNvZGluZwogICAgICAgICAgU3BlY2lmeSB0aGUgaW5wdXQgZW5jb2RpbmcuIFRoZSBkZWZhdWx0IGlzIHRoZSBKYXZhIHBsYXRmb3JtCiAgICAgICAgICBkZWZhdWx0LgoKICAgLS1vdXRwdXQtZW5jb2Rpbmc9ZW5jb2RpbmcKICAgICAgICAgIFNwZWNpZnkgdGhlIG91dHB1dCBlbmNvZGluZy4gVGhlIGRlZmF1bHQgaXMgdGhlIEphdmEgcGxhdGZvcm0KICAgICAgICAgIGRlZmF1bHQuCgogICAtLWhlbHAKICAgICAgICAgIFByaW50IGhlbHAuCgogICAtLXZlcnNpb24KICAgICAgICAgIFByaW50IHRoZSB2ZXJzaW9uIG51bWJlci4KCiAgU0FYIGZlYXR1cmVzIGFuZCBwcm9wZXJ0aWVzCgogICBUYWdTb3VwIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgU0FYIGZlYXR1cmVzIGluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZAogICBvbmVzOgoKICAgaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9pZ25vcmUtYm9nb25zCiAgICAgICAgICBBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgaWdub3JlIHVua25vd24KICAgICAgICAgIGVsZW1lbnRzLgoKICAgaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9ib2dvbnMtZW1wdHkKICAgICAgICAgIEEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCBnaXZlIHVua25vd24KICAgICAgICAgIGVsZW1lbnRzIGEgY29udGVudCBtb2RlbCBvZiBFTVBUWTsgYSB2YWx1ZSBvZiAiZmFsc2UiLCBhIGNvbnRlbnQKICAgICAgICAgIG1vZGVsIG9mIEFOWS4KCiAgIGh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvZmVhdHVyZXMvcm9vdC1ib2dvbnMKICAgICAgICAgIEEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCBhbGxvdyB1bmtub3duCiAgICAgICAgICBlbGVtZW50cyB0byBiZSB0aGUgcm9vdCBvZiB0aGUgb3V0cHV0IGRvY3VtZW50LgoKICAgaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9kZWZhdWx0LWF0dHJpYnV0ZXMKICAgICAgICAgIEEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCByZXR1cm4gZGVmYXVsdAogICAgICAgICAgYXR0cmlidXRlIHZhbHVlcyBmb3IgbWlzc2luZyBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBkZWZhdWx0CiAgICAgICAgICB2YWx1ZXMuCgogICBodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL3RyYW5zbGF0ZS1jb2xvbnMKICAgICAgICAgIEEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCB0cmFuc2xhdGUKICAgICAgICAgIGNvbG9ucyBpbnRvIHVuZGVyc2NvcmVzIGluIG5hbWVzLgoKICAgaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9yZXN0YXJ0LWVsZW1lbnRzCiAgICAgICAgICBBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgYXR0ZW1wdCB0bwogICAgICAgICAgcmVzdGFydCB0aGUgcmVzdGFydGFibGUgZWxlbWVudHMuCgogICBodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL2lnbm9yYWJsZS13aGl0ZXNwYWNlCiAgICAgICAgICBBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgdHJhbnNtaXQKICAgICAgICAgIHdoaXRlc3BhY2UgaW4gZWxlbWVudC1vbmx5IGNvbnRlbnQgdmlhIHRoZSBTQVgKICAgICAgICAgIGlnbm9yYWJsZVdoaXRlc3BhY2UgY2FsbGJhY2suIE5vcm1hbGx5IHRoaXMgaXMgbm90IGRvbmUsIGJlY2F1c2UKICAgICAgICAgIEhUTUwgaXMgYW4gU0dNTCBhcHBsaWNhdGlvbiBhbmQgU0dNTCBzdXBwcmVzc2VzIHN1Y2ggd2hpdGVzcGFjZS4KCiAgIGh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvZmVhdHVyZXMvY2RhdGEtZWxlbWVudHMKICAgICAgICAgIEEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCBwcm9jZXNzIHRoZQogICAgICAgICAgc2NyaXB0IGFuZCBzdHlsZSBlbGVtZW50cyAob3IgYW55IGVsZW1lbnRzIHdpdGggdHlwZT0nY2RhdGEnIGluCiAgICAgICAgICB0aGUgVFNTTCBzY2hlbWEpIGFzIFNHTUwgQ0RBVEEgZWxlbWVudHMgKHRoYXQgaXMsIG5vIG1hcmt1cCBpcwogICAgICAgICAgcmVjb2duaXplZCBleGNlcHQgdGhlIG1hdGNoaW5nIGVuZC10YWcpLgoKICAgVGFnU291cCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIFNBWCBwcm9wZXJ0aWVzIGluIGFkZGl0aW9uIHRvIHRoZQogICBzdGFuZGFyZCBvbmVzOgoKICAgaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9wcm9wZXJ0aWVzL3NjYW5uZXIKICAgICAgICAgIFNwZWNpZmllcyB0aGUgU2Nhbm5lciBvYmplY3QgdGhpcyBwYXJzZXIgdXNlcy4KCiAgIGh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvcHJvcGVydGllcy9zY2hlbWEKICAgICAgICAgIFNwZWNpZmllcyB0aGUgU2NoZW1hIG9iamVjdCB0aGlzIHBhcnNlciB1c2VzLgoKICAgaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9wcm9wZXJ0aWVzL2F1dG8tZGV0ZWN0b3IKICAgICAgICAgIFNwZWNpZmllcyB0aGUgQXV0b0RldGVjdG9yIChmb3IgZW5jb2RpbmcgZGV0ZWN0aW9uKSB0aGlzIHBhcnNlcgogICAgICAgICAgdXNlcy4KCiAgTW9yZSBpbmZvcm1hdGlvbgoKICAgSSBnYXZlIGEgcHJlc2VudGF0aW9uIChhIG5vY3R1cm5lLCBzbyBpdCdzIG5vdCBvbiB0aGUgc2NoZWR1bGUpIGF0CiAgIFsxNV1FeHRyZW1lIE1hcmt1cCBMYW5ndWFnZXMgMjAwNCBhYm91dCBUYWdTb3VwLCB1cGRhdGVkIGZyb20gdGhlIG9uZQogICBwcmVzZW50ZWQgaW4gMjAwMiBhdCB0aGUgTmV3IFlvcmsgQ2l0eSBYTUwgU0lHIGFuZCBhdCBYTUwgMjAwMi4gVGhpcyBpcwogICB0aGUgbWFpbiBoaWdoLWxldmVsIGRvY3VtZW50YXRpb24gYWJvdXQgaG93IFRhZ1NvdXAgd29ya3MuIEZvcm1hdHM6CiAgIFsxNl1PcGVuRG9jdW1lbnQgWzE3XVBvd2VycG9pbnQgWzE4XVBERi4KCiAgIEkgYWxzbyBoYWQgcGVvcGxlIGFkZCBbMTldImV2aWwiIEhUTUwgdG8gYSBsYXJnZSBwb3N0ZXIgc28gdGhhdCBJIGNvdWxkCiAgIFsyMF1jbGVhbiBpdCB1cDsgVmlldyBTb3VyY2UgaXMgcHJvYmFibHkgbW9yZSB1c2VmdWwgdGhhbiBvcmRpbmFyeQogICBicm93c2luZy4gVGhlIG9yaWdpbmFsIGluc3RydWN0aW9ucyB3ZXJlOgoKICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBFIERFIEJBTElTRVMgKEJFIEVWSUwpIQogICBFY3JpdGV6IHVuZSBiYWxpc2Ugb3V2cmFudGUgKHNhbnMgYXR0cmlidXRzKQogICBvdSBmZXJtYW50ZSBIVE1MIGljaSwgcy52LnAuCgogICBUaGVyZSBpcyBhIFsyMV10YWdzb3VwLWZyaWVuZHMgbWFpbGluZyBsaXN0IGhvc3RlZCBhdCBbMjJdWWFob28gR3JvdXBzLgogICBZb3UgY2FuIFsyM11qb2luIHZpYSB0aGUgV2ViLCBvciBieSBzZW5kaW5nIGEgYmxhbmsgZW1haWwgdG8KICAgWzI0XXRhZ3NvdXAtZnJpZW5kcy1zdWJzY3JpYmVAeWFob29ncm91cHMuY29tLiBUaGUgWzI1XWFyY2hpdmVzIGFyZQogICBvcGVuIHRvIGFsbC4KCiAgIE9ubGluZSBUYWdTb3VwIHByb2Nlc3NpbmcgZm9yIHB1YmxpY2x5IGFjY2Vzc2libGUgSFRNTCBkb2N1bWVudHMgaXMgbm93CiAgIFsyNl1hdmFpbGFibGUgY291cnRlc3kgb2YgTGVpZ2ggRG9kZHMuCgpSZWZlcmVuY2VzCgogICAxLiBodHRwOi8vb3JlZ29uc3RhdGUuZWR1L2luc3RydWN0L3BobDMwMi90ZXh0cy9ob2JiZXMvbGV2aWF0aGFuLWMuaHRtbAogICAyLiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYXBhY2hlMi4wLnBocAogICAzLiBodHRwOi8vcHJkb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3NheG9uL3NheG9uNi01LTUuemlwCiAgIDQuIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDcvV0QteG1sLWVudGl0eS1uYW1lcy0yMDA3MTIxNAogICA1LiBodHRwOi8vaG9tZS5jY2lsLm9yZy9+Y293YW4vWE1ML3RhZ3NvdXAvdGFnc291cC0xLjIuamFyCiAgIDYuIGh0dHA6Ly9ob21lLmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC90YWdzb3VwLTEuMi1zcmMuemlwCiAgIDcuIGh0dHA6Ly9ob21lLmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC9DSEFOR0VTCiAgIDguIGh0dHA6Ly90aWR5LnNmLm5ldC8KICAgOS4gaHR0cDovL3d3dy5jcnVtYm11c2V1bS5jb20vdHJ1Y2tpbi5odG1sCiAgMTAuIGh0dHA6Ly93d3cuY2FmZWNvbmxlY2hlLm9yZy9YT00KICAxMS4gaHR0cDovL2dub3Npcy5jeC9wdWJsaXNoL3Byb2dyYW1taW5nL3htbF9tYXR0ZXJzXzE3Lmh0bWwKICAxMi4gaHR0cDovL2pjaGFyZGV0LnNvdXJjZWZvcmdlLm5ldC8KICAxMy4gaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4KICAxNC4gaHR0cDovL2hvbWUuY2NpbC5vcmcvfmNvd2FuL1hNTC90YWdzb3VwL3RzYXhvbgogIDE1LiBodHRwOi8vd3d3LmV4dHJlbWVtYXJrdXAuY29tL2V4dHJlbWUvMjAwNAogIDE2LiBodHRwOi8vaG9tZS5jY2lsLm9yZy9+Y293YW4vWE1ML3RhZ3NvdXAvdGFnc291cC5vZHAKICAxNy4gaHR0cDovL2hvbWUuY2NpbC5vcmcvfmNvd2FuL1hNTC90YWdzb3VwL3RhZ3NvdXAucHB0CiAgMTguIGh0dHA6Ly9ob21lLmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC90YWdzb3VwLnBkZgogIDE5LiBodHRwOi8vaG9tZS5jY2lsLm9yZy9+Y293YW4vWE1ML3RhZ3NvdXAvZXh0cmVtZS5odG1sCiAgMjAuIGh0dHA6Ly9ob21lLmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC9leHRyZW1lLnhodG1sCiAgMjEuIGh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3RhZ3NvdXAtZnJpZW5kcwogIDIyLiBodHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS8KICAyMy4gaHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvdGFnc291cC1mcmllbmRzL2pvaW4KICAyNC4gbWFpbHRvOnRhZ3NvdXAtZnJpZW5kcy1zdWJzY3JpYmVAeWFob29ncm91cHMuY29tCiAgMjUuIGh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3RhZ3NvdXAtZnJpZW5kcy9tZXNzYWdlcwogIDI2LiBodHRwOi8veG1sYXJteWtuaWZlLm9yZy9kb2NzL3hodG1sL3RhZ3NvdXAvCg==