TGludXgqIEJhc2UgRHJpdmVyIGZvciBJbnRlbChSKSBFdGhlcm5ldCBOZXR3b3JrIENvbm5lY3Rpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk9jdG9iZXIgNSwgMjAxMgoKQ29udGVudHMKPT09PT09PT0KCi0gSW4gVGhpcyBSZWxlYXNlCi0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCi0gQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgotIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCi0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwotIEtub3duIElzc3Vlcy9Ucm91Ymxlc2hvb3RpbmcKLSBTdXBwb3J0CgpJbiBUaGlzIFJlbGVhc2UKPT09PT09PT09PT09PT09PQoKVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgaWdiIExpbnV4KiBCYXNlIERyaXZlciBmb3IgSW50ZWwgRXRoZXJuZXQgTmV0d29yayAKQ29ubmVjdGlvbi4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSAyLjQueCwgMi42LngsIGFuZCAzLngga2VybmVscy4KClRoaXMgZHJpdmVyIGlzIG9ubHkgc3VwcG9ydGVkIGFzIGEgbG9hZGFibGUgbW9kdWxlIGF0IHRoaXMgdGltZS4gIEludGVsIGlzCm5vdCBzdXBwbHlpbmcgcGF0Y2hlcyBhZ2FpbnN0IHRoZSBrZXJuZWwgc291cmNlIHRvIGFsbG93IGZvciBzdGF0aWMgbGlua2luZwpvZiB0aGUgZHJpdmVyLiAgRm9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgcmVmZXIgdG8gdGhlCmRvY3VtZW50YXRpb24gc3VwcGxpZWQgd2l0aCB5b3VyIEludGVsIEdpZ2FiaXQgYWRhcHRlci4gIEFsbCBoYXJkd2FyZQpyZXF1aXJlbWVudHMgbGlzdGVkIGFwcGx5IHRvIHVzZSB3aXRoIExpbnV4LgoKVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgbm93IGF2YWlsYWJsZSBpbiBzdXBwb3J0ZWQga2VybmVsczoKIC0gTmF0aXZlIFZMQU5zCiAtIENoYW5uZWwgQm9uZGluZyAodGVhbWluZykKIC0gU05NUAoKQ2hhbm5lbCBCb25kaW5nIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlOgovRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CgpUaGUgaWdiIGRyaXZlciBzdXBwb3J0cyBJRUVFIDE1ODggdGltZSBzdGFtcGluZyBmb3Iga2VybmVscyAyLjYuMzAgYW5kIGFib3ZlLiAgCgpUaGUgZHJpdmVyIGluZm9ybWF0aW9uIHByZXZpb3VzbHkgZGlzcGxheWVkIGluIHRoZSAvcHJvYyBmaWxlc3lzdGVtIGlzIG5vdApzdXBwb3J0ZWQgaW4gdGhpcyByZWxlYXNlLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgZXRodG9vbCAodmVyc2lvbiAxLjYKb3IgbGF0ZXIpLCBsc3BjaSwgYW5kIGlmY29uZmlnIHRvIG9idGFpbiB0aGUgc2FtZSBpbmZvcm1hdGlvbi4KCkluc3RydWN0aW9ucyBvbiB1cGRhdGluZyBldGh0b29sIGNhbiBiZSBmb3VuZCBpbiB0aGUgc2VjdGlvbiAiQWRkaXRpb25hbApDb25maWd1cmF0aW9ucyIgbGF0ZXIgaW4gdGhpcyBkb2N1bWVudC4KCklkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgo9PT09PT09PT09PT09PT09PT09PT09PT0KCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYKRHJpdmVyIElEIEd1aWRlIGF0OgoKICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L2dvL25ldHdvcmsvYWRhcHRlci9pZGd1aWRlLmh0bQoKRm9yIHRoZSBsYXRlc3QgSW50ZWwgbmV0d29yayBkcml2ZXJzIGZvciBMaW51eCwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZwp3ZWJzaXRlLiAgU2VsZWN0IHRoZSBsaW5rIGZvciB5b3VyIGFkYXB0ZXIuCgogICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvZ28vbmV0d29yay9hZGFwdGVyL2hvbWUuaHRtCgpCdWlsZGluZyBhbmQgSW5zdGFsbGF0aW9uCj09PT09PT09PT09PT09PT09PT09PT09PT0KClRvIGJ1aWxkIGEgYmluYXJ5IFJQTSogcGFja2FnZSBvZiB0aGlzIGRyaXZlciwgcnVuICdycG1idWlsZCAtdGIKPGZpbGVuYW1lLnRhci5nej4nLiAgUmVwbGFjZSA8ZmlsZW5hbWUudGFyLmd6PiB3aXRoIHRoZSBzcGVjaWZpYyBmaWxlbmFtZQpvZiB0aGUgZHJpdmVyLgoKTk9URTogRm9yIHRoZSBidWlsZCB0byB3b3JrIHByb3Blcmx5LCB0aGUgY3VycmVudGx5IHJ1bm5pbmcga2VybmVsIE1VU1QKICAgICAgbWF0Y2ggdGhlIHZlcnNpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGluc3RhbGxlZCBrZXJuZWwgc291cmNlcy4KICAgICAgSWYgeW91IGhhdmUganVzdCByZWNvbXBpbGVkIHRoZSBrZXJuZWwgcmVib290IHRoZSBzeXN0ZW0gbm93LgoKICAgICAgUlBNIGZ1bmN0aW9uYWxpdHkgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgaW4gUmVkIEhhdCBkaXN0cmlidXRpb25zLgoKMS4gTW92ZSB0aGUgYmFzZSBkcml2ZXIgdGFyIGZpbGUgdG8gdGhlIGRpcmVjdG9yeSBvZiB5b3VyIGNob2ljZS4gIEZvcgogICBleGFtcGxlLCB1c2UgL2hvbWUvdXNlcm5hbWUvaWdiIG9yIC91c3IvbG9jYWwvc3JjL2lnYi4KCjIuIFVudGFyL3VuemlwIGFyY2hpdmU6CgogICAgIHRhciB6eGYgaWdiLXgueC54LnRhci5negoKMy4gQ2hhbmdlIHRvIHRoZSBkcml2ZXIgc3JjIGRpcmVjdG9yeToKCiAgICAgY2QgaWdiLXgueC54L3NyYy8KCjQuIENvbXBpbGUgdGhlIGRyaXZlciBtb2R1bGU6CgogICAgIG1ha2UgaW5zdGFsbAoKICAgVGhlIGJpbmFyeSB3aWxsIGJlIGluc3RhbGxlZCBhczoKCiAgICAgL2xpYi9tb2R1bGVzLzxLRVJORUwgVkVSU0lPTj4va2VybmVsL2RyaXZlcnMvbmV0L2lnYi9pZ2IuW2tdbwoKICAgVGhlIGluc3RhbGwgbG9jYXRpb25zIGxpc3RlZCBhYm92ZSBhcmUgdGhlIGRlZmF1bHQgbG9jYXRpb25zLiAgVGhleQogICBtaWdodCBub3QgYmUgY29ycmVjdCBmb3IgY2VydGFpbiBMaW51eCBkaXN0cmlidXRpb25zLiAgCgo1LiBMb2FkIHRoZSBtb2R1bGUgdXNpbmcgZWl0aGVyIHRoZSBpbnNtb2Qgb3IgbW9kcHJvYmUgY29tbWFuZDoKCiAgICAgbW9kcHJvYmUgaWdiCgogICAgIGluc21vZCBpZ2IKCiAgIE5vdGUgdGhhdCBmb3IgMi42IGtlcm5lbHMgdGhlIGluc21vZCBjb21tYW5kIGNhbiBiZSB1c2VkIGlmIHRoZSBmdWxsCiAgIHBhdGggdG8gdGhlIGRyaXZlciBtb2R1bGUgaXMgc3BlY2lmaWVkLiAgRm9yIGV4YW1wbGU6CgogICAgIGluc21vZCAvbGliL21vZHVsZXMvPEtFUk5FTCBWRVJTSU9OPi9rZXJuZWwvZHJpdmVycy9uZXQvaWdiL2lnYi5rbwoKICAgV2l0aCAyLjYgYmFzZWQga2VybmVscyBhbHNvIG1ha2Ugc3VyZSB0aGF0IG9sZGVyIGlnYiBkcml2ZXJzIGFyZQogICByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCwgYmVmb3JlIGxvYWRpbmcgdGhlIG5ldyBtb2R1bGU6CgogICAgIHJtbW9kIGlnYjsgbW9kcHJvYmUgaWdiCgo2LiBBc3NpZ24gYW4gSVAgYWRkcmVzcyB0byB0aGUgaW50ZXJmYWNlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcsIHdoZXJlCiAgIHggaXMgdGhlIGludGVyZmFjZSBudW1iZXI6CgogICAgIGlmY29uZmlnIGV0aHggPElQX2FkZHJlc3M+Cgo3LiBWZXJpZnkgdGhhdCB0aGUgaW50ZXJmYWNlIHdvcmtzLiAgRW50ZXIgdGhlIGZvbGxvd2luZywgd2hlcmUgPElQX2FkZHJlc3M+CiAgIGlzIHRoZSBJUCBhZGRyZXNzIGZvciBhbm90aGVyIG1hY2hpbmUgb24gdGhlIHNhbWUgc3VibmV0IGFzIHRoZQogICBpbnRlcmZhY2UgdGhhdCBpcyBiZWluZyB0ZXN0ZWQ6CgogICAgIHBpbmcgIDxJUF9hZGRyZXNzPgoKVFJPVUJMRVNIT09USU5HOiBTb21lIHN5c3RlbXMgaGF2ZSB0cm91YmxlIHN1cHBvcnRpbmcgTVNJIGFuZC9vciBNU0ktWCAKaW50ZXJydXB0cy4gSWYgeW91IGJlbGlldmUgeW91ciBzeXN0ZW0gbmVlZHMgdG8gZGlzYWJsZSB0aGlzIHN0eWxlIG9mIAppbnRlcnJ1cHQsIHRoZSBkcml2ZXIgY2FuIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgd2l0aCB0aGUgY29tbWFuZDoKCiAgICAgbWFrZSBDRkxBR1NfRVhUUkE9LURESVNBQkxFX1BDSV9NU0kgaW5zdGFsbAoKTm9ybWFsbHkgdGhlIGRyaXZlciB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCBldmVyeSB0d28gc2Vjb25kcywgc28gaWYgCnlvdSBjYW4gc2VlIHRoYXQgeW91J3JlIG5vIGxvbmdlciBnZXR0aW5nIGludGVycnVwdHMgaW4gY2F0IC9wcm9jL2ludGVycnVwdHMKZm9yIHRoZSBldGhYIGlnYiBkZXZpY2UsIHRoZW4gdGhpcyB3b3JrYXJvdW5kIG1heSBiZSBuZWNlc3NhcnkuCgpUbyBidWlsZCBpZ2IgZHJpdmVyIHdpdGggRENBOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApJZiB5b3VyIGtlcm5lbCBzdXBwb3J0cyBEQ0EsIHRoZSBkcml2ZXIgd2lsbCBidWlsZCBieSBkZWZhdWx0IHdpdGggRENBIGVuYWJsZWQuCgpDb21tYW5kIExpbmUgUGFyYW1ldGVycwo9PT09PT09PT09PT09PT09PT09PT09PQoKSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgdGhlICBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgdXNlZCBieSBlbnRlcmluZyB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgbW9kcHJvYmUgY29tbWFuZCB1c2luZyB0aGlzIHN5bnRheDoKCiAgICAgbW9kcHJvYmUgaWdiIFs8b3B0aW9uPj08VkFMMT4sPFZBTDI+LC4uLl0KClRoZXJlIG5lZWRzIHRvIGJlIGEgPFZBTCM+IGZvciBlYWNoIG5ldHdvcmsgcG9ydCBpbiB0aGUgc3lzdGVtIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4gVGhlIHZhbHVlcyB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBpbnN0YW5jZSwgaW4gZnVuY3Rpb24gb3JkZXIuIAoKRm9yIGV4YW1wbGU6CgogICAgIG1vZHByb2JlIGlnYiBJbnRlcnJ1cHRUaHJvdHRsZVJhdGU9MTYwMDAsMTYwMDAKCkluIHRoaXMgY2FzZSwgdGhlcmUgYXJlIHR3byBuZXR3b3JrIHBvcnRzIHN1cHBvcnRlZCBieSBpZ2IgaW4gdGhlIHN5c3RlbS4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyIGlzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc2V0dGluZywgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KCgpOT1RFUzogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBdXRvTmVnLCBEdXBsZXgsIGFuZCBTcGVlZCBwYXJhbWV0ZXJzLCAKICAgICAgICBzZWUgdGhlIFNwZWVkIGFuZCBEdXBsZXggQ29uZmlndXJhdGlvbiBzZWN0aW9uIGluIHRoaXMgZG9jdW1lbnQuCiAgICAgICAgCiAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSwKICAgICAgICBwYXJhbWV0ZXIsIHNlZSB0aGUgYXBwbGljYXRpb24gbm90ZSBhdDoKICAgICAgICBodHRwOi8vd3d3LmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9hcHBsbm90cy9hcDQ1MC5odG0KCiAgICAgICAgQSBkZXNjcmlwdG9yIGRlc2NyaWJlcyBhIGRhdGEgYnVmZmVyIGFuZCBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8KICAgICAgICB0aGUgZGF0YSBidWZmZXIuICBUaGlzIGluZm9ybWF0aW9uIGlzIGFjY2Vzc2VkIGJ5IHRoZSBoYXJkd2FyZS4KCkludGVycnVwdFRocm90dGxlUmF0ZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KVmFsaWQgUmFuZ2U6ICAgMCwxLDMsMTAwLTEwMDAwMCAoMD1vZmYsIDE9ZHluYW1pYywgMz1keW5hbWljIGNvbnNlcnZhdGl2ZSkKRGVmYXVsdCBWYWx1ZTogMwoKVGhlIGRyaXZlciBjYW4gbGltaXQgdGhlIGFtb3VudCBvZiBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgdGhhdCB0aGUgYWRhcHRlcgp3aWxsIGdlbmVyYXRlIGZvciBpbmNvbWluZyBwYWNrZXRzLiBJdCBkb2VzIHRoaXMgYnkgd3JpdGluZyBhIHZhbHVlIHRvIHRoZSAKYWRhcHRlciB0aGF0IGlzIGJhc2VkIG9uIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBpbnRlcnJ1cHRzIHRoYXQgdGhlIGFkYXB0ZXIgCndpbGwgZ2VuZXJhdGUgcGVyIHNlY29uZC4KClNldHRpbmcgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIGEgdmFsdWUgZ3JlYXRlciBvciBlcXVhbCB0byAxMDAKd2lsbCBwcm9ncmFtIHRoZSBhZGFwdGVyIHRvIHNlbmQgb3V0IGEgbWF4aW11bSBvZiB0aGF0IG1hbnkgaW50ZXJydXB0cwpwZXIgc2Vjb25kLCBldmVuIGlmIG1vcmUgcGFja2V0cyBoYXZlIGNvbWUgaW4uIFRoaXMgcmVkdWNlcyBpbnRlcnJ1cHQKbG9hZCBvbiB0aGUgc3lzdGVtIGFuZCBjYW4gbG93ZXIgQ1BVIHV0aWxpemF0aW9uIHVuZGVyIGhlYXZ5IGxvYWQsCmJ1dCB3aWxsIGluY3JlYXNlIGxhdGVuY3kgYXMgcGFja2V0cyBhcmUgbm90IHByb2Nlc3NlZCBhcyBxdWlja2x5LgoKVGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHRoZSBkcml2ZXIgcHJldmlvdXNseSBhc3N1bWVkIGEgc3RhdGljIApJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdmFsdWUgb2YgODAwMCwgcHJvdmlkaW5nIGEgZ29vZCBmYWxsYmFjayB2YWx1ZSBmb3IgCmFsbCB0cmFmZmljIHR5cGVzLGJ1dCBsYWNraW5nIGluIHNtYWxsIHBhY2tldCBwZXJmb3JtYW5jZSBhbmQgbGF0ZW5jeS4gClRoZSBoYXJkd2FyZSBjYW4gaGFuZGxlIG1hbnkgbW9yZSBzbWFsbCBwYWNrZXRzIHBlciBzZWNvbmQgaG93ZXZlciwgYW5kIApmb3IgdGhpcyByZWFzb24gYW4gYWRhcHRpdmUgaW50ZXJydXB0IG1vZGVyYXRpb24gYWxnb3JpdGhtIHdhcyBpbXBsZW1lbnRlZC4KClRoZSBkcml2ZXIgaGFzIHR3byBhZGFwdGl2ZSBtb2RlcyAoc2V0dGluZyAxIG9yIDMpIGluIHdoaWNoIGl0IGR5bmFtaWNhbGx5CmFkanVzdHMgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB2YWx1ZSBiYXNlZCBvbiB0aGUgdHJhZmZpYyB0aGF0IGl0IHJlY2VpdmVzLgpBZnRlciBkZXRlcm1pbmluZyB0aGUgdHlwZSBvZiBpbmNvbWluZyB0cmFmZmljIGluIHRoZSBsYXN0IHRpbWVmcmFtZSwgaXQgd2lsbAphZGp1c3QgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBmb3IgdGhhdCB0cmFmZmljLgoKVGhlIGFsZ29yaXRobSBjbGFzc2lmaWVzIHRoZSBpbmNvbWluZyB0cmFmZmljIGV2ZXJ5IGludGVydmFsIGludG8KY2xhc3Nlcy4gIE9uY2UgdGhlIGNsYXNzIGlzIGRldGVybWluZWQsIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdmFsdWUgaXMgCmFkanVzdGVkIHRvIHN1aXQgdGhhdCB0cmFmZmljIHR5cGUgdGhlIGJlc3QuIFRoZXJlIGFyZSB0aHJlZSBjbGFzc2VzIGRlZmluZWQ6IAoiQnVsayB0cmFmZmljIiwgZm9yIGxhcmdlIGFtb3VudHMgb2YgcGFja2V0cyBvZiBub3JtYWwgc2l6ZTsgIkxvdyBsYXRlbmN5IiwKZm9yIHNtYWxsIGFtb3VudHMgb2YgdHJhZmZpYyBhbmQvb3IgYSBzaWduaWZpY2FudCBwZXJjZW50YWdlIG9mIHNtYWxsCnBhY2tldHM7IGFuZCAiTG93ZXN0IGxhdGVuY3kiLCBmb3IgYWxtb3N0IGNvbXBsZXRlbHkgc21hbGwgcGFja2V0cyBvciAKbWluaW1hbCB0cmFmZmljLgoKSW4gZHluYW1pYyBjb25zZXJ2YXRpdmUgbW9kZSwgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB2YWx1ZSBpcyBzZXQgdG8gNDAwMCAKZm9yIHRyYWZmaWMgdGhhdCBmYWxscyBpbiBjbGFzcyAiQnVsayB0cmFmZmljIi4gSWYgdHJhZmZpYyBmYWxscyBpbiB0aGUgIkxvdyAKbGF0ZW5jeSIgb3IgIkxvd2VzdCBsYXRlbmN5IiBjbGFzcywgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBpbmNyZWFzZWQgCnN0ZXB3aXNlIHRvIDIwMDAwLiBUaGlzIGRlZmF1bHQgbW9kZSBpcyBzdWl0YWJsZSBmb3IgbW9zdCBhcHBsaWNhdGlvbnMuCgpGb3Igc2l0dWF0aW9ucyB3aGVyZSBsb3cgbGF0ZW5jeSBpcyB2aXRhbCBzdWNoIGFzIGNsdXN0ZXIgb3IKZ3JpZCBjb21wdXRpbmcsIHRoZSBhbGdvcml0aG0gY2FuIHJlZHVjZSBsYXRlbmN5IGV2ZW4gbW9yZSB3aGVuCkludGVycnVwdFRocm90dGxlUmF0ZSBpcyBzZXQgdG8gbW9kZSAxLiBJbiB0aGlzIG1vZGUsIHdoaWNoIG9wZXJhdGVzCnRoZSBzYW1lIGFzIG1vZGUgMywgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB3aWxsIGJlIGluY3JlYXNlZCBzdGVwd2lzZSB0byAKNzAwMDAgZm9yIHRyYWZmaWMgaW4gY2xhc3MgIkxvd2VzdCBsYXRlbmN5Ii4KClNldHRpbmcgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIDAgdHVybnMgb2ZmIGFueSBpbnRlcnJ1cHQgbW9kZXJhdGlvbgphbmQgbWF5IGltcHJvdmUgc21hbGwgcGFja2V0IGxhdGVuY3ksIGJ1dCBpcyBnZW5lcmFsbHkgbm90IHN1aXRhYmxlCmZvciBidWxrIHRocm91Z2hwdXQgdHJhZmZpYy4KCk5PVEU6ICBEeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIGlzIG9ubHkgYXBwbGljYWJsZSB0byBhZGFwdGVycwogICAgICAgb3BlcmF0aW5nIGluIE1TSSBvciBMZWdhY3kgaW50ZXJydXB0IG1vZGUsIHVzaW5nIGEgc2luZ2xlCiAgICAgICByZWNlaXZlIHF1ZXVlLgoKTk9URTogIFdoZW4gaWdiIGlzIGxvYWRlZCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgYW5kIG11bHRpcGxlIGFkYXB0ZXJzCiAgICAgICBhcmUgaW4gdXNlIHNpbXVsdGFuZW91c2x5LCB0aGUgQ1BVIHV0aWxpemF0aW9uIG1heSBpbmNyZWFzZSBub24tCiAgICAgICBsaW5lYXJseS4gIEluIG9yZGVyIHRvIGxpbWl0IHRoZSBDUFUgdXRpbGl6YXRpb24gd2l0aG91dCBpbXBhY3RpbmcKICAgICAgIHRoZSBvdmVyYWxsIHRocm91Z2hwdXQsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBsb2FkIHRoZSBkcml2ZXIgYXMKICAgICAgIGZvbGxvd3M6CgogICAgICAgICAgIG1vZHByb2JlIGlnYiBJbnRlcnJ1cHRUaHJvdHRsZVJhdGU9MzAwMCwzMDAwLDMwMDAKCiAgICAgICBUaGlzIHNldHMgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB0byAzMDAwIGludGVycnVwdHMvc2VjIGZvcgogICAgICAgdGhlIGZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBpbnN0YW5jZXMgb2YgdGhlIGRyaXZlci4gIFRoZSByYW5nZQogICAgICAgb2YgMjAwMCB0byAzMDAwIGludGVycnVwdHMgcGVyIHNlY29uZCB3b3JrcyBvbiBhIG1ham9yaXR5IG9mCiAgICAgICBzeXN0ZW1zIGFuZCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCB0aGUgb3B0aW1hbCB2YWx1ZSB3aWxsCiAgICAgICBiZSBwbGF0Zm9ybS1zcGVjaWZpYy4gIElmIENQVSB1dGlsaXphdGlvbiBpcyBub3QgYSBjb25jZXJuLCB1c2UKICAgICAgIGRlZmF1bHQgZHJpdmVyIHNldHRpbmdzLgoKTExJIChMb3cgTGF0ZW5jeSBJbnRlcnJ1cHRzKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIApMTEkgYWxsb3dzIGZvciBpbW1lZGlhdGUgZ2VuZXJhdGlvbiBvZiBhbiBpbnRlcnJ1cHQgdXBvbiBwcm9jZXNzaW5nIHJlY2VpdmUgCnBhY2tldHMgdGhhdCBtYXRjaCBjZXJ0YWluIGNyaXRlcmlhIGFzIHNldCBieSB0aGUgcGFyYW1ldGVycyBkZXNjcmliZWQgYmVsb3cuIApMTEkgcGFyYW1ldGVycyBhcmUgbm90IGVuYWJsZWQgd2hlbiBMZWdhY3kgaW50ZXJydXB0cyBhcmUgdXNlZC4gWW91IG11c3QgYmUgCnVzaW5nIE1TSSBvciBNU0ktWCAoc2VlIGNhdCAvcHJvYy9pbnRlcnJ1cHRzKSB0byBzdWNjZXNzZnVsbHkgdXNlIExMSS4KCkxMSVBvcnQKLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLTY1NTM1CkRlZmF1bHQgVmFsdWU6IDAgKGRpc2FibGVkKQoKTExJIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgTExJUG9ydCBjb21tYW5kLWxpbmUgcGFyYW1ldGVyLCB3aGljaCBzcGVjaWZpZXMgCndoaWNoIFRDUCBwb3J0IHNob3VsZCBnZW5lcmF0ZSBMb3cgTGF0ZW5jeSBJbnRlcnJ1cHRzLgoKRm9yIGV4YW1wbGUsIHVzaW5nIExMSVBvcnQ9ODAgd291bGQgY2F1c2UgdGhlIGJvYXJkIHRvIGdlbmVyYXRlIGFuIAppbW1lZGlhdGUgaW50ZXJydXB0IHVwb24gcmVjZWlwdCBvZiBhbnkgcGFja2V0IHNlbnQgdG8gVENQIHBvcnQgODAgb24gdGhlIApsb2NhbCBtYWNoaW5lLgoKV0FSTklORzogRW5hYmxpbmcgTExJIGNhbiByZXN1bHQgaW4gYW4gZXhjZXNzaXZlIG51bWJlciBvZiBpbnRlcnJ1cHRzL3NlY29uZCAKdGhhdCBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCB0aGUgc3lzdGVtIGFuZCBpbiBzb21lIGNhc2VzIG1heSBjYXVzZSBhIGtlcm5lbCAKcGFuaWMuIAoKTExJUHVzaAotLS0tLS0tClZhbGlkIFJhbmdlOiAgIDAtMQpEZWZhdWx0IFZhbHVlOiAwIChkaXNhYmxlZCkKCkNhbiBiZSBzZXQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCAoZGVmYXVsdCkuIEl0IGlzIG1vc3QgCmVmZmVjdGl2ZSBpbiBhbiBlbnZpcm9ubWVudCB3aXRoIG1hbnkgc21hbGwgdHJhbnNhY3Rpb25zLgpOT1RFOiBFbmFibGluZyBMTElQdXNoIG1heSBhbGxvdyBhIGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFjay4KCkxMSVNpemUKLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLTE1MDAKRGVmYXVsdCBWYWx1ZTogMCAoZGlzYWJsZWQpCgpDYXVzZXMgYW4gaW1tZWRpYXRlIGludGVycnVwdCBpZiB0aGUgYm9hcmQgcmVjZWl2ZXMgYSBwYWNrZXQgc21hbGxlciAKdGhhbiB0aGUgc3BlY2lmaWVkIHNpemUuCgpJbnRNb2RlCi0tLS0tLS0KVmFsaWQgUmFuZ2U6IDAgLSAyICgwID0gTGVnYWN5IEludCwgMSA9IE1TSSBhbmQgMiA9IE1TSS1YKQpEZWZhdWx0IFZhbHVlOiAyCgpJbnRNb2RlIGNvbnRyb2xzIGFsbG93IGxvYWQgdGltZSBjb250cm9sIG92ZXIgdGhlIHR5cGUgb2YgaW50ZXJydXB0CnJlZ2lzdGVyZWQgZm9yIGJ5IHRoZSBkcml2ZXIuICBNU0ktWCBpcyByZXF1aXJlZCBmb3IgbXVsdGlwbGUgcXVldWUKc3VwcG9ydCwgYW5kIHNvbWUga2VybmVscyBhbmQgY29tYmluYXRpb25zIG9mIGtlcm5lbCAuY29uZmlnIG9wdGlvbnMgd2lsbApmb3JjZSBhIGxvd2VyIGxldmVsIG9mIGludGVycnVwdCBzdXBwb3J0LiAgJ2NhdCAvcHJvYy9pbnRlcnJ1cHRzJyB3aWxsIHNob3cKZGlmZmVyZW50IHZhbHVlcyBmb3IgZWFjaCB0eXBlIG9mIGludGVycnVwdC4KClJTUwotLS0KVmFsaWQgUmFuZ2U6ICAgMC04CkRlZmF1bHQgVmFsdWU6IDEKCjAgLSBBc3NpZ24gdXAgdG8gd2hpY2hldmVyIGlzIGxlc3MsIG51bWJlciBvZiBDUFVTIG9yIG51bWJlciBvZiBxdWV1ZXMKWCAtIEFzc2lnbiBYIHF1ZXVlcyB3aGVyZSBYIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMuCiAgICBUaGUgZHJpdmVyIGFsbG93cyBtYXhpbXVtIHN1cHBvcnRlZCBxdWV1ZSB2YWx1ZS4gRm9yIGV4YW1wbGUsIEkzNTAtYmFzZWQgCiAgICBhZGFwdGVycyBhbGxvdyBSU1M9OCAod2hlcmUgOC1xdWV1ZXMgaXMgdGhlIG1heGltdW0gYWxsb3dhYmxlIHF1ZXVlcykuCgpOb3RlOiBmb3IgODI1NzUtYmFzZWQgYWRhcHRlcnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlcyBpcyA0OyBmb3IgCjgyNTc2LWJhc2VkIGFuZCBuZXdlciBhZGFwdGVycyBpdCBpcyA4OyBmb3IgSTIxMC1iYXNlZCBhZGFwdGVycyBpdCBpcyA0IHF1ZXVlczsKYW5kIGZvciBJMjExLWJhc2VkIGFkYXB0ZXJzIGl0IGlzIDIgcXVldWVzLgoKVGhpcyBwYXJhbWV0ZXIgaXMgYWxzbyBhZmZlY3RlZCBieSB0aGUgVk1EcSBwYXJhbWV0ZXIgaW4gdGhhdCBpdCB3aWxsIGxpbWl0IHRoZQpxdWV1ZXMgbW9yZS4KCiAgICAgIFZNRFEKTW9kZWwgMCAgMSAgMiAgMysKODI1NzUgNCAgNCAgMyAgMQo4MjU3NiA4ICAyICAyICAyCjgyNTgwIDggIDEgIDEgIDEKClZNRFEKLS0tLQpWYWxpZCBSYW5nZTogIDAgLSA0IG9uIDgyNTc1LWJhc2VkIGFkYXB0ZXJzOyBhbmQgMCAtIDggZm9yIDgyNTc2LzgyNTgwLWJhc2VkIAphZGFwdGVycy4KRGVmYXVsdCBWYWx1ZTogMAoKU3VwcG9ydHMgZW5hYmxpbmcgVk1EcSBwb29scyBhcyB0aGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IFNSLUlPVi4KCjAgLSBkaXNhYmxlZAoxIC0gc2V0cyB0aGUgbmV0ZGV2IGFzIHBvb2wgMAoyKyAtIGFkZCBhZGRpdGlvbmFsIHF1ZXVlcyBidXQgdGhleSBjdXJyZW50bHkgYXJlIG5vdCB1c2VkLgoKVGhpcyBwYXJhbWV0ZXIgaXMgZm9yY2VkIHRvIDEgb3IgbW9yZSBpZiB0aGUgbWF4X3ZmcyBtb2R1bGUgcGFyYW1ldGVyIGlzIHVzZWQuIApJbiBhZGRpdGlvbiB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBhdmFpbGFibGUgZm9yIFJTUyBpcyBsaW1pdGVkIGlmIHRoaXMgaXMgc2V0IHRvCjEgb3IgZ3JlYXRlci4KIAptYXhfdmZzCi0tLS0tLS0KVmFsaWQgUmFuZ2U6ICAgMC03CkRlZmF1bHQgVmFsdWU6IDAKCklmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gMCBpdCB3aWxsIGFsc28gZm9yY2UgdGhlIFZNRHEgcGFyYW1ldGVyIHRvIGJlIDEgCm9yIG1vcmUuCgpUaGlzIHBhcmFtZXRlciBhZGRzIHN1cHBvcnQgZm9yIFNSLUlPVi4gIEl0IGNhdXNlcyB0aGUgZHJpdmVyIHRvIHNwYXduIHVwIHRvIAptYXhfdmZzIHdvcnRoIG9mIHZpcnR1YWwgZnVuY3Rpb24uICAKClF1ZXVlUGFpcnMKLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogIDAtMQpEZWZhdWx0IFZhbHVlOiAgMSAoVFggYW5kIFJYIHdpbGwgYmUgcGFpcmVkIG9udG8gb25lIGludGVycnVwdCB2ZWN0b3IpCgpJZiBzZXQgdG8gMCwgd2hlbiBNU0ktWCBpcyBlbmFibGVkLCB0aGUgVFggYW5kIFJYIHdpbGwgYXR0ZW1wdCB0byBvY2N1cHkKc2VwYXJhdGUgdmVjdG9ycy4gICAgCgpUaGlzIG9wdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiB0byAxIGlmIHRoZXJlIGFyZSBub3Qgc3VmZmljaWVudCBpbnRlcnJ1cHRzCmF2YWlsYWJsZS4gIFRoaXMgY2FuIG9jY3VyIGlmIGFueSBjb21iaW5hdGlvbiBvZiBSU1MsIFZNRFEsIGFuZCBtYXhfdmZzIApyZXN1bHRzIGluIG1vcmUgdGhhbiA0IHF1ZXVlcyBiZWluZyB1c2VkLgoKTm9kZQotLS0tClZhbGlkIFJhbmdlOiAgIDAtbgpEZWZhdWx0IFZhbHVlOiAtMSAob2ZmKQoKICAwIC0gbjogd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIHRoZSBOVU1BIG5vZGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byAKICAgICAgICAgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGlzIGFkYXB0ZXIgcG9ydC4gCiAgLTE6IHVzZXMgdGhlIGRyaXZlciBkZWZhdWx0IG9mIGFsbG9jYXRpbmcgbWVtb3J5IG9uIHdoaWNoZXZlciBwcm9jZXNzb3IgaXMKICAgICAgcnVubmluZyBpbnNtb2QvbW9kcHJvYmUuIAoKVGhlIE5vZGUgcGFyYW1ldGVyIHdpbGwgYWxsb3cgeW91IHRvIHBpY2sgd2hpY2ggTlVNQSBub2RlIHlvdSB3YW50IHRvIGhhdmUgdGhlCmFkYXB0ZXIgYWxsb2NhdGUgbWVtb3J5IGZyb20uICBBbGwgZHJpdmVyIHN0cnVjdHVyZXMsIGluLW1lbW9yeSBxdWV1ZXMsIGFuZCAKcmVjZWl2ZSBidWZmZXJzIHdpbGwgYmUgYWxsb2NhdGVkIG9uIHRoZSBub2RlIHNwZWNpZmllZC4gIFRoaXMgcGFyYW1ldGVyIGlzCm9ubHkgdXNlZnVsIHdoZW4gaW50ZXJydXB0IGFmZmluaXR5IGlzIHNwZWNpZmllZCwgb3RoZXJ3aXNlIHNvbWUgcG9ydGlvbiBvZiB0aGUKdGltZSB0aGUgaW50ZXJydXB0IGNvdWxkIHJ1biBvbiBhIGRpZmZlcmVudCBjb3JlIHRoYW4gdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgCm9uLCBjYXVzaW5nIHNsb3dlciBtZW1vcnkgYWNjZXNzIGFuZCBpbXBhY3RpbmcgdGhyb3VnaHB1dCwgQ1BVLCBvciBib3RoLgoKRUVFCi0tLQpWYWxpZCBSYW5nZTogIDAtMQpEZWZhdWx0IFZhbHVlOiAxIChlbmFibGVkKQoKQSBsaW5rIGJldHdlZW4gdHdvIEVFRS1jb21wbGlhbnQgZGV2aWNlcyB3aWxsIHJlc3VsdCBpbiBwZXJpb2RpYyBidXJzdHMgb2YgCmRhdGEgZm9sbG93ZWQgYnkgcGVyaW9kcyB3aGVyZSB0aGUgbGluayBpcyBpbiBhbiBpZGxlIHN0YXRlLiBUaGlzIExvdwpQb3dlciBJZGxlIChMUEkpIHN0YXRlIGlzIHN1cHBvcnRlZCBpbiBib3RoIDFHYnBzIGFuZCAxMDBNYnBzIGxpbmsgc3BlZWRzLiAKTk9URTogRUVFIHN1cHBvcnQgcmVxdWlyZXMgYXV0b25lZ290aWF0aW9uLgoKRE1BQwotLS0tClZhbGlkIFJhbmdlOiAwLCAyNTAsIDUwMCwgMTAwMCwgMjAwMCwgMzAwMCwgNDAwMCwgNTAwMCwgNjAwMCwgNzAwMCwgODAwMCwgCjkwMDAsIDEwMDAwLgpEZWZhdWx0IFZhbHVlOiAwIChkaXNhYmxlZCkKICAKRW5hYmxlcyBvciBkaXNhYmxlcyBETUEgQ29hbGVzY2luZyBmZWF0dXJlLiBWYWx1ZXMgYXJlIGluIHVzZWOScyBhbmQgaW5jcmVhc2UKdGhlIGludGVybmFsIERNQSBDb2FsZXNjaW5nIGZlYXR1cmWScyBpbnRlcm5hbCB0aW1lci4gIERNQSAoRGlyZWN0IE1lbW9yeSAKQWNjZXNzKSBhbGxvd3MgdGhlIG5ldHdvcmsgZGV2aWNlIHRvIG1vdmUgcGFja2V0IGRhdGEgZGlyZWN0bHkgdG8gdGhlIApzeXN0ZW0ncyBtZW1vcnksIHJlZHVjaW5nIENQVSB1dGlsaXphdGlvbi4gSG93ZXZlciwgdGhlIGZyZXF1ZW5jeSBhbmQgcmFuZG9tCmludGVydmFscyBhdCB3aGljaCBwYWNrZXRzIGFycml2ZSBkbyBub3QgYWxsb3cgdGhlIHN5c3RlbSB0byBlbnRlciBhIGxvd2VyIApwb3dlciBzdGF0ZS4gRE1BIENvYWxlc2NpbmcgYWxsb3dzIHRoZSBhZGFwdGVyIHRvIGNvbGxlY3QgcGFja2V0cyBiZWZvcmUgaXQgCmluaXRpYXRlcyBhIERNQSBldmVudC4gVGhpcyBtYXkgaW5jcmVhc2UgbmV0d29yayBsYXRlbmN5IGJ1dCBhbHNvIGluY3JlYXNlcwp0aGUgY2hhbmNlcyB0aGF0IHRoZSBzeXN0ZW0gd2lsbCBlbnRlciBhIGxvd2VyIHBvd2VyIHN0YXRlLiAKClR1cm5pbmcgb24gRE1BIENvYWxlc2NpbmcgbWF5IHNhdmUgZW5lcmd5IHdpdGgga2VybmVsIDIuNi4zMiBhbmQgbGF0ZXIuIFRoaXMKd2lsbCBpbXBhcnQgdGhlIGdyZWF0ZXN0IGNoYW5jZSBmb3IgeW91ciBzeXN0ZW0gdG8gY29uc3VtZSBsZXNzIHBvd2VyLiBETUEgCkNvYWxlc2NpbmcgaXMgZWZmZWN0aXZlIGluIGhlbHBpbmcgcG90ZW50aWFsbHkgc2F2aW5nIHRoZSBwbGF0Zm9ybSBwb3dlciBvbmx5CndoZW4gaXQgaXMgZW5hYmxlZCBhY3Jvc3MgYWxsIGFjdGl2ZSBwb3J0cy4KCkludGVycnVwdFRocm90dGxlUmF0ZSAoSVRSKSBzaG91bGQgYmUgc2V0IHRvIGR5bmFtaWMuIFdoZW4gSVRSPTAsIERNQSAKQ29hbGVzY2luZyBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkLiAKIApBIHdoaXRlcGFwZXIgY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYmVzdCBjb25maWd1cmUgeW91ciBwbGF0Zm9ybSAKaXMgYXZhaWxhYmxlIG9uIHRoZSBJbnRlbCB3ZWJzaXRlLgoKTUREIChNYWxpY2lvdXMgRHJpdmVyIERldGVjdGlvbikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVmFsaWQgUmFuZ2U6IDAsIDE7IDAgPSBEaXNhYmxlLCAxID0gRW5hYmxlCkRlZmF1bHQgVmFsdWU6IDEKClRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgcmVsZXZhbnQgZm9yIEkzNTAgZGV2aWNlcyBvcGVyYXRpbmcgaW4gU1ItSU9WIG1vZGUuIFdoZW4KdGhpcyBwYXJhbWV0ZXIgaXMgc2V0LCB0aGUgZHJpdmVyIGRldGVjdHMgbWFsaWNpb3VzIFZGIGRyaXZlciBhbmQgZGlzYWJsZXMgaXRzClRYL1JYIHF1ZXVlcyB1bnRpbCBhIFZGIGRyaXZlciByZXNldCBvY2N1cnMuCiAKCkFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PQoKICBDb25maWd1cmluZyB0aGUgRHJpdmVyIG9uIERpZmZlcmVudCBEaXN0cmlidXRpb25zCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIENvbmZpZ3VyaW5nIGEgbmV0d29yayBkcml2ZXIgdG8gbG9hZCBwcm9wZXJseSB3aGVuIHRoZSBzeXN0ZW0gaXMgc3RhcnRlZAogIGlzIGRpc3RyaWJ1dGlvbiBkZXBlbmRlbnQuICBUeXBpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgaW52b2x2ZXMKICBhZGRpbmcgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBvciAvZXRjL21vZHByb2JlLmNvbmYgYXMgd2VsbAogIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgc2NyaXB0cyBhbmQvb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gIE1hbnkKICBwb3B1bGFyIExpbnV4IGRpc3RyaWJ1dGlvbnMgc2hpcCB3aXRoIHRvb2xzIHRvIG1ha2UgdGhlc2UgY2hhbmdlcyBmb3IgeW91LgogIFRvIGxlYXJuIHRoZSBwcm9wZXIgd2F5IHRvIGNvbmZpZ3VyZSBhIG5ldHdvcmsgZGV2aWNlIGZvciB5b3VyIHN5c3RlbSwKICByZWZlciB0byB5b3VyIGRpc3RyaWJ1dGlvbiBkb2N1bWVudGF0aW9uLiAgSWYgZHVyaW5nIHRoaXMgcHJvY2VzcyB5b3UgYXJlCiAgYXNrZWQgZm9yIHRoZSBkcml2ZXIgb3IgbW9kdWxlIG5hbWUsIHRoZSBuYW1lIGZvciB0aGUgTGludXggQmFzZSBEcml2ZXIKICBmb3IgdGhlIEdpZ2FiaXQgRmFtaWx5IG9mIEFkYXB0ZXJzIGlzIGlnYi4KCiAgQXMgYW4gZXhhbXBsZSwgaWYgeW91IGluc3RhbGwgdGhlIGlnYiBkcml2ZXIgZm9yIHR3byBHaWdhYml0IGFkYXB0ZXJzIAogIChldGgwIGFuZCBldGgxKSBhbmQgd2FudCB0byBzZXQgdGhlIGludGVycnVwdCBtb2RlIHRvIE1TSS1YIGFuZCBNU0kgCiAgcmVzcGVjdGl2ZWx5LCBhZGQgdGhlIGZvbGxvd2luZyB0byBtb2R1bGVzLmNvbmYgb3IgL2V0Yy9tb2Rwcm9iZS5jb25mOgoKICAgICAgIGFsaWFzIGV0aDAgaWdiCiAgICAgICBhbGlhcyBldGgxIGlnYgogICAgICAgb3B0aW9ucyBpZ2IgSW50TW9kZT0yLDEKCiAgVmlld2luZyBMaW5rIE1lc3NhZ2VzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcwogIHJlc3RyaWN0aW5nIHN5c3RlbSBtZXNzYWdlcy4gIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzCiAgb24geW91ciBjb25zb2xlLCBzZXQgZG1lc2cgdG8gZWlnaHQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKCiAgICAgICBkbWVzZyAtbiA4CgogIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuCgogIEp1bWJvIEZyYW1lcwogIC0tLS0tLS0tLS0tLQogIEp1bWJvIEZyYW1lcyBzdXBwb3J0IGlzIGVuYWJsZWQgYnkgY2hhbmdpbmcgdGhlIE1UVSB0byBhIHZhbHVlIGxhcmdlciB0aGFuCiAgdGhlIGRlZmF1bHQgb2YgMTUwMC4gIFVzZSB0aGUgaWZjb25maWcgY29tbWFuZCB0byBpbmNyZWFzZSB0aGUgTVRVIHNpemUuCiAgRm9yIGV4YW1wbGU6CgogICAgICAgaWZjb25maWcgZXRoPHg+IG10dSA5MDAwIHVwCgogIFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuICBJdCBjYW4gYmUgbWFkZSBwZXJtYW5lbnQgaWYKICB5b3UgYWRkOgoKICAgICAgIE1UVT05MDAwCgogICB0byB0aGUgZmlsZSAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvaWZjZmctZXRoPHg+LiAgVGhpcyBleGFtcGxlCiAgIGFwcGxpZXMgdG8gdGhlIFJlZCBIYXQgZGlzdHJpYnV0aW9uczsgb3RoZXIgZGlzdHJpYnV0aW9ucyBtYXkgc3RvcmUgdGhpcwogICBzZXR0aW5nIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uLgoKICBOb3RlczoKCiAgLSBUbyBlbmFibGUgSnVtYm8gRnJhbWVzLCBpbmNyZWFzZSB0aGUgTVRVIHNpemUgb24gdGhlIGludGVyZmFjZSBiZXlvbmQKICAgIDE1MDAuCgogIC0gVGhlIG1heGltdW0gTVRVIHNldHRpbmcgZm9yIEp1bWJvIEZyYW1lcyBpcyA5MjE2LiAgVGhpcyB2YWx1ZSBjb2luY2lkZXMKICAgIHdpdGggdGhlIG1heGltdW0gSnVtYm8gRnJhbWVzIHNpemUgb2YgOTIzNCBieXRlcy4KCiAgLSBVc2luZyBKdW1ibyBmcmFtZXMgYXQgMTAgb3IgMTAwIE1icHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgbWF5IHJlc3VsdCBpbgogICAgcG9vciBwZXJmb3JtYW5jZSBvciBsb3NzIG9mIGxpbmsuCgogIGV0aHRvb2wKICAtLS0tLS0tCiAgVGhlIGRyaXZlciB1dGlsaXplcyB0aGUgZXRodG9vbCBpbnRlcmZhY2UgZm9yIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZAogIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBldGh0b29sCiAgdmVyc2lvbiAzLjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgYWx0aG91Z2ggd2UgCiAgc3Ryb25nbHkgcmVjb21tZW5kIGRvd25sb2FkaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBhdDoKCiAgaHR0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvLgoKICBTcGVlZCBhbmQgRHVwbGV4IENvbmZpZ3VyYXRpb24KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBJbiBhZGRyZXNzaW5nIHNwZWVkIGFuZCBkdXBsZXggY29uZmlndXJhdGlvbiBpc3N1ZXMsIHlvdSBuZWVkIHRvIAogIGRpc3Rpbmd1aXNoIGJldHdlZW4gY29wcGVyLWJhc2VkIGFkYXB0ZXJzIGFuZCBmaWJlci1iYXNlZCBhZGFwdGVycy4gCgogIEluIHRoZSBkZWZhdWx0IG1vZGUsIGFuIEludGVsKFIpIE5ldHdvcmsgQWRhcHRlciB1c2luZyBjb3BwZXIgY29ubmVjdGlvbnMgCiAgd2lsbCBhdHRlbXB0IHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggaXRzIGxpbmsgcGFydG5lciB0bwogIGRldGVybWluZSB0aGUgYmVzdCBzZXR0aW5nLiBJZiB0aGUgYWRhcHRlciBjYW5ub3QgZXN0YWJsaXNoIGxpbmsgd2l0aCB0aGUgCiAgbGluayBwYXJ0bmVyIHVzaW5nIGF1dG8tbmVnb3RpYXRpb24sIHlvdSBtYXkgbmVlZCB0byBtYW51YWxseSBjb25maWd1cmUgdGhlIAogIGFkYXB0ZXIgYW5kIGxpbmsgcGFydG5lciB0byBpZGVudGljYWwgc2V0dGluZ3MgdG8gZXN0YWJsaXNoIGxpbmsgYW5kIHBhc3MKICBwYWNrZXRzLiBUaGlzIHNob3VsZCBvbmx5IGJlIG5lZWRlZCB3aGVuIGF0dGVtcHRpbmcgdG8gbGluayB3aXRoIGFuIG9sZGVyIAogIHN3aXRjaCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgYXV0by1uZWdvdGlhdGlvbiBvciBvbmUgdGhhdCBoYXMgYmVlbiBmb3JjZWQgCiAgdG8gYSBzcGVjaWZpYyBzcGVlZCBvciBkdXBsZXggbW9kZS4gWW91ciBsaW5rIHBhcnRuZXIgbXVzdCBtYXRjaCB0aGUgCiAgc2V0dGluZyB5b3UgY2hvb3NlLiAKICAKICBTcGVlZCBhbmQgRHVwbGV4IGFyZSBjb25maWd1cmVkIHRocm91Z2ggdGhlIGV0aHRvb2wqIHV0aWxpdHkuIGV0aHRvb2wgaXMgCiAgaW5jbHVkZWQgd2l0aCBhbGwgdmVyc2lvbnMgb2YgUmVkIEhhdCBhZnRlciBSZWQgSGF0IDcuMi4gRm9yIG90aGVyIExpbnV4CiAgZGlzdHJpYnV0aW9ucywgZG93bmxvYWQgYW5kIGluc3RhbGwgZXRodG9vbCBmcm9tIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZTogCiAgPGEgaHJlZj0iaHR0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvLgoKICBDYXV0aW9uOiBPbmx5IGV4cGVyaWVuY2VkIG5ldHdvcmsgYWRtaW5pc3RyYXRvcnMgc2hvdWxkIGZvcmNlIHNwZWVkIGFuZCAKICBkdXBsZXggbWFudWFsbHkuIFRoZSBzZXR0aW5ncyBhdCB0aGUgc3dpdGNoIG11c3QgYWx3YXlzIG1hdGNoIHRoZSBhZGFwdGVyIAogIHNldHRpbmdzLiBBZGFwdGVyIHBlcmZvcm1hbmNlIG1heSBzdWZmZXIgb3IgeW91ciBhZGFwdGVyIG1heSBub3QgCiAgb3BlcmF0ZSBpZiB5b3UgY29uZmlndXJlIHRoZSBhZGFwdGVyIGRpZmZlcmVudGx5IGZyb20geW91ciBzd2l0Y2guCgogIEFuIEludGVsriBOZXR3b3JrIEFkYXB0ZXIgdXNpbmcgZmliZXItYmFzZWQgY29ubmVjdGlvbnMsIGhvd2V2ZXIsIHdpbGwgbm90IAogIGF0dGVtcHQgYXV0by1uZWdvdGlhdGUgd2l0aCBpdHMgbGluayBwYXJ0bmVyIHNpbmNlIHRob3NlIGFkYXB0ZXJzIG9wZXJhdGUgCiAgb25seSBpbiBmdWxsIGR1cGxleCwgYW5kIG9ubHkgYXQgdGhlaXIgbmF0aXZlIHNwZWVkLiAKCiAgCiAgRW5hYmxpbmcgV2FrZSBvbiBMQU4qIChXb0wpCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgV29MIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgZXRodG9vbCogdXRpbGl0eS4gIGV0aHRvb2wgaXMgaW5jbHVkZWQgd2l0aAogIGFsbCB2ZXJzaW9ucyBvZiBSZWQgSGF0IGFmdGVyIFJlZCBIYXQgNy4yLiAgRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsCiAgZG93bmxvYWQgYW5kIGluc3RhbGwgZXRodG9vbCBmcm9tIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZToKICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCgogIEZvciBpbnN0cnVjdGlvbnMgb24gZW5hYmxpbmcgV29MIHdpdGggZXRodG9vbCwgcmVmZXIgdG8gdGhlIHdlYnNpdGUgbGlzdGVkCiAgYWJvdmUuCgogIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4KICBGb3IgdGhpcyBkcml2ZXIgdmVyc2lvbiwgaW4gb3JkZXIgdG8gZW5hYmxlIFdvTCwgdGhlIGlnYiBkcml2ZXIgbXVzdCBiZQogIGxvYWRlZCB3aGVuIHNodXR0aW5nIGRvd24gb3IgcmVib290aW5nIHRoZSBzeXN0ZW0uCgogIFdha2UgT24gTEFOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHBvcnQgQSBvZiBtdWx0aS1wb3J0IGFkYXB0ZXJzLgoKICBXYWtlIE9uIExBTiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgSW50ZWwoUikgR2lnYWJpdCBWVCBRdWFkIFBvcnQgU2VydmVyIAogIEFkYXB0ZXIuCgogIE11bHRpcXVldWUKICAtLS0tLS0tLS0tCiAgSW4gdGhpcyBtb2RlLCBhIHNlcGFyYXRlIE1TSS1YIHZlY3RvciBpcyBhbGxvY2F0ZWQgZm9yIGVhY2ggcXVldWUgYW5kIG9uZQogIGZvciAib3RoZXIiIGludGVycnVwdHMgc3VjaCBhcyBsaW5rIHN0YXR1cyBjaGFuZ2UgYW5kIGVycm9ycy4gIEFsbCAKICBpbnRlcnJ1cHRzIGFyZSB0aHJvdHRsZWQgdmlhIGludGVycnVwdCBtb2RlcmF0aW9uLiAgSW50ZXJydXB0IG1vZGVyYXRpb24gCiAgbXVzdCBiZSB1c2VkIHRvIGF2b2lkIGludGVycnVwdCBzdG9ybXMgd2hpbGUgdGhlIGRyaXZlciBpcyBwcm9jZXNzaW5nIG9uZSAKICBpbnRlcnJ1cHQuICBUaGUgbW9kZXJhdGlvbiB2YWx1ZSBzaG91bGQgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIGV4cGVjdGVkCiAgdGltZSBmb3IgdGhlIGRyaXZlciB0byBwcm9jZXNzIGFuIGludGVycnVwdC4gTXVsdGlxdWV1ZSBpcyBvZmYgYnkgZGVmYXVsdC4KCiAgUkVRVUlSRU1FTlRTOiBNU0ktWCBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciBNdWx0aXF1ZXVlLiBJZiBNU0ktWCBpcyBub3QgCiAgZm91bmQsIHRoZSBzeXN0ZW0gd2lsbCBmYWxsYmFjayB0byBNU0kgb3IgdG8gTGVnYWN5IGludGVycnVwdHMuIFRoaXMgZHJpdmVyCiAgc3VwcG9ydHMgbXVsdGlxdWV1ZSBpbiBrZXJuZWwgdmVyc2lvbnMgMi42LjI0IGFuZCBncmVhdGVyLiBUaGlzIGRyaXZlciAKICBzdXBwb3J0cyByZWNlaXZlIG11bHRpcXVldWUgb24gYWxsIGtlcm5lbHMgdGhhdCBzdXBwb3J0IE1TSS1YLiAKICBOT1RFUzogRG8gbm90IHVzZSBNU0ktWCB3aXRoIHRoZSAyLjYuMTkgb3IgMi42LjIwIGtlcm5lbHMuCiAgT24gc29tZSBrZXJuZWxzIGEgcmVib290IGlzIHJlcXVpcmVkIHRvIHN3aXRjaCBiZXR3ZWVuIGEgc2luZ2xlIHF1ZXVlIG1vZGUKICBhbmQgbXVsdGlxdWV1ZSBtb2Rlcywgb3IgdmljZS12ZXJzYS4KCiAgTFJPCiAgLS0tCiAgTGFyZ2UgUmVjZWl2ZSBPZmZsb2FkIChMUk8pIGlzIGEgdGVjaG5pcXVlIGZvciBpbmNyZWFzaW5nIGluYm91bmQgdGhyb3VnaHB1dAogIG9mIGhpZ2gtYmFuZHdpZHRoIG5ldHdvcmsgY29ubmVjdGlvbnMgYnkgcmVkdWNpbmcgQ1BVIG92ZXJoZWFkLiBJdCB3b3JrcyBieQogIGFnZ3JlZ2F0aW5nIG11bHRpcGxlIGluY29taW5nIHBhY2tldHMgZnJvbSBhIHNpbmdsZSBzdHJlYW0gaW50byBhIGxhcmdlciAKICBidWZmZXIgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCBoaWdoZXIgdXAgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHRodXMgcmVkdWNpbmcKICB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBoYXZlIHRvIGJlIHByb2Nlc3NlZC4gTFJPIGNvbWJpbmVzIG11bHRpcGxlIAogIEV0aGVybmV0IGZyYW1lcyBpbnRvIGEgc2luZ2xlIHJlY2VpdmUgaW4gdGhlIHN0YWNrLCB0aGVyZWJ5IHBvdGVudGlhbGx5IAogIGRlY3JlYXNpbmcgQ1BVIHV0aWxpemF0aW9uIGZvciByZWNlaXZlcy4KCiAgTk9URTogTFJPIHJlcXVpcmVzIDIuNC4yMiBvciBsYXRlciBrZXJuZWwgdmVyc2lvbi4KCiAgSUdCX0xSTyBpcyBhIGNvbXBpbGUgdGltZSBmbGFnLiBUaGUgdXNlciBjYW4gZW5hYmxlIGl0IGF0IGNvbXBpbGUgCiAgdGltZSB0byBhZGQgc3VwcG9ydCBmb3IgTFJPIGZyb20gdGhlIGRyaXZlci4gVGhlIGZsYWcgaXMgdXNlZCBieSBhZGRpbmcgCiAgQ0ZMQUdTX0VYVFJBPSItRElHQl9MUk8iIHRvIHRoZSBtYWtlIGZpbGUgd2hlbiBpdCdzIGJlaW5nIGNvbXBpbGVkLiAKCiAgICAgbWFrZSBDRkxBR1NfRVhUUkE9Ii1ESUdCX0xSTyIgaW5zdGFsbAoKICBZb3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBkcml2ZXIgaXMgdXNpbmcgTFJPIGJ5IGxvb2tpbmcgYXQgdGhlc2UgY291bnRlcnMgaW4gCiAgZXRodG9vbDoKCiAgbHJvX2FnZ3JlZ2F0ZWQgLSBjb3VudCBvZiB0b3RhbCBwYWNrZXRzIHRoYXQgd2VyZSBjb21iaW5lZAogIGxyb19mbHVzaGVkIC0gY291bnRzIHRoZSBudW1iZXIgb2YgcGFja2V0cyBmbHVzaGVkIG91dCBvZiBMUk8KICBscm9fcmVjeWNsZWQgLSByZWZsZWN0cyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgcmV0dXJuZWQgdG8gdGhlIHJpbmcgZnJvbSAKICByZWN5Y2xpbmcKCiAgTk9URTogSVB2NiBhbmQgVURQIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExSTy4KCiAgCiAgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIEhhcmR3YXJlIENsb2NrIChQSEMpCiAgLS0tCgogIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJRUVFIDE1ODgKICBzcGVjaWZpY2F0aW9uIGFsbG93aW5nIG5ldHdvcmsgY2FyZHMgdG8gc3luY2hyb25pemUgdGhlaXIgY2xvY2tzIG92ZXIgYSAKICBQVFAtZW5hYmxlZCBuZXR3b3JrLiBJdCB3b3JrcyB0aHJvdWdoIGEgc2VyaWVzIG9mIHN5bmNocm9uaXphdGlvbiBhbmQgZGVsYXkKICBub3RpZmljYXRpb24gdHJhbnNhY3Rpb25zIHRoYXQgYWxsb3cgYSBzb2Z0d2FyZSBkYWVtb24gdG8gaW1wbGVtZW50IGEgUElECiAgY29udHJvbGxlciB0byBzeW5jaHJvbml6ZSB0aGUgbmV0d29yayBjYXJkIGNsb2Nrcy4KICAKICBOT1RFOiBQVFAgcmVxdWlyZXMgMy4wLjAgb3IgbGF0ZXIga2VybmVsIHZlcnNpb24gdGhhdCBoYXMgUFRQIHN1cHBvcnQKICAgICAgICBlbmFibGVkIGluIHRoZSBrZXJuZWwgYW5kIGEgdXNlci1zcGFjZSBzb2Z0d2FyZSBkYWVtb24uCiAgCiAgSUdCX1BUUCBpcyBhIGNvbXBpbGUgdGltZSBmbGFnLiBUaGUgdXNlciBjYW4gZW5hYmxlIGl0IGF0IGNvbXBpbGUgdGltZSB0byBhZGQKICBzdXBwb3J0IGZvciBQVFAgZnJvbSB0aGUgZHJpdmVyLiBUaGUgZmxhZyBpcyB1c2VkIGJ5IGFkZGluZwogIENGTEFHU19FWFRSQT0iLURJR0JfUFRQIiB0byB0aGUgbWFrZSBmaWxlIHdoZW4gaXQncyBiZWluZyBjb21waWxlZC4KCiAgICAgbWFrZSBDRkxBR1NfRVhUUkE9Ii1ESUdCX1BUUCIgaW5zdGFsbAoKICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIGNvbXBpbGUgaWYgeW91ciBrZXJuZWwgZG9lcyBub3QKICBzdXBwb3J0IFBUUC4KICAKICBZb3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBkcml2ZXIgaXMgdXNpbmcgUFRQIGJ5IGxvb2tpbmcgYXQgdGhlIHN5c3RlbSBsb2cgdG8KICBzZWUgd2hldGhlciBhIFBIQyB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQgb3Igbm90LiBJZiB5b3UgaGF2ZSBhIGtlcm5lbAogIGFuZCB2ZXJzaW9uIG9mIGV0aHRvb2wgd2l0aCBQVFAgc3VwcG9ydCwgeW91IGNhbiBjaGVjayB0aGUgUFRQIHN1cHBvcnQgaW4gdGhlCiAgZHJpdmVyIGJ5IGV4ZWN1dGluZzoKCiAgICAgZXRodG9vbCAtVCBldGhYCgoKICBNQUMgYW5kIFZMQU4gYW50aS1zcG9vZmluZyBmZWF0dXJlCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFdoZW4gYSBtYWxpY2lvdXMgZHJpdmVyIGF0dGVtcHRzIHRvIHNlbmQgYSBzcG9vZmVkIHBhY2tldCwgaXQgaXMgZHJvcHBlZCBieSAKICB0aGUgaGFyZHdhcmUgYW5kIG5vdCB0cmFuc21pdHRlZC4gIEFuIGludGVycnVwdCBpcyBzZW50IHRvIHRoZSBQRiBkcml2ZXIgCiAgbm90aWZ5aW5nIGl0IG9mIHRoZSBzcG9vZiBhdHRlbXB0LgoKICBXaGVuIGEgc3Bvb2ZlZCBwYWNrZXQgaXMgZGV0ZWN0ZWQgdGhlIFBGIGRyaXZlciB3aWxsIHNlbmQgdGhlIGZvbGxvd2luZyAKICBtZXNzYWdlIHRvIHRoZSBzeXN0ZW0gbG9nIChkaXNwbGF5ZWQgYnkgIHRoZSAiZG1lc2ciIGNvbW1hbmQpOgoKICBTcG9vZiBldmVudChzKSBkZXRlY3RlZCBvbiBWRihuKQoKICBXaGVyZSBuPXRoZSBWRiB0aGF0IGF0dGVtcHRlZCB0byBkbyB0aGUgc3Bvb2ZpbmcuCgogIFNldHRpbmcgTUFDIEFkZHJlc3MsIFZMQU4gYW5kIFJhdGUgTGltaXQgVXNpbmcgSVByb3V0ZTIgVG9vbAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFlvdSBjYW4gc2V0IGEgTUFDIGFkZHJlc3Mgb2YgYSBWaXJ0dWFsIEZ1bmN0aW9uIChWRiksIGEgZGVmYXVsdCBWTEFOIGFuZCB0aGUKICByYXRlIGxpbWl0IHVzaW5nIHRoZSBJUHJvdXRlMiB0b29sLiBEb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIAogIGlwcm91dGUyIHRvb2wgZnJvbSBTb3VyY2Vmb3JnZSBpZiB5b3VyIHZlcnNpb24gZG9lcyBub3QgaGF2ZSBhbGwgdGhlCiAgZmVhdHVyZXMgeW91IHJlcXVpcmUuCgogIApLbm93biBJc3N1ZXMvVHJvdWJsZXNob290aW5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkhhcmR3YXJlIElzc3VlczoKLS0tLS0tLS0tLS0tLS0tLQpGb3Iga25vd24gaGFyZHdhcmUgYW5kIHRyb3VibGVzaG9vdGluZyBpc3N1ZXMsIGVpdGhlciByZWZlciB0byB0aGUgIlJlbGVhc2UgCk5vdGVzIiBpbiB5b3VyIFVzZXIgR3VpZGUsIG9yIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgCmZvbGxvd2luZyB3ZWJzaXRlOgoKICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tCgpJbiB0aGUgc2VhcmNoIGJveCBlbnRlciB5b3VyIGRldmljZXMgY29udHJvbGxlciBJRCBmb2xsb3dlZCBieSAic3BlYyB1cGRhdGUiIAooaS5lLiwgODI1OTkgc3BlYyB1cGRhdGUpLiBUaGUgc3BlYyB1cGRhdGUgZmlsZSBoYXMgY29tcGxldGUgaW5mb3JtYXRpb24gb24Ka25vd24gaGFyZHdhcmUgaXNzdWVzLgoKU29mdHdhcmUgSXNzdWVzOgotLS0tLS0tLS0tLS0tLS0tCgogIE5PVEU6IEFmdGVyIGluc3RhbGxpbmcgdGhlIGRyaXZlciwgaWYgeW91ciBJbnRlbCBFdGhlcm5ldCBOZXR3b3JrIENvbm5lY3Rpb24KICBpcyBub3Qgd29ya2luZywgdmVyaWZ5IHRoYXQgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjb3JyZWN0IGRyaXZlci4KCiAgVXNpbmcgdGhlIGlnYiBkcml2ZXIgb24gMi40IG9yIG9sZGVyIDIuNiBiYXNlZCBrZXJuZWxzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgRHVlIHRvIGxpbWl0ZWQgc3VwcG9ydCBmb3IgUENJLUV4cHJlc3MgaW4gMi40IGtlcm5lbHMgYW5kIG9sZGVyIDIuNiBrZXJuZWxzLAogIHRoZSBpZ2IgZHJpdmVyIG1heSBydW4gaW50byBpbnRlcnJ1cHQgcmVsYXRlZCBwcm9ibGVtcyBvbiBzb21lIHN5c3RlbXMsIAogIHN1Y2ggYXMgbm8gbGluayBvciBoYW5nIHdoZW4gYnJpbmdpbmcgdXAgdGhlIGRldmljZS4KCiAgV2UgcmVjb21tZW5kIHRoZSBuZXdlciAyLjYgYmFzZWQga2VybmVscywgYXMgdGhlc2Uga2VybmVscyBjb3JyZWN0bHkKICBjb25maWd1cmUgdGhlIFBDSS1FeHByZXNzIGNvbmZpZ3VyYXRpb24gc3BhY2Ugb2YgdGhlIGFkYXB0ZXIgYW5kIGFsbAogIGludGVydmVuaW5nIGJyaWRnZXMuIElmIHlvdSBhcmUgcmVxdWlyZWQgdG8gdXNlIGEgMi40IGtlcm5lbCwgdXNlIGEgMi40IGtlcm5lbCAKICBuZXdlciB0aGFuIDIuNC4zMC4gRm9yIDIuNiBrZXJuZWxzIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgMi42LjIxIGtlcm5lbCBvciAKICBuZXdlci4KCiAgQWx0ZXJuYXRpdmVseSwgb24gMi42IGtlcm5lbHMgeW91IG1heSBkaXNhYmxlIE1TSSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgYnkgCiAgYm9vdGluZyB3aXRoIHRoZSAicGNpPW5vbXNpIiBvcHRpb24gb3IgcGVybWFuZW50bHkgZGlzYWJsZSBNU0kgc3VwcG9ydCBpbiAKICB5b3VyIGtlcm5lbCBieSBjb25maWd1cmluZyB5b3VyIGtlcm5lbCB3aXRoIENPTkZJR19QQ0lfTVNJIHVuc2V0LgoKICBJbnRlbChSKSBBY3RpdmUgTWFuYWdlbWVudCBUZWNobm9sb2d5IDIuMCwgMi4xLCAyLjUgbm90IHN1cHBvcnRlZCBpbiAKICBjb25qdW5jdGlvbiB3aXRoIExpbnV4IGRyaXZlcgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBEcml2ZXIgQ29tcGlsYXRpb24KICAtLS0tLS0tLS0tLS0tLS0tLS0KICBXaGVuIHRyeWluZyB0byBjb21waWxlIHRoZSBkcml2ZXIgYnkgcnVubmluZyBtYWtlIGluc3RhbGwsIHRoZSBmb2xsb3dpbmcKICBlcnJvciBtYXkgb2NjdXI6CgogICAgIkxpbnV4IGtlcm5lbCBzb3VyY2Ugbm90IGNvbmZpZ3VyZWQgLSBtaXNzaW5nIHZlcnNpb24uaCIKCiAgVG8gc29sdmUgdGhpcyBpc3N1ZSwgY3JlYXRlIHRoZSB2ZXJzaW9uLmggZmlsZSBieSBnb2luZyB0byB0aGUgTGludXggc291cmNlCiAgdHJlZSBhbmQgZW50ZXJpbmc6CgogICAgbWFrZSBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaC4KCiAgUGVyZm9ybWFuY2UgRGVncmFkYXRpb24gd2l0aCBKdW1ibyBGcmFtZXMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIERlZ3JhZGF0aW9uIGluIHRocm91Z2hwdXQgcGVyZm9ybWFuY2UgbWF5IGJlIG9ic2VydmVkIGluIHNvbWUgSnVtYm8gZnJhbWVzIAogIGVudmlyb25tZW50cy4gSWYgdGhpcyBpcyBvYnNlcnZlZCwgaW5jcmVhc2luZyB0aGUgYXBwbGljYXRpb24ncyBzb2NrZXQgYnVmZmVyCiAgc2l6ZSBhbmQvb3IgaW5jcmVhc2luZyB0aGUgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF8qbWVtIGVudHJ5IHZhbHVlcyBtYXkgaGVscC4KICBTZWUgdGhlIHNwZWNpZmljIGFwcGxpY2F0aW9uIG1hbnVhbCBhbmQgCiAgL3Vzci9zcmMvbGludXgqL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGZvciBtb3JlIGRldGFpbHMuCgogIEp1bWJvIEZyYW1lcyBvbiBGb3VuZHJ5IEJpZ0lyb24gODAwMCBzd2l0Y2gKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgVGhlcmUgaXMgYSBrbm93biBpc3N1ZSB1c2luZyBKdW1ibyBmcmFtZXMgd2hlbiBjb25uZWN0ZWQgdG8gYSBGb3VuZHJ5CiAgQmlnSXJvbiA4MDAwIHN3aXRjaC4gIFRoaXMgaXMgYSAzcmQgcGFydHkgbGltaXRhdGlvbi4gIElmIHlvdSBleHBlcmllbmNlCiAgbG9zcyBvZiBwYWNrZXRzLCBsb3dlciB0aGUgTVRVIHNpemUuCgogIE11bHRpcGxlIEludGVyZmFjZXMgb24gU2FtZSBFdGhlcm5ldCBCcm9hZGNhc3QgTmV0d29yawogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIER1ZSB0byB0aGUgZGVmYXVsdCBBUlAgYmVoYXZpb3Igb24gTGludXgsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlCiAgb25lIHN5c3RlbSBvbiB0d28gSVAgbmV0d29ya3MgaW4gdGhlIHNhbWUgRXRoZXJuZXQgYnJvYWRjYXN0IGRvbWFpbgogIChub24tcGFydGl0aW9uZWQgc3dpdGNoKSBiZWhhdmUgYXMgZXhwZWN0ZWQuICBBbGwgRXRoZXJuZXQgaW50ZXJmYWNlcwogIHdpbGwgcmVzcG9uZCB0byBJUCB0cmFmZmljIGZvciBhbnkgSVAgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgc3lzdGVtLgogIFRoaXMgcmVzdWx0cyBpbiB1bmJhbGFuY2VkIHJlY2VpdmUgdHJhZmZpYy4KCiAgSWYgeW91IGhhdmUgbXVsdGlwbGUgaW50ZXJmYWNlcyBpbiBhIHNlcnZlciwgZWl0aGVyIHR1cm4gb24gQVJQCiAgZmlsdGVyaW5nIGJ5IGVudGVyaW5nOgoKICAgIGVjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL2FsbC9hcnBfZmlsdGVyCiAgKHRoaXMgb25seSB3b3JrcyBpZiB5b3VyIGtlcm5lbCdzIHZlcnNpb24gaXMgaGlnaGVyIHRoYW4gMi40LjUpLAoKICBOT1RFOiBUaGlzIHNldHRpbmcgaXMgbm90IHNhdmVkIGFjcm9zcyByZWJvb3RzLiAgVGhlIGNvbmZpZ3VyYXRpb24KICBjaGFuZ2UgY2FuIGJlIG1hZGUgcGVybWFuZW50IGJ5IGFkZGluZyB0aGUgbGluZToKICAgIG5ldC5pcHY0LmNvbmYuYWxsLmFycF9maWx0ZXIgPSAxCiAgdG8gdGhlIGZpbGUgL2V0Yy9zeXNjdGwuY29uZgoKICAgICAgb3IsCgogIGluc3RhbGwgdGhlIGludGVyZmFjZXMgaW4gc2VwYXJhdGUgYnJvYWRjYXN0IGRvbWFpbnMgKGVpdGhlciBpbgogIGRpZmZlcmVudCBzd2l0Y2hlcyBvciBpbiBhIHN3aXRjaCBwYXJ0aXRpb25lZCB0byBWTEFOcykuCgogIERpc2FibGUgcnggZmxvdyBjb250cm9sIHdpdGggZXRodG9vbAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEluIG9yZGVyIHRvIGRpc2FibGUgcmVjZWl2ZSBmbG93IGNvbnRyb2wgdXNpbmcgZXRodG9vbCwgeW91IG11c3QgdHVybgogIG9mZiBhdXRvLW5lZ290aWF0aW9uIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZS4KCiAgRm9yIGV4YW1wbGU6CgogICBldGh0b29sIC1BIGV0aD8gYXV0b25lZyBvZmYgcnggb2ZmCgogIFVucGx1Z2dpbmcgbmV0d29yayBjYWJsZSB3aGlsZSBldGh0b29sIC1wIGlzIHJ1bm5pbmcKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgSW4ga2VybmVsIHZlcnNpb25zIDIuNS41MCBhbmQgbGF0ZXIgKGluY2x1ZGluZyAyLjYga2VybmVsKSwgdW5wbHVnZ2luZyAKICB0aGUgbmV0d29yayBjYWJsZSB3aGlsZSBldGh0b29sIC1wIGlzIHJ1bm5pbmcgd2lsbCBjYXVzZSB0aGUgc3lzdGVtIHRvIAogIGJlY29tZSB1bnJlc3BvbnNpdmUgdG8ga2V5Ym9hcmQgY29tbWFuZHMsIGV4Y2VwdCBmb3IgY29udHJvbC1hbHQtZGVsZXRlLiAgCiAgUmVzdGFydGluZyB0aGUgc3lzdGVtIGFwcGVhcnMgdG8gYmUgdGhlIG9ubHkgcmVtZWR5LgoKICBUcm91YmxlIHBhc3NpbmcgdHJhZmZpYyB3aXRoIG9uIHBvcnRzIDEgYW5kIDIgdXNpbmcgUkhFTDMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBUaGVyZSBpcyBhIGtub3duIGhhcmR3YXJlIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gc29tZSBzeXN0ZW1zIHdpdGggUkhFTDMgCiAga2VybmVscy4gVHJhZmZpYyBvbiBwb3J0cyAxIGFuZCAyIG1heSBiZSBzbG93ZXIgdGhhbiBleHBlY3RlZCBhbmQgcGluZyB0aW1lcwogIGhpZ2hlciB0aGFuIGV4cGVjdGVkLiAKCiAgVGhpcyBpc3N1ZSBNQVkgYmUgcmVzb2x2ZWQgYnkgdXBkYXRpbmcgdG8gdGhlIGxhdGVzdCBrZXJuZWwgYW5kIEJJT1MuIFlvdSBjYW4gCiAgY2hlY2sgeW91ciBzeXN0ZW0ncyBCSU9TIGJ5IGRvd25sb2FkaW5nIHRoZSBMaW51eCBGaXJtd2FyZSBEZXZlbG9wZXIgS2l0IHRoYXQgCiAgY2FuIGJlIG9idGFpbmVkIGF0IGh0dHA6Ly93d3cubGludXhmaXJtd2FyZWtpdC5vcmcvCgogIERvIE5vdCBVc2UgTFJPIFdoZW4gUm91dGluZyBQYWNrZXRzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBEdWUgdG8gYSBrbm93biBnZW5lcmFsIGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCBMUk8gYW5kIHJvdXRpbmcsIGRvIG5vdCB1c2UKICBMUk8gd2hlbiByb3V0aW5nIHBhY2tldHMuCgogIEJ1aWxkIGVycm9yIHdpdGggQXNpYW51eCAzLjAgLSByZWRlZmluaXRpb24gb2YgdHlwZWRlZiAnaXJxX2hhbmRsZXJfdCcKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTb21lIHN5c3RlbXMgbWF5IGV4cGVyaWVuY2UgYnVpbGQgaXNzdWVzIGR1ZSB0byByZWRlZmluaXRpb24gb2YgaXJxX2hhbmRsZXJfdC4gIAogIFRvIHJlc29sdmUgdGhpcyBpc3N1ZSBidWlsZCB0aGUgZHJpdmVyIChzdGVwIDQgYWJvdmUpIHVzaW5nIHRoZSBjb21tYW5kOgoKICAgIG1ha2UgQ0ZMQUdTX0VYVFJBPS1EQVhfUkVMRUFTRV9DT0RFPTEgaW5zdGFsbAoKICBNU0ktWCBJc3N1ZXMgd2l0aCBLZXJuZWxzIGJldHdlZW4gMi42LjE5IC0gMi42LjIxIChpbmNsdXNpdmUpCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEtlcm5lbCBwYW5pY3MgYW5kIGluc3RhYmlsaXR5IG1heSBiZSBvYnNlcnZlZCBvbiBhbnkgTVNJLVggaGFyZHdhcmUgaWYgeW91IAogIHVzZSBpcnFiYWxhbmNlIHdpdGgga2VybmVscyBiZXR3ZWVuIDIuNi4xOSBhbmQgMi42LjIxLiBJZiBzdWNoIHByb2JsZW1zIGFyZSAKICBlbmNvdW50ZXJlZCwgeW91IG1heSBkaXNhYmxlIHRoZSBpcnFiYWxhbmNlIGRhZW1vbiBvciB1cGdyYWRlIHRvIGEgbmV3ZXIgCiAga2VybmVsLgoKICBSeCBQYWdlIEFsbG9jYXRpb24gRXJyb3JzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFBhZ2UgYWxsb2NhdGlvbiBmYWlsdXJlLiBvcmRlcjowIGVycm9ycyBtYXkgb2NjdXIgdW5kZXIgc3RyZXNzIHdpdGgga2VybmVscyAKICAyLjYuMjUgYW5kIGFib3ZlLiBUaGlzIGlzIGNhdXNlZCBieSB0aGUgd2F5IHRoZSBMaW51eCBrZXJuZWwgcmVwb3J0cyB0aGlzIAogIHN0cmVzc2VkIGNvbmRpdGlvbi4KCiAgVW5kZXIgUmVkaGF0IDUuNC1HQSAtIFN5c3RlbSBNYXkgQ3Jhc2ggd2hlbiBDbG9zaW5nIEd1ZXN0IE9TIFdpbmRvdyBhZnRlciAKICBMb2FkaW5nL1VubG9hZGluZyBQaHlzaWNhbCBGdW5jdGlvbiAoUEYpIERyaXZlcgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBEbyBub3QgcmVtb3ZlIHRoZSBpZ2IgZHJpdmVyIGZyb20gRG9tMCB3aGlsZSBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSBhcmUgCiAgYXNzaWduZWQgdG8gZ3Vlc3RzLiBWRnMgbXVzdCBmaXJzdCB1c2UgdGhlIHhtICJwY2ktZGV0YWNoIiBjb21tYW5kIHRvIAogIGhvdC1wbHVnIHRoZSBWRiBkZXZpY2Ugb3V0IG9mIHRoZSBWTSBpdCBpcyBhc3NpZ25lZCB0byBvciBlbHNlIHNodXQgZG93biB0aGUKICBWTS4KCiAgU0xFUzEwIFNQMyByYW5kb20gc3lzdGVtIHBhbmljIHdoZW4gcmVsb2FkaW5nIGRyaXZlcgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFRoaXMgaXMgYSBrbm93biBTTEVTLTEwIFNQMyBpc3N1ZS4gQWZ0ZXIgcmVxdWVzdGluZyBpbnRlcnJ1cHRzIGZvciBNU0ktWCAKICB2ZWN0b3JzLCBzeXN0ZW0gbWF5IHBhbmljLiAKCiAgQ3VycmVudGx5IHRoZSBvbmx5IGtub3duIHdvcmthcm91bmQgaXMgdG8gYnVpbGQgdGhlIGRyaXZlcnMgd2l0aCAKICBDRkxBR1NfRVhUUkE9LURESVNBQkxFX1BDSV9NU0kgaWYgdGhlIGRyaXZlciBuZWVkIHRvIGJlIGxvYWRlZC91bmxvYWRlZC4KICBPdGhlcndpc2UgdGhlIGRyaXZlciBjYW4gYmUgbG9hZGVkIG9uY2UgYW5kIHdpbGwgYmUgc2FmZSwgYnV0IHVubG9hZGluZyBpdCAKICB3aWxsIGxlYWQgdG8gdGhlIGlzc3VlLgoKICBFbmFibGluZyBTUi1JT1YgaW4gYSAzMi1iaXQgTWljcm9zb2Z0KiBXaW5kb3dzKiBTZXJ2ZXIgMjAwOCBHdWVzdCBPUyB1c2luZwogIEludGVsIChSKSA4MjU3Ni1iYXNlZCBHYkUgb3IgSW50ZWwgKFIpIDgyNTk5LWJhc2VkIDEwR2JFIGNvbnRyb2xsZXIgdW5kZXIgS1ZNCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBLVk0gSHlwZXJ2aXNvci9WTU0gc3VwcG9ydHMgZGlyZWN0IGFzc2lnbm1lbnQgb2YgYSBQQ0llIGRldmljZSB0byBhIFZNLiAgVGhpcyAKICBpbmNsdWRlcyB0cmFkaXRpb25hbCBQQ0llIGRldmljZXMsIGFzIHdlbGwgYXMgU1ItSU9WLWNhcGFibGUgZGV2aWNlcyB1c2luZwogIEludGVsIDgyNTc2LWJhc2VkIGFuZCA4MjU5OS1iYXNlZCBjb250cm9sbGVycy4KCiAgV2hpbGUgZGlyZWN0IGFzc2lnbm1lbnQgb2YgYSBQQ0llIGRldmljZSBvciBhbiBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbiAoVkYpCiAgdG8gYSBMaW51eC1iYXNlZCBWTSBydW5uaW5nIDIuNi4zMiBvciBsYXRlciBrZXJuZWwgd29ya3MgZmluZSwgdGhlcmUgaXMgYQogIGtub3duIGlzc3VlIHdpdGggTWljcm9zb2Z0IFdpbmRvd3MgU2VydmVyIDIwMDggVk0gdGhhdCByZXN1bHRzIGluIGEgInllbGxvdyAKICBiYW5nIiBlcnJvci4gVGhpcyBwcm9ibGVtIGlzIHdpdGhpbiB0aGUgS1ZNIFZNTSBpdHNlbGYsIG5vdCB0aGUgSW50ZWwgZHJpdmVyLAogIG9yIHRoZSBTUi1JT1YgbG9naWMgb2YgdGhlIFZNTSwgYnV0IHJhdGhlciB0aGF0IEtWTSBlbXVsYXRlcyBhbiBvbGRlciBDUFUgCiAgbW9kZWwgZm9yIHRoZSBndWVzdHMsIGFuZCB0aGlzIG9sZGVyIENQVSBtb2RlbCBkb2VzIG5vdCBzdXBwb3J0IE1TSS1YCiAgaW50ZXJydXB0cywgd2hpY2ggaXMgYSByZXF1aXJlbWVudCBmb3IgSW50ZWwgU1ItSU9WLiAgCgogIElmIHlvdSB3aXNoIHRvIHVzZSB0aGUgSW50ZWwgODI1NzYgb3IgODI1OTktYmFzZWQgY29udHJvbGxlcnMgaW4gU1ItSU9WIG1vZGUKICB3aXRoIEtWTSBhbmQgYSBNaWNyb3NvZnQgV2luZG93cyBTZXJ2ZXIgMjAwOCBndWVzdCB0cnkgdGhlIGZvbGxvd2luZyAKICB3b3JrYXJvdW5kLiBUaGUgd29ya2Fyb3VuZCBpcyB0byB0ZWxsIEtWTSB0byBlbXVsYXRlIGEgZGlmZmVyZW50IG1vZGVsIG9mIENQVQogIHdoZW4gdXNpbmcgcWVtdSB0byBjcmVhdGUgdGhlIEtWTSBndWVzdDogCgogICAgICAgIi1jcHUgcWVtdTY0LG1vZGVsPTEzIgoKICBIb3N0IG1heSByZWJvb3QgYWZ0ZXIgcmVtb3ZpbmcgUEYgd2hlbiBWRiBpcyBhY3RpdmUgaW4gZ3Vlc3QKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBVc2luZyBrZXJuZWwgdmVyc2lvbnMgZWFybGllciB0aGFuIDMuMiwgZG8gbm90IHVubG9hZCB0aGUgUEYgZHJpdmVyIHdpdGggCiAgYWN0aXZlIFZGcy4gRG9pbmcgdGhpcyB3aWxsIGNhdXNlIHlvdXIgVkZzIHRvIHN0b3Agd29ya2luZyB1bnRpbCB5b3UgcmVsb2FkCiAgdGhlIFBGIGRyaXZlciBhbmQgbWF5IGNhdXNlIGEgc3BvbnRhbmVvdXMgcmVib290IG9mIHlvdXIgc3lzdGVtLgoKClN1cHBvcnQKPT09PT09PQoKRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24sIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0IHdlYnNpdGUgYXQ6CgogICAgd3d3LmludGVsLmNvbS9zdXBwb3J0LwoKb3IgdGhlIEludGVsIFdpcmVkIE5ldHdvcmtpbmcgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlZm9yZ2UgYXQ6CgogICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMTAwMAoKSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCmtlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkCnRvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zZi5uZXQKCkxpY2Vuc2UKPT09PT09PQoKSW50ZWwgR2lnYWJpdCBMaW51eCBkcml2ZXIuCkNvcHlyaWdodChjKSAxOTk5IC0gMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CnVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgpUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCm1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCjUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCgpUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgp0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgoKVHJhZGVtYXJrcwo9PT09PT09PT09CgpJbnRlbCwgSXRhbml1bSwgYW5kIFBlbnRpdW0gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mCkludGVsIENvcnBvcmF0aW9uIG9yIGl0cyBzdWJzaWRpYXJpZXMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyCmNvdW50cmllcy4KCiogT3RoZXIgbmFtZXMgYW5kIGJyYW5kcyBtYXkgYmUgY2xhaW1lZCBhcyB0aGUgcHJvcGVydHkgb2Ygb3RoZXJzLgo=