ICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVByb3h5IGhvdy10bwogICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gMS42LWRldgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGx5IHRhcnJlYXUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMTUvMDcvMjIKCgoxKSBIb3cgdG8gYnVpbGQgaXQKLS0tLS0tLS0tLS0tLS0tLS0tCgpGaXJzdCwgcGxlYXNlIG5vdGUgdGhhdCB0aGlzIHZlcnNpb24gaXMgYSBkZXZlbG9wbWVudCB2ZXJzaW9uLCBzbyBpbiBnZW5lcmFsIGlmCnlvdSBhcmUgbm90IHVzZWQgdG8gYnVpbGQgZnJvbSBzb3VyY2VzIG9yIGlmIHlvdSBkb24ndCBoYXZlIHRoZSB0aW1lIHRvIHRyYWNrCnZlcnkgZnJlcXVlbnQgdXBkYXRlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpbnN0ZWFkIHlvdSBzd2l0Y2ggdG8gdGhlIHN0YWJsZQp2ZXJzaW9uICgxLjUpIG9yIGZvbGxvdyB0aGUgcGFja2FnZWQgdXBkYXRlcyBwcm92aWRlZCBieSB5b3VyIHNvZnR3YXJlIHZlbmRvcgpvciBMaW51eCBkaXN0cmlidXRpb24uIE1vc3Qgb2YgdGhlbSBhcmUgdGFraW5nIHRoaXMgdGFzayBzZXJpb3VzbHkgYW5kIGFyZQpkb2luZyBhIGdvb2Qgam9iLiBJZiBmb3IgYW55IHJlYXNvbiB5b3UnZCBwcmVmZXIgYSBkaWZmZXJlbnQgdmVyc2lvbiB0aGFuIHRoZQpvbmUgcGFja2FnZWQgZm9yIHlvdXIgc3lzdGVtLCBvciB0byBnZXQgc29tZSBjb21tZXJjaWFsIHN1cHBvcnQsIG90aGVyIGNob2ljZXMKYXJlIGF2YWlsYWJsZSBhdCA6CgogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmhhcHJveHkuY29tLwoKVG8gYnVpbGQgaGFwcm94eSwgeW91IHdpbGwgbmVlZCA6CiAgLSBHTlUgbWFrZS4gTmVpdGhlciBTb2xhcmlzIG5vciBPcGVuQlNEJ3MgbWFrZSB3b3JrIHdpdGggdGhlIEdOVSBNYWtlZmlsZS4KICAgIElmIHlvdSBnZXQgbWFueSBzeW50YXggZXJyb3JzIHdoZW4gcnVubmluZyAibWFrZSIsIHlvdSBtYXkgd2FudCB0byByZXRyeQogICAgd2l0aCAiZ21ha2UiIHdoaWNoIGlzIHRoZSBuYW1lIGNvbW1vbmx5IHVzZWQgZm9yIEdOVSBtYWtlIG9uIEJTRCBzeXN0ZW1zLgogIC0gR0NDIGJldHdlZW4gMi45NSBhbmQgNC44LiBPdGhlcnMgbWF5IHdvcmssIGJ1dCBub3QgdGVzdGVkLgogIC0gR05VIGxkCgpBbHNvLCB5b3UgbWlnaHQgd2FudCB0byBidWlsZCB3aXRoIGxpYnBjcmUgc3VwcG9ydCwgd2hpY2ggd2lsbCBwcm92aWRlIGEgdmVyeQplZmZpY2llbnQgcmVnZXggaW1wbGVtZW50YXRpb24gYW5kIHdpbGwgYWxzbyBmaXggc29tZSBiYWRuZXNzIG9uIFNvbGFyaXMnIG9uZS4KClRvIGJ1aWxkIGhhcHJveHksIHlvdSBoYXZlIHRvIGNob29zZSB5b3VyIHRhcmdldCBPUyBhbW9uZ3N0IHRoZSBmb2xsb3dpbmcgb25lcwphbmQgYXNzaWduIGl0IHRvIHRoZSBUQVJHRVQgdmFyaWFibGUgOgoKICAtIGxpbnV4MjIgICAgIGZvciBMaW51eCAyLjIKICAtIGxpbnV4MjQgICAgIGZvciBMaW51eCAyLjQgYW5kIGFib3ZlIChkZWZhdWx0KQogIC0gbGludXgyNGUgICAgZm9yIExpbnV4IDIuNCB3aXRoIHN1cHBvcnQgZm9yIGEgd29ya2luZyBlcG9sbCAoPiAwLjIxKQogIC0gbGludXgyNiAgICAgZm9yIExpbnV4IDIuNiBhbmQgYWJvdmUKICAtIGxpbnV4MjYyOCAgIGZvciBMaW51eCAyLjYuMjgsIDMueCwgYW5kIGFib3ZlIChlbmFibGVzIHNwbGljZSBhbmQgdHByb3h5KQogIC0gc29sYXJpcyAgICAgZm9yIFNvbGFyaXMgOCBvciAxMCAob3RoZXJzIHVudGVzdGVkKQogIC0gZnJlZWJzZCAgICAgZm9yIEZyZWVCU0QgNSB0byAxMCAob3RoZXJzIHVudGVzdGVkKQogIC0gb3N4ICAgICAgICAgZm9yIE1hYyBPUy9YCiAgLSBvcGVuYnNkICAgICBmb3IgT3BlbkJTRCAzLjEgYW5kIGFib3ZlCiAgLSBhaXg1MSAgICAgICBmb3IgQUlYIDUuMQogIC0gYWl4NTIgICAgICAgZm9yIEFJWCA1LjIKICAtIGN5Z3dpbiAgICAgIGZvciBDeWd3aW4KICAtIGdlbmVyaWMgICAgIGZvciBhbnkgb3RoZXIgT1Mgb3IgdmVyc2lvbi4KICAtIGN1c3RvbSAgICAgIHRvIG1hbnVhbGx5IGFkanVzdCBldmVyeSBzZXR0aW5nCgpZb3UgbWF5IGFsc28gY2hvb3NlIHlvdXIgQ1BVIHRvIGJlbmVmaXQgZnJvbSBzb21lIG9wdGltaXphdGlvbnMuIFRoaXMgaXMKcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBVbHRyYVNwYXJjIG1hY2hpbmVzLiBGb3IgdGhpcywgeW91IGNhbiBhc3NpZ24Kb25lIG9mIHRoZSBmb2xsb3dpbmcgY2hvaWNlcyB0byB0aGUgQ1BVIHZhcmlhYmxlIDoKCiAgLSBpNjg2IGZvciBpbnRlbCBQZW50aXVtUHJvLCBQZW50aXVtIDIgYW5kIGFib3ZlLCBBTUQgQXRobG9uCiAgLSBpNTg2IGZvciBpbnRlbCBQZW50aXVtLCBBTUQgSzYsIFZJQSBDMy4KICAtIHVsdHJhc3BhcmMgOiBTdW4gVWx0cmFTcGFyYyBJL0lJL0lJSS9JViBwcm9jZXNzb3IKICAtIG5hdGl2ZSA6IHVzZSB0aGUgYnVpbGQgbWFjaGluZSdzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zLiBVc2Ugd2l0aAogICAgZXh0cmVtZSBjYXJlLCBhbmQgbmV2ZXIgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChrbm93biB0byBicmVhaykuCiAgLSBnZW5lcmljIDogYW55IG90aGVyIHByb2Nlc3NvciBvciBubyBDUFUtc3BlY2lmaWMgb3B0aW1pemF0aW9uLiAoZGVmYXVsdCkKCkFsdGVybmF0aXZlbHksIHlvdSBtYXkganVzdCBzZXQgdGhlIENQVV9DRkxBR1MgdmFsdWUgdG8gdGhlIG9wdGltYWwgR0NDIG9wdGlvbnMKZm9yIHlvdXIgcGxhdGZvcm0uCgpZb3UgbWF5IHdhbnQgdG8gYnVpbGQgc3BlY2lmaWMgdGFyZ2V0IGJpbmFyaWVzIHdoaWNoIGRvIG5vdCBtYXRjaCB5b3VyIG5hdGl2ZQpjb21waWxlcidzIHRhcmdldC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdHJ1ZSBvbiA2NC1iaXQgc3lzdGVtcyB3aGVuIHlvdSB3YW50CnRvIGJ1aWxkIGEgMzItYml0IGJpbmFyeS4gVXNlIHRoZSBBUkNIIHZhcmlhYmxlIGZvciB0aGlzIHB1cnBvc2UuIFJpZ2h0IG5vdwppdCBvbmx5IGtub3dzIGFib3V0IGEgZmV3IHg4NiB2YXJpYW50cyAoaTM4NixpNDg2LGk1ODYsaTY4Nix4ODZfNjQpLCB0d28KZ2VuZXJpYyBvbmVzICgzMiw2NCkgYW5kIHNldHMgLW0zMi8tbTY0IGFzIHdlbGwgYXMgLW1hcmNoPTxhcmNoPiBhY2NvcmRpbmdseS4KCklmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIFBDUkUgKFBlcmwgQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zKSwgdGhlbiB5b3UKcmVhbGx5IHNob3VsZCBidWlsZCB3aXRoIGxpYnBjcmUgd2hpY2ggaXMgYmV0d2VlbiAyIGFuZCAxMCB0aW1lcyBmYXN0ZXIgdGhhbgpvdGhlciBsaWJjIGltcGxlbWVudGF0aW9ucy4gUmVnZXggYXJlIHVzZWQgZm9yIGhlYWRlciBwcm9jZXNzaW5nIChkZWxldGlvbiwKcmV3cml0aW5nLCBhbGxvdywgZGVueSkuIFRoZSBvbmx5IGluY29udmVuaWVudCBvZiBsaWJwY3JlIGlzIHRoYXQgaXQgaXMgbm90CnlldCB3aWRlbHkgc3ByZWFkLCBzbyBpZiB5b3UgYnVpbGQgZm9yIG90aGVyIHN5c3RlbXMsIHlvdSBtaWdodCBnZXQgaW50bwp0cm91YmxlIGlmIHRoZXkgZG9uJ3QgaGF2ZSB0aGUgZHluYW1pYyBsaWJyYXJ5LiBJbiB0aGlzIHNpdHVhdGlvbiwgeW91IHNob3VsZApzdGF0aWNhbGx5IGxpbmsgbGlicGNyZSBpbnRvIGhhcHJveHkgc28gdGhhdCBpdCB3aWxsIG5vdCBiZSBuZWNlc3NhcnkgdG8KaW5zdGFsbCBpdCBvbiB0YXJnZXQgc3lzdGVtcy4gQXZhaWxhYmxlIGJ1aWxkIG9wdGlvbnMgZm9yIFBDUkUgYXJlIDoKCiAgLSBVU0VfUENSRT0xIHRvIHVzZSBsaWJwY3JlLCBpbiB3aGF0ZXZlciBmb3JtIGlzIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbQogICAgKHNoYXJlZCBvciBzdGF0aWMpCgogIC0gVVNFX1NUQVRJQ19QQ1JFPTEgdG8gdXNlIGEgc3RhdGljIHZlcnNpb24gb2YgbGlicGNyZSBldmVuIGlmIHRoZSBkeW5hbWljCiAgICBvbmUgaXMgYXZhaWxhYmxlLiBUaGlzIHdpbGwgZW5oYW5jZSBwb3J0YWJpbGl0eS4KCiAgLSB3aXRoIG5vIG9wdGlvbiwgdXNlIHlvdXIgT1MgbGliYydzIHN0YW5kYXJkIHJlZ2V4IGltcGxlbWVudGF0aW9uIChkZWZhdWx0KS4KICAgIFdhcm5pbmchIGdyb3VwIHJlZmVyZW5jZXMgb24gU29sYXJpcyBzZWVtIGJyb2tlbi4gVXNlIHN0YXRpYy1wY3JlIHdoZW5ldmVyCiAgICBwb3NzaWJsZS4KClJlY2VudCBzeXN0ZW1zIGNhbiByZXNvbHZlIElQdjYgaG9zdCBuYW1lcyB1c2luZyBnZXRhZGRyaW5mbygpLiBUaGlzIHByaW1pdGl2ZQppcyBub3QgcHJlc2VudCBpbiBhbGwgbGliY3MgYW5kIGRvZXMgbm90IHdvcmsgaW4gYWxsIG9mIHRoZW0gZWl0aGVyLiBTdXBwb3J0IGluCmdsaWJjIHdhcyBicm9rZW4gYmVmb3JlIDIuMy4gU29tZSBlbWJlZGRlZCBsaWJzIG1heSBub3QgcHJvcGVybHkgd29yayBlaXRoZXIsCnRodXMsIHN1cHBvcnQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgbWVhbmluZyB0aGF0IHNvbWUgaG9zdCBuYW1lcyB3aGljaCBvbmx5CnJlc29sdmUgYXMgSVB2NiBhZGRyZXNzZXMgd2lsbCBub3QgcmVzb2x2ZSBhbmQgY29uZmlncyBtaWdodCBlbWl0IGFuIGVycm9yCmR1cmluZyBwYXJzaW5nLiBJZiB5b3Uga25vdyB0aGF0IHlvdXIgT1MgbGliYyBoYXMgcmVsaWFibGUgc3VwcG9ydCBmb3IKZ2V0YWRkcmluZm8oKSwgeW91IGNhbiBhZGQgVVNFX0dFVEFERFJJTkZPPTEgb24gdGhlIG1ha2UgY29tbWFuZCBsaW5lIHRvIGVuYWJsZQppdC4gVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgb3B0aW9uIGZvciBtb3N0IExpbnV4IGRpc3RybyBwYWNrYWdlcnMgc2luY2UgaXQncwp3b3JraW5nIGZpbmUgb24gYWxsIHJlY2VudCBtYWluc3RyZWFtIGRpc3Ryb3MuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBvbgpTb2xhcmlzIDggYW5kIGFib3ZlLCBhcyBpdCdzIGtub3duIHRvIHdvcmsuCgpJdCBpcyBwb3NzaWJsZSB0byBhZGQgbmF0aXZlIHN1cHBvcnQgZm9yIFNTTCB1c2luZyB0aGUgR05VIG1ha2VmaWxlLCBieSBwYXNzaW5nCiJVU0VfT1BFTlNTTD0xIiBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUuIFRoZSBsaWJzc2wgYW5kIGxpYmNyeXB0byB3aWxsCmF1dG9tYXRpY2FsbHkgYmUgbGlua2VkIHdpdGggaGFwcm94eS4gU29tZSBzeXN0ZW1zIGFsc28gcmVxdWlyZSBsaWJ6LCBzbyBpZiB0aGUKYnVpbGQgZmFpbHMgZHVlIHRvIG1pc3Npbmcgc3ltYm9scyBzdWNoIGFzIGRlZmxhdGVJbml0KCksIHRoZW4gdHJ5IGFnYWluIHdpdGgKIkFERExJQj0tbHoiLgoKVG8gbGluayBPcGVuU1NMIHN0YXRpY2FsbHkgYWdhaW5zdCBoYXByb3h5LCBidWlsZCBPcGVuU1NMIHdpdGggdGhlIG5vLXNoYXJlZAprZXl3b3JkIGFuZCBpbnN0YWxsIGl0IHRvIGEgbG9jYWwgZGlyZWN0b3J5LCBzbyB5b3VyIHN5c3RlbSBpcyBub3QgYWZmZWN0ZWQgOgoKICAgICQgZXhwb3J0IFNUQVRJQ0xJQlNTTD0vdG1wL3N0YXRpY2xpYnNzbAogICAgJCAuL2NvbmZpZyAtLXByZWZpeD0kU1RBVElDTElCU1NMIG5vLXNoYXJlZAogICAgJCBtYWtlICYmIG1ha2UgaW5zdGFsbF9zdwoKV2hlbiBidWlsZGluZyBoYXByb3h5LCBwYXNzIHRoYXQgcGF0aCB2aWEgU1NMX0lOQyBhbmQgU1NMX0xJQiB0byBtYWtlIGFuZAppbmNsdWRlIGFkZGl0aW9uYWwgbGlicyB3aXRoIEFERExJQiBpZiBuZWVkZWQgKGluIHRoaXMgY2FzZSBmb3IgZXhhbXBsZSBsaWJkbCk6CgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2IFVTRV9PUEVOU1NMPTEgU1NMX0lOQz0kU1RBVElDTElCU1NML2luY2x1ZGUgU1NMX0xJQj0kU1RBVElDTElCU1NML2xpYiBBRERMSUI9LWxkbAoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBpbmNsdWRlIG5hdGl2ZSBzdXBwb3J0IGZvciBaTElCIHRvIGJlbmVmaXQgZnJvbSBIVFRQCmNvbXByZXNzaW9uLiBGb3IgdGhpcywgcGFzcyAiVVNFX1pMSUI9MSIgb24gdGhlICJtYWtlIiBjb21tYW5kIGxpbmUgYW5kIGVuc3VyZQp0aGF0IHpsaWIgaXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtLiBBbHRlcm5hdGl2ZWx5IGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBsaWJzbHoKZm9yIGEgZmFzdGVyLCBtZW1vcnkgbGVzcywgYnV0IHNsaWdodGx5IGxlc3MgZWZmaWNpZW50IGNvbXByZXNzaW9uLCBieSBwYXNzaW5nCiJVU0VfU0xaPTEiLgoKQnkgZGVmYXVsdCwgdGhlIERFQlVHIHZhcmlhYmxlIGlzIHNldCB0byAnLWcnIHRvIGVuYWJsZSBkZWJ1ZyBzeW1ib2xzLiBJdCBpcwpub3Qgd2lzZSB0byBkaXNhYmxlIGl0IG9uIHVuY29tbW9uIHN5c3RlbXMsIGJlY2F1c2UgaXQncyBvZnRlbiB0aGUgb25seSB3YXkgdG8KZ2V0IGEgY29tcGxldGUgY29yZSB3aGVuIHlvdSBuZWVkIG9uZS4gT3RoZXJ3aXNlLCB5b3UgY2FuIHNldCBERUJVRyB0byAnLXMnIHRvCnN0cmlwIHRoZSBiaW5hcnkuCgpGb3IgZXhhbXBsZSwgSSB1c2UgdGhpcyB0byBidWlsZCBmb3IgU29sYXJpcyA4IDoKCiAgICAkIG1ha2UgVEFSR0VUPXNvbGFyaXMgQ1BVPXVsdHJhc3BhcmMgVVNFX1NUQVRJQ19QQ1JFPTEKCkFuZCBJIGJ1aWxkIGl0IHRoaXMgd2F5IG9uIE9wZW5CU0Qgb3IgRnJlZUJTRCA6CgogICAgJCBnbWFrZSBUQVJHRVQ9ZnJlZWJzZCBVU0VfUENSRT0xIFVTRV9PUEVOU1NMPTEgVVNFX1pMSUI9MQoKQW5kIG9uIGEgY2xhc3NpYyBMaW51eCB3aXRoIFNTTCBhbmQgWkxJQiBzdXBwb3J0IChlZzogUmVkIEhhdCA1LngpIDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgVVNFX1BDUkU9MSBVU0VfT1BFTlNTTD0xIFVTRV9aTElCPTEKCkFuZCBvbiBhIHJlY2VudCBMaW51eCA+PSAyLjYuMjggd2l0aCBTU0wgYW5kIFpMSUIgc3VwcG9ydCA6CgogICAgJCBtYWtlIFRBUkdFVD1saW51eDI2MjggVVNFX1BDUkU9MSBVU0VfT1BFTlNTTD0xIFVTRV9aTElCPTEKCkluIG9yZGVyIHRvIGJ1aWxkIGEgMzItYml0IGJpbmFyeSBvbiBhbiB4ODZfNjQgTGludXggc3lzdGVtIHdpdGggU1NMIHN1cHBvcnQKd2l0aG91dCBzdXBwb3J0IGZvciBjb21wcmVzc2lvbiBidXQgd2hlbiBPcGVuU1NMIHJlcXVpcmVzIFpMSUIgYW55d2F5IDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgQVJDSD1pMzg2IFVTRV9PUEVOU1NMPTEgQURETElCPS1segoKVGhlIFNTTCBzdGFjayBzdXBwb3J0cyBzZXNzaW9uIGNhY2hlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGFsbCBydW5uaW5nCnByb2Nlc3Nlcy4gVGhpcyBpbnZvbHZlcyBzb21lIGF0b21pYyBvcGVyYXRpb25zIGFuZCBzeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucwp3aGljaCBjb21lIGluIG11bHRpcGxlIGZsYXZvcnMgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYW5kIGFyY2hpdGVjdHVyZSA6CgogIEF0b21pYyBvcGVyYXRpb25zIDoKICAgIC0gaW50ZXJuYWwgYXNzZW1ibGVyIHZlcnNpb25zIGZvciB4ODYveDg2XzY0IGFyY2hpdGVjdHVyZXMKCiAgICAtIGdjYyBidWlsdGlucyBmb3Igb3RoZXIgYXJjaGl0ZWN0dXJlcy4gU29tZSBhcmNoaXRlY3R1cmVzIG1pZ2h0IG5vdAogICAgICBiZSBmdWxseSBzdXBwb3J0ZWQgb3IgbWlnaHQgcmVxdWlyZSBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgZ2NjLgogICAgICBJZiB5b3VyIGFyY2hpdGVjdHVyZSBpcyBub3Qgc3VwcG9ydGVkLCB5b3Ugd2lsbHkgaGF2ZSB0byBlaXRoZXIgdXNlCiAgICAgIHB0aHJlYWQgaWYgc3VwcG9ydGVkLCBvciB0byBkaXNhYmxlIHRoZSBzaGFyZWQgY2FjaGUuCgogICAgLSBwdGhyZWFkIChwb3NpeCB0aHJlYWRzKS4gUHRocmVhZHMgYXJlIHZlcnkgY29tbW9uIGJ1dCBpbnRlci1wcm9jZXNzCiAgICAgIHN1cHBvcnQgaXMgbm90IHRoYXQgY29tbW9uLCBhbmQgc29tZSBvbGRlciBvcGVyYXRpbmcgc3lzdGVtcyBkaWQgbm90CiAgICAgIHJlcG9ydCBhbiBlcnJvciB3aGVuIGVuYWJsaW5nIG11bHRpLXByb2Nlc3MgbW9kZSwgc28gdGhleSB1c2VkIHRvCiAgICAgIHNpbGVudGx5IGZhaWwsIHBvc3NpYmx5IGNhdXNpbmcgY3Jhc2hlcy4gTGludXgncyBpbXBsZW1lbnRhdGlvbiBpcwogICAgICBmaW5lLiBPcGVuQlNEIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIGFuZCBkb2Vzbid0IGJ1aWxkLiBGcmVlQlNEIDkgYnVpbGRzCiAgICAgIGFuZCByZXBvcnRzIGFuIGVycm9yIGF0IHJ1bnRpbWUsIHdoaWxlIGNlcnRhaW4gb2xkZXIgdmVyc2lvbnMgbWlnaHQKICAgICAgc2lsZW50bHkgZmFpbC4gUHRocmVhZHMgYXJlIGVuYWJsZWQgdXNpbmcgVVNFX1BUSFJFQURfUFNIQVJFRD0xLgoKICBTeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucyA6CiAgICAtIGludGVybmFsIHNwaW5sb2NrIDogdGhpcyBtb2RlIGlzIE9TLWluZGVwZW5kYW50LCBsaWdodCBidXQgd2lsbCBub3QKICAgICAgc2NhbGUgd2VsbCB0byBtYW55IHByb2Nlc3Nlcy4gSG93ZXZlciwgYWNjZXNzZXMgdG8gdGhlIHNlc3Npb24gY2FjaGUKICAgICAgYXJlIHJhcmUgZW5vdWdoIHRoYXQgdGhpcyBtb2RlIGNvdWxkIGNlcnRhaW5seSBhbHdheXMgYmUgdXNlZC4gVGhpcwogICAgICBpcyB0aGUgZGVmYXVsdCBtb2RlLgoKICAgIC0gRnV0ZXhlcywgd2hpY2ggYXJlIExpbnV4LXNwZWNpZmljIGhpZ2hseSBzY2FsYWJsZSBsaWdodCB3ZWlnaHQgbXV0ZXhlcwogICAgICBpbXBsZW1lbnRlZCBpbiB1c2VyLXNwYWNlIHdpdGggc29tZSBsaW1pdGVkIGFzc2lzdGFuY2UgZnJvbSB0aGUga2VybmVsLgogICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uIExpbnV4IDIuNiBhbmQgYWJvdmUgYW5kIGlzIGVuYWJsZWQgYnkgcGFzc2luZwogICAgICBVU0VfRlVURVg9MQoKICAgIC0gcHRocmVhZCAocG9zaXggdGhyZWFkcykuIFNlZSBhYm92ZS4KCklmIG5vbmUgb2YgdGhlc2UgbWVjaGFuaXNtcyBpcyBzdXBwb3J0ZWQgYnkgeW91ciBwbGF0Zm9ybSwgeW91IG1heSBuZWVkIHRvCmJ1aWxkIHdpdGggVVNFX1BSSVZBVEVfQ0FDSEU9MSB0byB0b3RhbGx5IGRpc2FibGUgU1NMIGNhY2hlIHNoYXJpbmcuIFRoZW4KaXQgaXMgYmV0dGVyIG5vdCB0byBydW4gU1NMIG9uIG11bHRpcGxlIHByb2Nlc3Nlcy4KCklmIHlvdSBuZWVkIHRvIHBhc3Mgb3RoZXIgZGVmaW5lcywgaW5jbHVkZXMsIGxpYnJhcmllcywgZXRjLi4uIHRoZW4gcGxlYXNlCmNoZWNrIHRoZSBNYWtlZmlsZSB0byBzZWUgd2hpY2ggb25lcyB3aWxsIGJlIGF2YWlsYWJsZSBpbiB5b3VyIGNhc2UsIGFuZAp1c2UgdGhlIFVTRV8qIHZhcmlhYmxlcyBpbiB0aGUgTWFrZWZpbGUuCgpBSVggNS4zIGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgZ2VuZXJpYyB0YXJnZXQuIEhvd2V2ZXIsIGZvciB0aGUgYmluYXJ5IHRvCmFsc28gcnVuIG9uIDUuMiBvciBlYXJsaWVyLCB5b3UgbmVlZCB0byBidWlsZCB3aXRoIERFRklORT0iLURfTVNHUVNVUFBPUlQiLApvdGhlcndpc2UgX19mZF9zZWxlY3QoKSB3aWxsIGJlIHVzZWQgd2hpbGUgbm90IGJlaW5nIHByZXNlbnQgaW4gdGhlIGxpYmMsIGJ1dAp0aGlzIGlzIGVhc2lseSBhZGRyZXNzZWQgdXNpbmcgdGhlICJhaXg1MiIgdGFyZ2V0LiBJZiB5b3UgZ2V0IGJ1aWxkIGVycm9ycwpiZWNhdXNlIG9mIHN0cmFuZ2Ugc3ltYm9scyBvciBzZWN0aW9uIG1pc21hdGNoZXMsIHNpbXBseSByZW1vdmUgLWcgZnJvbQpERUJVR19DRkxBR1MuCgpZb3UgY2FuIGVhc2lseSBkZWZpbmUgeW91ciBvd24gdGFyZ2V0IHdpdGggdGhlIEdOVSBNYWtlZmlsZS4gVW5rbm93biB0YXJnZXRzCmFyZSBwcm9jZXNzZWQgd2l0aCBubyBkZWZhdWx0IG9wdGlvbiBleGNlcHQgVVNFX1BPTEw9ZGVmYXVsdC4gU28geW91IGNhbiB2ZXJ5CndlbGwgdXNlIHRoYXQgcHJvcGVydHkgdG8gZGVmaW5lIHlvdXIgb3duIHNldCBvZiBvcHRpb25zLiBVU0VfUE9MTCBjYW4gZXZlbiBiZQpkaXNhYmxlZCBieSBzZXR0aW5nIFVTRV9QT0xMPSIiLiBGb3IgZXhhbXBsZSA6CgogICAgJCBnbWFrZSBUQVJHRVQ9dGlueSBVU0VfUE9MTD0iIiBUQVJHRVRfQ0ZMQUdTPS1mb21pdC1mcmFtZS1wb2ludGVyCgoKMS4xKSBEZXZpY2VBdGxhcyBEZXZpY2UgRGV0ZWN0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSW4gb3JkZXIgdG8gYWRkIERldmljZUF0bGFzIERldmljZSBEZXRlY3Rpb24gc3VwcG9ydCwgeW91IHdvdWxkIG5lZWQgdG8gZG93bmxvYWQKdGhlIEFQSSBzb3VyY2UgY29kZSBmcm9tIGh0dHBzOi8vZGV2aWNlYXRsYXMuY29tL2RldmljZWF0bGFzLWhhcHJveHktbW9kdWxlIGFuZApvbmNlIGV4dHJhY3RlZCA6CgogICAgJCBtYWtlIFRBUkdFVD08dGFyZ2V0PiBVU0VfUENSRT0xIFVTRV9ERVZJQ0VBVExBUz0xIERFVklDRUFUTEFTX1NSQz08cGF0aCB0byB0aGUgQVBJIHJvb3QgZm9sZGVyPgoKT3B0aW9uYWxseSBERVZJQ0VBVExBU19JTkMgYW5kIERFVklDRUFUTEFTX0xJQiBtYXkgYmUgc2V0IHRvIG92ZXJyaWRlIHRoZSBwYXRoCnRvIHRoZSBpbmNsdWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMgcmVzcGVjdGl2ZWx5IGlmIHRoZXkncmUgbm90IGluIHRoZSBzb3VyY2UKZGlyZWN0b3J5LgoKVGhlc2UgYXJlIHN1cHBvcnRlZCBEZXZpY2VBdGxhcyBkaXJlY3RpdmVzIChzZWUgZG9jL2NvbmZpZ3VyYXRpb24udHh0KSA6CiAgLSBkZXZpY2VhdGxhcy1qc29uLWZpbGUgPHBhdGggdG8gdGhlIERldmljZUF0bGFzIEpTT04gZGF0YSBmaWxlPi4KICAtIGRldmljZWF0bGFzLWxvZy1sZXZlbCA8bnVtYmVyPiAoMCB0byAzLCBsZXZlbCBvZiBpbmZvcm1hdGlvbiByZXR1cm5lZCBieQogICAgdGhlIEFQSSwgMCBieSBkZWZhdWx0KS4KICAtIGRldmljZWF0bGFzLXByb3BlcnR5LXNlcGFyYXRvciA8Y2hhcmFjdGVyPiAoY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgdGhlCiAgICBwcm9wZXJ0aWVzIHByb2R1Y2VkIGJ5IHRoZSBBUEksIHwgYnkgZGVmYXVsdCkuCgpTYW1wbGUgY29uZmlndXJhdGlvbiA6CgogICAgZ2xvYmFsCglkZXZpY2VhdGxhcy1qc29uLWZpbGUgPHBhdGggdG8ganNvbiBmaWxlPgoKICAgIC4uLgogICAgZnJvbnRlbmQKCWJpbmQgKjo4ODgxCglkZWZhdWx0X2JhY2tlbmQgc2VydmVycwoJaHR0cC1yZXF1ZXN0IHNldC1oZWFkZXIgWC1EZXZpY2VBdGxhcy1EYXRhICVbcmVxLmZoZHIoVXNlci1BZ2VudCksZGEtY3N2KHByaW1hcnlIYXJkd2FyZVR5cGUsb3NOYW1lLG9zVmVyc2lvbixicm93c2VyTmFtZSxicm93c2VyVmVyc2lvbildCgoKMS4yKSA1MURlZ3JlZXMgRGV2aWNlIERldGVjdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpZb3UgY2FuIGFsc28gaW5jbHVkZSA1MURlZ3JlZXMgZm9yIGluYnVpbHQgZGV2aWNlIGRldGVjdGlvbiBlbmFibGluZyBhdHRyaWJ1dGVzCnN1Y2ggYXMgc2NyZWVuIHNpemUgKHBoeXNpY2FsICYgcGl4ZWxzKSwgc3VwcG9ydGVkIGlucHV0IG1ldGhvZHMsIHJlbGVhc2UgZGF0ZSwKaGFyZHdhcmUgdmVuZG9yIGFuZCBtb2RlbCwgYnJvd3NlciBpbmZvcm1hdGlvbiwgYW5kIGRldmljZSBwcmljZSBhbW9uZyBtYW55Cm90aGVycy4gU3VjaCBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB1c2VyIGV4cGVyaWVuY2Ugb2YgYSB3ZWIKc2l0ZSBieSB0YWlsb3JpbmcgdGhlIHBhZ2UgY29udGVudCwgbGF5b3V0IGFuZCBidXNpbmVzcyBwcm9jZXNzZXMgdG8gdGhlCnByZWNpc2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkZXZpY2UuIFN1Y2ggY3VzdG9taXNhdGlvbnMgaW1wcm92ZSBwcm9maXQgYnkKbWFraW5nIGl0IGVhc2llciBmb3IgY3VzdG9tZXJzIHRvIGdldCB0byB0aGUgaW5mb3JtYXRpb24gb3Igc2VydmljZXMgdGhleQpuZWVkLiBUaGVzZXMgYXR0cmlidXRlcyBvZiB0aGUgZGV2aWNlIG1ha2luZyBhIHdlYiByZXF1ZXN0IGNhbiBiZSBhZGRlZCB0byBIVFRQCmhlYWRlcnMgYXMgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMuCgpJbiBvcmRlciB0byBlbmFibGUgNTFEZWdyZWVzIGdldCB0aGUgNTFEZWdyZWVzIHNvdXJjZSBjb2RlIGZyb20gdGhlIG9mZmljaWFsCmdpdGh1YiByZXBvc2l0b3J5IDoKCiAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tLzUxRGVncmVlc21vYmkvNTFEZWdyZWVzLUMKCnRoZW4gcnVuICdtYWtlJyB3aXRoIFVTRV81MURFR1JFRVMgYW5kIDUxREVHUkVFU19TUkMgc2V0LiBCb3RoIDUxREVHUkVFU19JTkMKYW5kIDUxREVHUkVFU19MSUIgbWF5IGFkZGl0aW9uYWxseSBiZSB1c2VkIHRvIGZvcmNlIHNwZWNpZmljIGRpZmZlcmVudCBwYXRocwpmb3IgLm8gYW5kIC5oLCBidXQgd2lsbCBkZWZhdWx0IHRvIDUxREVHUkVFU19TUkMuIE1ha2Ugc3VyZSB0byByZXBsYWNlCic1MURfUkVQT19QQVRIJyB3aXRoIHRoZSBwYXRoIHRvIHRoZSA1MURlZ3JlZXMgcmVwb3NpdG9yeS4KCjUxRGVncmVlcyBwcm92aWRlIDIgZGlmZmVyZW50IGRldGVjdGlvbiBhbGdvcml0aG1zIDoKICAgIDEuIFBhdHRlcm4gLSBiYWxhbmNlcyBtYWluIG1lbW9yeSB1c2FnZSBhbmQgQ1BVLgogICAgMi4gVHJpZSAtIGEgdmVyeSBoaWdoIHBlcmZvcm1hbmNlIGRldGVjdGlvbiBzb2x1dGlvbiB3aGljaCB1c2VzIG1vcmUgbWFpbgogICAgICAgbWVtb3J5IHRoYW4gUGF0dGVybi4KClRvIG1ha2Ugd2l0aCA1MURlZ3JlZXMgUGF0dGVybiBhbGdvcml0aG0gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBsaW5lLgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNiBVU0VfNTFERUdSRUVTPTEgNTFERUdSRUVTX1NSQz0nNTFEX1JFUE9fUEFUSCcvc3JjL3BhdHRlcm4KClRvIHVzZSB0aGUgNTFEZWdyZWVzIFRyaWUgYWxnb3JpdGhtIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZS4KCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgVVNFXzUxREVHUkVFUz0xIDUxREVHUkVFU19TUkM9JzUxRF9SRVBPX1BBVEgnL3NyYy90cmllCgpBIGRhdGEgZmlsZSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGRldmljZXMsIGJyb3dzZXJzLCBvcGVyYXRpbmcgc3lzdGVtcwphbmQgdGhlaXIgYXNzb2NpYXRlZCBzaWduYXR1cmVzIGlzIHRoZW4gbmVlZGVkLiA1MURlZ3JlZXMgcHJvdmlkZSBhIGZyZWUKZGF0YWJhc2Ugd2l0aCBHaXRodWIgcmVwbyBmb3IgdGhpcyBwdXJwb3NlLiBUaGVzZSBmcmVlIGRhdGEgZmlsZXMgYXJlIGxvY2F0ZWQKaW4gJzUxRF9SRVBPX1BBVEgnL2RhdGEgd2l0aCB0aGUgZXh0ZW5zaW9ucyAuZGF0IGZvciBQYXR0ZXJuIGRhdGEgYW5kIC50cmllIGZvcgpUcmllIGRhdGEuCgpUaGUgY29uZmlndXJhdGlvbiBmaWxlIG5lZWRzIHRvIHNldCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CgogICAgNTFkZWdyZWVzLWRhdGEtZmlsZSAgICAgICAgICAgcGF0aCB0byB0aGUgcGF0dGVybiBvciB0cmllIGRhdGEgZmlsZQogICAgNTFkZWdyZWVzLXByb3BlcnR5LW5hbWUtbGlzdCAgbGlzdCBvZiA1MURlZ3JlZXMgcHJvcGVydGllcyB0byBkZXRlY3QKICAgIDUxZGVncmVlcy1wcm9wZXJ0eS1zZXBhcmF0b3IgIHNlcGFyYXRvciB0byB1c2UgYmV0d2VlbiB2YWx1ZXMKICAgIDUxZGVncmVlcy1jYWNoZS1zaXplICAgICAgICAgIExSVS1iYXNlZCBjYWNoZSBzaXplIChkaXNhYmxlZCBieSBkZWZhdWx0KQoKVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBzZXR0aW5ncyBmb3IgUGF0dGVybi4KCiAgICA1MWRlZ3JlZXMtZGF0YS1maWxlICc1MURfUkVQT19QQVRIJy9kYXRhLzUxRGVncmVlcy1MaXRlLmRhdAogICAgNTFkZWdyZWVzLXByb3BlcnR5LW5hbWUtbGlzdCBJc1RhYmxldCBEZXZpY2VUeXBlIElzTW9iaWxlCiAgICA1MWRlZ3JlZXMtcHJvcGVydHktc2VwYXJhdG9yICwKICAgIDUxZGVncmVlcy1jYWNoZS1zaXplIDEwMDAwCgpIQVByb3h5IG5lZWRzIGEgd2F5IHRvIHBhc3MgZGV2aWNlIGluZm9ybWF0aW9uIHRvIHRoZSBiYWNrZW5kIHNlcnZlcnMuIFRoaXMgaXMKZG9uZSBieSB1c2luZyB0aGUgNTFkIGNvbnZlcnRlciwgd2hpY2ggaW50ZXJjZXB0cyB0aGUgVXNlci1BZ2VudCBoZWFkZXIgYW5kCmNyZWF0ZXMgc29tZSBuZXcgaGVhZGVycy4gVGhpcyBpcyBjb250cm9sbGVkIGluIHRoZSBmcm9udGVuZCBodHRwLWluIHNlY3Rpb24KClRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB3aGljaCBhZGRzIHR3byBuZXcgSFRUUCBoZWFkZXJzIHByZWZpeGVkIFgtNTFELQoKICAgIGZyb250ZW5kIGh0dHAtaW4KICAgICAgICBiaW5kICo6ODA4MQogICAgICAgIGRlZmF1bHRfYmFja2VuZCBzZXJ2ZXJzCiAgICAgICAgaHR0cC1yZXF1ZXN0IHNldC1oZWFkZXIgWC01MUQtRGV2aWNlVHlwZU1vYmlsZVRhYmxldCAlW3JlcS5maGRyKFVzZXItQWdlbnQpLDUxZChEZXZpY2VUeXBlLElzTW9iaWxlLElzVGFibGV0KV0KICAgICAgICBodHRwLXJlcXVlc3Qgc2V0LWhlYWRlciBYLTUxRC1UYWJsZXQgJVtyZXEuZmhkcihVc2VyLUFnZW50KSw1MWQoSXNUYWJsZXQpXQoKSGVyZSwgdHdvIGhlYWRlcnMgYXJlIGNyZWF0ZWQgd2l0aCA1MURlZ3JlZXMgZGF0YSwgWC01MUQtRGV2aWNlVHlwZU1vYmlsZVRhYmxldAphbmQgWC01MUQtVGFibGV0LiBBbnkgbnVtYmVyIG9mIGhlYWRlcnMgY2FuIGJlIGNyZWF0ZWQgdGhpcyB3YXkgYW5kIGNhbiBiZQpuYW1lZCBhbnl0aGluZy4gVGhlIFVzZXItQWdlbnQgaGVhZGVyIGlzIHBhc3NlZCB0byB0aGUgY29udmVydGVyIGluCnJlcS5maGRyKFVzZXItQWdlbnQpLiA1MWQoICkgaW52b2tlcyB0aGUgNTFkZWdyZWVzIGNvbnZlcnRlci4gSXQgY2FuIGJlIHBhc3NlZAp1cCB0byBmaXZlIHByb3BlcnR5IG5hbWVzIG9mIHZhbHVlcyB0byByZXR1cm4uIFZhbHVlcyB3aWxsIGJlIHJldHVybmVkIGluIHRoZQpzYW1lIG9yZGVyLCBzZXBlcmF0ZWQgYnkgdGhlIDUxLWRlZ3JlZXMtcHJvcGVydHktc2VwYXJhdG9yIGNvbmZpZ3VyZWQgZWFybGllci4KSWYgYSBwcm9wZXJ0eSBuYW1lIGNhbid0IGJlIGZvdW5kIHRoZSB2YWx1ZSAnTm9EYXRhJyBpcyByZXR1cm5lZCBpbnN0ZWFkLgoKVGhlIGZyZWUgTGl0ZSBkYXRhIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgc2NyZWVuIHNpemUgaW4gcGl4ZWxzIGFuZAp3aGV0aGVyIHRoZSBkZXZpY2UgaXMgYSBtb2JpbGUuIEEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGlzIGxvY2F0ZWQKb24gdGhlIDUxRGVncmVlcyB3ZWIgc2l0ZSBhdDoKCiAgICBodHRwczovLzUxZGVncmVlcy5jb20vcmVzb3VyY2VzL3Byb3BlcnR5LWRpY3Rpb25hcnkuCgpTb21lIHByb3BlcnRpZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIHRoZSBwYWlkIGZvciBQcmVtaXVtIGFuZCBFbnRlcnByaXNlCnZlcnNpb25zIG9mIDUxRGVncmVlcy4gVGhlc2UgZGF0YSBzZXRzIG5vIG9ubHkgY29udGFpbiBtb3JlIHByb3BlcnRpZXMgYnV0CmFyZSB1cGRhdGVkIHdlZWtseSBhbmQgZGFpbHkgYW5kIGNvbnRhaW4gc2lnbmF0dXJlcyBmb3IgMTAwLDAwMHMgb2YgZGlmZmVyZW50CmRldmljZSBjb21iaW5hdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgZGF0YSBvcHRpb25zIGNvbXBhcmlzb24gd2ViCnBhZ2U6CgogICAgaHR0cHM6Ly81MWRlZ3JlZXMuY29tL2NvbXBhcmUtZGF0YS1vcHRpb25zCgoKMikgSG93IHRvIGluc3RhbGwgaXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRvIGluc3RhbGwgaGFwcm94eSwgeW91IGNhbiBlaXRoZXIgY29weSB0aGUgc2luZ2xlIHJlc3VsdGluZyBiaW5hcnkgdG8gdGhlCnBsYWNlIHlvdSB3YW50LCBvciBydW4gOgoKICAgICQgc3VkbyBtYWtlIGluc3RhbGwKCklmIHlvdSdyZSBwYWNrYWdpbmcgaXQgZm9yIGFub3RoZXIgc3lzdGVtLCB5b3UgY2FuIHNwZWNpZnkgaXRzIHJvb3QgZGlyZWN0b3J5CmluIHRoZSB1c3VhbCBERVNURElSIHZhcmlhYmxlLgoKCjMpIEhvdyB0byBzZXQgaXQgdXAKLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlcmUgaXMgc29tZSBkb2N1bWVudGF0aW9uIGluIHRoZSBkb2MvIGRpcmVjdG9yeSA6CgogICAgLSBpbnRyby50eHQgOiB0aGlzIGlzIGFuIGludHJvZHVjdGlvbiB0byBoYXByb3h5LCBpdCBleHBsYWlucyB3aGF0IGl0IGlzCiAgICAgIHdoYXQgaXQgaXMgbm90LiBVc2VmdWwgZm9yIGJlZ2lubmVycyBvciB0byByZS1kaXNjb3ZlciBpdCB3aGVuIHBsYW5uaW5nCiAgICAgIGZvciBhbiB1cGdyYWRlLgoKICAgIC0gYXJjaGl0ZWN0dXJlLnR4dCA6IHRoaXMgaXMgdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwuIEl0IGlzIHF1aXRlIG9sZCBhbmQKICAgICAgZG9lcyBub3QgdGVsbCBhYm91dCB0aGUgbmljZSBuZXcgZmVhdHVyZXMsIGJ1dCBpdCdzIHN0aWxsIGEgZ29vZCBzdGFydGluZwogICAgICBwb2ludCB3aGVuIHlvdSBrbm93IHdoYXQgeW91IHdhbnQgYnV0IGRvbid0IGtub3cgaG93IHRvIGRvIGl0LgoKICAgIC0gY29uZmlndXJhdGlvbi50eHQgOiB0aGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbC4gSXQgcmVjYWxscyBhIGZldwogICAgICBlc3NlbnRpYWwgSFRUUCBiYXNpYyBjb25jZXB0cywgYW5kIGRldGFpbHMgYWxsIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKICAgICAgc3ludGF4IChrZXl3b3JkcywgdW5pdHMpLiBJdCBhbHNvIGRlc2NyaWJlcyB0aGUgbG9nIGFuZCBzdGF0cyBmb3JtYXQuIEl0CiAgICAgIGlzIG5vcm1hbGx5IGFsd2F5cyB1cCB0byBkYXRlLiBJZiB5b3Ugc2VlIHRoYXQgc29tZXRoaW5nIGlzIG1pc3NpbmcgZnJvbQogICAgICBpdCwgcGxlYXNlIHJlcG9ydCBpdCBhcyB0aGlzIGlzIGEgYnVnLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZmlsZSBpcwogICAgICBodWdlIGFuZCB0aGF0IGl0J3MgZ2VuZXJhbGx5IG1vcmUgY29udmVuaWVudCB0byByZXZpZXcgQ3lyaWwgQm9udOkncwogICAgICBIVE1MIHRyYW5zbGF0aW9uIG9ubGluZSBoZXJlIDoKCiAgICAgICAgICAgaHR0cDovL2Nib250ZS5naXRodWIuaW8vaGFwcm94eS1kY29udi9jb25maWd1cmF0aW9uLTEuNS5odG1sCgogICAgLSBoYXByb3h5LWVuLnR4dCAvIGhhcHJveHktZnIudHh0IDogdGhlc2UgYXJlIHRoZSBvbGQgb3V0ZGF0ZWQgZG9jcy4gWW91CiAgICAgIHNob3VsZCBuZXZlciBuZWVkIHRoZW0uIElmIHlvdSBkbywgdGhlbiBwbGVhc2UgcmVwb3J0IHdoYXQgeW91IGRpZG4ndAogICAgICBmaW5kIGluIHRoZSBvdGhlciBvbmVzLgoKICAgIC0gZ3BsLnR4dCAvIGxncGwudHh0IDogdGhlIGNvcHkgb2YgdGhlIGxpY2Vuc2VzIGNvdmVyaW5nIHRoZSBzb2Z0d2FyZS4gU2VlCiAgICAgIHRoZSAnTElDRU5TRScgZmlsZSBhdCB0aGUgdG9wIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgIC0gdGhlIHJlc3QgaXMgbWFpbmx5IGZvciBkZXZlbG9wZXJzLgoKVGhlcmUgYXJlIGFsc28gYSBudW1iZXIgb2YgbmljZSBjb25maWd1cmF0aW9uIGV4YW1wbGVzIGluIHRoZSAiZXhhbXBsZXMiCmRpcmVjdG9yeSBhcyB3ZWxsIGFzIG9uIHNldmVyYWwgc2l0ZXMgYW5kIGFydGljbGVzIG9uIHRoZSBuZXQgd2hpY2ggYXJlIGxpbmtlZAp0byBmcm9tIHRoZSBoYXByb3h5IHdlYiBzaXRlLgoKCjQpIEhvdyB0byByZXBvcnQgYSBidWcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSXQgaXMgcG9zc2libGUgdGhhdCBmcm9tIHRpbWUgdG8gdGltZSB5b3UnbGwgZmluZCBhIGJ1Zy4gQSBidWcgaXMgYSBjYXNlIHdoZXJlCndoYXQgeW91IHNlZSBpcyBub3Qgd2hhdCBpcyBkb2N1bWVudGVkLiBPdGhlcndpc2UgaXQgY2FuIGJlIGEgbWlzZGVzaWduLiBJZiB5b3UKZmluZCB0aGF0IHNvbWV0aGluZyBpcyBzdHVwaWRseSBkZXNpZ24sIHBsZWFzZSBkaXNjdXNzIGl0IG9uIHRoZSBsaXN0IChzZWUgdGhlCiJob3cgdG8gY29udHJpYnV0ZSIgc2VjdGlvbiBiZWxvdykuIElmIHlvdSBmZWVsIGxpa2UgeW91J3JlIHByb2NlZWRpbmcgcmlnaHQKYW5kIGhhcHJveHkgZG9lc24ndCBvYmV5LCB0aGVuIGZpcnN0IGFzayB5b3Vyc2VsZiBpZiBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vYm9keQpiZWZvcmUgeW91IGhhcyBldmVuIGVuY291bnRlcmVkIHRoaXMgaXNzdWUuIElmIGl0J3MgdW5saWtlbHksIHRoZSB5b3UgcHJvYmFibHkKaGF2ZSBhbiBpc3N1ZSBpbiB5b3VyIHNldHVwLiBKdXN0IGluIGNhc2Ugb2YgZG91YnQsIHBsZWFzZSBjb25zdWx0IHRoZSBtYWlsaW5nCmxpc3QgYXJjaGl2ZXMgOgoKICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL21hcmMuaW5mby8/bD1oYXByb3h5CgpPdGhlcndpc2UsIHBsZWFzZSB0cnkgdG8gZ2F0aGVyIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBpbmZvcm1hdGlvbiB0byBoZWxwCnJlcHJvZHVjZSB0aGUgaXNzdWUgYW5kIHNlbmQgdGhhdCB0byB0aGUgbWFpbGluZyBsaXN0IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhcHJveHlAZm9ybWlsdXgub3JnCgpQbGVhc2UgaW5jbHVkZSB5b3VyIGNvbmZpZ3VyYXRpb24gYW5kIGxvZ3MuIFlvdSBjYW4gbWFzayB5b3VyIElQIGFkZHJlc3NlcyBhbmQKcGFzc3dvcmRzLCB3ZSBkb24ndCBuZWVkIHRoZW0uIEJ1dCBpdCdzIGVzc2VudGlhbCB0aGF0IHlvdSBwb3N0IHlvdXIgY29uZmlnIGlmCnlvdSB3YW50IHBlb3BsZSB0byBndWVzcyB3aGF0IGlzIGhhcHBlbmluZy4KCkFsc28sIGtlZXAgaW4gbWluZCB0aGF0IGhhcHJveHkgaXMgZGVzaWduZWQgdG8gTkVWRVIgQ1JBU0guIElmIHlvdSBzZWUgaXQgZGllCndpdGhvdXQgYW55IHJlYXNvbiwgdGhlbiBpdCBkZWZpbml0ZWx5IGlzIGEgY3JpdGljYWwgYnVnIHRoYXQgbXVzdCBiZSByZXBvcnRlZAphbmQgdXJnZW50bHkgZml4ZWQuIEl0IGhhcyBoYXBwZW5lZCBhIGNvdXBsZSBvZiB0aW1lcyBpbiB0aGUgcGFzdCwgZXNzZW50aWFsbHkKb24gZGV2ZWxvcG1lbnQgdmVyc2lvbnMgcnVubmluZyBvbiBuZXcgYXJjaGl0ZWN0dXJlcy4gSWYgeW91IHRoaW5rIHlvdXIgc2V0dXAKaXMgZmFpcmx5IGNvbW1vbiwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZSBpcyB0b3RhbGx5IHVucmVsYXRlZC4KQW55d2F5LCBpZiB0aGF0IGhhcHBlbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IG1lIGRpcmVjdGx5LCBhcyBJIHdpbGwgZ2l2ZSB5b3UKaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBjb2xsZWN0IGEgdXNhYmxlIGNvcmUgZmlsZSwgYW5kIHdpbGwgcHJvYmFibHkgYXNrIGZvcgpvdGhlciBjYXB0dXJlcyB0aGF0IHlvdSdsbCBub3Qgd2FudCB0byBzaGFyZSB3aXRoIHRoZSBsaXN0LgoKCjUpIEhvdyB0byBjb250cmlidXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJdCBpcyBwb3NzaWJsZSB0aGF0IHlvdSdsbCB3YW50IHRvIGFkZCBhIHNwZWNpZmljIGZlYXR1cmUgdG8gc2F0aXNmeSB5b3VyIG5lZWRzCm9yIG9uZSBvZiB5b3VyIGN1c3RvbWVycycuIENvbnRyaWJ1dGlvbnMgYXJlIHdlbGNvbWUsIGhvd2V2ZXIgSSdtIG9mdGVuIHZlcnkKcGlja3kgYWJvdXQgY2hhbmdlcy4gSSB3aWxsIGdlbmVyYWxseSByZWplY3QgcGF0Y2hlcyB0aGF0IGNoYW5nZSBtYXNzaXZlIHBhcnRzCm9mIHRoZSBjb2RlLCBvciB0aGF0IHRvdWNoIHRoZSBjb3JlIHBhcnRzIHdpdGhvdXQgYW55IGdvb2QgcmVhc29uIGlmIHRob3NlCmNoYW5nZXMgaGF2ZSBub3QgYmVlbiBkaXNjdXNzZWQgZmlyc3QuCgpUaGUgcHJvcGVyIHBsYWNlIHRvIGRpc2N1c3MgeW91ciBjaGFuZ2VzIGlzIHRoZSBIQVByb3h5IE1haWxpbmcgTGlzdC4gVGhlcmUgYXJlCmVub3VnaCBza2lsbGVkIHJlYWRlcnMgdG8gY2F0Y2ggaGF6YXJkb3VzIG1pc3Rha2VzIGFuZCB0byBzdWdnZXN0IGltcHJvdmVtZW50cy4KSSB0cnVzdCBhIG51bWJlciBvZiB0aGVtIGVub3VnaCB0byBtZXJnZSBhIHBhdGNoIGlmIHRoZXkgc2F5IGl0J3MgT0ssIHNvIHVzaW5nCnRoZSBsaXN0IGlzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgeW91ciBjb2RlIHJldmlld2VkIGFuZCBtZXJnZWQuIFlvdSBjYW4Kc3Vic2NyaWJlIHRvIGl0IGJ5IHNlbmRpbmcgYW4gZW1wdHkgZS1tYWlsIGF0IHRoZSBmb2xsb3dpbmcgYWRkcmVzcyA6CgogICAgICAgICAgICAgICAgICAgICAgICBoYXByb3h5K3N1YnNjcmliZUBmb3JtaWx1eC5vcmcKCklmIHlvdSBoYXZlIGFuIGlkZWEgYWJvdXQgc29tZXRoaW5nIHRvIGltcGxlbWVudCwgKnBsZWFzZSogZGlzY3VzcyBpdCBvbiB0aGUKbGlzdCBmaXJzdC4gSXQgaGFzIGFscmVhZHkgaGFwcGVuZWQgc2V2ZXJhbCB0aW1lcyB0aGF0IHR3byBwZXJzb25zIGRpZCB0aGUgc2FtZQp0aGluZyBzaW11bHRhbmVvdXNseS4gVGhpcyBpcyBhIHdhc3RlIG9mIHRpbWUgZm9yIGJvdGggb2YgdGhlbS4gSXQncyBhbHNvIHZlcnkKY29tbW9uIHRvIHNlZSBzb21lIGNoYW5nZXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGV5J3JlIGRvbmUgaW4gYSB3YXkgdGhhdCB3aWxsCmNvbmZsaWN0IHdpdGggZnV0dXJlIGV2b2x1dGlvbnMsIG9yIHRoYXQgZG9lcyBub3QgbGVhdmUgYSBnb29kIGZlZWxpbmcuIEl0J3MKYWx3YXlzIHVucGxlYXNhbnQgZm9yIHRoZSBwZXJzb24gd2hvIGRpZCB0aGUgd29yaywgYW5kIGl0IGlzIHVucGxlYXNhbnQgZm9yIG1lCnRvbyBiZWNhdXNlIEkgdmFsdWUgcGVvcGxlJ3MgdGltZSBhbmQgZWZmb3J0cy4gVGhhdCB3b3VsZCBub3QgaGFwcGVuIGlmIHRoZXNlCndlcmUgZGlzY3Vzc2VkIGZpcnN0LiBUaGVyZSBpcyBubyBwcm9ibGVtIHBvc3Rpbmcgd29yayBpbiBwcm9ncmVzcyB0byB0aGUgbGlzdCwKaXQgaGFwcGVucyBxdWl0ZSBvZnRlbiBpbiBmYWN0LiBBbHNvLCBkb24ndCB3YXN0ZSB5b3VyIHRpbWUgd2l0aCB0aGUgZG9jIHdoZW4Kc3VibWl0dGluZyBwYXRjaGVzIGZvciByZXZpZXcsIG9ubHkgYWRkIHRoZSBkb2Mgd2l0aCB0aGUgcGF0Y2ggeW91IGNvbnNpZGVyCnJlYWR5IHRvIG1lcmdlLgoKQW5vdGhlciBpbXBvcnRhbnQgcG9pbnQgY29uY2VybnMgY29kZSBwb3J0YWJpbGl0eS4gSGFwcm94eSByZXF1aXJlcyBnY2MgYXMgdGhlCkMgY29tcGlsZXIsIGFuZCBtYXkgb3IgbWF5IG5vdCB3b3JrIHdpdGggb3RoZXIgY29tcGlsZXJzLiBIb3dldmVyIGl0J3Mga25vd24KdG8gYnVpbGQgdXNpbmcgZ2NjIDIuOTUgb3IgYW55IGxhdGVyIHZlcnNpb24uIEFzIHN1Y2gsIGl0IGlzIGltcG9ydGFudCB0byBrZWVwCmluIG1pbmQgdGhhdCBjZXJ0YWluIGZhY2lsaXRpZXMgb2ZmZXJlZCBieSByZWNlbnQgdmVyc2lvbnMgbXVzdCBub3QgYmUgdXNlZCBpbgp0aGUgY29kZSA6CgogIC0gZGVjbGFyYXRpb25zIG1peGVkIGluIHRoZSBjb2RlIChyZXF1aXJlcyBnY2MgPj0gMy54KQogIC0gR0NDIGJ1aWx0aW5zIHdpdGhvdXQgY2hlY2tpbmcgZm9yIHRoZWlyIGF2YWlsYWJpbGl0eSBiYXNlZCBvbiB2ZXJzaW9uIGFuZAogICAgYXJjaGl0ZWN0dXJlIDsKICAtIGFzc2VtYmx5IGNvZGUgd2l0aG91dCBhbnkgYWx0ZXJuYXRlIHBvcnRhYmxlIGZvcm0gZm9yIG90aGVyIHBsYXRmb3JtcwogIC0gdXNlIG9mIHN0ZGJvb2wuaCwgImJvb2wiLCAiZmFsc2UiLCAidHJ1ZSIgOiBzaW1wbHkgdXNlICJpbnQiLCAiMCIsICIxIgogIC0gaW4gZ2VuZXJhbCwgYW55dGhpbmcgd2hpY2ggcmVxdWlyZXMgQzk5IChzdWNoIGFzIGRlY2xhcmluZyB2YXJpYWJsZXMgaW4KICAgICJmb3IiIHN0YXRlbWVudHMpCgpTaW5jZSBtb3N0IG9mIHRoZXNlIHJlc3RyaWN0aW9ucyBhcmUganVzdCBhIG1hdHRlciBvZiBjb2Rpbmcgc3R5bGUsIGl0IGlzCm5vcm1hbGx5IG5vdCBhIHByb2JsZW0gdG8gY29tcGx5LgoKSWYgeW91ciB3b3JrIGlzIHZlcnkgY29uZmlkZW50aWFsIGFuZCB5b3UgY2FuJ3QgcHVibGljbHkgZGlzY3VzcyBpdCwgeW91IGNhbgphbHNvIG1haWwgbWUgZGlyZWN0bHkgYWJvdXQgaXQsIGJ1dCB5b3VyIG1haWwgbWF5IGJlIHdhaXRpbmcgc2V2ZXJhbCBkYXlzIGluCnRoZSBxdWV1ZSBiZWZvcmUgeW91IGdldCBhIHJlc3BvbnNlLgoKSWYgeW91J2QgbGlrZSBhIGZlYXR1cmUgdG8gYmUgYWRkZWQgYnV0IHlvdSB0aGluayB5b3UgZG9uJ3QgaGF2ZSB0aGUgc2tpbGxzIHRvCmltcGxlbWVudCBpdCB5b3Vyc2VsZiwgeW91IHNob3VsZCBmb2xsb3cgdGhlc2Ugc3RlcHMgOgoKICAgIDEuIGRpc2N1c3MgdGhlIGZlYXR1cmUgb24gdGhlIG1haWxpbmcgbGlzdC4gSXQgaXMgcG9zc2libGUgdGhhdCBzb21lb25lCiAgICAgICBlbHNlIGhhcyBhbHJlYWR5IGltcGxlbWVudGVkIGl0LCBvciB0aGF0IHNvbWVvbmUgd2lsbCB0ZWxsIHlvdSBob3cgdG8KICAgICAgIHByb2NlZWQgd2l0aG91dCBpdCwgb3IgZXZlbiB3aHkgbm90IHRvIGRvIGl0LiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQKICAgICAgIGluIGZhY3QgaXQncyBxdWl0ZSBlYXN5IHRvIGltcGxlbWVudCBhbmQgcGVvcGxlIHdpbGwgZ3VpZGUgeW91IHRocm91Z2gKICAgICAgIHRoZSBwcm9jZXNzLiBUaGF0IHdheSB5b3UnbGwgZmluYWxseSBoYXZlIFlPVVIgcGF0Y2ggbWVyZ2VkLCBwcm92aWRpbmcKICAgICAgIHRoZSBmZWF0dXJlIFlPVSBuZWVkLgoKICAgIDIuIGlmIHlvdSByZWFsbHkgY2FuJ3QgY29kZSBpdCB5b3Vyc2VsZiBhZnRlciBkaXNjdXNzaW5nIGl0LCB0aGVuIHlvdSBtYXkKICAgICAgIGNvbnNpZGVyIGNvbnRhY3Rpbmcgc29tZW9uZSB0byBkbyB0aGUgam9iIGZvciB5b3UuIFNvbWUgcGVvcGxlIG9uIHRoZQogICAgICAgbGlzdCBtaWdodCBzb21ldGltZXMgYmUgT0sgd2l0aCB0cnlpbmcgdG8gZG8gaXQuCgpOb3RlIHRvIGNvbnRyaWJ1dG9yczogaXQncyB2ZXJ5IGhhbmR5IHdoZW4gcGF0Y2hlcyBjb21lcyB3aXRoIGEgcHJvcGVybHkKZm9ybWF0ZWQgc3ViamVjdC4gVGhlcmUgYXJlIDMgY3JpdGVyaWEgb2YgcGFydGljdWxhciBpbXBvcnRhbmNlIGluIGFueSBwYXRjaCA6CgogIC0gaXRzIG5hdHVyZSAoaXMgaXQgYSBmaXggZm9yIGEgYnVnLCBhIG5ldyBmZWF0dXJlLCBhbiBvcHRpbWl6YXRpb24sIC4uLikKICAtIGl0cyBpbXBvcnRhbmNlLCB3aGljaCBnZW5lcmFsbHkgcmVmbGVjdHMgdGhlIHJpc2sgb2YgbWVyZ2luZy9ub3QgbWVyZ2luZyBpdAogIC0gd2hhdCBhcmVhIGl0IGFwcGxpZXMgdG8gKGVnOiBodHRwLCBzdGF0cywgc3RhcnR1cCwgY29uZmlnLCBkb2MsIC4uLikKCkl0J3MgaW1wb3J0YW50IHRvIG1ha2UgdGhlc2UgMyBjcml0ZXJpYSBlYXN5IHRvIHNwb3QgaW4gdGhlIHBhdGNoJ3Mgc3ViamVjdCwKYmVjYXVzZSBpdCdzIHRoZSBmaXJzdCAoYW5kIHNvbWV0aW1lcyB0aGUgb25seSkgdGhpbmcgd2hpY2ggaXMgcmVhZCB3aGVuCnJldmlld2luZyBwYXRjaGVzIHRvIGZpbmQgd2hpY2ggb25lcyBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgdG8gb2xkZXIgdmVyc2lvbnMuCgpTcGVjaWZpY2FsbHksIGJ1Z3MgbXVzdCBiZSBjbGVhcmx5IGVhc3kgdG8gc3BvdCBzbyB0aGF0IHRoZXkncmUgbmV2ZXIgbWlzc2VkLgpBbnkgcGF0Y2ggZml4aW5nIGEgYnVnIG11c3QgaGF2ZSB0aGUgIkJVRyIgdGFnIGluIGl0cyBzdWJqZWN0LiBNb3N0IGNvbW1vbgpwYXRjaCB0eXBlcyBpbmNsdWRlIDoKCiAgLSBCVUcgICAgICBmaXggZm9yIGEgYnVnLiBUaGUgc2V2ZXJpdHkgb2YgdGhlIGJ1ZyBzaG91bGQgYWxzbyBiZSBpbmRpY2F0ZWQKICAgICAgICAgICAgIHdoZW4ga25vd24uIFNpbWlsYXJseSwgaWYgYSBiYWNrcG9ydCBpcyBuZWVkZWQgdG8gb2xkZXIgdmVyc2lvbnMsCiAgICAgICAgICAgICBpdCBzaG91bGQgYmUgaW5kaWNhdGVkIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLiBJZgogICAgICAgICAgICAgdGhlIGJ1ZyBoYXMgYmVlbiBpZGVudGlmaWVkIGFzIGEgcmVncmVzc2lvbiBicm91Z2h0IGJ5IGEgc3BlY2lmaWMKICAgICAgICAgICAgIHBhdGNoIG9yIHZlcnNpb24sIHRoaXMgaW5kaWNhdGlvbiB3aWxsIGJlIGFwcHJlY2lhdGVkIHRvby4gTmV3CiAgICAgICAgICAgICBtYWludGVuYW5jZSByZWxlYXNlcyBhcmUgZ2VuZXJhbGx5IGVtaXR0ZWQgd2hlbiBhIGZldyBvZiB0aGVzZQogICAgICAgICAgICAgcGF0Y2hlcyBhcmUgbWVyZ2VkLgoKICAtIENMRUFOVVAgIGNvZGUgY2xlYW51cCwgc2lsZW5jZSBvZiB3YXJuaW5ncywgZXRjLi4uIHRoZW9yaWNhbGx5IG5vIGltcGFjdC4KICAgICAgICAgICAgIFRoZXNlIHBhdGNoZXMgd2lsbCByYXJlbHkgYmUgc2VlbiBpbiBzdGFibGUgYnJhbmNoZXMsIHRob3VnaCB0aGV5CiAgICAgICAgICAgICBtYXkgYXBwZWFyIHdoZW4gdGhleSByZW1vdmUgc29tZSBhbm5veWFuY2Ugb3Igd2hlbiB0aGV5IG1ha2UKICAgICAgICAgICAgIGJhY2twb3J0aW5nIGVhc2llci4gQnkgbmF0dXJlLCBhIGNsZWFudXAgaXMgYWx3YXlzIG1pbm9yLgoKICAtIFJFT1JHICAgIGNvZGUgcmVvcmdhbml6YXRpb24uIFNvbWUgYmxvY2tzIG1heSBiZSBtb3ZlZCB0byBvdGhlciBwbGFjZXMsCiAgICAgICAgICAgICBzb21lIGltcG9ydGFudCBjaGVja3MgbWlnaHQgYmUgc3dhcHBlZCwgZXRjLi4uIFRoZXNlIGNoYW5nZXMKICAgICAgICAgICAgIGFsd2F5cyBwcmVzZW50IGEgcmlzayBvZiByZWdyZXNzaW9uLiBGb3IgdGhpcyByZWFzb24sIHRoZXkgc2hvdWxkCiAgICAgICAgICAgICBuZXZlciBiZSBtaXhlZCB3aXRoIGFueSBidWcgZml4IG5vciBmdW5jdGlvbmFsIGNoYW5nZS4gQ29kZSBpcwogICAgICAgICAgICAgb25seSBtb3ZlZCBhcy1pcy4gSW5kaWNhdGluZyB0aGUgcmlzayBvZiBicmVha2FnZSBpcyBoaWdobHkKICAgICAgICAgICAgIHJlY29tbWVuZGVkLgoKICAtIEJVSUxEICAgIHVwZGF0ZXMgb3IgZml4ZXMgZm9yIGJ1aWxkIGlzc3Vlcy4gQ2hhbmdlcyB0byBtYWtlZmlsZXMgYWxzbyBmYWxsCiAgICAgICAgICAgICBpbnRvIHRoaXMgY2F0ZWdvcnkuIFRoZSByaXNrIG9mIGJyZWFrYWdlIHNob3VsZCBiZSBpbmRpY2F0ZWQgaWYKICAgICAgICAgICAgIGtub3duLiBJdCBpcyBhbHNvIGFwcHJlY2lhdGVkIHRvIGluZGljYXRlIHdoYXQgcGxhdGZvcm1zIGFuZC9vcgogICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgd2VyZSB0ZXN0ZWQgYWZ0ZXIgdGhlIGNoYW5nZS4KCiAgLSBPUFRJTSAgICBzb21lIGNvZGUgd2FzIG9wdGltaXNlZC4gU29tZXRpbWVzIGlmIHRoZSByZWdyZXNzaW9uIHJpc2sgaXMgdmVyeQogICAgICAgICAgICAgbG93IGFuZCB0aGUgZ2FpbnMgc2lnbmlmaWNhbnQsIHN1Y2ggcGF0Y2hlcyBtYXkgYmUgbWVyZ2VkIGluIHRoZQogICAgICAgICAgICAgc3RhYmxlIGJyYW5jaC4gRGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgY29kZSBjaGFuZ2VkIG9yIHJlcGxhY2VkCiAgICAgICAgICAgICBhbmQgdGhlIGxldmVsIG9mIHRydXN0IHRoZSBhdXRob3IgaGFzIGluIHRoZSBjaGFuZ2UsIHRoZSByaXNrIG9mCiAgICAgICAgICAgICByZWdyZXNzaW9uIHNob3VsZCBiZSBpbmRpY2F0ZWQuCgogIC0gUkVMRUFTRSAgcmVsZWFzZSBvZiBhIG5ldyB2ZXJzaW9uIChkZXZlbG9wbWVudCBvciBzdGFibGUpLgoKICAtIExJQ0VOU0UgIGxpY2Vuc2luZyB1cGRhdGVzIChtYXkgaW1wYWN0IGRpc3RybyBwYWNrYWdlcnMpLgoKCldoZW4gdGhlIHBhdGNoIGNhbm5vdCBiZSBjYXRlZ29yaXplZCwgaXQncyBiZXN0IG5vdCB0byBwdXQgYW55IHRhZy4gVGhpcyBpcwpjb21tb25seSB0aGUgY2FzZSBmb3IgbmV3IGZlYXR1cmVzLCB3aGljaCBkZXZlbG9wbWVudCB2ZXJzaW9ucyBhcmUgbW9zdGx5IG1hZGUKb2YuCgpBZGRpdGlvbmFsbHksIHRoZSBpbXBvcnRhbmNlIG9mIHRoZSBwYXRjaCBzaG91bGQgYmUgaW5kaWNhdGVkIHdoZW4ga25vd24uIEEKc2luZ2xlIHVwcGVyLWNhc2Ugd29yZCBpcyBwcmVmZXJyZWQsIGFtb25nIDoKCiAgLSBNSU5PUiAgICBtaW5vciBjaGFuZ2UsIHZlcnkgbG93IHJpc2sgb2YgaW1wYWN0LiBJdCBpcyBvZnRlbiB0aGUgY2FzZSBmb3IKICAgICAgICAgICAgIGNvZGUgYWRkaXRpb25zIHRoYXQgZG9uJ3QgdG91Y2ggbGl2ZSBjb2RlLiBGb3IgYSBidWcsIGl0IGdlbmVyYWxseQogICAgICAgICAgICAgaW5kaWNhdGVzIGFuIGFubm95YW5jZSwgbm90aGluZyBtb3JlLgoKICAtIE1FRElVTSAgIG1lZGl1bSByaXNrLCBtYXkgY2F1c2UgdW5leHBlY3RlZCByZWdyZXNzaW9ucyBvZiBsb3cgaW1wb3J0YW5jZSBvcgogICAgICAgICAgICAgd2hpY2ggbWF5IHF1aWNrbHkgYmUgZGlzY292ZXJlZC4gRm9yIGEgYnVnLCBpdCBnZW5lcmFsbHkgaW5kaWNhdGVzCiAgICAgICAgICAgICBzb21ldGhpbmcgb2RkIHdoaWNoIHJlcXVpcmVzIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uIGluIGFuCiAgICAgICAgICAgICB1bmRlc2lyZWQgd2F5IHRvIHdvcmsgYXJvdW5kIHRoZSBpc3N1ZS4KCiAgLSBNQUpPUiAgICBtYWpvciByaXNrIG9mIGhpZGRlbiByZWdyZXNzaW9uLiBUaGlzIGhhcHBlbnMgd2hlbiBJIHJlYXJyYW5nZQogICAgICAgICAgICAgbGFyZ2UgcGFydHMgb2YgY29kZSwgd2hlbiBJIHBsYXkgd2l0aCB0aW1lb3V0cywgd2l0aCB2YXJpYWJsZQogICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25zLCBldGMuLi4gV2Ugc2hvdWxkIG9ubHkgZXhjZXB0aW9uYWxseSBmaW5kIHN1Y2gKICAgICAgICAgICAgIHBhdGNoZXMgaW4gc3RhYmxlIGJyYW5jaGVzLiBGb3IgYSBidWcsIGl0IGluZGljYXRlcyBzZXZlcmUKICAgICAgICAgICAgIHJlbGlhYmlsaXR5IGlzc3VlcyBmb3Igd2hpY2ggd29ya2Fyb3VuZHMgYXJlIGlkZW50aWZpZWQgd2l0aCBvcgogICAgICAgICAgICAgd2l0aG91dCBwZXJmb3JtYW5jZSBpbXBhY3RzLgoKICAtIENSSVRJQ0FMIG1lZGl1bS10ZXJtIHJlbGlhYmlsaXR5IG9yIHNlY3VyaXR5IGlzIGF0IHJpc2sgYW5kIHdvcmthcm91bmRzLAogICAgICAgICAgICAgaWYgdGhleSBleGlzdCwgbWlnaHQgbm90IGFsd2F5cyBiZSBhY2NlcHRhYmxlLiBBbiB1cGdyYWRlIGlzCiAgICAgICAgICAgICBhYnNvbHV0ZWx5IHJlcXVpcmVkLiBBIG1haW50ZW5hbmNlIHJlbGVhc2UgbWF5IGJlIGVtaXR0ZWQgZXZlbiBpZgogICAgICAgICAgICAgb25seSBvbmUgb2YgdGhlc2UgYnVncyBhcmUgZml4ZWQuIE5vdGUgdGhhdCB0aGlzIHRhZyBpcyBvbmx5IHVzZWQKICAgICAgICAgICAgIHdpdGggYnVncy4gU3VjaCBwYXRjaGVzIG11c3QgaW5kaWNhdGUgd2hhdCBpcyB0aGUgZmlyc3QgdmVyc2lvbgogICAgICAgICAgICAgYWZmZWN0ZWQsIGFuZCBpZiBrbm93biwgdGhlIGNvbW1pdCBJRCB3aGljaCBpbnRyb2R1Y2VkIHRoZSBpc3N1ZS4KCklmIHRoaXMgY3JpdGVyaW9uIGRvZXNuJ3QgYXBwbHksIGl0J3MgYmVzdCBub3QgdG8gcHV0IGl0LiBGb3IgaW5zdGFuY2UsIG1vc3QKZG9jIHVwZGF0ZXMgYW5kIG1vc3QgZXhhbXBsZXMgb3IgdGVzdCBmaWxlcyBhcmUganVzdCBhZGRlZCBvciB1cGRhdGVkIHdpdGhvdXQKYW55IG5lZWQgdG8gcXVhbGlmeSBhIGxldmVsIG9mIGltcG9ydGFuY2UuCgpUaGUgYXJlYSB0aGUgcGF0Y2ggYXBwbGllcyB0byBpcyBxdWl0ZSBpbXBvcnRhbnQsIGJlY2F1c2Ugc29tZSBhcmVhcyBhcmUga25vd24KdG8gYmUgc2ltaWxhciBpbiBvbGRlciB2ZXJzaW9ucywgc3VnZ2VzdGluZyBhIGJhY2twb3J0IG1pZ2h0IGJlIGRlc2lyYWJsZSwgYW5kCmNvbnZlcnNlbHksIHNvbWUgYXJlYXMgYXJlIGtub3duIHRvIGJlIHNwZWNpZmljIHRvIG9uZSB2ZXJzaW9uLiBXaGVuIHRoZSB0YWcgaXMKdXNlZCBhbG9uZSwgdXBwZXJjYXNlIGlzIHByZWZlcnJlZCBmb3IgcmVhZGFiaWxpdHksIG90aGVyd2lzZSBsb3dlcmNhc2UgaXMgZmluZQp0b28uIFRoZSBmb2xsb3dpbmcgdGFncyBhcmUgc3VnZ2VzdGVkIGJ1dCBub3QgbGltaXRhdGl2ZSA6CgogLSBkb2MgICAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIG9yIGZpeGVzLiBObyBjb2RlIGlzIGFmZmVjdGVkLCBubyBuZWVkIHRvCiAgICAgICAgICAgICB1cGdyYWRlLiBUaGVzZSBwYXRjaGVzIGNhbiBhbHNvIGJlIHNlbnQgcmlnaHQgYWZ0ZXIgYSBuZXcgZmVhdHVyZSwKICAgICAgICAgICAgIHRvIGRvY3VtZW50IGl0LgoKIC0gZXhhbXBsZXMgIGV4YW1wbGUgZmlsZXMuIEJlIGNhcmVmdWwsIHNvbWV0aW1lcyB0aGVzZSBmaWxlcyBhcmUgcGFja2FnZWQuCgogLSB0ZXN0cyAgICAgcmVncmVzc2lvbiB0ZXN0IGZpbGVzLiBObyBjb2RlIGlzIGFmZmVjdGVkLCBubyBuZWVkIHRvIHVwZ3JhZGUuCgogLSBpbml0ICAgICAgaW5pdGlhbGl6YXRpb24gY29kZSwgYXJndW1lbnRzIHBhcnNpbmcsIGV0Yy4uLgoKIC0gY29uZmlnICAgIGNvbmZpZ3VyYXRpb24gcGFyc2VyLCBtb3N0bHkgdXNlZCB3aGVuIGFkZGluZyBuZXcgY29uZmlnIGtleXdvcmRzCgogLSBodHRwICAgICAgdGhlIEhUVFAgZW5naW5lCgogLSBzdGF0cyAgICAgdGhlIHN0YXRzIHJlcG9ydGluZyBlbmdpbmUgYXMgd2VsbCBhcyB0aGUgc3RhdHMgc29ja2V0IENMSQoKIC0gY2hlY2tzICAgIHRoZSBoZWFsdGggY2hlY2tzIGVuZ2luZSAoZWc6IHdoZW4gYWRkaW5nIG5ldyBjaGVja3MpCgogLSBhY2wgICAgICAgdGhlIEFDTCBwcm9jZXNzaW5nIGNvcmUgb3Igc29tZSBBQ0xzIGZyb20gb3RoZXIgYXJlYXMKCiAtIHBlZXJzICAgICB0aGUgcGVlciBzeW5jaHJvbml6YXRpb24gZW5naW5lCgogLSBsaXN0ZW5lcnMgZXZlcnl0aGluZyByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gc2V0dGluZ3MKCiAtIGZyb250ZW5kICBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gaW5jb21pbmcgY29ubmVjdGlvbiBwcm9jZXNzaW5nCgogLSBiYWNrZW5kICAgZXZlcnl0aGluZyByZWxhdGVkIHRvIExCIGFsZ29yaXRobXMgYW5kIHNlcnZlciBmYXJtCgogLSBzZXNzaW9uICAgc2Vzc2lvbiBwcm9jZXNzaW5nIGFuZCBmbGFncyAodmVyeSBzZW5zaWJsZSwgYmUgY2FyZWZ1bCkKCiAtIHNlcnZlciAgICBzZXJ2ZXIgY29ubmVjdGlvbiBtYW5hZ2VtZW50LCBxdWV1ZWluZwoKIC0gcHJveHkgICAgIHByb3h5IG1haW50ZW5hbmNlIChzdGFydC9zdG9wKQoKIC0gbG9nICAgICAgIGxvZyBtYW5hZ2VtZW50CgogLSBwb2xsICAgICAgYW55IG9mIHRoZSBwb2xsZXJzCgogLSBoYWxvZyAgICAgdGhlIGhhbG9nIHN1Yi1jb21wb25lbnQgaW4gdGhlIGNvbnRyaWIgZGlyZWN0b3J5CgogLSBjb250cmliICAgYW55IGFkZGl0aW9uIHRvIHRoZSBjb250cmliIGRpcmVjdG9yeQoKT3RoZXIgbmFtZXMgbWF5IGJlIGludmVudGVkIHdoZW4gbW9yZSBwcmVjaXNlIGluZGljYXRpb25zIGFyZSBtZWFuaW5nZnVsLCBmb3IKaW5zdGFuY2UgOiAiY29va2llIiB3aGljaCBpbmRpY2F0ZXMgY29va2llIHByb2Nlc3NpbmcgaW4gdGhlIEhUVFAgY29yZS4gTGFzdCwKaW5kaWNhdGluZyB0aGUgbmFtZSBvZiB0aGUgYWZmZWN0ZWQgZmlsZSBpcyBhbHNvIGEgZ29vZCB3YXkgdG8gcXVpY2tseSBzcG90CmNoYW5nZXMuIE1hbnkgY29tbWl0cyB3ZXJlIGFscmVhZHkgdGFnZ2VkIHdpdGggInN0cmVhbV9zb2NrIiBvciAiY2ZncGFyc2UiIGZvcgppbnN0YW5jZS4KCkl0IGlzIGRlc2lyZWQgdGhhdCBBVCBMRUFTVCBvbmUgb2YgdGhlIDMgY3JpdGVyaWEgdGFncyBpcyByZXBvcnRlZCBpbiB0aGUgcGF0Y2gKc3ViamVjdC4gSWRlYWxseSwgd2Ugd291bGQgaGF2ZSB0aGUgMyBtb3N0IG9mdGVuLiBUaGUgdHdvIGZpcnN0IGNyaXRlcmlhIHNob3VsZApiZSBwcmVzZW50IGJlZm9yZSBhIGZpcnN0IGNvbG9uICgnOicpLiBJZiBib3RoIGFyZSBwcmVzZW50LCB0aGVuIHRoZXkgc2hvdWxkIGJlCmRlbGltaXRlZCB3aXRoIGEgc2xhc2ggKCcvJykuIFRoZSAzcmQgY3JpdGVyaW9uIChhcmVhKSBzaG91bGQgYXBwZWFyIG5leHQsIGFsc28KZm9sbG93ZWQgYnkgYSBjb2xvbi4gVGh1cywgYWxsIG9mIHRoZSBmb2xsb3dpbmcgbWVzc2FnZXMgYXJlIHZhbGlkIDoKCkV4YW1wbGVzIG9mIG1lc3NhZ2VzIDoKICAtIERPQzogZG9jdW1lbnQgb3B0aW9ucyBmb3J3YXJkZm9yIHRvIGxvZ2FzYXAKICAtIERPQy9NQUpPUjogcmVvcmdhbml6ZSB0aGUgd2hvbGUgZG9jdW1lbnQgYW5kIGNoYW5nZSBpbmRlbnRpbmcKICAtIEJVRzogc3RhdHM6IGNvbm5lY3Rpb24gcmVzZXQgY291bnRlcnMgbXVzdCBiZSBwbGFpbiBhc2NpaSwgbm90IEhUTUwKICAtIEJVRy9NSU5PUjogc3RhdHM6IGNvbm5lY3Rpb24gcmVzZXQgY291bnRlcnMgbXVzdCBiZSBwbGFpbiBhc2NpaSwgbm90IEhUTUwKICAtIE1FRElVTTogY2hlY2tzOiBzdXBwb3J0IG11bHRpLXBhY2tldCBoZWFsdGggY2hlY2sgcmVzcG9uc2VzCiAgLSBSRUxFQVNFOiBSZWxlYXNlZCB2ZXJzaW9uIDEuNC4yCiAgLSBCVUlMRDogc3RhdHM6IHN0ZGludCBpcyBub3QgcHJlc2VudCBvbiBzb2xhcmlzCiAgLSBPUFRJTS9NSU5PUjogaGFsb2c6IG1ha2UgZmdldHMgcGFyc2UgbW9yZSBieXRlcyBieSBibG9ja3MKICAtIFJFT1JHL01FRElVTTogbW92ZSBzeXNjYWxsIHJlZGVmaW5pdGlvbiB0byBzcGVjaWZpYyBwbGFjZXMKClBsZWFzZSBkbyBub3QgdXNlIHNxdWFyZSBicmFja2V0cyBhbnltb3JlIGFyb3VuZCB0aGUgdGFncywgYmVjYXVzZSB0aGV5IGdpdmUgbWUKbW9yZSB3b3JrIHdoZW4gbWVyZ2luZyBwYXRjaGVzLiBCeSBkZWZhdWx0IEknbSBhc2tpbmcgR2l0IHRvIGtlZXAgdGhlbSBidXQgdGhpcwpjYXVzZXMgdHJvdWJsZSB3aGVuIHBhdGNoZXMgYXJlIHByZWZpeGVkIHdpdGggdGhlIFtQQVRDSF0gdGFnIGJlY2F1c2UgaW4gb3JkZXIKbm90IHRvIHN0b3JlIGl0LCBJIGhhdmUgdG8gaGFuZC1lZGl0IHRoZSBwYXRjaGVzLiBTbyBhcyBvZiBub3csIEkgd2lsbCBhc2sgR2l0CnRvIHJlbW92ZSB3aGF0ZXZlciBpcyBsb2NhdGVkIGJldHdlZW4gc3F1YXJlIGJyYWNrZXRzLCB3aGljaCBpbXBsaWVzIHRoYXQgYW55CnN1YmplY3QgZm9ybWF0dGVkIHRoZSBvbGQgd2F5IHdpbGwgaGF2ZSBpdHMgdGFnIHN0cmlwcGVkIG91dC4KCkluIGZhY3QsIG9uZSBvZiB0aGUgb25seSBzcXVhcmUgYnJhY2tldCB0YWdzIHRoYXQgc3RpbGwgbWFrZXMgc2Vuc2UgaXMgJ1tSRkNdJwphdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0LCB3aGVuIHlvdSdyZSBhc2tpbmcgZm9yIHNvbWVvbmUgdG8gcmV2aWV3IHlvdXIKY2hhbmdlIGJlZm9yZSBnZXR0aW5nIGl0IG1lcmdlZC4gSWYgdGhlIHBhdGNoIGlzIE9LIHRvIGJlIG1lcmdlZCwgdGhlbiBJIGNhbgptZXJnZSBpdCBhcy1pcyBhbmQgdGhlICdbUkZDXScgdGFnIHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkLiBJZiB5b3UgZG9uJ3QKd2FudCBpdCB0byBiZSBtZXJnZWQgYXQgYWxsLCB5b3UgY2FuIHNpbXBseSBzdGF0ZSBpdCBpbiB0aGUgbWVzc2FnZSwgb3IgdXNlIGFuCmFsdGVybmF0ZSAnW1dJUF0nIHRhZyAoIndvcmsgaW4gcHJvZ3Jlc3MiKS4KClRoZSB0YWdzIGFyZSBub3QgcmlnaWQsIGZvbGxvdyB5b3VyIGludHVpdGlvbiBmaXJzdCwgYW55d2F5IEkgcmVzZXJ2ZSB0aGUgcmlnaHQKdG8gY2hhbmdlIHRoZW0gd2hlbiBtZXJnaW5nIHRoZSBwYXRjaC4gSXQgbWF5IGhhcHBlbiB0aGF0IGEgc2FtZSBwYXRjaCBoYXMgYQpkaWZmZXJlbnQgdGFnIGluIHR3byBkaXN0aW5jdCBicmFuY2hlcy4gVGhlIHJlYXNvbiBpcyB0aGF0IGEgYnVnIGluIG9uZSBicmFuY2gKbWF5IGp1c3QgYmUgYSBjbGVhbnVwIGluIHRoZSBvdGhlciBvbmUgYmVjYXVzZSB0aGUgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkLgoKCkZvciBhIG1vcmUgZWZmaWNpZW50IGludGVyYWN0aW9uIGJldHdlZW4gdGhlIG1haW5saW5lIGNvZGUgYW5kIHlvdXIgY29kZSwgSSBjYW4Kb25seSBzdHJvbmdseSBlbmNvdXJhZ2UgeW91IHRvIHRyeSB0aGUgR2l0IHZlcnNpb24gY29udHJvbCBzeXN0ZW0gOgoKICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2dpdC1zY20uY29tLwoKSXQncyB2ZXJ5IGZhc3QsIGxpZ2h0d2VpZ2h0IGFuZCBsZXRzIHlvdSB1bmRvL3JlZG8geW91ciB3b3JrIGFzIG9mdGVuIGFzIHlvdQp3YW50LCB3aXRob3V0IG1ha2luZyB5b3VyIG1pc3Rha2VzIHZpc2libGUgdG8gdGhlIHJlc3Qgb2YgdGhlIHdvcmxkLiBJdCB3aWxsCmRlZmluaXRlbHkgaGVscCB5b3UgY29udHJpYnV0ZSBxdWFsaXR5IGNvZGUgYW5kIHRha2Ugb3RoZXIgcGVvcGxlJ3MgZmVlZGJhY2sKaW4gY29uc2lkZXJhdGlvbi4gSW4gb3JkZXIgdG8gY2xvbmUgdGhlIEhBUHJveHkgR2l0IHJlcG9zaXRvcnkgOgoKICAgICQgZ2l0IGNsb25lIGh0dHA6Ly9naXQuaGFwcm94eS5vcmcvZ2l0L2hhcHJveHktMS41LmdpdCAgICAoc3RhYmxlIDEuNSkKICAgICQgZ2l0IGNsb25lIGh0dHA6Ly9naXQuaGFwcm94eS5vcmcvZ2l0L2hhcHJveHkuZ2l0LyAgICAgICAoZGV2ZWxvcG1lbnQpCgpJZiB5b3UgZGVjaWRlIHRvIHVzZSBHaXQgZm9yIHlvdXIgZGV2ZWxvcG1lbnRzLCB0aGVuIHlvdXIgY29tbWl0IG1lc3NhZ2VzIHdpbGwKaGF2ZSB0aGUgc3ViamVjdCBsaW5lIGluIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGFib3ZlLCB0aGVuIHRoZSB3aG9sZSBkZXNjcmlwdGlvbgpvZiB5b3VyIHdvcmsgKG1haW5seSB3aHkgeW91IGRpZCBpdCkgd2lsbCBiZSBpbiB0aGUgYm9keS4gWW91IGNhbiBkaXJlY3RseSBzZW5kCnlvdXIgY29tbWl0cyB0byB0aGUgbWFpbGluZyBsaXN0LCB0aGUgZm9ybWF0IGlzIGNvbnZlbmllbnQgdG8gcmVhZCBhbmQgcHJvY2Vzcy4KCi0tIGVuZAo=