XHNlY3Rpb257XG1vZHVsZXtwb3BlbjJ9IC0tLQogICAgICAgICBTdWJwcm9jZXNzZXMgd2l0aCBhY2Nlc3NpYmxlIEkvTyBzdHJlYW1zfQoKXGRlY2xhcmVtb2R1bGV7c3RhbmRhcmR9e3BvcGVuMn0KICBccGxhdGZvcm17VW5peCwgV2luZG93c30KXG1vZHVsZXN5bm9wc2lze1N1YnByb2Nlc3NlcyB3aXRoIGFjY2Vzc2libGUgc3RhbmRhcmQgSS9PIHN0cmVhbXMufQpcc2VjdGlvbmF1dGhvcntEcmV3IENzaWxsYWd9e2RyZXdfY3NpbGxhZ0BnZW9jaXRpZXMuY29tfQoKClRoaXMgbW9kdWxlIGFsbG93cyB5b3UgdG8gc3Bhd24gcHJvY2Vzc2VzIGFuZCBjb25uZWN0IHRvIHRoZWlyCmlucHV0L291dHB1dC9lcnJvciBwaXBlcyBhbmQgb2J0YWluIHRoZWlyIHJldHVybiBjb2RlcyB1bmRlcgpcVU5JWHt9IGFuZCBXaW5kb3dzLgoKTm90ZSB0aGF0IHN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMCwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZQp1c2luZyBmdW5jdGlvbnMgZnJvbSB0aGUgXHJlZm1vZHVsZXtvc30gbW9kdWxlIHdoaWNoIGhhdmUgdGhlIHNhbWUKbmFtZXMgYXMgdGhlIGZhY3RvcnkgZnVuY3Rpb25zIGhlcmUsIGJ1dCB0aGUgb3JkZXIgb2YgdGhlIHJldHVybgp2YWx1ZXMgaXMgbW9yZSBpbnR1aXRpdmUgaW4gdGhlIFxyZWZtb2R1bGV7b3N9IG1vZHVsZSB2YXJpYW50cy4KClRoZSBwcmltYXJ5IGludGVyZmFjZSBvZmZlcmVkIGJ5IHRoaXMgbW9kdWxlIGlzIGEgdHJpbyBvZiBmYWN0b3J5CmZ1bmN0aW9ucy4gIEZvciBlYWNoIG9mIHRoZXNlLCBpZiBcdmFye2J1ZnNpemV9IGlzIHNwZWNpZmllZCwgCml0IHNwZWNpZmllcyB0aGUgYnVmZmVyIHNpemUgZm9yIHRoZSBJL08gcGlwZXMuICBcdmFye21vZGV9LCBpZgpwcm92aWRlZCwgc2hvdWxkIGJlIHRoZSBzdHJpbmcgXGNvZGV7J2InfSBvciBcY29kZXsndCd9OyBvbiBXaW5kb3dzCnRoaXMgaXMgbmVlZGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIG9iamVjdHMgc2hvdWxkIGJlIG9wZW5lZAppbiBiaW5hcnkgb3IgdGV4dCBtb2RlLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFx2YXJ7bW9kZX0gaXMKXGNvZGV7J3QnfS4KClRoZSBvbmx5IHdheSB0byByZXRyaWV2ZSB0aGUgcmV0dXJuIGNvZGVzIGZvciB0aGUgY2hpbGQgcHJvY2Vzc2VzIGlzCmJ5IHVzaW5nIHRoZSBcbWV0aG9ke3BvbGwoKX0gb3IgXG1ldGhvZHt3YWl0KCl9IG1ldGhvZHMgb24gdGhlClxjbGFzc3tQb3BlbjN9IGFuZCBcY2xhc3N7UG9wZW40fSBjbGFzc2VzOyB0aGVzZSBhcmUgb25seSBhdmFpbGFibGUgb24KXFVOSVguICBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB1c2luZyB0aGUKXGZ1bmN0aW9ue3BvcGVuMigpfSwgXGZ1bmN0aW9ue3BvcGVuMygpfSwgYW5kIFxmdW5jdGlvbntwb3BlbjQoKX0KZnVuY3Rpb25zLCBvciB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbnMgaW4gdGhlIFxyZWZtb2R1bGV7b3N9IG1vZHVsZS4KKE5vdGUgdGhhdCB0aGUgdHVwbGVzIHJldHVybmVkIGJ5IHRoZSBccmVmbW9kdWxle29zfSBtb2R1bGUncyBmdW5jdGlvbnMKYXJlIGluIGEgZGlmZmVyZW50IG9yZGVyIGZyb20gdGhlIG9uZXMgcmV0dXJuZWQgYnkgdGhlIFxtb2R1bGV7cG9wZW4yfQptb2R1bGUuKQoKXGJlZ2lue2Z1bmNkZXNjfXtwb3BlbjJ9e2NtZFxvcHRpb25hbHssIGJ1ZnNpemVcb3B0aW9uYWx7LCBtb2RlfX19CkV4ZWN1dGVzIFx2YXJ7Y21kfSBhcyBhIHN1Yi1wcm9jZXNzLiAgUmV0dXJucyB0aGUgZmlsZSBvYmplY3RzClxjb2RleyhcdmFye2NoaWxkX3N0ZG91dH0sIFx2YXJ7Y2hpbGRfc3RkaW59KX0uClxlbmR7ZnVuY2Rlc2N9CgpcYmVnaW57ZnVuY2Rlc2N9e3BvcGVuM317Y21kXG9wdGlvbmFseywgYnVmc2l6ZVxvcHRpb25hbHssIG1vZGV9fX0KRXhlY3V0ZXMgXHZhcntjbWR9IGFzIGEgc3ViLXByb2Nlc3MuICBSZXR1cm5zIHRoZSBmaWxlIG9iamVjdHMKXGNvZGV7KFx2YXJ7Y2hpbGRfc3Rkb3V0fSwgXHZhcntjaGlsZF9zdGRpbn0sIFx2YXJ7Y2hpbGRfc3RkZXJyfSl9LgpcZW5ke2Z1bmNkZXNjfQoKXGJlZ2lue2Z1bmNkZXNjfXtwb3BlbjR9e2NtZFxvcHRpb25hbHssIGJ1ZnNpemVcb3B0aW9uYWx7LCBtb2RlfX19CkV4ZWN1dGVzIFx2YXJ7Y21kfSBhcyBhIHN1Yi1wcm9jZXNzLiAgUmV0dXJucyB0aGUgZmlsZSBvYmplY3RzClxjb2RleyhcdmFye2NoaWxkX3N0ZG91dF9hbmRfc3RkZXJyfSwgXHZhcntjaGlsZF9zdGRpbn0pfS4KXHZlcnNpb25hZGRlZHsyLjB9ClxlbmR7ZnVuY2Rlc2N9CgoKT24gXFVOSVgsIGEgY2xhc3MgZGVmaW5pbmcgdGhlIG9iamVjdHMgcmV0dXJuZWQgYnkgdGhlIGZhY3RvcnkKZnVuY3Rpb25zIGlzIGFsc28gYXZhaWxhYmxlLiAgVGhlc2UgYXJlIG5vdCB1c2VkIGZvciB0aGUgV2luZG93cwppbXBsZW1lbnRhdGlvbiwgYW5kIGFyZSBub3QgYXZhaWxhYmxlIG9uIHRoYXQgcGxhdGZvcm0uCgpcYmVnaW57Y2xhc3NkZXNjfXtQb3BlbjN9e2NtZFxvcHRpb25hbHssIGNhcHR1cmVzdGRlcnJcb3B0aW9uYWx7LCBidWZzaXplfX19ClRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGNoaWxkIHByb2Nlc3MuICBOb3JtYWxseSwgXGNsYXNze1BvcGVuM30KaW5zdGFuY2VzIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSBcZnVuY3Rpb257cG9wZW4yKCl9IGFuZApcZnVuY3Rpb257cG9wZW4zKCl9IGZhY3RvcnkgZnVuY3Rpb25zIGRlc2NyaWJlZCBhYm92ZS4KCklmIG5vdCB1c2luZyBvbmUgb2YgdGhlIGhlbHBlciBmdW5jdGlvbnMgdG8gY3JlYXRlIFxjbGFzc3tQb3BlbjN9Cm9iamVjdHMsIHRoZSBwYXJhbWV0ZXIgXHZhcntjbWR9IGlzIHRoZSBzaGVsbCBjb21tYW5kIHRvIGV4ZWN1dGUgaW4gYQpzdWItcHJvY2Vzcy4gIFRoZSBcdmFye2NhcHR1cmVzdGRlcnJ9IGZsYWcsIGlmIHRydWUsIHNwZWNpZmllcyB0aGF0CnRoZSBvYmplY3Qgc2hvdWxkIGNhcHR1cmUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IG9mIHRoZSBjaGlsZCBwcm9jZXNzLgpUaGUgZGVmYXVsdCBpcyBmYWxzZS4gIElmIHRoZSBcdmFye2J1ZnNpemV9IHBhcmFtZXRlciBpcyBzcGVjaWZpZWQsIGl0CnNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgSS9PIGJ1ZmZlcnMgdG8vZnJvbSB0aGUgY2hpbGQgcHJvY2Vzcy4KXGVuZHtjbGFzc2Rlc2N9CgpcYmVnaW57Y2xhc3NkZXNjfXtQb3BlbjR9e2NtZFxvcHRpb25hbHssIGJ1ZnNpemV9fQpTaW1pbGFyIHRvIFxjbGFzc3tQb3BlbjN9LCBidXQgYWx3YXlzIGNhcHR1cmVzIHN0YW5kYXJkIGVycm9yIGludG8gdGhlCnNhbWUgZmlsZSBvYmplY3QgYXMgc3RhbmRhcmQgb3V0cHV0LiAgVGhlc2UgYXJlIHR5cGljYWxseSBjcmVhdGVkCnVzaW5nIFxmdW5jdGlvbntwb3BlbjQoKX0uClx2ZXJzaW9uYWRkZWR7Mi4wfQpcZW5ke2NsYXNzZGVzY30KCgpcc3Vic2VjdGlvbntQb3BlbjMgYW5kIFBvcGVuNCBPYmplY3RzIFxsYWJlbHtwb3BlbjMtb2JqZWN0c319CgpJbnN0YW5jZXMgb2YgdGhlIFxjbGFzc3tQb3BlbjN9IGFuZCBcY2xhc3N7UG9wZW40fSBjbGFzc2VzIGhhdmUgdGhlCmZvbGxvd2luZyBtZXRob2RzOgoKXGJlZ2lue21ldGhvZGRlc2N9e3BvbGx9e30KUmV0dXJucyBcY29kZXstMX0gaWYgY2hpbGQgcHJvY2VzcyBoYXNuJ3QgY29tcGxldGVkIHlldCwgb3IgaXRzIHJldHVybiAKY29kZSBvdGhlcndpc2UuClxlbmR7bWV0aG9kZGVzY30KClxiZWdpbnttZXRob2RkZXNjfXt3YWl0fXt9CldhaXRzIGZvciBhbmQgcmV0dXJucyB0aGUgc3RhdHVzIGNvZGUgb2YgdGhlIGNoaWxkIHByb2Nlc3MuICBUaGUKc3RhdHVzIGNvZGUgZW5jb2RlcyBib3RoIHRoZSByZXR1cm4gY29kZSBvZiB0aGUgcHJvY2VzcyBhbmQKaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBpdCBleGl0ZWQgdXNpbmcgdGhlIFxjZnVuY3Rpb257ZXhpdCgpfQpzeXN0ZW0gY2FsbCBvciBkaWVkIGR1ZSB0byBhIHNpZ25hbC4gIEZ1bmN0aW9ucyB0byBoZWxwIGludGVycHJldCB0aGUKc3RhdHVzIGNvZGUgYXJlIGRlZmluZWQgaW4gdGhlIFxyZWZtb2R1bGV7b3N9IG1vZHVsZTsgc2VlIHNlY3Rpb24KXHJlZntvcy1wcm9jZXNzfSBmb3IgdGhlIFxmdW5jdGlvbntXXHZhcnsqfSgpfSBmYW1pbHkgb2YgZnVuY3Rpb25zLgpcZW5ke21ldGhvZGRlc2N9CgoKVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBhbHNvIGF2YWlsYWJsZTogCgpcYmVnaW57bWVtYmVyZGVzY317ZnJvbWNoaWxkfQpBIGZpbGUgb2JqZWN0IHRoYXQgcHJvdmlkZXMgb3V0cHV0IGZyb20gdGhlIGNoaWxkIHByb2Nlc3MuICBGb3IKXGNsYXNze1BvcGVuNH0gaW5zdGFuY2VzLCB0aGlzIHdpbGwgcHJvdmlkZSBib3RoIHRoZSBzdGFuZGFyZCBvdXRwdXQKYW5kIHN0YW5kYXJkIGVycm9yIHN0cmVhbXMuClxlbmR7bWVtYmVyZGVzY30KClxiZWdpbnttZW1iZXJkZXNjfXt0b2NoaWxkfQpBIGZpbGUgb2JqZWN0IHRoYXQgcHJvdmlkZXMgaW5wdXQgdG8gdGhlIGNoaWxkIHByb2Nlc3MuClxlbmR7bWVtYmVyZGVzY30KClxiZWdpbnttZW1iZXJkZXNjfXtjaGlsZGVycn0KQSBmaWxlIG9iamVjdCB0aGF0IHByb3ZpZGVzIGVycm9yIG91dHB1dCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzLCBpZgpcdmFye2NhcHR1cmVzdGRlcnJ9IHdhcyB0cnVlIGZvciB0aGUgY29uc3RydWN0b3IsIG90aGVyd2lzZQpcY29kZXtOb25lfS4gIFRoaXMgd2lsbCBhbHdheXMgYmUgXGNvZGV7Tm9uZX0gZm9yIFxjbGFzc3tQb3BlbjR9Cmluc3RhbmNlcy4KXGVuZHttZW1iZXJkZXNjfQoKXGJlZ2lue21lbWJlcmRlc2N9e3BpZH0KVGhlIHByb2Nlc3MgSUQgb2YgdGhlIGNoaWxkIHByb2Nlc3MuClxlbmR7bWVtYmVyZGVzY30KCgpcc3Vic2VjdGlvbntGbG93IENvbnRyb2wgSXNzdWVzIFxsYWJlbHtwb3BlbjItZmxvdy1jb250cm9sfX0KCkFueSB0aW1lIHlvdSBhcmUgd29ya2luZyB3aXRoIGFueSBmb3JtIG9mIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiwKY29udHJvbCBmbG93IG5lZWRzIHRvIGJlIGNhcmVmdWxseSB0aG91Z2h0IG91dC4gIFRoaXMgcmVtYWlucyB0aGUgY2FzZQp3aXRoIHRoZSBmaWxlIG9iamVjdHMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUgKG9yIHRoZSBccmVmbW9kdWxle29zfQptb2R1bGUgZXF1aXZhbGVudHMpLgoKJSBFeGFtcGxlIGV4cGxhbmF0aW9uIGFuZCBzdWdnZXN0ZWQgd29yay1hcm91bmRzIHN1YnN0YW50aWFsbHkgc3RvbGVuCiUgZnJvbSBNYXJ0aW4gdm9uIEz2d2lzOgolIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwMC1TZXB0ZW1iZXIvMDA5NDYwLmh0bWwKCldoZW4gcmVhZGluZyBvdXRwdXQgZnJvbSBhIGNoaWxkIHByb2Nlc3MgdGhhdCB3cml0ZXMgYSBsb3Qgb2YgZGF0YSB0bwpzdGFuZGFyZCBlcnJvciB3aGlsZSB0aGUgcGFyZW50IGlzIHJlYWRpbmcgZnJvbSB0aGUgY2hpbGQncyBzdGFuZGFyZApvdXRwdXQsIGEgZGVhZGxvY2sgY2FuIG9jY3VyLiAgQSBzaW1pbGFyIHNpdHVhdGlvbiBjYW4gb2NjdXIgd2l0aCBvdGhlcgpjb21iaW5hdGlvbnMgb2YgcmVhZHMgYW5kIHdyaXRlcy4gIFRoZSBlc3NlbnRpYWwgZmFjdG9ycyBhcmUgdGhhdCBtb3JlCnRoYW4gXGNvbnN0YW50e19QQ19QSVBFX0JVRn0gYnl0ZXMgYXJlIGJlaW5nIHdyaXR0ZW4gYnkgb25lIHByb2Nlc3MgaW4KYSBibG9ja2luZyBmYXNoaW9uLCB3aGlsZSB0aGUgb3RoZXIgcHJvY2VzcyBpcyByZWFkaW5nIGZyb20gdGhlIG90aGVyCnByb2Nlc3MsIGFsc28gaW4gYSBibG9ja2luZyBmYXNoaW9uLgoKVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBkZWFsIHdpdGggdGhpcyBzaXR1YXRpb24uCgpUaGUgc2ltcGxlc3QgYXBwbGljYXRpb24gY2hhbmdlLCBpbiBtYW55IGNhc2VzLCB3aWxsIGJlIHRvIGZvbGxvdyB0aGlzCm1vZGVsIGluIHRoZSBwYXJlbnQgcHJvY2VzczoKClxiZWdpbnt2ZXJiYXRpbX0KaW1wb3J0IHBvcGVuMgoKciwgdywgZSA9IHBvcGVuMi5wb3BlbjMoJ3B5dGhvbiBzbGF2ZS5weScpCmUucmVhZGxpbmVzKCkKci5yZWFkbGluZXMoKQpyLmNsb3NlKCkKZS5jbG9zZSgpCncuY2xvc2UoKQpcZW5ke3ZlcmJhdGltfQoKd2l0aCBjb2RlIGxpa2UgdGhpcyBpbiB0aGUgY2hpbGQ6CgpcYmVnaW57dmVyYmF0aW19CmltcG9ydCBvcwppbXBvcnQgc3lzCgojIG5vdGUgdGhhdCBlYWNoIG9mIHRoZXNlIHByaW50IHN0YXRlbWVudHMKIyB3cml0ZXMgYSBzaW5nbGUgbG9uZyBzdHJpbmcKCnByaW50ID4+c3lzLnN0ZGVyciwgNDAwICogJ3RoaXMgaXMgYSB0ZXN0XG4nCm9zLmNsb3NlKHN5cy5zdGRlcnIuZmlsZW5vKCkpCnByaW50ID4+c3lzLnN0ZG91dCwgNDAwICogJ3RoaXMgaXMgYW5vdGhlciB0ZXN0XG4nClxlbmR7dmVyYmF0aW19CgpJbiBwYXJ0aWN1bGFyLCBub3RlIHRoYXQgXGNvZGV7c3lzLnN0ZGVycn0gbXVzdCBiZSBjbG9zZWQgYWZ0ZXIKd3JpdGluZyBhbGwgZGF0YSwgb3IgXG1ldGhvZHtyZWFkbGluZXMoKX0gd29uJ3QgcmV0dXJuLiAgQWxzbyBub3RlCnRoYXQgXGZ1bmN0aW9ue29zLmNsb3NlKCl9IG11c3QgYmUgdXNlZCwgYXMgXGNvZGV7c3lzLnN0ZGVyci5jbG9zZSgpfQp3b24ndCBjbG9zZSBcY29kZXtzdGRlcnJ9IChvdGhlcndpc2UgYXNzaWduaW5nIHRvIFxjb2Rle3N5cy5zdGRlcnJ9CndpbGwgc2lsZW50bHkgY2xvc2UgaXQsIHNvIG5vIGZ1cnRoZXIgZXJyb3JzIGNhbiBiZSBwcmludGVkKS4KCkFwcGxpY2F0aW9ucyB3aGljaCBuZWVkIHRvIHN1cHBvcnQgYSBtb3JlIGdlbmVyYWwgYXBwcm9hY2ggc2hvdWxkCmludGVncmF0ZSBJL08gb3ZlciBwaXBlcyB3aXRoIHRoZWlyIFxmdW5jdGlvbntzZWxlY3QoKX0gbG9vcHMsIG9yIHVzZQpzZXBhcmF0ZSB0aHJlYWRzIHRvIHJlYWQgZWFjaCBvZiB0aGUgaW5kaXZpZHVhbCBmaWxlcyBwcm92aWRlZCBieQp3aGljaGV2ZXIgXGZ1bmN0aW9ue3BvcGVuKigpfSBmdW5jdGlvbiBvciBcY2xhc3N7UG9wZW4qfSBjbGFzcyB3YXMKdXNlZC4K