Name: series-workflowtblpk Phase: Succeeded StartedAt: 2026-09-09 17:34:38 +0000 UTC FinishedAt: 2026-09-09 22:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[0] Phase: Succeeded StartedAt: 2026-09-09 17:34:38 +0000 UTC FinishedAt: 2026-09-09 18:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 17:34:38 +0000 UTC FinishedAt: 2026-09-09 18:21:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8c9190bfd18a2548dea677faed7d6ee11f3cb0c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8c9190bfd18a2548dea677faed7d6ee11f3cb0c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "bcc7cf2e-c8da-4f29-ad06-a344bf762ba4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_flow_cmd_dump", "ovs_vport_cmd_dump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2Zsb3dfY21kX2R1bXAmIzM0OywKICAgICYjMzQ7b3ZzX3Zwb3J0X2NtZF9kdW1wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGxvY2FsX2JoX2Rpc2FibGUoKSBhbmQgbG9jYWxfYmhfZW5hYmxlKCkgYXJvdW5kIHRoZSBkdW1wIGxvb3BzIGluIG92c19mbG93X2NtZF9kdW1wKCkgYW5kIG92c192cG9ydF9jbWRfZHVtcCgpIHdpdGhpbiBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyB0byBoYW5kbGUgYm90dG9tLWhhbGYgZXhlY3V0aW9uIGNvbnRleHQgYW5kIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBhbmQgZG9lcyBub3QgdG91Y2ggZGF0YSBzZXJpYWxpemF0aW9uIG9yIGtlcm5lbC10by11c2VyIGNvcHlpbmcgbG9naWMuIENvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNvbnRleHQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJvdHRvbS1oYWxmIChCSCkgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcGluZyBsb29wcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBoYW5kbGVycyAob3ZzX2Zsb3dfY21kX2R1bXAgYW5kIG92c192cG9ydF9jbWRfZHVtcCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY4YjYyNmQ3N2Y4ZjcyZWU2YzBjOWM3NmY5MzUyODg3ODI3OWUxMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE4OjIwOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IDYzMWEwMzEzNmZhMTQuLmFlMmM5OTI0YWViMDUgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0xNTMzLDYgJiM0MzsxNTMzLDcgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHR9XG4gXG4gXHR0aSA9IHJjdV9kZXJlZmVyZW5jZShkcC1cdTAwM2V0YWJsZS50aSk7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzdHJ1Y3Qgc3dfZmxvdyAqZmxvdztcbiBcdFx0dTMyIGJ1Y2tldCwgb2JqO1xuQEAgLTE1NTIsNiAmIzQzOzE1NTMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGJ1Y2tldDtcbiBcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG9iajtcbiBcdH1cbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gfVxuQEAgLTI1NjUsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiYjNDM7XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRmb3IgKGkgPSBidWNrZXQ7IGkgXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHZwb3J0ICp2cG9ydDtcbiBcbkBAIC0yNTg1LDYgJiM0MzsyNTg4LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRza2lwID0gMDtcbiBcdH1cbiBvdXQ6XG4mIzQzO1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2Zsb3dfY21kX2R1bXAmIzM0OywKICAgICYjMzQ7b3ZzX3Zwb3J0X2NtZF9kdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJvdHRvbS1oYWxmIChCSCkgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcGluZyBsb29wcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBoYW5kbGVycyAob3ZzX2Zsb3dfY21kX2R1bXAgYW5kIG92c192cG9ydF9jbWRfZHVtcCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4YjYyNmQ3N2Y4ZjcyZWU2YzBjOWM3NmY5MzUyODg3ODI3OWUxMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE4OjIwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCA2MzFhMDMxMzZmYTE0Li5hZTJjOTkyNGFlYjA1IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMTUzMyw2ICYjNDM7MTUzMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCX0KIAogCXRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLSZndDt0YWJsZS50aSk7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBzd19mbG93ICpmbG93OwogCQl1MzIgYnVja2V0LCBvYmo7CkBAIC0xNTUyLDYgJiM0MzsxNTUzLDcgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCWNiLSZndDthcmdzWzBdID0gYnVja2V0OwogCQljYi0mZ3Q7YXJnc1sxXSA9IG9iajsKIAl9CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBza2ItJmd0O2xlbjsKIH0KQEAgLTI1NjUsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlmb3IgKGkgPSBidWNrZXQ7IGkgJmx0OyBEUF9WUE9SVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCB2cG9ydCAqdnBvcnQ7CiAKQEAgLTI1ODUsNiAmIzQzOzI1ODgsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXNraXAgPSAwOwogCX0KIG91dDoKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAljYi0mZ3Q7YXJnc1swXSA9IGk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjQKCQkJCQkJCW91dHB1dDogNzgKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG8gcmV2aWV3IGFuZCBzb21lIGluc3RydWN0aW9ucy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBoYW5kcy1vbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzIOKAkyB0aGUgZGlmZi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcmVhZCB0aGUgY29kZSBpbnZvbHZlZC4gQWZ0ZXIgdGhhdCwgSSB3aWxsIG5lZWQgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhvc2Ugc3BlY2lmaWMgZmlsZXMgYW5kIGxpbmUgbnVtYmVycyB0aGUgaW5zdHJ1Y3Rpb25zIHBvaW50IG91dCwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AgYXJvdW5kIHRoZSBjcml0aWNhbCBzZWN0aW9ucy4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIGEgY29tbWFuZCBsaW5lIHRvIG1ha2UgdGhpcyBlZmZpY2llbnQuIEkmIzM5O20gdGhpbmtpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlciBnZXRzIG1lIHRoZXJlIHRoZSBmYXN0ZXN0LiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgbGluZXMgMTUzMyBhbmQgMjU2NSBhbmQgdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0IGluIHJlbGF0aW9uIHRvIHRoZSBkaWZmLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRpbnQgZXJyO1xuMTUyMTpcdFxuMTUyMjpcdFx0ZXJyID0gZ2VubG1zZ19wYXJzZV9kZXByZWNhdGVkKGNiLVx1MDAzZW5saCwgXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSwgYSxcbjE1MjM6XHRcdFx0XHRcdCAgICAgICBPVlNfRkxPV19BVFRSX01BWCwgZmxvd19wb2xpY3ksIE5VTEwpO1xuMTUyNDpcdFx0aWYgKGVycilcbjE1MjU6XHRcdFx0cmV0dXJuIGVycjtcbjE1MjY6XHRcdHVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dldF91ZmlkX2ZsYWdzKGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7XG4xNTI3Olx0XG4xNTI4Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xNTI5Olx0XHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4KTtcbjE1MzA6XHRcdGlmICghZHApIHtcbjE1MzE6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xNTMyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuMTUzMzpcdFx0fVxuMTUzNDpcdFxuMTUzNTpcdFx0dGkgPSByY3VfZGVyZWZlcmVuY2UoZHAtXHUwMDNldGFibGUudGkpO1xuMTUzNjpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuMTUzNzpcdFx0Zm9yICg7Oykge1xuMTUzODpcdFx0XHRzdHJ1Y3Qgc3dfZmxvdyAqZmxvdztcbjE1Mzk6XHRcdFx0dTMyIGJ1Y2tldCwgb2JqO1xuMTU0MDpcdFxuMTU0MTpcdFx0XHRidWNrZXQgPSBjYi1cdTAwM2VhcmdzWzBdO1xuMTU0MjpcdFx0XHRvYmogPSBjYi1cdTAwM2VhcmdzWzFdO1xuMTU0MzpcdFx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dCh0aSwgXHUwMDI2YnVja2V0LCBcdTAwMjZvYmopO1xuMTU0NDpcdFx0XHRpZiAoIWZsb3cpXG4xNTQ1Olx0XHRcdFx0YnJlYWs7XG4xNTQ2Olx0XG4xNTQ3Olx0XHRcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCwgc2tiLFxuMTU0ODpcdFx0XHRcdFx0XHQgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMTU0OTpcdFx0XHRcdFx0XHQgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBOTE1fRl9NVUxUSSxcbjE1NTA6XHRcdFx0XHRcdFx0ICAgT1ZTX0ZMT1dfQ01EX0dFVCwgdWZpZF9mbGFncykgXHUwMDNjIDApXG4xNTUxOlx0XHRcdFx0YnJlYWs7XG4xNTUyOlx0XG4xNTUzOlx0XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBidWNrZXQ7XG4xNTU0Olx0XHRcdGNiLVx1MDAzZWFyZ3NbMV0gPSBvYmo7XG4xNTU1Olx0XHR9XG4xNTU2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE1NTc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTU1ODpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4xNTU5Olx0fVxuMTU2MDpcdFxuMTU2MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmbG93X3BvbGljeVtPVlNfRkxPV19BVFRSX01BWCAmIzQzOyAxXSA9IHtcbjE1NjI6XHRcdFtPVlNfRkxPV19BVFRSX0tFWV0gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2MzpcdFx0W09WU19GTE9XX0FUVFJfTUFTS10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2NDpcdFx0W09WU19GTE9XX0FUVFJfQUNUSU9OU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2NTpcdFx0W09WU19GTE9XX0FUVFJfQ0xFQVJdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4xNTY2Olx0XHRbT1ZTX0ZMT1dfQVRUUl9QUk9CRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbjE1Njc6XHRcdFtPVlNfRkxPV19BVFRSX1VGSURdID0geyAudHlwZSA9IE5MQV9VTlNQRUMsIC5sZW4gPSAxIH0sXG4xNTY4Olx0XHRbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xNTY5Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTYwOlx0XHRzdHJ1Y3QgZGF0YXBhdGggKmRwO1xuMjU2MTpcdFx0aW50IGJ1Y2tldCA9IGNiLVx1MDAzZWFyZ3NbMF0sIHNraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuMjU2MjpcdFx0aW50IGksIGogPSAwO1xuMjU2MzpcdFxuMjU2NDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjU2NTpcdFx0ZHAgPSBnZXRfZHBfcmN1KHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCk7XG4yNTY2Olx0XHRpZiAoIWRwKSB7XG4yNTY3Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjU2ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjI1Njk6XHRcdH1cbjI1NzA6XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjI1NzE6XHRcdGZvciAoaSA9IGJ1Y2tldDsgaSBcdTAwM2MgRFBfVlBPUlRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOykge1xuMjU3MjpcdFx0XHRzdHJ1Y3QgdnBvcnQgKnZwb3J0O1xuMjU3MzpcdFxuMjU3NDpcdFx0XHRqID0gMDtcbjI1NzU6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZwb3J0LCBcdTAwMjZkcC1cdTAwM2Vwb3J0c1tpXSwgZHBfaGFzaF9ub2RlKSB7XG4yNTc2Olx0XHRcdFx0aWYgKGogXHUwMDNlPSBza2lwIFx1MDAyNlx1MDAyNlxuMjU3NzpcdFx0XHRcdCAgICBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyh2cG9ydCwgc2tiLFxuMjU3ODpcdFx0XHRcdFx0XHRcdCAgICBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuMjU3OTpcdFx0XHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjU4MDpcdFx0XHRcdFx0XHRcdCAgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLFxuMjU4MTpcdFx0XHRcdFx0XHRcdCAgICBOTE1fRl9NVUxUSSxcbjI1ODI6XHRcdFx0XHRcdFx0XHQgICAgT1ZTX1ZQT1JUX0NNRF9HRVQsXG4yNTgzOlx0XHRcdFx0XHRcdFx0ICAgIEdGUF9BVE9NSUMpIFx1MDAzYyAwKVxuMjU4NDpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNTg1Olx0XG4yNTg2Olx0XHRcdFx0aiYjNDM7JiM0Mzs7XG4yNTg3Olx0XHRcdH1cbjI1ODg6XHRcdFx0c2tpcCA9IDA7XG4yNTg5Olx0XHR9XG4yNTkwOlx0b3V0OlxuMjU5MTpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4yNTkyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI1OTM6XHRcbjI1OTQ6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuMjU5NTpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IGo7XG4yNTk2Olx0XG4yNTk3Olx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbjI1OTg6XHR9XG4yNTk5Olx0XG4yNjAwOlx0c3RhdGljIHZvaWQgb3ZzX2RwX21hc2tzX3JlYmFsYW5jZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4yNjAxOlx0e1xuMjYwMjpcdFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG92c19uZXQsXG4yNjAzOlx0XHRcdFx0XHRcdCAgICAgICBtYXNrc19yZWJhbGFuY2Uud29yayk7XG4yNjA0Olx0XHRzdHJ1Y3QgZGF0YXBhdGggKmRwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwODAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBsb2NhbF9iaF9kaXNhYmxlKClgIGFuZCBgbG9jYWxfYmhfZW5hYmxlKClgIGNhbGxzIHdpdGhpbiBgb3ZzX2Zsb3dfY21kX2R1bXBgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9kdW1wYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IGFyZSB3ZSBkaXNhYmxpbmcgYm90dG9tIGhhbHZlcyBoZXJlPyYjMzQ7IEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYmVjYXVzZSBzb21ldGhpbmcgd2l0aGluIGVpdGhlciBgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mb2Agb3IgYG92c192cG9ydF9jbWRfZmlsbF9pbmZvYCDigJMgb3IgcGVyaGFwcyBhIGZ1bmN0aW9uICp0aGV5KiBjYWxsIOKAkyBpcyBjYXVzaW5nIGNvbnRlbnRpb24gb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gYWNjZXNzaW5nIHBlci1DUFUgc3RhdGlzdGljcyBvciBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIGxvY2tkZXAgYXNzZXJ0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGB1NjRfc3RhdHNgLCBSQ1UgdXNhZ2UsIG9yIGdlbmVyYWwgcGVyLUNQVSBkYXRhIGFjY2VzcyB0aGF0IHJlcXVpcmVzIGJvdHRvbSBoYWx2ZXMgdG8gYmUgZGlzYWJsZWQgZm9yIHNhZmUgb3BlcmF0aW9uLiBNYXliZSB0aGVyZSYjMzk7cyBhIGB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5gIGNhbGwgaW4gdGhlcmUgdGhhdCBuZWNlc3NpdGF0ZXMgdGhlIEJIIGRpc2FibGUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgdGhvc2UgdHdvIGZpbGwgZnVuY3Rpb25zIGluIHRoZSBgbmV0L29wZW52c3dpdGNoL2AgZGlyZWN0b3J5LiBUaW1lIHRvIGdyZXAgYW5kIGRpdmUgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfZmxvd19jbWRfZmlsbF9pbmZvfG92c192cG9ydF9jbWRfZmlsbF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTg2Nj1zdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX2FjdGlvbnMoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTA1LS8qIENhbGxlZCB3aXRoIG92c19tdXRleCBvciBSQ1UgcmVhZCBsb2NrLiAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6OTA2OnN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgaW50IGRwX2lmaW5kZXgsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05MDctXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9OTc3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3dfY21kX2J1aWxkX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTg5LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6OTkwOlx0cmV0dmFsID0gb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhmbG93LCBkcF9pZmluZGV4LCBza2IsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05OTEtXHRcdFx0XHRcdGluZm8tXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cdTAwM2VzbmRfc2VxLCAwLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEwMDA9c3RhdGljIGludCBvdnNfZmxvd19jbWRfbmV3KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA5NC1cdFx0aWYgKHVubGlrZWx5KHJlcGx5KSkge1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTA5NTpcdFx0XHRlcnJvciA9IG92c19mbG93X2NtZF9maWxsX2luZm8obmV3X2Zsb3csXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMDk2LVx0XHRcdFx0XHRcdCAgICAgICBvdnNfaGVhZGVyLVx1MDAzZWRwX2lmaW5kZXgsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTE1OS1cdFx0aWYgKHVubGlrZWx5KHJlcGx5KSkge1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTE2MDpcdFx0XHRlcnJvciA9IG92c19mbG93X2NtZF9maWxsX2luZm8oZmxvdyxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTExNjEtXHRcdFx0XHRcdFx0ICAgICAgIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xMjcwPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMzAtXHRcdGlmICh1bmxpa2VseShyZXBseSkpIHtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMzE6XHRcdFx0ZXJyb3IgPSBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzMyLVx0XHRcdFx0XHRcdCAgICAgICBvdnNfaGVhZGVyLVx1MDAzZWRwX2lmaW5kZXgsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTQzMj1zdGF0aWMgaW50IG92c19mbG93X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDg2LVx0aWYgKGxpa2VseShyZXBseSkpIHtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE0ODc6XHRcdGVyciA9IG92c19mbG93X2NtZF9maWxsX2luZm8oZmxvdywgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ4OC1cdFx0XHRcdFx0ICAgICByZXBseSwgaW5mby1cdTAwM2VzbmRfcG9ydGlkLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0OTUtXHR9XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDk2Olx0LyogUmVtb3ZhbCBoYXMgdG8gaGFwcGVuIGFmdGVyIG92c19mbG93X2NtZF9maWxsX2luZm8oKSwgYXMgaXQgdXNlc1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ5Ny1cdCAqIHRoZSBmbG93LVx1MDAzZW1hc2sgdGhhdCBjYW4gYmUgc2NoZWR1bGVkIHRvIGJlIGZyZWVkIGJ5IHRoZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE1MTM9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTU0Ni1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE1NDc6XHRcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCwgc2tiLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTU0OC1cdFx0XHRcdFx0ICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMTQwPXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfZGF0YXBhdGhfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxNTYtLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyMTU3OnN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxNTgtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjI0ND1zdHJ1Y3Qgc2tfYnVmZiAqb3ZzX3Zwb3J0X2NtZF9idWlsZF9pbmZvKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMjUzLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjI1NDpcdHJldHZhbCA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCBza2IsIG5ldCwgcG9ydGlkLCBzZXEsIDAsIGNtZCxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIyNTUtXHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMzMyPXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzk1LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjM5NjpcdGVyciA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCByZXBseSwgZ2VubF9pbmZvX25ldChpbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIzOTctXHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSwgMCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDE5PXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDU1LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1NjpcdGVyciA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCByZXBseSwgZ2VubF9pbmZvX25ldChpbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NTctXHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSwgMCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDcxPXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDk1LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ5NjpcdGVyciA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCByZXBseSwgZ2VubF9pbmZvX25ldChpbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0OTctXHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSwgMCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNTI2PXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNTQyLVx0XHRnb3RvIGV4aXRfdW5sb2NrX2ZyZWU7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNTQzOlx0ZXJyID0gb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHJlcGx5LCBnZW5sX2luZm9fbmV0KGluZm8pLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjU0NC1cdFx0XHRcdCAgICAgIGluZm8tXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cdTAwM2VzbmRfc2VxLCAwLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI1NTc9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI1NzYtXHRcdFx0aWYgKGogXHUwMDNlPSBza2lwIFx1MDAyNlx1MDAyNlxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjU3NzpcdFx0XHQgICAgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHNrYixcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI1NzgtXHRcdFx0XHRcdFx0ICAgIHNvY2tfbmV0KHNrYi1cdTAwM2VzayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mb2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2AqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYG92c19mbG93X2NtZF9maWxsX2luZm9gIGFuZCBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gLCBhcmUgYWN0dWFsbHkgZG9pbmcuIFRpbWUgdG8gY3JhY2sgdGhlbSBvcGVuIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTtyZSBhbGwgYWJvdXQuIExldCYjMzk7cyByZWFkIHRocm91Z2ggdGhlIGNvZGUgb2YgYm90aCBmdW5jdGlvbnMgY2FyZWZ1bGx5IGFuZCBtZXRob2RpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGlucHV0cywgb3V0cHV0cywgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCBhbnkga2V5IGFsZ29yaXRobXMgb3IgbG9naWMgd2l0aGluIHRoZW0uIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwNTpcdC8qIENhbGxlZCB3aXRoIG92c19tdXRleCBvciBSQ1UgcmVhZCBsb2NrLiAqL1xuIDkwNjpcdHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgaW50IGRwX2lmaW5kZXgsXG4gOTA3Olx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsXG4gOTA4Olx0XHRcdFx0XHQgIHUzMiBzZXEsIHUzMiBmbGFncywgdTggY21kLCB1MzIgdWZpZF9mbGFncylcbiA5MDk6XHR7XG4gOTEwOlx0XHRjb25zdCBpbnQgc2tiX29yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiA5MTE6XHRcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyO1xuIDkxMjpcdFx0aW50IGVycjtcbiA5MTM6XHRcbiA5MTQ6XHRcdG92c19oZWFkZXIgPSBnZW5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBcdTAwMjZkcF9mbG93X2dlbmxfZmFtaWx5LFxuIDkxNTpcdFx0XHRcdFx0IGZsYWdzLCBjbWQpO1xuIDkxNjpcdFx0aWYgKCFvdnNfaGVhZGVyKVxuIDkxNzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDkxODpcdFxuIDkxOTpcdFx0b3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4ID0gZHBfaWZpbmRleDtcbiA5MjA6XHRcbiA5MjE6XHRcdGVyciA9IG92c19ubGFfcHV0X2lkZW50aWZpZXIoZmxvdywgc2tiKTtcbiA5MjI6XHRcdGlmIChlcnIpXG4gOTIzOlx0XHRcdGdvdG8gZXJyb3I7XG4gOTI0Olx0XG4gOTI1Olx0XHRpZiAoc2hvdWxkX2ZpbGxfa2V5KFx1MDAyNmZsb3ctXHUwMDNlaWQsIHVmaWRfZmxhZ3MpKSB7XG4gOTI2Olx0XHRcdGVyciA9IG92c19ubGFfcHV0X21hc2tlZF9rZXkoZmxvdywgc2tiKTtcbiA5Mjc6XHRcdFx0aWYgKGVycilcbiA5Mjg6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDkyOTpcdFx0fVxuIDkzMDpcdFxuIDkzMTpcdFx0aWYgKHNob3VsZF9maWxsX21hc2sodWZpZF9mbGFncykpIHtcbiA5MzI6XHRcdFx0ZXJyID0gb3ZzX25sYV9wdXRfbWFzayhmbG93LCBza2IpO1xuIDkzMzpcdFx0XHRpZiAoZXJyKVxuIDkzNDpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gOTM1Olx0XHR9XG4gOTM2Olx0XG4gOTM3Olx0XHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9zdGF0cyhmbG93LCBza2IpO1xuIDkzODpcdFx0aWYgKGVycilcbiA5Mzk6XHRcdFx0Z290byBlcnJvcjtcbiA5NDA6XHRcbiA5NDE6XHRcdGlmIChzaG91bGRfZmlsbF9hY3Rpb25zKHVmaWRfZmxhZ3MpKSB7XG4gOTQyOlx0XHRcdGVyciA9IG92c19mbG93X2NtZF9maWxsX2FjdGlvbnMoZmxvdywgc2tiLCBza2Jfb3JpZ19sZW4pO1xuIDk0MzpcdFx0XHRpZiAoZXJyKVxuIDk0NDpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gOTQ1Olx0XHR9XG4gOTQ2Olx0XG4gOTQ3Olx0XHRnZW5sbXNnX2VuZChza2IsIG92c19oZWFkZXIpO1xuIDk0ODpcdFx0cmV0dXJuIDA7XG4gOTQ5Olx0XG4gOTUwOlx0ZXJyb3I6XG4gOTUxOlx0XHRnZW5sbXNnX2NhbmNlbChza2IsIG92c19oZWFkZXIpO1xuIDk1MjpcdFx0cmV0dXJuIGVycjtcbiA5NTM6XHR9XG4gOTU0Olx0XG4gOTU1Olx0LyogTWF5IG5vdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLiAqL1xuIDk1NjpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3dfY21kX2FsbG9jX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqYWN0cyxcbiA5NTc6XHRcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICpzZmlkLFxuIDk1ODpcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiA5NTk6XHRcdFx0XHRcdFx0ICAgICAgIGJvb2wgYWx3YXlzLFxuIDk2MDpcdFx0XHRcdFx0XHQgICAgICAgdWludDMyX3QgdWZpZF9mbGFncylcbiA5NjE6XHR7XG4gOTYyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDk2MzpcdFx0c2l6ZV90IGxlbjtcbiA5NjQ6XHRcbiA5NjU6XHRcdGlmICghYWx3YXlzIFx1MDAyNlx1MDAyNiAhb3ZzX211c3Rfbm90aWZ5KFx1MDAyNmRwX2Zsb3dfZ2VubF9mYW1pbHksIGluZm8sIDApKVxuIDk2NjpcdFx0XHRyZXR1cm4gTlVMTDtcbiA5Njc6XHRcbiA5Njg6XHRcdGxlbiA9IG92c19mbG93X2NtZF9tc2dfc2l6ZShhY3RzLCBzZmlkLCB1ZmlkX2ZsYWdzKTtcbiA5Njk6XHRcdHNrYiA9IGdlbmxtc2dfbmV3KGxlbiwgR0ZQX0tFUk5FTCk7XG4gOTcwOlx0XHRpZiAoIXNrYilcbiA5NzE6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gOTcyOlx0XG4gOTczOlx0XHRyZXR1cm4gc2tiO1xuIDk3NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkyNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gRmlyc3QsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHNgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gLiBNeSBndXQgdGVsbHMgbWUgdGhhdCB0aGV5JiMzOTtyZSByZWxhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBpbmRpdmlkdWFsbHkgZmlyc3QgdG8gc2VlIHRoZSBjb25uZWN0aW9uLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IuIEkgYmV0IGl0JiMzOTtzIGludm9sdmVkIGluIGdhdGhlcmluZyBzdGF0cyBvbiB0aGUgZmxvd3MsIGxpa2VseSBmb3IgdGhlIGRhdGFwYXRoLCBhbmQgcHJvYmFibHkgZmlsbHMgYSBzdHJ1Y3R1cmUgd2l0aCB0aG9zZSByZXN1bHRzIHRvIGJlIHJldHVybmVkIG9yIHByb2Nlc3NlZCBlbHNld2hlcmUuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGRlZXBlciB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19mbG93X2NtZF9maWxsX3N0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTgwNT1zdGF0aWMgc2l6ZV90IG92c19mbG93X2NtZF9tc2dfc2l6ZShjb25zdCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICphY3RzLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTgzNy0vKiBDYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgUkNVIHJlYWQgbG9jay4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjgzODpzdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX3N0YXRzKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtODM5LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz05MDY9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LCBpbnQgZHBfaWZpbmRleCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05MzYtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo5Mzc6XHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9zdGF0cyhmbG93LCBza2IpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTM4LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzNQoJCQkJCQkJb3V0cHV0OiA3NwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBiYXNlZCBvbiBhIHF1aWNrIGdsYW5jZToKCioqRGl2aW5nIGludG8gT3BlbiB2U3dpdGNoIERhdGFwYXRoIFN0YXRzIGFuZCBJbmZvcm1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2Agd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZXNlIGFyZSAqY3JpdGljYWwqIGZvciBhbnkga2luZCBvZiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIG9yIG5ldHdvcmsgbWFuYWdlbWVudCB3aXRoaW4gdGhlIE9WUyBkYXRhcGF0aC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgb25lIGhhbmRsZXMgdGhlIGZpbGxpbmcgaW4gb2YgZmxvdyBzdGF0aXN0aWNzLCB3aGlsZSB0aGUgb3RoZXIgbGlrZWx5IGZvY3VzZXMgb24gdmlydHVhbCBwb3J0ICh2cG9ydCkgaW5mb3JtYXRpb24uCgpJJiMzOTtkIGV4cGVjdCBgb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHNgIHRvIGJlIHRoZSBndXRzIG9mIGhvdyB3ZSBnZXQgZmxvdyB0YWJsZSBjb3VudGVycy4gVGhpcyB3b3VsZCBpbnZvbHZlIGRpZ2dpbmcgdGhyb3VnaCB0aGUgZGF0YXBhdGgmIzM5O3MgaW50ZXJuYWwgc3RydWN0dXJlcyB0byByZXRyaWV2ZSBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBpZGxlIHRpbWVvdXRzLCBhY3RpdmUgZmxvdyB0aW1lb3V0cywgYW5kIGFueSBvdGhlciByZWxldmFudCBwZXJmb3JtYW5jZSBtZXRyaWNzIHJlbGF0ZWQgdG8gc3BlY2lmaWMgZmxvd3MuIEl0IHByb2JhYmx5IHRha2VzIGEgcmVxdWVzdCBmcm9tIHVzZXJzcGFjZSwgdHJhbnNsYXRlcyBpdCBpbnRvIHRoZSBkYXRhcGF0aCYjMzk7cyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgYSBmbG93LCB0aGVuIHF1ZXJpZXMgZm9yIHRoZSByZXF1aXJlZCBkYXRhLCBhbmQgYnVuZGxlcyBpdCBiYWNrIHVwIGZvciB0aGUgY2FsbGVyLCBsaWtlbHkgb3ZlciBOZXRsaW5rIG9yIHNvbWUgb3RoZXIgUlBDIG1lY2hhbmlzbS4gVGhlcmUgd291bGQgYmUgYSBnb29kIGNoYW5jZSB0byBzZWUgbG9ja2luZywgY2FjaGluZywgYW5kIGEgaGVhdnkgZm9jdXMgb24gY29uY3VycmVuY3kgaW4gaGVyZS4KCmBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2Agc291bmRzIGxpa2UgaXQmIzM5O3MgYWJvdXQgcHJvdmlkaW5nIHRoZSBkZXRhaWxzIG9mIHRoZSB2aXJ0dWFsIHBvcnRzIHRoZW1zZWx2ZXMuIFRoaXMgaXMgYWxsIHRoZSBiYXNpYyBpbmZvcm1hdGlvbiB5b3UgbmVlZCBhYm91dCBhIHNwZWNpZmljIGludGVyZmFjZSB0aGF0IHNpdHMgd2l0aGluIHRoZSBPVlMgZGF0YSBwbGFuZS4gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoaW5ncyBsaWtlIHRoZSBpbnRlcmZhY2UmIzM5O3MgbmFtZSwgdHlwZSAoZS5nLiwgaW50ZXJuYWwsIHRhcCwgdmV0aCksIGhhcmR3YXJlIGFkZHJlc3MsIE1UVSwgbWF5YmUgYXNzb2NpYXRlZCBwaHlzaWNhbCBpbnRlcmZhY2VzIChpZiBhbnkpLCBhbmQgcG9zc2libHkgaXRzIGN1cnJlbnQgc3RhdHVzICh1cC9kb3duKS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaGVyZSB3aWxsIGJlIGhvdyB0aGlzIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCDigJMgaXMgaXQgYSBkaXJlY3QgbG9va3VwIGZyb20gYSBnbG9iYWwgdnBvcnQgdGFibGUsIG9yIGlzIGl0IG1vcmUgY29tcGxleCBpZiB2aXJ0dWFsIHBvcnRzIGFyZSBkeW5hbWljYWxseSBjcmVhdGVkIG9yIGNvbmZpZ3VyZWQ/IE1pZ2h0IGFsc28gaW52b2x2ZSBnb2luZyB0byB0aGUga2VybmVsIHRvIGRpc2NvdmVyIHRoZSBpbnRlcmZhY2UgZGV0YWlscy4KCkkmIzM5O20gYmV0dGluZyB0aGVzZSBhcmUgY29yZSBjb21wb25lbnRzIGZvciB0b29scyBsaWtlIGBvdnMtb2ZjdGxgLCBgb3ZzLWFwcGN0bGAsIGFuZCBhbnkgb3RoZXIgbW9uaXRvcmluZyBvciBjb250cm9sIHV0aWxpdGllcyB0aGF0IGludGVyYWN0IHdpdGggdGhlIE9WUyBkYXRhcGF0aC4gVGhlIGRldmlsLCBhcyBhbHdheXMsIHdpbGwgYmUgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhvdyBlZmZpY2llbnRseSB0aGV5IGhhbmRsZSByZXF1ZXN0cywgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBsb2FkLiBUaGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBoZXJlIGlzIHByZXR0eSBoaWdoLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGVpciBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzU6XHR9XG4gODM2Olx0XG4gODM3Olx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXG4gODM4Olx0c3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbiA4Mzk6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4gODQwOlx0e1xuIDg0MTpcdFx0c3RydWN0IG92c19mbG93X3N0YXRzIHN0YXRzO1xuIDg0MjpcdFx0X19iZTE2IHRjcF9mbGFncztcbiA4NDM6XHRcdHVuc2lnbmVkIGxvbmcgdXNlZDtcbiA4NDQ6XHRcbiA4NDU6XHRcdG92c19mbG93X3N0YXRzX2dldChmbG93LCBcdTAwMjZzdGF0cywgXHUwMDI2dXNlZCwgXHUwMDI2dGNwX2ZsYWdzKTtcbiA4NDY6XHRcbiA4NDc6XHRcdGlmICh1c2VkIFx1MDAyNlx1MDAyNlxuIDg0ODpcdFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgT1ZTX0ZMT1dfQVRUUl9VU0VELCBvdnNfZmxvd191c2VkX3RpbWUodXNlZCksXG4gODQ5Olx0XHRcdFx0ICAgICAgT1ZTX0ZMT1dfQVRUUl9QQUQpKVxuIDg1MDpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDg1MTpcdFxuIDg1MjpcdFx0aWYgKHN0YXRzLm5fcGFja2V0cyBcdTAwMjZcdTAwMjZcbiA4NTM6XHRcdCAgICBubGFfcHV0XzY0Yml0KHNrYiwgT1ZTX0ZMT1dfQVRUUl9TVEFUUyxcbiA4NTQ6XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb3ZzX2Zsb3dfc3RhdHMpLCBcdTAwMjZzdGF0cyxcbiA4NTU6XHRcdFx0XHQgIE9WU19GTE9XX0FUVFJfUEFEKSlcbiA4NTY6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA4NTc6XHRcbiA4NTg6XHRcdGlmICgodTgpbnRvaHModGNwX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbiA4NTk6XHRcdCAgICAgbmxhX3B1dF91OChza2IsIE9WU19GTE9XX0FUVFJfVENQX0ZMQUdTLCAodTgpbnRvaHModGNwX2ZsYWdzKSkpXG4gODYwOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gODYxOlx0XG4gODYyOlx0XHRyZXR1cm4gMDtcbiA4NjM6XHR9XG4gODY0Olx0XG4gODY1Olx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXG4gODY2Olx0c3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9hY3Rpb25zKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxuIDg2NzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2tiX29yaWdfbGVuKVxuIDg2ODpcdHtcbiA4Njk6XHRcdHN0cnVjdCBubGF0dHIgKnN0YXJ0O1xuIDg3MDpcdFx0aW50IGVycjtcbiA4NzE6XHRcbiA4NzI6XHRcdC8qIElmIE9WU19GTE9XX0FUVFJfQUNUSU9OUyBkb2VzbiYjMzk7dCBmaXQsIHNraXAgZHVtcGluZyB0aGUgYWN0aW9ucyBpZlxuIDg3MzpcdFx0ICogdGhpcyBpcyB0aGUgZmlyc3QgZmxvdyB0byBiZSBkdW1wZWQgaW50byAmIzM5O3NrYiYjMzk7LiAgVGhpcyBpcyB1bnVzdWFsIGZvclxuIDg3NDpcdFx0ICogTmV0bGluayBidXQgaW5kaXZpZHVhbCBhY3Rpb24gbGlzdHMgY2FuIGJlIGxvbmdlciB0aGFuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNTU6XHRcbjIxNTY6XHQvKiBDYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgUkNVIHJlYWQgbG9jay4gKi9cbjIxNTc6XHRzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXG4yMTU4Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4yMTU5Olx0XHRcdFx0XHQgICB1MzIgZmxhZ3MsIHU4IGNtZCwgZ2ZwX3QgZ2ZwKVxuMjE2MDpcdHtcbjIxNjE6XHRcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyO1xuMjE2MjpcdFx0c3RydWN0IG92c192cG9ydF9zdGF0cyB2cG9ydF9zdGF0cztcbjIxNjM6XHRcdHN0cnVjdCBuZXQgKm5ldF92cG9ydDtcbjIxNjQ6XHRcdGludCBlcnI7XG4yMTY1Olx0XG4yMTY2Olx0XHRvdnNfaGVhZGVyID0gZ2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgXHUwMDI2ZHBfdnBvcnRfZ2VubF9mYW1pbHksXG4yMTY3Olx0XHRcdFx0XHQgZmxhZ3MsIGNtZCk7XG4yMTY4Olx0XHRpZiAoIW92c19oZWFkZXIpXG4yMTY5Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4yMTcwOlx0XG4yMTcxOlx0XHRvdnNfaGVhZGVyLVx1MDAzZWRwX2lmaW5kZXggPSBnZXRfZHBpZmluZGV4KHZwb3J0LVx1MDAzZWRwKTtcbjIxNzI6XHRcbjIxNzM6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIE9WU19WUE9SVF9BVFRSX1BPUlRfTk8sIHZwb3J0LVx1MDAzZXBvcnRfbm8pIHx8XG4yMTc0Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBPVlNfVlBPUlRfQVRUUl9UWVBFLCB2cG9ydC1cdTAwM2VvcHMtXHUwMDNldHlwZSkgfHxcbjIxNzU6XHRcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE9WU19WUE9SVF9BVFRSX05BTUUsXG4yMTc2Olx0XHRcdFx0ICAgb3ZzX3Zwb3J0X25hbWUodnBvcnQpKSB8fFxuMjE3NzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgT1ZTX1ZQT1JUX0FUVFJfSUZJTkRFWCwgdnBvcnQtXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgpKVxuMjE3ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIxNzk6XHRcbjIxODA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjIxODE6XHRcdG5ldF92cG9ydCA9IGRldl9uZXRfcmN1KHZwb3J0LVx1MDAzZWRldik7XG4yMTgyOlx0XHRpZiAoIW5ldF9lcShuZXQsIG5ldF92cG9ydCkpIHtcbjIxODM6XHRcdFx0aW50IGlkID0gcGVlcm5ldDJpZF9hbGxvYyhuZXQsIG5ldF92cG9ydCwgR0ZQX0FUT01JQyk7XG4yMTg0Olx0XG4yMTg1Olx0XHRcdGlmIChubGFfcHV0X3MzMihza2IsIE9WU19WUE9SVF9BVFRSX05FVE5TSUQsIGlkKSlcbjIxODY6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZV91bmxvY2s7XG4yMTg3Olx0XHR9XG4yMTg4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIxODk6XHRcbjIxOTA6XHRcdG92c192cG9ydF9nZXRfc3RhdHModnBvcnQsIFx1MDAyNnZwb3J0X3N0YXRzKTtcbjIxOTE6XHRcdGlmIChubGFfcHV0XzY0Yml0KHNrYiwgT1ZTX1ZQT1JUX0FUVFJfU1RBVFMsXG4yMTkyOlx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG92c192cG9ydF9zdGF0cyksIFx1MDAyNnZwb3J0X3N0YXRzLFxuMjE5MzpcdFx0XHRcdCAgT1ZTX1ZQT1JUX0FUVFJfUEFEKSlcbjIxOTQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMTk1Olx0XG4yMTk2Olx0XHRpZiAob3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHModnBvcnQsIHNrYikpXG4yMTk3Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjE5ODpcdFxuMjE5OTpcdFx0aWYgKG92c192cG9ydF9nZXRfdXBjYWxsX3BvcnRpZHModnBvcnQsIHNrYikpXG4yMjAwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjIwMTpcdFxuMjIwMjpcdFx0Z2VubG1zZ19lbmQoc2tiLCBvdnNfaGVhZGVyKTtcbjIyMDM6XHRcdHJldHVybiAwO1xuMjIwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5NwoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnM6CgoqKkRpZ2dpbmcgaW50byBGbG93IGFuZCBQb3J0IFN0YXRzKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHR3byBmdW5jdGlvbnM6IGBvdnNfZmxvd19zdGF0c19nZXRgIGFuZCBgb3ZzX3Zwb3J0X2dldF9zdGF0c2AuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8sIG9mIGNvdXJzZSwgZmluZCBvdXQgd2hhdCBlYWNoIG9uZSYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgbWV0cmljcyB0aGV5JiMzOTtyZSByZXRyaWV2aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBwYWNrZXQgY291bnRzLCBieXRlIGNvdW50cywgZmxvdyB0aW1lb3V0cywgZXJyb3IgY291bnRzLCBpbnRlcmZhY2Ugc3RhdGlzdGljcywgb3IgYSBtaXggb2YgdGhpbmdzPyBBIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgKmV4YWN0bHkqIHdoYXQgZWFjaCBvbmUgbWVhc3VyZXMgaXMgdGhlIGZvdW5kYXRpb24gaGVyZS4gVGhlbiBJJiMzOTtsbCBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhleSYjMzk7cmUgcmVsYXRlZCwgd2hhdCB0aGVpciBpbnB1dHMgYXJlLCBhbmQgaG93IHRoZWlyIGRhdGEgZ2V0cyB1c2VkIGRvd25zdHJlYW0uIFByb2JhYmx5IEkmIzM5O2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IHRob3NlIHR3byBjYWxscyBhZmZlY3QgcGVyZm9ybWFuY2UsIGFuZCBjb25zaWRlciB0aGUgaW1wYWN0IG9uIGFueSBtb25pdG9yaW5nIHRvb2xzIHRoYXQgbWlnaHQgYmUgdXNpbmcgdGhlIG91dHB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2Zsb3dfc3RhdHNfZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTgzOD1zdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX3N0YXRzKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTg0NC1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjg0NTpcdG92c19mbG93X3N0YXRzX2dldChmbG93LCBcdTAwMjZzdGF0cywgXHUwMDI2dXNlZCwgXHUwMDI2dGNwX2ZsYWdzKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTg0Ni1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTYxPXZvaWQgb3ZzX2Zsb3dfc3RhdHNfdXBkYXRlKHN0cnVjdCBzd19mbG93ICpmbG93LCBfX2JlMTYgdGNwX2ZsYWdzLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTI3LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBvciBvdnNfbXV0ZXguICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEyODp2b2lkIG92c19mbG93X3N0YXRzX2dldChjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTI5LVx0XHRcdHN0cnVjdCBvdnNfZmxvd19zdGF0cyAqb3ZzX3N0YXRzLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg9MjgxPXZvaWQgb3ZzX2Zsb3dfc3RhdHNfdXBkYXRlKHN0cnVjdCBzd19mbG93ICosIF9fYmUxNiB0Y3BfZmxhZ3MsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTI4Mi1cdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6MjgzOnZvaWQgb3ZzX2Zsb3dfc3RhdHNfZ2V0KGNvbnN0IHN0cnVjdCBzd19mbG93ICosIHN0cnVjdCBvdnNfZmxvd19zdGF0cyAqLFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaC0yODQtXHRcdFx0dW5zaWduZWQgbG9uZyAqdXNlZCwgX19iZTE2ICp0Y3BfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfdnBvcnRfZ2V0X3N0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIxNTc9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxODktXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyMTkwOlx0b3ZzX3Zwb3J0X2dldF9zdGF0cyh2cG9ydCwgXHUwMDI2dnBvcnRfc3RhdHMpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjE5MS1cdGlmIChubGFfcHV0XzY0Yml0KHNrYiwgT1ZTX1ZQT1JUX0FUVFJfU1RBVFMsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9MjMwPXZvaWQgb3ZzX3Zwb3J0X2RlbChzdHJ1Y3QgdnBvcnQgKnZwb3J0KVxuLS1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTIzNi0vKipcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jOjIzNzogKlx0b3ZzX3Zwb3J0X2dldF9zdGF0cyAtIHJldHJpZXZlIGRldmljZSBzdGF0c1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtMjM4LSAqXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtMjQ1LSAqL1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6MjQ2OnZvaWQgb3ZzX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgb3ZzX3Zwb3J0X3N0YXRzICpzdGF0cylcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTI0Ny17XG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg9MzE9c3RydWN0IHZwb3J0ICpvdnNfdnBvcnRfbG9jYXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuaC0zMi1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oOjMzOnZvaWQgb3ZzX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKiwgc3RydWN0IG92c192cG9ydF9zdGF0cyAqKTtcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oLTM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgzMAoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgRGVlcCBpbnRvIE9WUyBTdGF0aXN0aWNzKioKCkFscmlnaHQsIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzLiBCZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHRyb3VibGVzaG9vdGluZyBvciBvcHRpbWl6aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiBob3cgYG92c19mbG93X3N0YXRzX2dldGAgYW5kIGBvdnNfdnBvcnRfZ2V0X3N0YXRzYCBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBkYXRhIHRoZXkmIzM5O3JlIHB1bGxpbmcsIHdoZXJlIGl0JiMzOTtzIGNvbWluZyBmcm9tIGluIHRoZSBPVlMgYXJjaGl0ZWN0dXJlLCBhbmQgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbnZvbHZlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGdyYW51bGFyIGRldGFpbHMgb2YgdGhlIGNvZGU7IGFyZSB0aGV5IGhpdHRpbmcgYW55IHNoYXJlZCByZXNvdXJjZXM/IERvIHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGxpdmUgZGF0YT8gV2hhdCBhYm91dCBjYWNoaW5nIHN0cmF0ZWdpZXMgaWYgYW55PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBvZiBhbnkgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHR9XG4gMTI2Olx0XG4gMTI3Olx0LyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIG9yIG92c19tdXRleC4gKi9cbiAxMjg6XHR2b2lkIG92c19mbG93X3N0YXRzX2dldChjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbiAxMjk6XHRcdFx0XHRzdHJ1Y3Qgb3ZzX2Zsb3dfc3RhdHMgKm92c19zdGF0cyxcbiAxMzA6XHRcdFx0XHR1bnNpZ25lZCBsb25nICp1c2VkLCBfX2JlMTYgKnRjcF9mbGFncylcbiAxMzE6XHR7XG4gMTMyOlx0XHR1bnNpZ25lZCBpbnQgY3B1O1xuIDEzMzpcdFxuIDEzNDpcdFx0KnVzZWQgPSAwO1xuIDEzNTpcdFx0KnRjcF9mbGFncyA9IDA7XG4gMTM2Olx0XHRtZW1zZXQob3ZzX3N0YXRzLCAwLCBzaXplb2YoKm92c19zdGF0cykpO1xuIDEzNzpcdFxuIDEzODpcdFx0Zm9yX2VhY2hfY3B1KGNwdSwgZmxvdy1cdTAwM2VjcHVfdXNlZF9tYXNrKSB7XG4gMTM5Olx0XHRcdHN0cnVjdCBzd19mbG93X3N0YXRzICpzdGF0cyA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKGZsb3ctXHUwMDNlc3RhdHNbY3B1XSk7XG4gMTQwOlx0XG4gMTQxOlx0XHRcdGlmIChzdGF0cykge1xuIDE0MjpcdFx0XHRcdC8qIExvY2FsIENQVSBtYXkgd3JpdGUgb24gbm9uLWxvY2FsIHN0YXRzLCBzbyB3ZSBtdXN0XG4gMTQzOlx0XHRcdFx0ICogYmxvY2sgYm90dG9tLWhhbHZlcyBoZXJlLlxuIDE0NDpcdFx0XHRcdCAqL1xuIDE0NTpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzdGF0cy1cdTAwM2Vsb2NrKTtcbiAxNDY6XHRcdFx0XHRpZiAoISp1c2VkIHx8IHRpbWVfYWZ0ZXIoc3RhdHMtXHUwMDNldXNlZCwgKnVzZWQpKVxuIDE0NzpcdFx0XHRcdFx0KnVzZWQgPSBzdGF0cy1cdTAwM2V1c2VkO1xuIDE0ODpcdFx0XHRcdCp0Y3BfZmxhZ3MgfD0gc3RhdHMtXHUwMDNldGNwX2ZsYWdzO1xuIDE0OTpcdFx0XHRcdG92c19zdGF0cy1cdTAwM2VuX3BhY2tldHMgJiM0Mzs9IHN0YXRzLVx1MDAzZXBhY2tldF9jb3VudDtcbiAxNTA6XHRcdFx0XHRvdnNfc3RhdHMtXHUwMDNlbl9ieXRlcyAmIzQzOz0gc3RhdHMtXHUwMDNlYnl0ZV9jb3VudDtcbiAxNTE6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzdGF0cy1cdTAwM2Vsb2NrKTtcbiAxNTI6XHRcdFx0fVxuIDE1MzpcdFx0fVxuIDE1NDpcdH1cbiAxNTU6XHRcbiAxNTY6XHQvKiBDYWxsZWQgd2l0aCBvdnNfbXV0ZXguICovXG4gMTU3Olx0dm9pZCBvdnNfZmxvd19zdGF0c19jbGVhcihzdHJ1Y3Qgc3dfZmxvdyAqZmxvdylcbiAxNTg6XHR7XG4gMTU5Olx0XHR1bnNpZ25lZCBpbnQgY3B1O1xuIDE2MDpcdFxuIDE2MTpcdFx0Zm9yX2VhY2hfY3B1KGNwdSwgZmxvdy1cdTAwM2VjcHVfdXNlZF9tYXNrKSB7XG4gMTYyOlx0XHRcdHN0cnVjdCBzd19mbG93X3N0YXRzICpzdGF0cyA9IG92c2xfZGVyZWZlcmVuY2UoZmxvdy1cdTAwM2VzdGF0c1tjcHVdKTtcbiAxNjM6XHRcbiAxNjQ6XHRcdFx0aWYgKHN0YXRzKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL3Zwb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdCAqIEBzdGF0czogbG9jYXRpb24gdG8gc3RvcmUgc3RhdHNcbiAyNDE6XHQgKlxuIDI0MjpcdCAqIFJldHJpZXZlcyB0cmFuc21pdCwgcmVjZWl2ZSwgYW5kIGVycm9yIHN0YXRzIGZvciB0aGUgZ2l2ZW4gZGV2aWNlLlxuIDI0MzpcdCAqXG4gMjQ0Olx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgcmN1X3JlYWRfbG9jay5cbiAyNDU6XHQgKi9cbiAyNDY6XHR2b2lkIG92c192cG9ydF9nZXRfc3RhdHMoc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IG92c192cG9ydF9zdGF0cyAqc3RhdHMpXG4gMjQ3Olx0e1xuIDI0ODpcdFx0Y29uc3Qgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpkZXZfc3RhdHM7XG4gMjQ5Olx0XHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDtcbiAyNTA6XHRcbiAyNTE6XHRcdGRldl9zdGF0cyA9IGRldl9nZXRfc3RhdHModnBvcnQtXHUwMDNlZGV2LCBcdTAwMjZ0ZW1wKTtcbiAyNTI6XHRcdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyAgPSBkZXZfc3RhdHMtXHUwMDNlcnhfZXJyb3JzO1xuIDI1MzpcdFx0c3RhdHMtXHUwMDNldHhfZXJyb3JzICA9IGRldl9zdGF0cy1cdTAwM2V0eF9lcnJvcnM7XG4gMjU0Olx0XHRzdGF0cy1cdTAwM2V0eF9kcm9wcGVkID0gZGV2X3N0YXRzLVx1MDAzZXR4X2Ryb3BwZWQ7XG4gMjU1Olx0XHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkID0gZGV2X3N0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQ7XG4gMjU2Olx0XG4gMjU3Olx0XHRzdGF0cy1cdTAwM2VyeF9ieXRlc1x0ICA9IGRldl9zdGF0cy1cdTAwM2VyeF9ieXRlcztcbiAyNTg6XHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSBkZXZfc3RhdHMtXHUwMDNlcnhfcGFja2V0cztcbiAyNTk6XHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzXHQgID0gZGV2X3N0YXRzLVx1MDAzZXR4X2J5dGVzO1xuIDI2MDpcdFx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IGRldl9zdGF0cy1cdTAwM2V0eF9wYWNrZXRzO1xuIDI2MTpcdH1cbiAyNjI6XHRcbiAyNjM6XHQvKipcbiAyNjQ6XHQgKlx0b3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHMgLSByZXRyaWV2ZSB1cGNhbGwgc3RhdHNcbiAyNjU6XHQgKlxuIDI2NjpcdCAqIEB2cG9ydDogdnBvcnQgZnJvbSB3aGljaCB0byByZXRyaWV2ZSB0aGUgc3RhdHMuXG4gMjY3Olx0ICogQHNrYjogc2tfYnVmZiB3aGVyZSB1cGNhbGwgc3RhdHMgc2hvdWxkIGJlIGFwcGVuZGVkLlxuIDI2ODpcdCAqXG4gMjY5Olx0ICogUmV0cmlldmVzIHVwY2FsbCBzdGF0cyBmb3IgdGhlIGdpdmVuIGRldmljZS5cbiAyNzA6XHQgKlxuIDI3MTpcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIHJjdV9yZWFkX2xvY2suXG4gMjcyOlx0ICovXG4gMjczOlx0aW50IG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gMjc0Olx0e1xuIDI3NTpcdFx0dTY0IHR4X3N1Y2Nlc3MgPSAwLCB0eF9mYWlsID0gMDtcbiAyNzY6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbiAyNzc6XHRcdGludCBpO1xuIDI3ODpcdFxuIDI3OTpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBPVlMgU3RhdGlzdGljcyBDb2xsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgT1ZTIGdhdGhlcnMgaXRzIHN0YXRpc3RpY3MsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHZwb3J0cy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYGRldl9nZXRfc3RhdHNgIGlzIGNhbGxlZCB3aXRoaW4gYm90aCBgb3ZzX3Zwb3J0X2dldF9zdGF0c2AgYW5kIGBvdnNfdnBvcnRfZ2V0X3VwY2FsbF9zdGF0c2AuIEludGVyZXN0aW5nLiBUaG9zZSBhcmUgdGhlIHR3byBwbGFjZXMgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGlmZmVyZW50IHVzYWdlcyBvZiB0aG9zZSB0d28uIExldCYjMzk7cyBzdGFydCBieSBkZWx2aW5nIGludG8gYG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzYCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3JlIGRpcmVjdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdXBjYWxsLXJlbGF0ZWQgc3RhdGlzdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0ICpcbiAyNzE6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBvciByY3VfcmVhZF9sb2NrLlxuIDI3MjpcdCAqL1xuIDI3MzpcdGludCBvdnNfdnBvcnRfZ2V0X3VwY2FsbF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI3NDpcdHtcbiAyNzU6XHRcdHU2NCB0eF9zdWNjZXNzID0gMCwgdHhfZmFpbCA9IDA7XG4gMjc2Olx0XHRzdHJ1Y3QgbmxhdHRyICpubGE7XG4gMjc3Olx0XHRpbnQgaTtcbiAyNzg6XHRcbiAyNzk6XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG4gMjgwOlx0XHRcdGNvbnN0IHN0cnVjdCB2cG9ydF91cGNhbGxfc3RhdHNfcGVyY3B1ICpzdGF0cztcbiAyODE6XHRcdFx0dTY0IG5fc3VjY2Vzcywgbl9mYWlsO1xuIDI4MjpcdFx0XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gMjgzOlx0XG4gMjg0Olx0XHRcdHN0YXRzID0gcGVyX2NwdV9wdHIodnBvcnQtXHUwMDNldXBjYWxsX3N0YXRzLCBpKTtcbiAyODU6XHRcdFx0ZG8ge1xuIDI4NjpcdFx0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnN0YXRzLVx1MDAzZXN5bmNwKTtcbiAyODc6XHRcdFx0XHRuX3N1Y2Nlc3MgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZzdGF0cy1cdTAwM2VuX3N1Y2Nlc3MpO1xuIDI4ODpcdFx0XHRcdG5fZmFpbCA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZW5fZmFpbCk7XG4gMjg5Olx0XHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZzdGF0cy1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbiAyOTA6XHRcdFx0dHhfc3VjY2VzcyAmIzQzOz0gbl9zdWNjZXNzO1xuIDI5MTpcdFx0XHR0eF9mYWlsICYjNDM7PSBuX2ZhaWw7XG4gMjkyOlx0XHR9XG4gMjkzOlx0XG4gMjk0Olx0XHRubGEgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBPVlNfVlBPUlRfQVRUUl9VUENBTExfU1RBVFMpO1xuIDI5NTpcdFx0aWYgKCFubGEpXG4gMjk2Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gMjk3Olx0XG4gMjk4Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBPVlNfVlBPUlRfVVBDQUxMX0FUVFJfU1VDQ0VTUywgdHhfc3VjY2VzcyxcbiAyOTk6XHRcdFx0XHQgICAgICBPVlNfVlBPUlRfQVRUUl9QQUQpKSB7XG4gMzAwOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIG5sYSk7XG4gMzAxOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gMzAyOlx0XHR9XG4gMzAzOlx0XG4gMzA0Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBPVlNfVlBPUlRfVVBDQUxMX0FUVFJfRkFJTCwgdHhfZmFpbCxcbiAzMDU6XHRcdFx0XHQgICAgICBPVlNfVlBPUlRfQVRUUl9QQUQpKSB7XG4gMzA2Olx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIG5sYSk7XG4gMzA3Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gMzA4Olx0XHR9XG4gMzA5Olx0XHRubGFfbmVzdF9lbmQoc2tiLCBubGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQxMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgT3BlbiB2U3dpdGNoIFN0YXRpc3RpY3MgYW5kIExvY2tpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gbG9va2luZyBhdCBgb3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHNgLiBJIHNlZSB0aGF0IGB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5gIGlzIHVzZWQsIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbi4gVGhpcyBpcyBhIHBvdGVudGlhbCByZWQgZmxhZywgc3BlY2lmaWNhbGx5IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLCB3aXRoIGxvY2tkZXAgZW5hYmxlZCwgb3IgcmVhbGx5LCBhbnl0aW1lIHRoZSB3cml0ZXIgY291bGQgYmUgaW4gYSBib3R0b20taGFsZiAoQkgpIGNvbnRleHQuIFdlIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBgdTY0X3N0YXRzYCBvZnRlbiByZXF1aXJlcyBkaXNhYmxpbmcgQkhzIG9yIHNpbWlsYXIgbWVjaGFuaXNtcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHksIGVzcGVjaWFsbHkgaWYgdGhlIHdyaXRlciBpcyBleGVjdXRpbmcgaW4gYSBib3R0b20taGFsZiBjb250ZXh0LCBvciBsb2NrZGVwIG1heSBhc3NlcnQsIHdoaWNoIGlzIG5ldmVyIGEgZ29vZCB0aGluZy4KClRoZW4gSSBzZWUgYG92c19mbG93X3N0YXRzX2dldGAgdXNpbmcgYHNwaW5fbG9ja19iaGAuIFdhaXQgYSBtaW51dGUsIGBzcGluX2xvY2tfYmhgICppdHNlbGYqIGRpc2FibGVzIEJIcywgcGVyLWxvY2suIEJ1dCB0aGlzIG1ha2VzIG1lIHdvbmRlcjogd2hhdCBpZiBCSHMgYXJlIGRpc2FibGVkIG91dHNpZGUgdGhlIGxvb3AsIG9yIHRoZSBkdW1wIGNvZGUgZG9lcyByZXBlYXRlZCBsb2NraW5nIGFuZCB1bmxvY2tpbmc/IFRoaXMgc2VlbXMuLi4gaW5lZmZpY2llbnQuCgpBbHJpZ2h0LCB0aW1lIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb250ZXh0LiBBaCwgSSBzZWUgaXQgaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAuIEJpbmdvISBJIHNlZSBgbG9jYWxfYmhfZGlzYWJsZSgpYCB3cmFwcGVkIGFyb3VuZCB0aGUgKmVudGlyZSogZHVtcCBsb29wISBUaGlzIGlzIHdoYXQgSSB3YXMgbG9va2luZyBmb3IuCgpTcGVjaWZpY2FsbHkgaW4gYG92c19mbG93X2NtZF9kdW1wYCwgSSBzZWUgdGhpcyBwYXR0ZXJuOiBgbG9jYWxfYmhfZGlzYWJsZSgpYCBiZWZvcmUgdGhlIGxvb3AsIGBsb2NhbF9iaF9lbmFibGUoKWAgYWZ0ZXIgdGhlIGxvb3AuIEFuZCwgc2ltaWxhcmx5LCBpbiBgb3ZzX3Zwb3J0X2NtZF9kdW1wYCBJIHNlZSB0aGUgc2FtZSB0aGluZzogYGxvY2FsX2JoX2Rpc2FibGUoKWAgYXQgdGhlIGJlZ2lubmluZywgYGxvY2FsX2JoX2VuYWJsZSgpYCBhdCB0aGUgZW5kLgoKVGhpcyBjb25maXJtcyBteSBpbml0aWFsIHN1c3BpY2lvbi4gVGhlIGRlc2lnbmVycyB3ZXJlIGxpa2VseSB0cnlpbmcgdG8gYXZvaWQgQkgtcmVsYXRlZCBpc3N1ZXMgZHVyaW5nIHRoZSBkYXRhIGR1bXBzLCB3aGljaCBtYWtlcyBzZW5zZS4gSXQgbG9va3MgbGlrZSB0aGV5IHdlcmUgZW5zdXJpbmcgdGhhdCB0aGUgc3RhdGlzdGljcyBhbmQgZmxvdyB0YWJsZSBkdW1wcyBhcmUgYXRvbWljIHdpdGggcmVzcGVjdCB0byBib3R0b20taGFsZiBwcm9jZXNzaW5nLgoKTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBjb25zaWRlciBldmVyeXRoaW5nLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgT3BlbiB2U3dpdGNoLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHNlYXJjaCBmb3IgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7IGluIHRoZSBLY29uZmlnIGZpbGVzLiBJdCYjMzk7cyBhbHdheXMgd2lzZSB0byBlbnN1cmUgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGlzIGNvZGUgYXJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBPcGVuIHZTd2l0Y2gga2VybmVsIG1vZHVsZS4gTXkgbWluZCYjMzk7cyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMg4oCTIGhvdyYjMzk7cyBpdCBzdHJ1Y3R1cmVkPyBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgS2NvbmZpZyBzeW50YXg/IFdoYXQga2luZCBvZiBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdlbXMgaW4gdGhlcmUgcmVnYXJkaW5nIHNwZWNpZmljIGZlYXR1cmVzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb25hbGl0eT8gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQ7IHRoYXQmIzM5O2xsIHNhdmUgbWUgc29tZSB0aW1lLiBCYXNpY2FsbHksIEkgd2FudCB0aGUgY29yZSBibHVlcHJpbnQgZm9yIGhvdyB0aGlzIHRoaW5nIGdldHMgYnVpbHQgYW5kIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCBhbmQgdG8gc3RhcnQgZXhwbG9yaW5nIGhvdyB0byBwb3RlbnRpYWxseSBjdXN0b21pemUgYSBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE9wZW4gdlN3aXRjaFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT1BFTlZTV0lUQ0hcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcbiAgMTA6XHRcdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuICAxMTpcdFx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxuICAxMjpcdFx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG4gIDE0Olx0XHRzZWxlY3QgTVBMU1xuICAxNTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTY6XHRcdHNlbGVjdCBORVRfTVBMU19HU09cbiAgMTc6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAgMTg6XHRcdHNlbGVjdCBORVRfTlNIXG4gIDE5Olx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcbiAgMjA6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxuICAyMzpcdFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xuICAyNDpcdFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcbiAgMjU6XHRcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xuICAyNjpcdFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXG4gIDI3Olx0XHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxuICAyODpcdFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxuICAyOTpcdFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIHByb3ZpZGVzIGFuIGluLWtlcm5lbCBmYXN0IHBhdGggZm9yIHBhY2tldFxuICAzMjpcdFx0ICBmb3J3YXJkaW5nLiAgSXQgaXMgY29tcGxlbWVudGVkIGJ5IGEgdXNlcnNwYWNlIGRhZW1vbiwgb3ZzLXZzd2l0Y2hkLFxuICAzMzpcdFx0ICB3aGljaCBpcyBhYmxlIHRvIGFjY2VwdCBjb25maWd1cmF0aW9uIGZyb20gYSB2YXJpZXR5IG9mIHNvdXJjZXMgYW5kXG4gIDM0Olx0XHQgIHRyYW5zbGF0ZSBpdCBpbnRvIHBhY2tldCBwcm9jZXNzaW5nIHJ1bGVzLlxuICAzNTpcdFxuICAzNjpcdFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXG4gIDM3Olx0XHQgIHV0aWxpdGllcy5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICA0MDpcdFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEYXRhcGF0aCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZGF0YXBhdGgub2AgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBPcGVuIHZTd2l0Y2ggYnVpbGQgc3lzdGVtLiBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW47IGl0IHNob3VsZCBjb250YWluIHRoZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBidWlsZGluZyB0aGUgY29yZSBjb21wb25lbnRzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBsYXllci4gVGhpcyBNYWtlZmlsZSBzaG91bGQgb3V0bGluZSB0aGUgY29tbWFuZHMgYW5kIHByZXJlcXVpc2l0ZXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgb2JqZWN0IGZpbGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgY2x1ZXMgaXQgaG9sZHMgYWJvdXQgdGhlIGRhdGFwYXRoIGNvbXBpbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgT3BlbiB2U3dpdGNoLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfT1BFTlZTV0lUQ0gpICYjNDM7PSBvcGVudnN3aXRjaC5vXG4gICA3Olx0XG4gICA4Olx0b3BlbnZzd2l0Y2gteSA6PSBcXFxuICAgOTpcdFx0YWN0aW9ucy5vIFxcXG4gIDEwOlx0XHRkYXRhcGF0aC5vIFxcXG4gIDExOlx0XHRkcF9ub3RpZnkubyBcXFxuICAxMjpcdFx0Zmxvdy5vIFxcXG4gIDEzOlx0XHRmbG93X25ldGxpbmsubyBcXFxuICAxNDpcdFx0Zmxvd190YWJsZS5vIFxcXG4gIDE1Olx0XHRtZXRlci5vIFxcXG4gIDE2Olx0XHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXG4gIDE3Olx0XHR2cG9ydC5vIFxcXG4gIDE4Olx0XHR2cG9ydC1pbnRlcm5hbF9kZXYubyBcXFxuICAxOTpcdFx0dnBvcnQtbmV0ZGV2Lm9cbiAgMjA6XHRcbiAgMjE6XHRpZm5lcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLKSwpXG4gIDIyOlx0b3BlbnZzd2l0Y2gteSAmIzQzOz0gY29ubnRyYWNrLm9cbiAgMjM6XHRlbmRpZlxuICAyNDpcdFxuICAyNTpcdENGTEFHU19vcGVudnN3aXRjaF90cmFjZS5vID0gLUkkKHNyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTIKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogT3BlbiB2U3dpdGNoIE5ldGxpbmsgSW50ZXJmYWNlKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgaWYgT3BlbiB2U3dpdGNoIGlzIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKHNwZWNpZmljYWxseSB0aGUgYE9WU19EQVRBUEFUSF9GQU1JTFlgLCBgT1ZTX1ZQT1JUX0ZBTUlMWWAsIGFuZCBgT1ZTX0ZMT1dfRkFNSUxZYCBmYW1pbGllcyksIHdoaWNoIFN5emthbGxlciB1c2VzIHRvIGNvbW11bmljYXRlLiBUaGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIHRoZSBkdW1wIGNhbGxiYWNrczogYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAsIHdoaWNoIGNvcnJlc3BvbmQgdG8gdGhlIGBkcF9mbG93X2dlbmxfZmFtaWx5YCBhbmQgYGRwX3Zwb3J0X2dlbmxfZmFtaWx5YCByZXNwZWN0aXZlbHkuIFRoZXNlIGFyZSBlYXNpbHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSB2aWEgbmV0bGluayBkdW1wIHJlcXVlc3RzLgoKRXZhbHVhdGluZyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBPcGVuIHZTd2l0Y2gmIzM5O3MgbmV0bGluayBpbnRlcmZhY2Ugc2VlbXMgdG8gYmUgYSBjb3JlIHN1YnN5c3RlbSBhbmQgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBWTSBlbnZpcm9ubWVudHMsIGJlY2F1c2UgaXQgaXMgcHVyZWx5IHNvZnR3YXJlLWJhc2VkLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGxvY2tpbmcgY29udGV4dCB3aXRoaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAsIGNoYW5naW5nIHRoZSBjb2RlIHBhdGggdGhhdCYjMzk7cyBleGVjdXRlZCBieSB1c2luZyBgbG9jYWxfYmhfZGlzYWJsZWAgLyBgbG9jYWxfYmhfZW5hYmxlYC4gSSYjMzk7bSBnb2luZyB0byBzYXkgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyBgdHJ1ZWAgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSBgb3ZzX2Zsb3dfY21kX2R1bXBgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9kdW1wYC4KCkNoZWNraW5nIHRoZSBgZ2l0IGRpZmZgIGFnYWluLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIEl0JiMzOTtzIGp1c3QgdGhvc2UgdHdvLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhlc2UgYXJlbiYjMzk7dCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QgcGF0aHMsIGJ1dCByYXRoZXIsIHZlcnkgc3BlY2lmaWMgZHVtcCBoYW5kbGVycyBmb3IgT3BlbiB2U3dpdGNoIGZsb3cgYW5kIHZwb3J0IG5ldGxpbmsgY29tbWFuZHMuIFRoZXkmIzM5O3JlIGZlYXR1cmUgc3BlY2lmaWMgYW5kIHJlcHJlc2VudCByZWxldmFudCBlbnRyeXBvaW50cy4KClRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBjaGVjazogSXQgc2VlbXMgYE9QRU5WU1dJVENIYCBpcyB0aGUga2V5LCBhbHRob3VnaCBgSU5FVGAgaXMgYWxzbyBpbXBsaWVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdC4KCkFscmlnaHQsIGRvdWJsZS1jaGVja2luZyBldmVyeXRoaW5nLiAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIGB0cnVlYCwgdGhlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgYXJlIGBbJiMzNDtvdnNfZmxvd19jbWRfZHVtcCYjMzQ7LCAmIzM0O292c192cG9ydF9jbWRfZHVtcCYjMzQ7XWAsIGFuZCB0aGUgJiMzNDtFbmFibGVDb25maWdzJiMzNDsgaXMgYFsmIzM0O09QRU5WU1dJVENIJiMzNDtdYC4gVGhpcyBhbmFseXNpcyBwcm92aWRlcyBhIGNvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QuIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfZmxvd19jbWRfZHVtcCYjMzQ7LAogICAgJiMzNDtvdnNfdnBvcnRfY21kX2R1bXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm90dG9tLWhhbGYgKEJIKSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCBmbG93IGFuZCB2cG9ydCBkdW1waW5nIGxvb3BzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGhhbmRsZXJzIChvdnNfZmxvd19jbWRfZHVtcCBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCBsb2NraW5nIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19mbG93X2NtZF9kdW1wJiMzNDssCiAgICAmIzM0O292c192cG9ydF9jbWRfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBib3R0b20taGFsZiAoQkgpIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIGZsb3cgYW5kIHZwb3J0IGR1bXBpbmcgbG9vcHMgaW4gT3BlbiB2U3dpdGNoIG5ldGxpbmsgaGFuZGxlcnMgKG92c19mbG93X2NtZF9kdW1wIGFuZCBvdnNfdnBvcnRfY21kX2R1bXApLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0cyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxvY2tpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4YjYyNmQ3N2Y4ZjcyZWU2YzBjOWM3NmY5MzUyODg3ODI3OWUxMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE4OjIwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCA2MzFhMDMxMzZmYTE0Li5hZTJjOTkyNGFlYjA1IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMTUzMyw2ICYjNDM7MTUzMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCX0KIAogCXRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLSZndDt0YWJsZS50aSk7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBzd19mbG93ICpmbG93OwogCQl1MzIgYnVja2V0LCBvYmo7CkBAIC0xNTUyLDYgJiM0MzsxNTUzLDcgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCWNiLSZndDthcmdzWzBdID0gYnVja2V0OwogCQljYi0mZ3Q7YXJnc1sxXSA9IG9iajsKIAl9CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBza2ItJmd0O2xlbjsKIH0KQEAgLTI1NjUsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlmb3IgKGkgPSBidWNrZXQ7IGkgJmx0OyBEUF9WUE9SVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCB2cG9ydCAqdnBvcnQ7CiAKQEAgLTI1ODUsNiAmIzQzOzI1ODgsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXNraXAgPSAwOwogCX0KIG91dDoKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAljYi0mZ3Q7YXJnc1swXSA9IGk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc2CgkJCQkJCQlvdXRwdXQ6IDc4CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSBQcm9maWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdXp6aW5nIHN0cmF0ZWd5IGZvciB0aGlzIHBhdGNoLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNjZW5hcmlvIHdoZXJlIEtNU0FOIGlzIHRydWx5IG5lY2Vzc2FyeSwgb3IgaWYgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBkZXRlY3RvcnMgd2lsbCBzdWZmaWNlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGFuZCBwaW5wb2ludCB0aGUgYXJlYXMgb2YgZ3JlYXRlc3QgY29uY2VybiBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgoKTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIgd29ya3MgYmVzdCBmb3IgYSBxdWljayBhbmQgdGFyZ2V0ZWQgaW5zcGVjdGlvbi4gSSYjMzk7bGwgbmVlZCBjb250ZXh0LCBzbyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IGZvciB0aGUgY29yZSBvZiB0aGUgZGF0YXBhdGguIEkmIzM5O2xsIGZvY3VzIG9uIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTUzMyBhbmQgMjU2NS4gVGhvc2UgbGluZSBudW1iZXJzIHNlZW0gc2lnbmlmaWNhbnQsIGFuZCB0aGV5IHNob3VsZCBwcm92aWRlIGVub3VnaCBjb250ZXh0IHRvIGdhdWdlIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBCeSBleGFtaW5pbmcgdGhvc2Ugc2VjdGlvbnMgY2xvc2VseSwgSSBzaG91bGQgZ2V0IGEgYmV0dGVyIGZlZWwgZm9yIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgYW5kIHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRpbnQgZXJyO1xuMTUyMTpcdFxuMTUyMjpcdFx0ZXJyID0gZ2VubG1zZ19wYXJzZV9kZXByZWNhdGVkKGNiLVx1MDAzZW5saCwgXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSwgYSxcbjE1MjM6XHRcdFx0XHRcdCAgICAgICBPVlNfRkxPV19BVFRSX01BWCwgZmxvd19wb2xpY3ksIE5VTEwpO1xuMTUyNDpcdFx0aWYgKGVycilcbjE1MjU6XHRcdFx0cmV0dXJuIGVycjtcbjE1MjY6XHRcdHVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dldF91ZmlkX2ZsYWdzKGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7XG4xNTI3Olx0XG4xNTI4Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xNTI5Olx0XHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4KTtcbjE1MzA6XHRcdGlmICghZHApIHtcbjE1MzE6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xNTMyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuMTUzMzpcdFx0fVxuMTUzNDpcdFxuMTUzNTpcdFx0dGkgPSByY3VfZGVyZWZlcmVuY2UoZHAtXHUwMDNldGFibGUudGkpO1xuMTUzNjpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuMTUzNzpcdFx0Zm9yICg7Oykge1xuMTUzODpcdFx0XHRzdHJ1Y3Qgc3dfZmxvdyAqZmxvdztcbjE1Mzk6XHRcdFx0dTMyIGJ1Y2tldCwgb2JqO1xuMTU0MDpcdFxuMTU0MTpcdFx0XHRidWNrZXQgPSBjYi1cdTAwM2VhcmdzWzBdO1xuMTU0MjpcdFx0XHRvYmogPSBjYi1cdTAwM2VhcmdzWzFdO1xuMTU0MzpcdFx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dCh0aSwgXHUwMDI2YnVja2V0LCBcdTAwMjZvYmopO1xuMTU0NDpcdFx0XHRpZiAoIWZsb3cpXG4xNTQ1Olx0XHRcdFx0YnJlYWs7XG4xNTQ2Olx0XG4xNTQ3Olx0XHRcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCwgc2tiLFxuMTU0ODpcdFx0XHRcdFx0XHQgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMTU0OTpcdFx0XHRcdFx0XHQgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBOTE1fRl9NVUxUSSxcbjE1NTA6XHRcdFx0XHRcdFx0ICAgT1ZTX0ZMT1dfQ01EX0dFVCwgdWZpZF9mbGFncykgXHUwMDNjIDApXG4xNTUxOlx0XHRcdFx0YnJlYWs7XG4xNTUyOlx0XG4xNTUzOlx0XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBidWNrZXQ7XG4xNTU0Olx0XHRcdGNiLVx1MDAzZWFyZ3NbMV0gPSBvYmo7XG4xNTU1Olx0XHR9XG4xNTU2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE1NTc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTU1ODpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4xNTU5Olx0fVxuMTU2MDpcdFxuMTU2MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmbG93X3BvbGljeVtPVlNfRkxPV19BVFRSX01BWCAmIzQzOyAxXSA9IHtcbjE1NjI6XHRcdFtPVlNfRkxPV19BVFRSX0tFWV0gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2MzpcdFx0W09WU19GTE9XX0FUVFJfTUFTS10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2NDpcdFx0W09WU19GTE9XX0FUVFJfQUNUSU9OU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2NTpcdFx0W09WU19GTE9XX0FUVFJfQ0xFQVJdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4xNTY2Olx0XHRbT1ZTX0ZMT1dfQVRUUl9QUk9CRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbjE1Njc6XHRcdFtPVlNfRkxPV19BVFRSX1VGSURdID0geyAudHlwZSA9IE5MQV9VTlNQRUMsIC5sZW4gPSAxIH0sXG4xNTY4Olx0XHRbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xNTY5Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU1NTpcdH1cbjI1NTY6XHRcbjI1NTc6XHRzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTU4Olx0e1xuMjU1OTpcdFx0c3RydWN0IG92c19oZWFkZXIgKm92c19oZWFkZXIgPSBnZW5sbXNnX2RhdGEobmxtc2dfZGF0YShjYi1cdTAwM2VubGgpKTtcbjI1NjA6XHRcdHN0cnVjdCBkYXRhcGF0aCAqZHA7XG4yNTYxOlx0XHRpbnQgYnVja2V0ID0gY2ItXHUwMDNlYXJnc1swXSwgc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4yNTYyOlx0XHRpbnQgaSwgaiA9IDA7XG4yNTYzOlx0XG4yNTY0Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNTY1Olx0XHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4KTtcbjI1NjY6XHRcdGlmICghZHApIHtcbjI1Njc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNTY4Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMjU2OTpcdFx0fVxuMjU3MDpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuMjU3MTpcdFx0Zm9yIChpID0gYnVja2V0OyBpIFx1MDAzYyBEUF9WUE9SVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KSB7XG4yNTcyOlx0XHRcdHN0cnVjdCB2cG9ydCAqdnBvcnQ7XG4yNTczOlx0XG4yNTc0Olx0XHRcdGogPSAwO1xuMjU3NTpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodnBvcnQsIFx1MDAyNmRwLVx1MDAzZXBvcnRzW2ldLCBkcF9oYXNoX25vZGUpIHtcbjI1NzY6XHRcdFx0XHRpZiAoaiBcdTAwM2U9IHNraXAgXHUwMDI2XHUwMDI2XG4yNTc3Olx0XHRcdFx0ICAgIG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCBza2IsXG4yNTc4Olx0XHRcdFx0XHRcdFx0ICAgIHNvY2tfbmV0KHNrYi1cdTAwM2VzayksXG4yNTc5Olx0XHRcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4yNTgwOlx0XHRcdFx0XHRcdFx0ICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsXG4yNTgxOlx0XHRcdFx0XHRcdFx0ICAgIE5MTV9GX01VTFRJLFxuMjU4MjpcdFx0XHRcdFx0XHRcdCAgICBPVlNfVlBPUlRfQ01EX0dFVCxcbjI1ODM6XHRcdFx0XHRcdFx0XHQgICAgR0ZQX0FUT01JQykgXHUwMDNjIDApXG4yNTg0Olx0XHRcdFx0XHRnb3RvIG91dDtcbjI1ODU6XHRcbjI1ODY6XHRcdFx0XHRqJiM0MzsmIzQzOztcbjI1ODc6XHRcdFx0fVxuMjU4ODpcdFx0XHRza2lwID0gMDtcbjI1ODk6XHRcdH1cbjI1OTA6XHRvdXQ6XG4yNTkxOlx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjI1OTI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjU5MzpcdFxuMjU5NDpcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4yNTk1Olx0XHRjYi1cdTAwM2VhcmdzWzFdID0gajtcbjI1OTY6XHRcbjI1OTc6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMjU5ODpcdH1cbjI1OTk6XHRcbjI2MDA6XHRzdGF0aWMgdm9pZCBvdnNfZHBfbWFza3NfcmViYWxhbmNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjI2MDE6XHR7XG4yNjAyOlx0XHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3ZzX25ldCxcbjI2MDM6XHRcdFx0XHRcdFx0ICAgICAgIG1hc2tzX3JlYmFsYW5jZS53b3JrKTtcbjI2MDQ6XHRcdHN0cnVjdCBkYXRhcGF0aCAqZHA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTUKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEtNU0FOIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aHkgdGhlc2UgYGxvY2FsX2JoX2Rpc2FibGUoKWAgYW5kIGBsb2NhbF9iaF9lbmFibGUoKWAgY2FsbHMgd2VyZSBpbnRyb2R1Y2VkIGFyb3VuZCB0aGUgbG9vcHMgaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGBvdnNfZmxvd19jbWRfZmlsbF9pbmZvYCwgYG92c192cG9ydF9jbWRfZmlsbF9pbmZvYCwgcG90ZW50aWFsbHkgc3RhdHMgcmVhZHMsIG9yIHBlcmhhcHMgdGhlIFJDVSBpdGVyYXRpb24gaXRzZWxmLCBvciBtYXliZSBldmVuIHJoYXNodGFibGUvcmhhc2h0YWJsZV93YWxrIGludGVyYWN0aW9ucywgcGVyLWNwdSBzdGF0cywgb3IgZXZlbiBsb2NrZGVwIGFzc2VydGlvbnMuIEl0IHNjcmVhbXMgc29mdGlycSBjb250ZXh0LCBib3R0b20gaGFsZiBpbnRlcmFjdGlvbiwgb3Igc29tZSBraW5kIG9mIGNvbmN1cnJlbmN5IGlzc3VlIHRoYXQgdGhpcyBhaW1zIHRvIHNvbHZlLgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgZnVuY3Rpb24gYXBwZWFycyB0byBkaXNhYmxlIGFuZCBlbmFibGUgbG9jYWwgYm90dG9tIGhhbHZlcyBhcm91bmQgdGhlc2UgbG9vcHMgdGhhdCBhcmUgZHVtcGluZyBlbnRyaWVzIHRvIHRoZSBuZXRsaW5rIGBza2JgLiBTbywgYSBxdWljayBzYW5pdHkgY2hlY2s6IGRvZXMgdGhpcyBjaGFuZ2UgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/CgpMb29raW5nIGNsb3NlciwgdGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBjcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBkYXRhIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBob3cgd2UgY29weSBidWZmZXJzLCBsZW5ndGhzLCBvciBzdHJ1Y3RzLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHN0cnVjdHVyZXMgYXJlIHRvdWNoZWQuIFRoaXMgaXMgcHVyZWx5IGFib3V0IGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHNvZnRpcnEgY29udGV4dCBzeW5jaHJvbml6YXRpb24uIEFueSBuZXcgaXNzdWVzIHRoYXQgcG9wIHVwIGhlcmUgd291bGQgYmUgaW4gdGhlIHJlYWxtIG9mIGxvY2tpbmcgcHJvYmxlbXMsIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxhdGVuY3kgY29uY2VybnMsIG9yLCBvZiBjb3Vyc2UsIHByb2JsZW1hdGljIHNvZnRpcnEgY29udGV4dCBpc3N1ZXMuIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzIGFyZSB0aGUgcmlnaHQgdG9vbHMgdG8gZmluZCB0aGVzZS4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhhdCBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4KCkxldCBtZSByZWl0ZXJhdGUgdGhhdCBhbmQgZW5zdXJlIEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSByZXF1aXJlbWVudHMuCgpgTmVlZHNLTVNBTmA6IGBmYWxzZWAuCmBLTVNBTlJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhZGRzIGBsb2NhbF9iaF9kaXNhYmxlKClgIGFuZCBgbG9jYWxfYmhfZW5hYmxlKClgIGNhbGxzIGFyb3VuZCBmbG93IGFuZCB2cG9ydCBkdW1wIGl0ZXJhdGlvbiBsb29wcyBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGlzIG1vZGlmaWVzIHNvZnRpcnEgZGlzYWJsaW5nL2xvY2tpbmcgY29udGV4dCBkdXJpbmcgbmV0bGluayBkdW1wcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBpdCBkb2VzIG5vdCBtb2RpZnkgYW55IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIHNpemVzIG9yIGRhdGEgY29weWluZyBsb2dpYywgYW5kIHNvLCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIG1lbW9yeS4gQW55IGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBleGVjdXRpb24gY29udGV4dCBidWdzLCBzdWNoIGFzIHNsZWVwaW5nIHdpdGggQkggZGlzYWJsZWQgb3IgbG9ja2RlcCB3YXJuaW5ncywgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQL2tlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGh1cywgS01TQU4gaXMgbm90IG5lZWRlZC4KClJpZ2h0LCBJJiMzOTttIGhhcHB5IHdpdGggdGhhdCBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGxvY2FsX2JoX2Rpc2FibGUoKSBhbmQgbG9jYWxfYmhfZW5hYmxlKCkgYXJvdW5kIHRoZSBkdW1wIGxvb3BzIGluIG92c19mbG93X2NtZF9kdW1wKCkgYW5kIG92c192cG9ydF9jbWRfZHVtcCgpIHdpdGhpbiBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyB0byBoYW5kbGUgYm90dG9tLWhhbGYgZXhlY3V0aW9uIGNvbnRleHQgYW5kIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBhbmQgZG9lcyBub3QgdG91Y2ggZGF0YSBzZXJpYWxpemF0aW9uIG9yIGtlcm5lbC10by11c2VyIGNvcHlpbmcgbG9naWMuIENvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNvbnRleHQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjA6NTYuODIyMjg2NDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NDcyMzY1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfZmxvd19jbWRfZHVtcFwiLFxuICAgIFwib3ZzX3Zwb3J0X2NtZF9kdW1wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib3R0b20taGFsZiAoQkgpIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIGZsb3cgYW5kIHZwb3J0IGR1bXBpbmcgbG9vcHMgaW4gT3BlbiB2U3dpdGNoIG5ldGxpbmsgaGFuZGxlcnMgKG92c19mbG93X2NtZF9kdW1wIGFuZCBvdnNfdnBvcnRfY21kX2R1bXApLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0cyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxvY2tpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIwOjU2LjgyMjI5MTE1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MTk1NDEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY4YjYyNmQ3N2Y4ZjcyZWU2YzBjOWM3NmY5MzUyODg3ODI3OWUxMDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxODoyMDo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggNjMxYTAzMTM2ZmExNC4uYWUyYzk5MjRhZWIwNSAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTE1MzMsNiArMTUzMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHR9XFxuIFxcbiBcXHR0aSA9IHJjdV9kZXJlZmVyZW5jZShkcC1cXHUwMDNldGFibGUudGkpO1xcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdGZvciAoOzspIHtcXG4gXFx0XFx0c3RydWN0IHN3X2Zsb3cgKmZsb3c7XFxuIFxcdFxcdHUzMiBidWNrZXQsIG9iajtcXG5AQCAtMTU1Miw2ICsxNTUzLDcgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gYnVja2V0O1xcbiBcXHRcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IG9iajtcXG4gXFx0fVxcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4gfVxcbkBAIC0yNTY1LDYgKzI1NjcsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdGZvciAoaSA9IGJ1Y2tldDsgaSBcXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCB2cG9ydCAqdnBvcnQ7XFxuIFxcbkBAIC0yNTg1LDYgKzI1ODgsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdHNraXAgPSAwO1xcbiBcXHR9XFxuIG91dDpcXG4rXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMDo1OC4yODQ5NDYzMzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM3MTgzOTQxNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2Zsb3dfY21kX2R1bXBcIixcbiAgICBcIm92c192cG9ydF9jbWRfZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJvdHRvbS1oYWxmIChCSCkgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcGluZyBsb29wcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBoYW5kbGVycyAob3ZzX2Zsb3dfY21kX2R1bXAgYW5kIG92c192cG9ydF9jbWRfZHVtcCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOGI2MjZkNzdmOGY3MmVlNmMwYzljNzZmOTM1Mjg4NzgyNzllMTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxODoyMDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IDYzMWEwMzEzNmZhMTQuLmFlMmM5OTI0YWViMDUgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0xNTMzLDYgKzE1MzMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdH1cbiBcbiBcdHRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLVx1MDAzZXRhYmxlLnRpKTtcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdGZvciAoOzspIHtcbiBcdFx0c3RydWN0IHN3X2Zsb3cgKmZsb3c7XG4gXHRcdHUzMiBidWNrZXQsIG9iajtcbkBAIC0xNTUyLDYgKzE1NTMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGJ1Y2tldDtcbiBcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG9iajtcbiBcdH1cbitcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG5AQCAtMjU2NSw2ICsyNTY3LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRmb3IgKGkgPSBidWNrZXQ7IGkgXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XG4gXHRcdHN0cnVjdCB2cG9ydCAqdnBvcnQ7XG4gXG5AQCAtMjU4NSw2ICsyNTg4LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRza2lwID0gMDtcbiBcdH1cbiBvdXQ6XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMDo1OC4yODQ5NDgyOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzAzMTM3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldyBhbmQgc29tZSBpbnN0cnVjdGlvbnMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBnZXQgaGFuZHMtb24uIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzIOKAkyB0aGUgZGlmZi4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byByZWFkIHRoZSBjb2RlIGludm9sdmVkLiBBZnRlciB0aGF0LCBJIHdpbGwgbmVlZCB0byBnZXQgZmFtaWxpYXIgd2l0aCB0aGUgY29kZWJhc2UuXG5cbk15IG5leHQgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHRob3NlIHNwZWNpZmljIGZpbGVzIGFuZCBsaW5lIG51bWJlcnMgdGhlIGluc3RydWN0aW9ucyBwb2ludCBvdXQsIHNwZWNpZmljYWxseSBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIGFyb3VuZCB0aGUgY3JpdGljYWwgc2VjdGlvbnMuIEknbGwgcHJvYmFibHkgcmVhY2ggZm9yIGEgY29tbWFuZCBsaW5lIHRvIG1ha2UgdGhpcyBlZmZpY2llbnQuIEknbSB0aGlua2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyIGdldHMgbWUgdGhlcmUgdGhlIGZhc3Rlc3QuIEkgd2FudCB0byBzZWUgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIGF0IGxpbmVzIDE1MzMgYW5kIDI1NjUgYW5kIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dCBpbiByZWxhdGlvbiB0byB0aGUgZGlmZi4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjQsIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjAzLjk4ODA4ODkyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTIwOlxcdFxcdGludCBlcnI7XFxuMTUyMTpcXHRcXG4xNTIyOlxcdFxcdGVyciA9IGdlbmxtc2dfcGFyc2VfZGVwcmVjYXRlZChjYi1cXHUwMDNlbmxoLCBcXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSwgYSxcXG4xNTIzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBPVlNfRkxPV19BVFRSX01BWCwgZmxvd19wb2xpY3ksIE5VTEwpO1xcbjE1MjQ6XFx0XFx0aWYgKGVycilcXG4xNTI1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUyNjpcXHRcXHR1ZmlkX2ZsYWdzID0gb3ZzX25sYV9nZXRfdWZpZF9mbGFncyhhW09WU19GTE9XX0FUVFJfVUZJRF9GTEFHU10pO1xcbjE1Mjc6XFx0XFxuMTUyODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTUyOTpcXHRcXHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgpO1xcbjE1MzA6XFx0XFx0aWYgKCFkcCkge1xcbjE1MzE6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTUzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xNTMzOlxcdFxcdH1cXG4xNTM0OlxcdFxcbjE1MzU6XFx0XFx0dGkgPSByY3VfZGVyZWZlcmVuY2UoZHAtXFx1MDAzZXRhYmxlLnRpKTtcXG4xNTM2OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4xNTM3OlxcdFxcdGZvciAoOzspIHtcXG4xNTM4OlxcdFxcdFxcdHN0cnVjdCBzd19mbG93ICpmbG93O1xcbjE1Mzk6XFx0XFx0XFx0dTMyIGJ1Y2tldCwgb2JqO1xcbjE1NDA6XFx0XFxuMTU0MTpcXHRcXHRcXHRidWNrZXQgPSBjYi1cXHUwMDNlYXJnc1swXTtcXG4xNTQyOlxcdFxcdFxcdG9iaiA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbjE1NDM6XFx0XFx0XFx0ZmxvdyA9IG92c19mbG93X3RibF9kdW1wX25leHQodGksIFxcdTAwMjZidWNrZXQsIFxcdTAwMjZvYmopO1xcbjE1NDQ6XFx0XFx0XFx0aWYgKCFmbG93KVxcbjE1NDU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTU0NjpcXHRcXG4xNTQ3OlxcdFxcdFxcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgsIHNrYixcXG4xNTQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbjE1NDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBOTE1fRl9NVUxUSSxcXG4xNTUwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9WU19GTE9XX0NNRF9HRVQsIHVmaWRfZmxhZ3MpIFxcdTAwM2MgMClcXG4xNTUxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1NTI6XFx0XFxuMTU1MzpcXHRcXHRcXHRjYi1cXHUwMDNlYXJnc1swXSA9IGJ1Y2tldDtcXG4xNTU0OlxcdFxcdFxcdGNiLVxcdTAwM2VhcmdzWzFdID0gb2JqO1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMTU1NzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xNTU4OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4xNTU5OlxcdH1cXG4xNTYwOlxcdFxcbjE1NjE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZsb3dfcG9saWN5W09WU19GTE9XX0FUVFJfTUFYICsgMV0gPSB7XFxuMTU2MjpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9LRVldID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4xNTYzOlxcdFxcdFtPVlNfRkxPV19BVFRSX01BU0tdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4xNTY0OlxcdFxcdFtPVlNfRkxPV19BVFRSX0FDVElPTlNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4xNTY1OlxcdFxcdFtPVlNfRkxPV19BVFRSX0NMRUFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbjE1NjY6XFx0XFx0W09WU19GTE9XX0FUVFJfUFJPQkVdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuMTU2NzpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9VRklEXSA9IHsgLnR5cGUgPSBOTEFfVU5TUEVDLCAubGVuID0gMSB9LFxcbjE1Njg6XFx0XFx0W09WU19GTE9XX0FUVFJfVUZJRF9GTEFHU10gPSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbjE1Njk6XFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MDMuOTg4MzMyNjY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NjA6XFx0XFx0c3RydWN0IGRhdGFwYXRoICpkcDtcXG4yNTYxOlxcdFxcdGludCBidWNrZXQgPSBjYi1cXHUwMDNlYXJnc1swXSwgc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbjI1NjI6XFx0XFx0aW50IGksIGogPSAwO1xcbjI1NjM6XFx0XFxuMjU2NDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjU2NTpcXHRcXHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgpO1xcbjI1NjY6XFx0XFx0aWYgKCFkcCkge1xcbjI1Njc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjU2ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yNTY5OlxcdFxcdH1cXG4yNTcwOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4yNTcxOlxcdFxcdGZvciAoaSA9IGJ1Y2tldDsgaSBcXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XFxuMjU3MjpcXHRcXHRcXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0O1xcbjI1NzM6XFx0XFxuMjU3NDpcXHRcXHRcXHRqID0gMDtcXG4yNTc1OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2cG9ydCwgXFx1MDAyNmRwLVxcdTAwM2Vwb3J0c1tpXSwgZHBfaGFzaF9ub2RlKSB7XFxuMjU3NjpcXHRcXHRcXHRcXHRpZiAoaiBcXHUwMDNlPSBza2lwIFxcdTAwMjZcXHUwMDI2XFxuMjU3NzpcXHRcXHRcXHRcXHQgICAgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHNrYixcXG4yNTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG4yNTc5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4yNTgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsXFxuMjU4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgTkxNX0ZfTVVMVEksXFxuMjU4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgT1ZTX1ZQT1JUX0NNRF9HRVQsXFxuMjU4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0FUT01JQykgXFx1MDAzYyAwKVxcbjI1ODQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU4NTpcXHRcXG4yNTg2OlxcdFxcdFxcdFxcdGorKztcXG4yNTg3OlxcdFxcdFxcdH1cXG4yNTg4OlxcdFxcdFxcdHNraXAgPSAwO1xcbjI1ODk6XFx0XFx0fVxcbjI1OTA6XFx0b3V0OlxcbjI1OTE6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMjU5MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNTkzOlxcdFxcbjI1OTQ6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbjI1OTU6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMV0gPSBqO1xcbjI1OTY6XFx0XFxuMjU5NzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMjU5ODpcXHR9XFxuMjU5OTpcXHRcXG4yNjAwOlxcdHN0YXRpYyB2b2lkIG92c19kcF9tYXNrc19yZWJhbGFuY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjI2MDE6XFx0e1xcbjI2MDI6XFx0XFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG92c19uZXQsXFxuMjYwMzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbWFza3NfcmViYWxhbmNlLndvcmspO1xcbjI2MDQ6XFx0XFx0c3RydWN0IGRhdGFwYXRoICpkcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MDMuOTg4NDg2NDU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxOTcxODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBsb2NhbF9iaF9kaXNhYmxlKClgIGFuZCBgbG9jYWxfYmhfZW5hYmxlKClgIGNhbGxzIHdpdGhpbiBgb3ZzX2Zsb3dfY21kX2R1bXBgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9kdW1wYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2h5IGFyZSB3ZSBkaXNhYmxpbmcgYm90dG9tIGhhbHZlcyBoZXJlP1wiIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBiZWNhdXNlIHNvbWV0aGluZyB3aXRoaW4gZWl0aGVyIGBvdnNfZmxvd19jbWRfZmlsbF9pbmZvYCBvciBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gIOKAkyBvciBwZXJoYXBzIGEgZnVuY3Rpb24gKnRoZXkqIGNhbGwg4oCTIGlzIGNhdXNpbmcgY29udGVudGlvbiBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGFjY2Vzc2luZyBwZXItQ1BVIHN0YXRpc3RpY3Mgb3IgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBsb2NrZGVwIGFzc2VydGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGB1NjRfc3RhdHNgLCBSQ1UgdXNhZ2UsIG9yIGdlbmVyYWwgcGVyLUNQVSBkYXRhIGFjY2VzcyB0aGF0IHJlcXVpcmVzIGJvdHRvbSBoYWx2ZXMgdG8gYmUgZGlzYWJsZWQgZm9yIHNhZmUgb3BlcmF0aW9uLiBNYXliZSB0aGVyZSdzIGEgYHU2NF9zdGF0c19mZXRjaF9iZWdpbmAgY2FsbCBpbiB0aGVyZSB0aGF0IG5lY2Vzc2l0YXRlcyB0aGUgQkggZGlzYWJsZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiB0aG9zZSB0d28gZmlsbCBmdW5jdGlvbnMgaW4gdGhlIGBuZXQvb3BlbnZzd2l0Y2gvYCBkaXJlY3RvcnkuIFRpbWUgdG8gZ3JlcCBhbmQgZGl2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDgwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MDYuNjA4MjA3NzU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTQ2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19mbG93X2NtZF9maWxsX2luZm98b3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTg2Nj1zdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX2FjdGlvbnMoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05MDUtLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6OTA2OnN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgaW50IGRwX2lmaW5kZXgsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTA3LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTk3Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm92c19mbG93X2NtZF9idWlsZF9pbmZvKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTg5LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjk5MDpcXHRyZXR2YWwgPSBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIGRwX2lmaW5kZXgsIHNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05OTEtXFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSwgMCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEwMDA9c3RhdGljIGludCBvdnNfZmxvd19jbWRfbmV3KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMDk0LVxcdFxcdGlmICh1bmxpa2VseShyZXBseSkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMDk1OlxcdFxcdFxcdGVycm9yID0gb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhuZXdfZmxvdyxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMDk2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBvdnNfaGVhZGVyLVxcdTAwM2VkcF9pZmluZGV4LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTE1OS1cXHRcXHRpZiAodW5saWtlbHkocmVwbHkpKSB7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTE2MDpcXHRcXHRcXHRlcnJvciA9IG92c19mbG93X2NtZF9maWxsX2luZm8oZmxvdyxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMTYxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBvdnNfaGVhZGVyLVxcdTAwM2VkcF9pZmluZGV4LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3MD1zdGF0aWMgaW50IG92c19mbG93X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMzAtXFx0XFx0aWYgKHVubGlrZWx5KHJlcGx5KSkge1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMzE6XFx0XFx0XFx0ZXJyb3IgPSBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMzMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgb3ZzX2hlYWRlci1cXHUwMDNlZHBfaWZpbmRleCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE0MzI9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDg2LVxcdGlmIChsaWtlbHkocmVwbHkpKSB7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTQ4NzpcXHRcXHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ4OC1cXHRcXHRcXHRcXHRcXHQgICAgIHJlcGx5LCBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ5NS1cXHR9XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTQ5NjpcXHQvKiBSZW1vdmFsIGhhcyB0byBoYXBwZW4gYWZ0ZXIgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbygpLCBhcyBpdCB1c2VzXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ5Ny1cXHQgKiB0aGUgZmxvdy1cXHUwMDNlbWFzayB0aGF0IGNhbiBiZSBzY2hlZHVsZWQgdG8gYmUgZnJlZWQgYnkgdGhlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNTEzPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTU0Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNTQ3OlxcdFxcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgsIHNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTQ4LVxcdFxcdFxcdFxcdFxcdCAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjE0MD1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGRwX2RhdGFwYXRoX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxNTYtLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjE1NzpzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjE1OC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMjQ0PXN0cnVjdCBza19idWZmICpvdnNfdnBvcnRfY21kX2J1aWxkX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjI1My1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyMjU0OlxcdHJldHZhbCA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCBza2IsIG5ldCwgcG9ydGlkLCBzZXEsIDAsIGNtZCxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMjU1LVxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMzI9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjM5NS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyMzk2OlxcdGVyciA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCByZXBseSwgZ2VubF9pbmZvX25ldChpbmZvKSxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzk3LVxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXFx1MDAzZXNuZF9zZXEsIDAsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDE5PXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NTUtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1NjpcXHRlcnIgPSBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyh2cG9ydCwgcmVwbHksIGdlbmxfaW5mb19uZXQoaW5mbyksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ1Ny1cXHRcXHRcXHRcXHQgICAgICBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLCAwLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ3MT1zdGF0aWMgaW50IG92c192cG9ydF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDk1LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI0OTY6XFx0ZXJyID0gb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHJlcGx5LCBnZW5sX2luZm9fbmV0KGluZm8pLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0OTctXFx0XFx0XFx0XFx0ICAgICAgaW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSwgMCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI1MjY9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjU0Mi1cXHRcXHRnb3RvIGV4aXRfdW5sb2NrX2ZyZWU7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjU0MzpcXHRlcnIgPSBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyh2cG9ydCwgcmVwbHksIGdlbmxfaW5mb19uZXQoaW5mbyksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjU0NC1cXHRcXHRcXHRcXHQgICAgICBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLCAwLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjU1Nz1zdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNTc2LVxcdFxcdFxcdGlmIChqIFxcdTAwM2U9IHNraXAgXFx1MDAyNlxcdTAwMjZcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNTc3OlxcdFxcdFxcdCAgICBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyh2cG9ydCwgc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI1NzgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTowNi42NTk3NTk3MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDAzMDg4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mb2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2AqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSB0d28gZnVuY3Rpb25zLCBgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mb2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2AsIGFyZSBhY3R1YWxseSBkb2luZy4gVGltZSB0byBjcmFjayB0aGVtIG9wZW4gYW5kIHNlZSB3aGF0IHRoZXkncmUgYWxsIGFib3V0LiBMZXQncyByZWFkIHRocm91Z2ggdGhlIGNvZGUgb2YgYm90aCBmdW5jdGlvbnMgY2FyZWZ1bGx5IGFuZCBtZXRob2RpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGlucHV0cywgb3V0cHV0cywgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCBhbnkga2V5IGFsZ29yaXRobXMgb3IgbG9naWMgd2l0aGluIHRoZW0uIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjE1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MDguOTYwMDcwMzUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDU6XFx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxuIDkwNjpcXHRzdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csIGludCBkcF9pZmluZGV4LFxcbiA5MDc6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLFxcbiA5MDg6XFx0XFx0XFx0XFx0XFx0ICB1MzIgc2VxLCB1MzIgZmxhZ3MsIHU4IGNtZCwgdTMyIHVmaWRfZmxhZ3MpXFxuIDkwOTpcXHR7XFxuIDkxMDpcXHRcXHRjb25zdCBpbnQgc2tiX29yaWdfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIDkxMTpcXHRcXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX2hlYWRlcjtcXG4gOTEyOlxcdFxcdGludCBlcnI7XFxuIDkxMzpcXHRcXG4gOTE0OlxcdFxcdG92c19oZWFkZXIgPSBnZW5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBcXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSxcXG4gOTE1OlxcdFxcdFxcdFxcdFxcdCBmbGFncywgY21kKTtcXG4gOTE2OlxcdFxcdGlmICghb3ZzX2hlYWRlcilcXG4gOTE3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDkxODpcXHRcXG4gOTE5OlxcdFxcdG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXggPSBkcF9pZmluZGV4O1xcbiA5MjA6XFx0XFxuIDkyMTpcXHRcXHRlcnIgPSBvdnNfbmxhX3B1dF9pZGVudGlmaWVyKGZsb3csIHNrYik7XFxuIDkyMjpcXHRcXHRpZiAoZXJyKVxcbiA5MjM6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gOTI0OlxcdFxcbiA5MjU6XFx0XFx0aWYgKHNob3VsZF9maWxsX2tleShcXHUwMDI2Zmxvdy1cXHUwMDNlaWQsIHVmaWRfZmxhZ3MpKSB7XFxuIDkyNjpcXHRcXHRcXHRlcnIgPSBvdnNfbmxhX3B1dF9tYXNrZWRfa2V5KGZsb3csIHNrYik7XFxuIDkyNzpcXHRcXHRcXHRpZiAoZXJyKVxcbiA5Mjg6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gOTI5OlxcdFxcdH1cXG4gOTMwOlxcdFxcbiA5MzE6XFx0XFx0aWYgKHNob3VsZF9maWxsX21hc2sodWZpZF9mbGFncykpIHtcXG4gOTMyOlxcdFxcdFxcdGVyciA9IG92c19ubGFfcHV0X21hc2soZmxvdywgc2tiKTtcXG4gOTMzOlxcdFxcdFxcdGlmIChlcnIpXFxuIDkzNDpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5MzU6XFx0XFx0fVxcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9zdGF0cyhmbG93LCBza2IpO1xcbiA5Mzg6XFx0XFx0aWYgKGVycilcXG4gOTM5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDk0MDpcXHRcXG4gOTQxOlxcdFxcdGlmIChzaG91bGRfZmlsbF9hY3Rpb25zKHVmaWRfZmxhZ3MpKSB7XFxuIDk0MjpcXHRcXHRcXHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9hY3Rpb25zKGZsb3csIHNrYiwgc2tiX29yaWdfbGVuKTtcXG4gOTQzOlxcdFxcdFxcdGlmIChlcnIpXFxuIDk0NDpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5NDU6XFx0XFx0fVxcbiA5NDY6XFx0XFxuIDk0NzpcXHRcXHRnZW5sbXNnX2VuZChza2IsIG92c19oZWFkZXIpO1xcbiA5NDg6XFx0XFx0cmV0dXJuIDA7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdGVycm9yOlxcbiA5NTE6XFx0XFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBvdnNfaGVhZGVyKTtcXG4gOTUyOlxcdFxcdHJldHVybiBlcnI7XFxuIDk1MzpcXHR9XFxuIDk1NDpcXHRcXG4gOTU1OlxcdC8qIE1heSBub3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay4gKi9cXG4gOTU2OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3dfY21kX2FsbG9jX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqYWN0cyxcXG4gOTU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19pZCAqc2ZpZCxcXG4gOTU4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbiA5NTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYWx3YXlzLFxcbiA5NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVpbnQzMl90IHVmaWRfZmxhZ3MpXFxuIDk2MTpcXHR7XFxuIDk2MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA5NjM6XFx0XFx0c2l6ZV90IGxlbjtcXG4gOTY0OlxcdFxcbiA5NjU6XFx0XFx0aWYgKCFhbHdheXMgXFx1MDAyNlxcdTAwMjYgIW92c19tdXN0X25vdGlmeShcXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSwgaW5mbywgMCkpXFxuIDk2NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gOTY3OlxcdFxcbiA5Njg6XFx0XFx0bGVuID0gb3ZzX2Zsb3dfY21kX21zZ19zaXplKGFjdHMsIHNmaWQsIHVmaWRfZmxhZ3MpO1xcbiA5Njk6XFx0XFx0c2tiID0gZ2VubG1zZ19uZXcobGVuLCBHRlBfS0VSTkVMKTtcXG4gOTcwOlxcdFxcdGlmICghc2tiKVxcbiA5NzE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdHJldHVybiBza2I7XFxuIDk3NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjA4Ljk2MTIzNjY2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjAyMDM3MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBGaXJzdCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IHRoZXkncmUgcmVsYXRlZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZW0gaW5kaXZpZHVhbGx5IGZpcnN0IHRvIHNlZSB0aGUgY29ubmVjdGlvbi4gQWxyaWdodCwgbGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IuIEkgYmV0IGl0J3MgaW52b2x2ZWQgaW4gZ2F0aGVyaW5nIHN0YXRzIG9uIHRoZSBmbG93cywgbGlrZWx5IGZvciB0aGUgZGF0YXBhdGgsIGFuZCBwcm9iYWJseSBmaWxscyBhIHN0cnVjdHVyZSB3aXRoIHRob3NlIHJlc3VsdHMgdG8gYmUgcmV0dXJuZWQgb3IgcHJvY2Vzc2VkIGVsc2V3aGVyZS4gSSdtIGdvaW5nIHRvIGRpZyBkZWVwZXIgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCdzIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkyNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTAuNTYzMjc2OTQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM5OTUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZmxvd19jbWRfZmlsbF9zdGF0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9ODA1PXN0YXRpYyBzaXplX3Qgb3ZzX2Zsb3dfY21kX21zZ19zaXplKGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy04MzctLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6ODM4OnN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHMoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtODM5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz05MDY9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LCBpbnQgZHBfaWZpbmRleCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTkzNi1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo5Mzc6XFx0ZXJyID0gb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHMoZmxvdywgc2tiKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05MzgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTAuNjA5Njg1OTk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMDM3OTA0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYmFzZWQgb24gYSBxdWljayBnbGFuY2U6XG5cbioqRGl2aW5nIGludG8gT3BlbiB2U3dpdGNoIERhdGFwYXRoIFN0YXRzIGFuZCBJbmZvcm1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHNgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGVzZSBhcmUgKmNyaXRpY2FsKiBmb3IgYW55IGtpbmQgb2YgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBvciBuZXR3b3JrIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBPVlMgZGF0YXBhdGguIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IG9uZSBoYW5kbGVzIHRoZSBmaWxsaW5nIGluIG9mIGZsb3cgc3RhdGlzdGljcywgd2hpbGUgdGhlIG90aGVyIGxpa2VseSBmb2N1c2VzIG9uIHZpcnR1YWwgcG9ydCAodnBvcnQpIGluZm9ybWF0aW9uLlxuXG5JJ2QgZXhwZWN0IGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AgdG8gYmUgdGhlIGd1dHMgb2YgaG93IHdlIGdldCBmbG93IHRhYmxlIGNvdW50ZXJzLiBUaGlzIHdvdWxkIGludm9sdmUgZGlnZ2luZyB0aHJvdWdoIHRoZSBkYXRhcGF0aCdzIGludGVybmFsIHN0cnVjdHVyZXMgdG8gcmV0cmlldmUgcGFja2V0IGFuZCBieXRlIGNvdW50cywgaWRsZSB0aW1lb3V0cywgYWN0aXZlIGZsb3cgdGltZW91dHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgcGVyZm9ybWFuY2UgbWV0cmljcyByZWxhdGVkIHRvIHNwZWNpZmljIGZsb3dzLiBJdCBwcm9iYWJseSB0YWtlcyBhIHJlcXVlc3QgZnJvbSB1c2Vyc3BhY2UsIHRyYW5zbGF0ZXMgaXQgaW50byB0aGUgZGF0YXBhdGgncyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgYSBmbG93LCB0aGVuIHF1ZXJpZXMgZm9yIHRoZSByZXF1aXJlZCBkYXRhLCBhbmQgYnVuZGxlcyBpdCBiYWNrIHVwIGZvciB0aGUgY2FsbGVyLCBsaWtlbHkgb3ZlciBOZXRsaW5rIG9yIHNvbWUgb3RoZXIgUlBDIG1lY2hhbmlzbS4gVGhlcmUgd291bGQgYmUgYSBnb29kIGNoYW5jZSB0byBzZWUgbG9ja2luZywgY2FjaGluZywgYW5kIGEgaGVhdnkgZm9jdXMgb24gY29uY3VycmVuY3kgaW4gaGVyZS5cblxuYG92c192cG9ydF9jbWRfZmlsbF9pbmZvYCBzb3VuZHMgbGlrZSBpdCdzIGFib3V0IHByb3ZpZGluZyB0aGUgZGV0YWlscyBvZiB0aGUgdmlydHVhbCBwb3J0cyB0aGVtc2VsdmVzLiBUaGlzIGlzIGFsbCB0aGUgYmFzaWMgaW5mb3JtYXRpb24geW91IG5lZWQgYWJvdXQgYSBzcGVjaWZpYyBpbnRlcmZhY2UgdGhhdCBzaXRzIHdpdGhpbiB0aGUgT1ZTIGRhdGEgcGxhbmUuIEknZCBleHBlY3QgdG8gc2VlIHRoaW5ncyBsaWtlIHRoZSBpbnRlcmZhY2UncyBuYW1lLCB0eXBlIChlLmcuLCBpbnRlcm5hbCwgdGFwLCB2ZXRoKSwgaGFyZHdhcmUgYWRkcmVzcywgTVRVLCBtYXliZSBhc3NvY2lhdGVkIHBoeXNpY2FsIGludGVyZmFjZXMgKGlmIGFueSksIGFuZCBwb3NzaWJseSBpdHMgY3VycmVudCBzdGF0dXMgKHVwL2Rvd24pLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBoZXJlIHdpbGwgYmUgaG93IHRoaXMgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkIOKAkyBpcyBpdCBhIGRpcmVjdCBsb29rdXAgZnJvbSBhIGdsb2JhbCB2cG9ydCB0YWJsZSwgb3IgaXMgaXQgbW9yZSBjb21wbGV4IGlmIHZpcnR1YWwgcG9ydHMgYXJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQgb3IgY29uZmlndXJlZD8gTWlnaHQgYWxzbyBpbnZvbHZlIGdvaW5nIHRvIHRoZSBrZXJuZWwgdG8gZGlzY292ZXIgdGhlIGludGVyZmFjZSBkZXRhaWxzLlxuXG5JJ20gYmV0dGluZyB0aGVzZSBhcmUgY29yZSBjb21wb25lbnRzIGZvciB0b29scyBsaWtlIGBvdnMtb2ZjdGxgLCBgb3ZzLWFwcGN0bGAsIGFuZCBhbnkgb3RoZXIgbW9uaXRvcmluZyBvciBjb250cm9sIHV0aWxpdGllcyB0aGF0IGludGVyYWN0IHdpdGggdGhlIE9WUyBkYXRhcGF0aC4gVGhlIGRldmlsLCBhcyBhbHdheXMsIHdpbGwgYmUgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhvdyBlZmZpY2llbnRseSB0aGV5IGhhbmRsZSByZXF1ZXN0cywgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBsb2FkLiBUaGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBoZXJlIGlzIHByZXR0eSBoaWdoLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGVpciBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDM1LCJPdXRwdXRUb2tlbnMiOjc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTQuNzEzNDc4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM1OlxcdH1cXG4gODM2OlxcdFxcbiA4Mzc6XFx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxuIDgzODpcXHRzdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX3N0YXRzKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxcbiA4Mzk6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gODQwOlxcdHtcXG4gODQxOlxcdFxcdHN0cnVjdCBvdnNfZmxvd19zdGF0cyBzdGF0cztcXG4gODQyOlxcdFxcdF9fYmUxNiB0Y3BfZmxhZ3M7XFxuIDg0MzpcXHRcXHR1bnNpZ25lZCBsb25nIHVzZWQ7XFxuIDg0NDpcXHRcXG4gODQ1OlxcdFxcdG92c19mbG93X3N0YXRzX2dldChmbG93LCBcXHUwMDI2c3RhdHMsIFxcdTAwMjZ1c2VkLCBcXHUwMDI2dGNwX2ZsYWdzKTtcXG4gODQ2OlxcdFxcbiA4NDc6XFx0XFx0aWYgKHVzZWQgXFx1MDAyNlxcdTAwMjZcXG4gODQ4OlxcdFxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE9WU19GTE9XX0FUVFJfVVNFRCwgb3ZzX2Zsb3dfdXNlZF90aW1lKHVzZWQpLFxcbiA4NDk6XFx0XFx0XFx0XFx0ICAgICAgT1ZTX0ZMT1dfQVRUUl9QQUQpKVxcbiA4NTA6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gODUxOlxcdFxcbiA4NTI6XFx0XFx0aWYgKHN0YXRzLm5fcGFja2V0cyBcXHUwMDI2XFx1MDAyNlxcbiA4NTM6XFx0XFx0ICAgIG5sYV9wdXRfNjRiaXQoc2tiLCBPVlNfRkxPV19BVFRSX1NUQVRTLFxcbiA4NTQ6XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG92c19mbG93X3N0YXRzKSwgXFx1MDAyNnN0YXRzLFxcbiA4NTU6XFx0XFx0XFx0XFx0ICBPVlNfRkxPV19BVFRSX1BBRCkpXFxuIDg1NjpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRpZiAoKHU4KW50b2hzKHRjcF9mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gODU5OlxcdFxcdCAgICAgbmxhX3B1dF91OChza2IsIE9WU19GTE9XX0FUVFJfVENQX0ZMQUdTLCAodTgpbnRvaHModGNwX2ZsYWdzKSkpXFxuIDg2MDpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRyZXR1cm4gMDtcXG4gODYzOlxcdH1cXG4gODY0OlxcdFxcbiA4NjU6XFx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxuIDg2NjpcXHRzdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX2FjdGlvbnMoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxuIDg2NzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBza2Jfb3JpZ19sZW4pXFxuIDg2ODpcXHR7XFxuIDg2OTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzdGFydDtcXG4gODcwOlxcdFxcdGludCBlcnI7XFxuIDg3MTpcXHRcXG4gODcyOlxcdFxcdC8qIElmIE9WU19GTE9XX0FUVFJfQUNUSU9OUyBkb2Vzbid0IGZpdCwgc2tpcCBkdW1waW5nIHRoZSBhY3Rpb25zIGlmXFxuIDg3MzpcXHRcXHQgKiB0aGlzIGlzIHRoZSBmaXJzdCBmbG93IHRvIGJlIGR1bXBlZCBpbnRvICdza2InLiAgVGhpcyBpcyB1bnVzdWFsIGZvclxcbiA4NzQ6XFx0XFx0ICogTmV0bGluayBidXQgaW5kaXZpZHVhbCBhY3Rpb24gbGlzdHMgY2FuIGJlIGxvbmdlciB0aGFuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjE0LjcxMzYxNTkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTU1OlxcdFxcbjIxNTY6XFx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxuMjE1NzpcXHRzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjE1ODpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuMjE1OTpcXHRcXHRcXHRcXHRcXHQgICB1MzIgZmxhZ3MsIHU4IGNtZCwgZ2ZwX3QgZ2ZwKVxcbjIxNjA6XFx0e1xcbjIxNjE6XFx0XFx0c3RydWN0IG92c19oZWFkZXIgKm92c19oZWFkZXI7XFxuMjE2MjpcXHRcXHRzdHJ1Y3Qgb3ZzX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzO1xcbjIxNjM6XFx0XFx0c3RydWN0IG5ldCAqbmV0X3Zwb3J0O1xcbjIxNjQ6XFx0XFx0aW50IGVycjtcXG4yMTY1OlxcdFxcbjIxNjY6XFx0XFx0b3ZzX2hlYWRlciA9IGdlbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFxcdTAwMjZkcF92cG9ydF9nZW5sX2ZhbWlseSxcXG4yMTY3OlxcdFxcdFxcdFxcdFxcdCBmbGFncywgY21kKTtcXG4yMTY4OlxcdFxcdGlmICghb3ZzX2hlYWRlcilcXG4yMTY5OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjE3MDpcXHRcXG4yMTcxOlxcdFxcdG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXggPSBnZXRfZHBpZmluZGV4KHZwb3J0LVxcdTAwM2VkcCk7XFxuMjE3MjpcXHRcXG4yMTczOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIE9WU19WUE9SVF9BVFRSX1BPUlRfTk8sIHZwb3J0LVxcdTAwM2Vwb3J0X25vKSB8fFxcbjIxNzQ6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgT1ZTX1ZQT1JUX0FUVFJfVFlQRSwgdnBvcnQtXFx1MDAzZW9wcy1cXHUwMDNldHlwZSkgfHxcXG4yMTc1OlxcdFxcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE9WU19WUE9SVF9BVFRSX05BTUUsXFxuMjE3NjpcXHRcXHRcXHRcXHQgICBvdnNfdnBvcnRfbmFtZSh2cG9ydCkpIHx8XFxuMjE3NzpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBPVlNfVlBPUlRfQVRUUl9JRklOREVYLCB2cG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4KSlcXG4yMTc4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIxNzk6XFx0XFxuMjE4MDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE4MTpcXHRcXHRuZXRfdnBvcnQgPSBkZXZfbmV0X3JjdSh2cG9ydC1cXHUwMDNlZGV2KTtcXG4yMTgyOlxcdFxcdGlmICghbmV0X2VxKG5ldCwgbmV0X3Zwb3J0KSkge1xcbjIxODM6XFx0XFx0XFx0aW50IGlkID0gcGVlcm5ldDJpZF9hbGxvYyhuZXQsIG5ldF92cG9ydCwgR0ZQX0FUT01JQyk7XFxuMjE4NDpcXHRcXG4yMTg1OlxcdFxcdFxcdGlmIChubGFfcHV0X3MzMihza2IsIE9WU19WUE9SVF9BVFRSX05FVE5TSUQsIGlkKSlcXG4yMTg2OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlX3VubG9jaztcXG4yMTg3OlxcdFxcdH1cXG4yMTg4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIxODk6XFx0XFxuMjE5MDpcXHRcXHRvdnNfdnBvcnRfZ2V0X3N0YXRzKHZwb3J0LCBcXHUwMDI2dnBvcnRfc3RhdHMpO1xcbjIxOTE6XFx0XFx0aWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBPVlNfVlBPUlRfQVRUUl9TVEFUUyxcXG4yMTkyOlxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvdnNfdnBvcnRfc3RhdHMpLCBcXHUwMDI2dnBvcnRfc3RhdHMsXFxuMjE5MzpcXHRcXHRcXHRcXHQgIE9WU19WUE9SVF9BVFRSX1BBRCkpXFxuMjE5NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMTk1OlxcdFxcbjIxOTY6XFx0XFx0aWYgKG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzKHZwb3J0LCBza2IpKVxcbjIxOTc6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjE5ODpcXHRcXG4yMTk5OlxcdFxcdGlmIChvdnNfdnBvcnRfZ2V0X3VwY2FsbF9wb3J0aWRzKHZwb3J0LCBza2IpKVxcbjIyMDA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdGdlbmxtc2dfZW5kKHNrYiwgb3ZzX2hlYWRlcik7XFxuMjIwMzpcXHRcXHRyZXR1cm4gMDtcXG4yMjA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMToxNC43MTM3MTk5MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDAxMzMyOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOlxuXG4qKkRpZ2dpbmcgaW50byBGbG93IGFuZCBQb3J0IFN0YXRzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGVzZSB0d28gZnVuY3Rpb25zOiBgb3ZzX2Zsb3dfc3RhdHNfZ2V0YCBhbmQgYG92c192cG9ydF9nZXRfc3RhdHNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGZpbmQgb3V0IHdoYXQgZWFjaCBvbmUncyBjb3JlIGZ1bmN0aW9uIGlzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgbWV0cmljcyB0aGV5J3JlIHJldHJpZXZpbmc/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldCBjb3VudHMsIGJ5dGUgY291bnRzLCBmbG93IHRpbWVvdXRzLCBlcnJvciBjb3VudHMsIGludGVyZmFjZSBzdGF0aXN0aWNzLCBvciBhIG1peCBvZiB0aGluZ3M/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiAqZXhhY3RseSogd2hhdCBlYWNoIG9uZSBtZWFzdXJlcyBpcyB0aGUgZm91bmRhdGlvbiBoZXJlLiBUaGVuIEknbGwgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXkncmUgcmVsYXRlZCwgd2hhdCB0aGVpciBpbnB1dHMgYXJlLCBhbmQgaG93IHRoZWlyIGRhdGEgZ2V0cyB1c2VkIGRvd25zdHJlYW0uIFByb2JhYmx5IEknbGwgaGF2ZSB0byBjb25zaWRlciBob3cgdGhvc2UgdHdvIGNhbGxzIGFmZmVjdCBwZXJmb3JtYW5jZSwgYW5kIGNvbnNpZGVyIHRoZSBpbXBhY3Qgb24gYW55IG1vbml0b3JpbmcgdG9vbHMgdGhhdCBtaWdodCBiZSB1c2luZyB0aGUgb3V0cHV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5NywiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTYuNzE1MDU2MjQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDcxNDkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZmxvd19zdGF0c19nZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTgzOD1zdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX3N0YXRzKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtODQ0LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjg0NTpcXHRvdnNfZmxvd19zdGF0c19nZXQoZmxvdywgXFx1MDAyNnN0YXRzLCBcXHUwMDI2dXNlZCwgXFx1MDAyNnRjcF9mbGFncyk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtODQ2LVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz02MT12b2lkIG92c19mbG93X3N0YXRzX3VwZGF0ZShzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgX19iZTE2IHRjcF9mbGFncyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTI3LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBvciBvdnNfbXV0ZXguICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMjg6dm9pZCBvdnNfZmxvd19zdGF0c19nZXQoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMjktXFx0XFx0XFx0c3RydWN0IG92c19mbG93X3N0YXRzICpvdnNfc3RhdHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oPTI4MT12b2lkIG92c19mbG93X3N0YXRzX3VwZGF0ZShzdHJ1Y3Qgc3dfZmxvdyAqLCBfX2JlMTYgdGNwX2ZsYWdzLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmgtMjgyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICopO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6MjgzOnZvaWQgb3ZzX2Zsb3dfc3RhdHNfZ2V0KGNvbnN0IHN0cnVjdCBzd19mbG93ICosIHN0cnVjdCBvdnNfZmxvd19zdGF0cyAqLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmgtMjg0LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnVzZWQsIF9fYmUxNiAqdGNwX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTYuNzY1Nzc1MzkzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ5MDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfdnBvcnRfZ2V0X3N0YXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMTU3PXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxODktXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjE5MDpcXHRvdnNfdnBvcnRfZ2V0X3N0YXRzKHZwb3J0LCBcXHUwMDI2dnBvcnRfc3RhdHMpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxOTEtXFx0aWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBPVlNfVlBPUlRfQVRUUl9TVEFUUyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jPTIzMD12b2lkIG92c192cG9ydF9kZWwoc3RydWN0IHZwb3J0ICp2cG9ydClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTIzNi0vKipcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzoyMzc6ICpcXHRvdnNfdnBvcnRfZ2V0X3N0YXRzIC0gcmV0cmlldmUgZGV2aWNlIHN0YXRzXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtMjM4LSAqXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy0yNDUtICovXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6MjQ2OnZvaWQgb3ZzX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgb3ZzX3Zwb3J0X3N0YXRzICpzdGF0cylcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy0yNDcte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg9MzE9c3RydWN0IHZwb3J0ICpvdnNfdnBvcnRfbG9jYXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmgtMzItXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg6MzM6dm9pZCBvdnNfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCB2cG9ydCAqLCBzdHJ1Y3Qgb3ZzX3Zwb3J0X3N0YXRzICopO1xcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oLTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMToxNi44MTIyNzA3OTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NjU2MDMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIERlZXAgaW50byBPVlMgU3RhdGlzdGljcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzLiBCZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHRyb3VibGVzaG9vdGluZyBvciBvcHRpbWl6aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBMZXQncyBtYWtlIHN1cmUgSSdtIGNyeXN0YWwgY2xlYXIgb24gaG93IGBvdnNfZmxvd19zdGF0c19nZXRgIGFuZCBgb3ZzX3Zwb3J0X2dldF9zdGF0c2AgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgZGF0YSB0aGV5J3JlIHB1bGxpbmcsIHdoZXJlIGl0J3MgY29taW5nIGZyb20gaW4gdGhlIE9WUyBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGludm9sdmVkLiBJIG5lZWQgdG8ga25vdyB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiB0aGUgY29kZTsgYXJlIHRoZXkgaGl0dGluZyBhbnkgc2hhcmVkIHJlc291cmNlcz8gRG8gdGhlc2UgZnVuY3Rpb25zIG9wZXJhdGUgb24gbGl2ZSBkYXRhPyBXaGF0IGFib3V0IGNhY2hpbmcgc3RyYXRlZ2llcyBpZiBhbnk/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gVGhhdCdzIHRoZSBmb3VuZGF0aW9uIG9mIGFueSBpbnZlc3RpZ2F0aW9uLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODMwLCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjE5LjY3ODgzMzAxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdC8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBvciBvdnNfbXV0ZXguICovXFxuIDEyODpcXHR2b2lkIG92c19mbG93X3N0YXRzX2dldChjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcXG4gMTI5OlxcdFxcdFxcdFxcdHN0cnVjdCBvdnNfZmxvd19zdGF0cyAqb3ZzX3N0YXRzLFxcbiAxMzA6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqdXNlZCwgX19iZTE2ICp0Y3BfZmxhZ3MpXFxuIDEzMTpcXHR7XFxuIDEzMjpcXHRcXHR1bnNpZ25lZCBpbnQgY3B1O1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQqdXNlZCA9IDA7XFxuIDEzNTpcXHRcXHQqdGNwX2ZsYWdzID0gMDtcXG4gMTM2OlxcdFxcdG1lbXNldChvdnNfc3RhdHMsIDAsIHNpemVvZigqb3ZzX3N0YXRzKSk7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGZvcl9lYWNoX2NwdShjcHUsIGZsb3ctXFx1MDAzZWNwdV91c2VkX21hc2spIHtcXG4gMTM5OlxcdFxcdFxcdHN0cnVjdCBzd19mbG93X3N0YXRzICpzdGF0cyA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKGZsb3ctXFx1MDAzZXN0YXRzW2NwdV0pO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRcXHRpZiAoc3RhdHMpIHtcXG4gMTQyOlxcdFxcdFxcdFxcdC8qIExvY2FsIENQVSBtYXkgd3JpdGUgb24gbm9uLWxvY2FsIHN0YXRzLCBzbyB3ZSBtdXN0XFxuIDE0MzpcXHRcXHRcXHRcXHQgKiBibG9jayBib3R0b20taGFsdmVzIGhlcmUuXFxuIDE0NDpcXHRcXHRcXHRcXHQgKi9cXG4gMTQ1OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c3RhdHMtXFx1MDAzZWxvY2spO1xcbiAxNDY6XFx0XFx0XFx0XFx0aWYgKCEqdXNlZCB8fCB0aW1lX2FmdGVyKHN0YXRzLVxcdTAwM2V1c2VkLCAqdXNlZCkpXFxuIDE0NzpcXHRcXHRcXHRcXHRcXHQqdXNlZCA9IHN0YXRzLVxcdTAwM2V1c2VkO1xcbiAxNDg6XFx0XFx0XFx0XFx0KnRjcF9mbGFncyB8PSBzdGF0cy1cXHUwMDNldGNwX2ZsYWdzO1xcbiAxNDk6XFx0XFx0XFx0XFx0b3ZzX3N0YXRzLVxcdTAwM2VuX3BhY2tldHMgKz0gc3RhdHMtXFx1MDAzZXBhY2tldF9jb3VudDtcXG4gMTUwOlxcdFxcdFxcdFxcdG92c19zdGF0cy1cXHUwMDNlbl9ieXRlcyArPSBzdGF0cy1cXHUwMDNlYnl0ZV9jb3VudDtcXG4gMTUxOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzdGF0cy1cXHUwMDNlbG9jayk7XFxuIDE1MjpcXHRcXHRcXHR9XFxuIDE1MzpcXHRcXHR9XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdC8qIENhbGxlZCB3aXRoIG92c19tdXRleC4gKi9cXG4gMTU3OlxcdHZvaWQgb3ZzX2Zsb3dfc3RhdHNfY2xlYXIoc3RydWN0IHN3X2Zsb3cgKmZsb3cpXFxuIDE1ODpcXHR7XFxuIDE1OTpcXHRcXHR1bnNpZ25lZCBpbnQgY3B1O1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRmb3JfZWFjaF9jcHUoY3B1LCBmbG93LVxcdTAwM2VjcHVfdXNlZF9tYXNrKSB7XFxuIDE2MjpcXHRcXHRcXHRzdHJ1Y3Qgc3dfZmxvd19zdGF0cyAqc3RhdHMgPSBvdnNsX2RlcmVmZXJlbmNlKGZsb3ctXFx1MDAzZXN0YXRzW2NwdV0pO1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRcXHRcXHRpZiAoc3RhdHMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTkuNjc4OTE2NzA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC92cG9ydC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHQgKiBAc3RhdHM6IGxvY2F0aW9uIHRvIHN0b3JlIHN0YXRzXFxuIDI0MTpcXHQgKlxcbiAyNDI6XFx0ICogUmV0cmlldmVzIHRyYW5zbWl0LCByZWNlaXZlLCBhbmQgZXJyb3Igc3RhdHMgZm9yIHRoZSBnaXZlbiBkZXZpY2UuXFxuIDI0MzpcXHQgKlxcbiAyNDQ6XFx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgcmN1X3JlYWRfbG9jay5cXG4gMjQ1OlxcdCAqL1xcbiAyNDY6XFx0dm9pZCBvdnNfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBvdnNfdnBvcnRfc3RhdHMgKnN0YXRzKVxcbiAyNDc6XFx0e1xcbiAyNDg6XFx0XFx0Y29uc3Qgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpkZXZfc3RhdHM7XFxuIDI0OTpcXHRcXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDtcXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0ZGV2X3N0YXRzID0gZGV2X2dldF9zdGF0cyh2cG9ydC1cXHUwMDNlZGV2LCBcXHUwMDI2dGVtcCk7XFxuIDI1MjpcXHRcXHRzdGF0cy1cXHUwMDNlcnhfZXJyb3JzICA9IGRldl9zdGF0cy1cXHUwMDNlcnhfZXJyb3JzO1xcbiAyNTM6XFx0XFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyAgPSBkZXZfc3RhdHMtXFx1MDAzZXR4X2Vycm9ycztcXG4gMjU0OlxcdFxcdHN0YXRzLVxcdTAwM2V0eF9kcm9wcGVkID0gZGV2X3N0YXRzLVxcdTAwM2V0eF9kcm9wcGVkO1xcbiAyNTU6XFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQgPSBkZXZfc3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQ7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdHN0YXRzLVxcdTAwM2VyeF9ieXRlc1xcdCAgPSBkZXZfc3RhdHMtXFx1MDAzZXJ4X2J5dGVzO1xcbiAyNTg6XFx0XFx0c3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMgPSBkZXZfc3RhdHMtXFx1MDAzZXJ4X3BhY2tldHM7XFxuIDI1OTpcXHRcXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXNcXHQgID0gZGV2X3N0YXRzLVxcdTAwM2V0eF9ieXRlcztcXG4gMjYwOlxcdFxcdHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzID0gZGV2X3N0YXRzLVxcdTAwM2V0eF9wYWNrZXRzO1xcbiAyNjE6XFx0fVxcbiAyNjI6XFx0XFxuIDI2MzpcXHQvKipcXG4gMjY0OlxcdCAqXFx0b3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHMgLSByZXRyaWV2ZSB1cGNhbGwgc3RhdHNcXG4gMjY1OlxcdCAqXFxuIDI2NjpcXHQgKiBAdnBvcnQ6IHZwb3J0IGZyb20gd2hpY2ggdG8gcmV0cmlldmUgdGhlIHN0YXRzLlxcbiAyNjc6XFx0ICogQHNrYjogc2tfYnVmZiB3aGVyZSB1cGNhbGwgc3RhdHMgc2hvdWxkIGJlIGFwcGVuZGVkLlxcbiAyNjg6XFx0ICpcXG4gMjY5OlxcdCAqIFJldHJpZXZlcyB1cGNhbGwgc3RhdHMgZm9yIHRoZSBnaXZlbiBkZXZpY2UuXFxuIDI3MDpcXHQgKlxcbiAyNzE6XFx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgcmN1X3JlYWRfbG9jay5cXG4gMjcyOlxcdCAqL1xcbiAyNzM6XFx0aW50IG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDI3NDpcXHR7XFxuIDI3NTpcXHRcXHR1NjQgdHhfc3VjY2VzcyA9IDAsIHR4X2ZhaWwgPSAwO1xcbiAyNzY6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbiAyNzc6XFx0XFx0aW50IGk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjE5LjY3ODk4NTMyNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTEwNjAyMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBPVlMgU3RhdGlzdGljcyBDb2xsZWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IE9WUyBnYXRoZXJzIGl0cyBzdGF0aXN0aWNzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB2cG9ydHMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBkZXZfZ2V0X3N0YXRzYCBpcyBjYWxsZWQgd2l0aGluIGJvdGggYG92c192cG9ydF9nZXRfc3RhdHNgIGFuZCBgb3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHNgLiBJbnRlcmVzdGluZy4gVGhvc2UgYXJlIHRoZSB0d28gcGxhY2VzIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0IGxvb2tzIGxpa2UgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGRpZmZlcmVudCB1c2FnZXMgb2YgdGhvc2UgdHdvLiBMZXQncyBzdGFydCBieSBkZWx2aW5nIGludG8gYG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzYCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3JlIGRpcmVjdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdXBjYWxsLXJlbGF0ZWQgc3RhdGlzdGljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjIxLjc4OTU4OTY5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvdnBvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0ICpcXG4gMjcxOlxcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIHJjdV9yZWFkX2xvY2suXFxuIDI3MjpcXHQgKi9cXG4gMjczOlxcdGludCBvdnNfdnBvcnRfZ2V0X3VwY2FsbF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyNzQ6XFx0e1xcbiAyNzU6XFx0XFx0dTY0IHR4X3N1Y2Nlc3MgPSAwLCB0eF9mYWlsID0gMDtcXG4gMjc2OlxcdFxcdHN0cnVjdCBubGF0dHIgKm5sYTtcXG4gMjc3OlxcdFxcdGludCBpO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbiAyODA6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHZwb3J0X3VwY2FsbF9zdGF0c19wZXJjcHUgKnN0YXRzO1xcbiAyODE6XFx0XFx0XFx0dTY0IG5fc3VjY2Vzcywgbl9mYWlsO1xcbiAyODI6XFx0XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRcXHRzdGF0cyA9IHBlcl9jcHVfcHRyKHZwb3J0LVxcdTAwM2V1cGNhbGxfc3RhdHMsIGkpO1xcbiAyODU6XFx0XFx0XFx0ZG8ge1xcbiAyODY6XFx0XFx0XFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNnN0YXRzLVxcdTAwM2VzeW5jcCk7XFxuIDI4NzpcXHRcXHRcXHRcXHRuX3N1Y2Nlc3MgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2c3RhdHMtXFx1MDAzZW5fc3VjY2Vzcyk7XFxuIDI4ODpcXHRcXHRcXHRcXHRuX2ZhaWwgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2c3RhdHMtXFx1MDAzZW5fZmFpbCk7XFxuIDI4OTpcXHRcXHRcXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNnN0YXRzLVxcdTAwM2VzeW5jcCwgc3RhcnQpKTtcXG4gMjkwOlxcdFxcdFxcdHR4X3N1Y2Nlc3MgKz0gbl9zdWNjZXNzO1xcbiAyOTE6XFx0XFx0XFx0dHhfZmFpbCArPSBuX2ZhaWw7XFxuIDI5MjpcXHRcXHR9XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdG5sYSA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIE9WU19WUE9SVF9BVFRSX1VQQ0FMTF9TVEFUUyk7XFxuIDI5NTpcXHRcXHRpZiAoIW5sYSlcXG4gMjk2OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE9WU19WUE9SVF9VUENBTExfQVRUUl9TVUNDRVNTLCB0eF9zdWNjZXNzLFxcbiAyOTk6XFx0XFx0XFx0XFx0ICAgICAgT1ZTX1ZQT1JUX0FUVFJfUEFEKSkge1xcbiAzMDA6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmxhKTtcXG4gMzAxOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDMwMjpcXHRcXHR9XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE9WU19WUE9SVF9VUENBTExfQVRUUl9GQUlMLCB0eF9mYWlsLFxcbiAzMDU6XFx0XFx0XFx0XFx0ICAgICAgT1ZTX1ZQT1JUX0FUVFJfUEFEKSkge1xcbiAzMDY6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmxhKTtcXG4gMzA3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDMwODpcXHRcXHR9XFxuIDMwOTpcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBubGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMToyMS43ODk2NzEzMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNDc0NTIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIFN0YXRpc3RpY3MgYW5kIExvY2tpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCBgb3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHNgLiBJIHNlZSB0aGF0IGB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5gIGlzIHVzZWQsIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbi4gVGhpcyBpcyBhIHBvdGVudGlhbCByZWQgZmxhZywgc3BlY2lmaWNhbGx5IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLCB3aXRoIGxvY2tkZXAgZW5hYmxlZCwgb3IgcmVhbGx5LCBhbnl0aW1lIHRoZSB3cml0ZXIgY291bGQgYmUgaW4gYSBib3R0b20taGFsZiAoQkgpIGNvbnRleHQuIFdlIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBgdTY0X3N0YXRzYCBvZnRlbiByZXF1aXJlcyBkaXNhYmxpbmcgQkhzIG9yIHNpbWlsYXIgbWVjaGFuaXNtcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHksIGVzcGVjaWFsbHkgaWYgdGhlIHdyaXRlciBpcyBleGVjdXRpbmcgaW4gYSBib3R0b20taGFsZiBjb250ZXh0LCBvciBsb2NrZGVwIG1heSBhc3NlcnQsIHdoaWNoIGlzIG5ldmVyIGEgZ29vZCB0aGluZy5cblxuVGhlbiBJIHNlZSBgb3ZzX2Zsb3dfc3RhdHNfZ2V0YCB1c2luZyBgc3Bpbl9sb2NrX2JoYC4gV2FpdCBhIG1pbnV0ZSwgYHNwaW5fbG9ja19iaGAgKml0c2VsZiogZGlzYWJsZXMgQkhzLCBwZXItbG9jay4gQnV0IHRoaXMgbWFrZXMgbWUgd29uZGVyOiB3aGF0IGlmIEJIcyBhcmUgZGlzYWJsZWQgb3V0c2lkZSB0aGUgbG9vcCwgb3IgdGhlIGR1bXAgY29kZSBkb2VzIHJlcGVhdGVkIGxvY2tpbmcgYW5kIHVubG9ja2luZz8gVGhpcyBzZWVtcy4uLiBpbmVmZmljaWVudC5cblxuQWxyaWdodCwgdGltZSB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb250ZXh0LiBBaCwgSSBzZWUgaXQgaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAuIEJpbmdvISBJIHNlZSBgbG9jYWxfYmhfZGlzYWJsZSgpYCB3cmFwcGVkIGFyb3VuZCB0aGUgKmVudGlyZSogZHVtcCBsb29wISBUaGlzIGlzIHdoYXQgSSB3YXMgbG9va2luZyBmb3IuXG5cblNwZWNpZmljYWxseSBpbiBgb3ZzX2Zsb3dfY21kX2R1bXBgLCBJIHNlZSB0aGlzIHBhdHRlcm46IGBsb2NhbF9iaF9kaXNhYmxlKClgIGJlZm9yZSB0aGUgbG9vcCwgYGxvY2FsX2JoX2VuYWJsZSgpYCBhZnRlciB0aGUgbG9vcC4gQW5kLCBzaW1pbGFybHksIGluIGBvdnNfdnBvcnRfY21kX2R1bXBgIEkgc2VlIHRoZSBzYW1lIHRoaW5nOiBgbG9jYWxfYmhfZGlzYWJsZSgpYCBhdCB0aGUgYmVnaW5uaW5nLCBgbG9jYWxfYmhfZW5hYmxlKClgIGF0IHRoZSBlbmQuXG5cblRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb24uIFRoZSBkZXNpZ25lcnMgd2VyZSBsaWtlbHkgdHJ5aW5nIHRvIGF2b2lkIEJILXJlbGF0ZWQgaXNzdWVzIGR1cmluZyB0aGUgZGF0YSBkdW1wcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0IGxvb2tzIGxpa2UgdGhleSB3ZXJlIGVuc3VyaW5nIHRoYXQgdGhlIHN0YXRpc3RpY3MgYW5kIGZsb3cgdGFibGUgZHVtcHMgYXJlIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8gYm90dG9tLWhhbGYgcHJvY2Vzc2luZy5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBjb25zaWRlciBldmVyeXRoaW5nLCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBPcGVuIHZTd2l0Y2guIFNwZWNpZmljYWxseSwgSSdsbCBzZWFyY2ggZm9yIFwiT1BFTlZTV0lUQ0hcIiBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gSXQncyBhbHdheXMgd2lzZSB0byBlbnN1cmUgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGlzIGNvZGUgYXJlIGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDEyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MjUuOTk0NDE4NTYzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc1MzI1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjI2LjA0MTE3NzIyNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDAyMjgxOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBPcGVuIHZTd2l0Y2gga2VybmVsIG1vZHVsZS4gTXkgbWluZCdzIGFscmVhZHkgcmFjaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyDigJMgaG93J3MgaXQgc3RydWN0dXJlZD8gSXMgaXQgdXNpbmcgdGhlIHN0YW5kYXJkIEtjb25maWcgc3ludGF4PyBXaGF0IGtpbmQgb2YgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBnZW1zIGluIHRoZXJlIHJlZ2FyZGluZyBzcGVjaWZpYyBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWxpdHk/IEknbSBob3BpbmcgaXQncyB3ZWxsLWNvbW1lbnRlZDsgdGhhdCdsbCBzYXZlIG1lIHNvbWUgdGltZS4gQmFzaWNhbGx5LCBJIHdhbnQgdGhlIGNvcmUgYmx1ZXByaW50IGZvciBob3cgdGhpcyB0aGluZyBnZXRzIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbC4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCBhbmQgdG8gc3RhcnQgZXhwbG9yaW5nIGhvdyB0byBwb3RlbnRpYWxseSBjdXN0b21pemUgYSBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMToyOC40NDM0NjE0NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MjguNDQzNTI5MzAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTEyMDI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEYXRhcGF0aCBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkYXRhcGF0aC5vYCBpcyBiZWluZyBjb21waWxlZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBidWlsZCBzeXN0ZW0uIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbmV0L29wZW52c3dpdGNoL01ha2VmaWxlYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW47IGl0IHNob3VsZCBjb250YWluIHRoZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBidWlsZGluZyB0aGUgY29yZSBjb21wb25lbnRzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBsYXllci4gVGhpcyBNYWtlZmlsZSBzaG91bGQgb3V0bGluZSB0aGUgY29tbWFuZHMgYW5kIHByZXJlcXVpc2l0ZXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgb2JqZWN0IGZpbGVzLiBMZXQncyBzZWUgd2hhdCBjbHVlcyBpdCBob2xkcyBhYm91dCB0aGUgZGF0YXBhdGggY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTozMC4yNTQ3MzQ5NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBPcGVuIHZTd2l0Y2guXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSCkgKz0gb3BlbnZzd2l0Y2gub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvcGVudnN3aXRjaC15IDo9IFxcXFxcXG4gICA5OlxcdFxcdGFjdGlvbnMubyBcXFxcXFxuICAxMDpcXHRcXHRkYXRhcGF0aC5vIFxcXFxcXG4gIDExOlxcdFxcdGRwX25vdGlmeS5vIFxcXFxcXG4gIDEyOlxcdFxcdGZsb3cubyBcXFxcXFxuICAxMzpcXHRcXHRmbG93X25ldGxpbmsubyBcXFxcXFxuICAxNDpcXHRcXHRmbG93X3RhYmxlLm8gXFxcXFxcbiAgMTU6XFx0XFx0bWV0ZXIubyBcXFxcXFxuICAxNjpcXHRcXHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXFxcXG4gIDE3OlxcdFxcdHZwb3J0Lm8gXFxcXFxcbiAgMTg6XFx0XFx0dnBvcnQtaW50ZXJuYWxfZGV2Lm8gXFxcXFxcbiAgMTk6XFx0XFx0dnBvcnQtbmV0ZGV2Lm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxcbiAgMjI6XFx0b3BlbnZzd2l0Y2gteSArPSBjb25udHJhY2sub1xcbiAgMjM6XFx0ZW5kaWZcXG4gIDI0OlxcdFxcbiAgMjU6XFx0Q0ZMQUdTX29wZW52c3dpdGNoX3RyYWNlLm8gPSAtSSQoc3JjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTozMC4yNTQ3OTYyOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTMzMTEyNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogT3BlbiB2U3dpdGNoIE5ldGxpbmsgSW50ZXJmYWNlKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdmVyaWZ5IGlmIE9wZW4gdlN3aXRjaCBpcyBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKHNwZWNpZmljYWxseSB0aGUgYE9WU19EQVRBUEFUSF9GQU1JTFlgLCBgT1ZTX1ZQT1JUX0ZBTUlMWWAsIGFuZCBgT1ZTX0ZMT1dfRkFNSUxZYCBmYW1pbGllcyksIHdoaWNoIFN5emthbGxlciB1c2VzIHRvIGNvbW11bmljYXRlLiBUaGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIHRoZSBkdW1wIGNhbGxiYWNrczogYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAsIHdoaWNoIGNvcnJlc3BvbmQgdG8gdGhlIGBkcF9mbG93X2dlbmxfZmFtaWx5YCBhbmQgYGRwX3Zwb3J0X2dlbmxfZmFtaWx5YCByZXNwZWN0aXZlbHkuIFRoZXNlIGFyZSBlYXNpbHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSB2aWEgbmV0bGluayBkdW1wIHJlcXVlc3RzLlxuXG5FdmFsdWF0aW5nIFwiV29ydGhGdXp6aW5nXCI6IE9wZW4gdlN3aXRjaCdzIG5ldGxpbmsgaW50ZXJmYWNlIHNlZW1zIHRvIGJlIGEgY29yZSBzdWJzeXN0ZW0gYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgVk0gZW52aXJvbm1lbnRzLCBiZWNhdXNlIGl0IGlzIHB1cmVseSBzb2Z0d2FyZS1iYXNlZC4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBsb2NraW5nIGNvbnRleHQgd2l0aGluIGBvdnNfZmxvd19jbWRfZHVtcGAgYW5kIGBvdnNfdnBvcnRfY21kX2R1bXBgLCBjaGFuZ2luZyB0aGUgY29kZSBwYXRoIHRoYXQncyBleGVjdXRlZCBieSB1c2luZyBgbG9jYWxfYmhfZGlzYWJsZWAgLyBgbG9jYWxfYmhfZW5hYmxlYC4gSSdtIGdvaW5nIHRvIHNheSBcIldvcnRoRnV6emluZ1wiIGlzIGB0cnVlYCBoZXJlLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIFwiRm9jdXNTeW1ib2xzXCIuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSBgb3ZzX2Zsb3dfY21kX2R1bXBgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9kdW1wYC5cblxuQ2hlY2tpbmcgdGhlIGBnaXQgZGlmZmAgYWdhaW4sIEknbSBjb25maWRlbnQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIEl0J3MganVzdCB0aG9zZSB0d28sIHNwZWNpZmljYWxseSBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmVuJ3QgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90IHBhdGhzLCBidXQgcmF0aGVyLCB2ZXJ5IHNwZWNpZmljIGR1bXAgaGFuZGxlcnMgZm9yIE9wZW4gdlN3aXRjaCBmbG93IGFuZCB2cG9ydCBuZXRsaW5rIGNvbW1hbmRzLiBUaGV5J3JlIGZlYXR1cmUgc3BlY2lmaWMgYW5kIHJlcHJlc2VudCByZWxldmFudCBlbnRyeXBvaW50cy5cblxuVGhlIFwiRW5hYmxlQ29uZmlnc1wiIGNoZWNrOiBJdCBzZWVtcyBgT1BFTlZTV0lUQ0hgIGlzIHRoZSBrZXksIGFsdGhvdWdoIGBJTkVUYCBpcyBhbHNvIGltcGxpZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgY29ycmVjdC5cblxuQWxyaWdodCwgZG91YmxlLWNoZWNraW5nIGV2ZXJ5dGhpbmcuIFwiV29ydGhGdXp6aW5nXCIgaXMgYHRydWVgLCB0aGUgXCJGb2N1c1N5bWJvbHNcIiBhcmUgYFtcIm92c19mbG93X2NtZF9kdW1wXCIsIFwib3ZzX3Zwb3J0X2NtZF9kdW1wXCJdYCwgYW5kIHRoZSBcIkVuYWJsZUNvbmZpZ3NcIiBpcyBgW1wiT1BFTlZTV0lUQ0hcIl1gLiBUaGlzIGFuYWx5c2lzIHByb3ZpZGVzIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC4gSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY5MiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTozNS4zODc5MTE1NzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk3MjYwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfZmxvd19jbWRfZHVtcFwiLFxuICAgIFwib3ZzX3Zwb3J0X2NtZF9kdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYm90dG9tLWhhbGYgKEJIKSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCBmbG93IGFuZCB2cG9ydCBkdW1waW5nIGxvb3BzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGhhbmRsZXJzIChvdnNfZmxvd19jbWRfZHVtcCBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCBsb2NraW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2Zsb3dfY21kX2R1bXBcIixcbiAgICBcIm92c192cG9ydF9jbWRfZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJvdHRvbS1oYWxmIChCSCkgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcGluZyBsb29wcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBoYW5kbGVycyAob3ZzX2Zsb3dfY21kX2R1bXAgYW5kIG92c192cG9ydF9jbWRfZHVtcCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MzUuNDY4ODkyMzY1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwMDYyMDQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjM1LjQ2OTM5ODc5NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMzAwMTA4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOGI2MjZkNzdmOGY3MmVlNmMwYzljNzZmOTM1Mjg4NzgyNzllMTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxODoyMDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IDYzMWEwMzEzNmZhMTQuLmFlMmM5OTI0YWViMDUgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0xNTMzLDYgKzE1MzMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdH1cbiBcbiBcdHRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLVx1MDAzZXRhYmxlLnRpKTtcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdGZvciAoOzspIHtcbiBcdFx0c3RydWN0IHN3X2Zsb3cgKmZsb3c7XG4gXHRcdHUzMiBidWNrZXQsIG9iajtcbkBAIC0xNTUyLDYgKzE1NTMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGJ1Y2tldDtcbiBcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG9iajtcbiBcdH1cbitcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG5AQCAtMjU2NSw2ICsyNTY3LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRmb3IgKGkgPSBidWNrZXQ7IGkgXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XG4gXHRcdHN0cnVjdCB2cG9ydCAqdnBvcnQ7XG4gXG5AQCAtMjU4NSw2ICsyNTg4LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRza2lwID0gMDtcbiBcdH1cbiBvdXQ6XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTozNS40Njk0MDAxMDVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAwNTIwNTc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBQYXRjaCdzIFZ1bG5lcmFiaWxpdHkgUHJvZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdXp6aW5nIHN0cmF0ZWd5IGZvciB0aGlzIHBhdGNoLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSdyZSBsb29raW5nIGF0IGEgc2NlbmFyaW8gd2hlcmUgS01TQU4gaXMgdHJ1bHkgbmVjZXNzYXJ5LCBvciBpZiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGRldGVjdG9ycyB3aWxsIHN1ZmZpY2UuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byBiZSBlZmZpY2llbnQgYW5kIHBpbnBvaW50IHRoZSBhcmVhcyBvZiBncmVhdGVzdCBjb25jZXJuIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG5cbk15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIgd29ya3MgYmVzdCBmb3IgYSBxdWljayBhbmQgdGFyZ2V0ZWQgaW5zcGVjdGlvbi4gSSdsbCBuZWVkIGNvbnRleHQsIHNvIEknbSBnb2luZyBzdHJhaWdodCBmb3IgdGhlIGNvcmUgb2YgdGhlIGRhdGFwYXRoLiBJJ2xsIGZvY3VzIG9uIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTUzMyBhbmQgMjU2NS4gVGhvc2UgbGluZSBudW1iZXJzIHNlZW0gc2lnbmlmaWNhbnQsIGFuZCB0aGV5IHNob3VsZCBwcm92aWRlIGVub3VnaCBjb250ZXh0IHRvIGdhdWdlIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBCeSBleGFtaW5pbmcgdGhvc2Ugc2VjdGlvbnMgY2xvc2VseSwgSSBzaG91bGQgZ2V0IGEgYmV0dGVyIGZlZWwgZm9yIHRoZSBwYXRjaCdzIGltcGFjdCBhbmQgdGhlIGFwcHJvcHJpYXRlIGZ1enppbmcgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzYsIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjQyLjQ3NDYwOTA0MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUyMDpcXHRcXHRpbnQgZXJyO1xcbjE1MjE6XFx0XFxuMTUyMjpcXHRcXHRlcnIgPSBnZW5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQoY2ItXFx1MDAzZW5saCwgXFx1MDAyNmRwX2Zsb3dfZ2VubF9mYW1pbHksIGEsXFxuMTUyMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgT1ZTX0ZMT1dfQVRUUl9NQVgsIGZsb3dfcG9saWN5LCBOVUxMKTtcXG4xNTI0OlxcdFxcdGlmIChlcnIpXFxuMTUyNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MjY6XFx0XFx0dWZpZF9mbGFncyA9IG92c19ubGFfZ2V0X3VmaWRfZmxhZ3MoYVtPVlNfRkxPV19BVFRSX1VGSURfRkxBR1NdKTtcXG4xNTI3OlxcdFxcbjE1Mjg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjE1Mjk6XFx0XFx0ZHAgPSBnZXRfZHBfcmN1KHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfaGVhZGVyLVxcdTAwM2VkcF9pZmluZGV4KTtcXG4xNTMwOlxcdFxcdGlmICghZHApIHtcXG4xNTMxOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE1MzI6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTUzMzpcXHRcXHR9XFxuMTUzNDpcXHRcXG4xNTM1OlxcdFxcdHRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLVxcdTAwM2V0YWJsZS50aSk7XFxuMTUzNjpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuMTUzNzpcXHRcXHRmb3IgKDs7KSB7XFxuMTUzODpcXHRcXHRcXHRzdHJ1Y3Qgc3dfZmxvdyAqZmxvdztcXG4xNTM5OlxcdFxcdFxcdHUzMiBidWNrZXQsIG9iajtcXG4xNTQwOlxcdFxcbjE1NDE6XFx0XFx0XFx0YnVja2V0ID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuMTU0MjpcXHRcXHRcXHRvYmogPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4xNTQzOlxcdFxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfZHVtcF9uZXh0KHRpLCBcXHUwMDI2YnVja2V0LCBcXHUwMDI2b2JqKTtcXG4xNTQ0OlxcdFxcdFxcdGlmICghZmxvdylcXG4xNTQ1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1NDY6XFx0XFxuMTU0NzpcXHRcXHRcXHRpZiAob3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhmbG93LCBvdnNfaGVhZGVyLVxcdTAwM2VkcF9pZmluZGV4LCBza2IsXFxuMTU0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4xNTQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksXFxuMTU1MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBPVlNfRkxPV19DTURfR0VULCB1ZmlkX2ZsYWdzKSBcXHUwMDNjIDApXFxuMTU1MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xNTUyOlxcdFxcbjE1NTM6XFx0XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBidWNrZXQ7XFxuMTU1NDpcXHRcXHRcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IG9iajtcXG4xNTU1OlxcdFxcdH1cXG4xNTU2OlxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjE1NTc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTU1ODpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTU1OTpcXHR9XFxuMTU2MDpcXHRcXG4xNTYxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmbG93X3BvbGljeVtPVlNfRkxPV19BVFRSX01BWCArIDFdID0ge1xcbjE1NjI6XFx0XFx0W09WU19GTE9XX0FUVFJfS0VZXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuMTU2MzpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9NQVNLXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuMTU2NDpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9BQ1RJT05TXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuMTU2NTpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9DTEVBUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4xNTY2OlxcdFxcdFtPVlNfRkxPV19BVFRSX1BST0JFXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbjE1Njc6XFx0XFx0W09WU19GTE9XX0FUVFJfVUZJRF0gPSB7IC50eXBlID0gTkxBX1VOU1BFQywgLmxlbiA9IDEgfSxcXG4xNTY4OlxcdFxcdFtPVlNfRkxPV19BVFRSX1VGSURfRkxBR1NdID0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4xNTY5OlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjQyLjQ3NDc5ODMyMloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU1NTpcXHR9XFxuMjU1NjpcXHRcXG4yNTU3OlxcdHN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4yNTU4OlxcdHtcXG4yNTU5OlxcdFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyID0gZ2VubG1zZ19kYXRhKG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCkpO1xcbjI1NjA6XFx0XFx0c3RydWN0IGRhdGFwYXRoICpkcDtcXG4yNTYxOlxcdFxcdGludCBidWNrZXQgPSBjYi1cXHUwMDNlYXJnc1swXSwgc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbjI1NjI6XFx0XFx0aW50IGksIGogPSAwO1xcbjI1NjM6XFx0XFxuMjU2NDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjU2NTpcXHRcXHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgpO1xcbjI1NjY6XFx0XFx0aWYgKCFkcCkge1xcbjI1Njc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjU2ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yNTY5OlxcdFxcdH1cXG4yNTcwOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4yNTcxOlxcdFxcdGZvciAoaSA9IGJ1Y2tldDsgaSBcXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XFxuMjU3MjpcXHRcXHRcXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0O1xcbjI1NzM6XFx0XFxuMjU3NDpcXHRcXHRcXHRqID0gMDtcXG4yNTc1OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2cG9ydCwgXFx1MDAyNmRwLVxcdTAwM2Vwb3J0c1tpXSwgZHBfaGFzaF9ub2RlKSB7XFxuMjU3NjpcXHRcXHRcXHRcXHRpZiAoaiBcXHUwMDNlPSBza2lwIFxcdTAwMjZcXHUwMDI2XFxuMjU3NzpcXHRcXHRcXHRcXHQgICAgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHNrYixcXG4yNTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG4yNTc5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4yNTgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsXFxuMjU4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgTkxNX0ZfTVVMVEksXFxuMjU4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgT1ZTX1ZQT1JUX0NNRF9HRVQsXFxuMjU4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0FUT01JQykgXFx1MDAzYyAwKVxcbjI1ODQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU4NTpcXHRcXG4yNTg2OlxcdFxcdFxcdFxcdGorKztcXG4yNTg3OlxcdFxcdFxcdH1cXG4yNTg4OlxcdFxcdFxcdHNraXAgPSAwO1xcbjI1ODk6XFx0XFx0fVxcbjI1OTA6XFx0b3V0OlxcbjI1OTE6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMjU5MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNTkzOlxcdFxcbjI1OTQ6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbjI1OTU6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMV0gPSBqO1xcbjI1OTY6XFx0XFxuMjU5NzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMjU5ODpcXHR9XFxuMjU5OTpcXHRcXG4yNjAwOlxcdHN0YXRpYyB2b2lkIG92c19kcF9tYXNrc19yZWJhbGFuY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjI2MDE6XFx0e1xcbjI2MDI6XFx0XFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG92c19uZXQsXFxuMjYwMzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbWFza3NfcmViYWxhbmNlLndvcmspO1xcbjI2MDQ6XFx0XFx0c3RydWN0IGRhdGFwYXRoICpkcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6NDIuNDc0OTY4MzIyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTQ1MTg5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogS01TQU4gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aHkgdGhlc2UgYGxvY2FsX2JoX2Rpc2FibGUoKWAgYW5kIGBsb2NhbF9iaF9lbmFibGUoKWAgY2FsbHMgd2VyZSBpbnRyb2R1Y2VkIGFyb3VuZCB0aGUgbG9vcHMgaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gYG92c19mbG93X2NtZF9maWxsX2luZm9gLCBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gLCBwb3RlbnRpYWxseSBzdGF0cyByZWFkcywgb3IgcGVyaGFwcyB0aGUgUkNVIGl0ZXJhdGlvbiBpdHNlbGYsIG9yIG1heWJlIGV2ZW4gcmhhc2h0YWJsZS9yaGFzaHRhYmxlX3dhbGsgaW50ZXJhY3Rpb25zLCBwZXItY3B1IHN0YXRzLCBvciBldmVuIGxvY2tkZXAgYXNzZXJ0aW9ucy4gSXQgc2NyZWFtcyBzb2Z0aXJxIGNvbnRleHQsIGJvdHRvbSBoYWxmIGludGVyYWN0aW9uLCBvciBzb21lIGtpbmQgb2YgY29uY3VycmVuY3kgaXNzdWUgdGhhdCB0aGlzIGFpbXMgdG8gc29sdmUuXG5cblRoZSBwYXRjaCdzIGNvcmUgZnVuY3Rpb24gYXBwZWFycyB0byBkaXNhYmxlIGFuZCBlbmFibGUgbG9jYWwgYm90dG9tIGhhbHZlcyBhcm91bmQgdGhlc2UgbG9vcHMgdGhhdCBhcmUgZHVtcGluZyBlbnRyaWVzIHRvIHRoZSBuZXRsaW5rIGBza2JgLiBTbywgYSBxdWljayBzYW5pdHkgY2hlY2s6IGRvZXMgdGhpcyBjaGFuZ2UgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/XG5cbkxvb2tpbmcgY2xvc2VyLCB0aGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIGNyaXRpY2FsbHksIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGRhdGEgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGhvdyB3ZSBjb3B5IGJ1ZmZlcnMsIGxlbmd0aHMsIG9yIHN0cnVjdHMuIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGtlcm5lbC10by11c2VyIGNvcHkgc3RydWN0dXJlcyBhcmUgdG91Y2hlZC4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgY29uY3VycmVuY3kgY29udHJvbCBhbmQgc29mdGlycSBjb250ZXh0IHN5bmNocm9uaXphdGlvbi4gQW55IG5ldyBpc3N1ZXMgdGhhdCBwb3AgdXAgaGVyZSB3b3VsZCBiZSBpbiB0aGUgcmVhbG0gb2YgbG9ja2luZyBwcm9ibGVtcywgcG90ZW50aWFsIGRlYWRsb2NrcywgbGF0ZW5jeSBjb25jZXJucywgb3IsIG9mIGNvdXJzZSwgcHJvYmxlbWF0aWMgc29mdGlycSBjb250ZXh0IGlzc3Vlcy4gTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MgYXJlIHRoZSByaWdodCB0b29scyB0byBmaW5kIHRoZXNlLlxuXG5UaGVyZWZvcmUsIGFmdGVyIHRoYXQgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC5cblxuTGV0IG1lIHJlaXRlcmF0ZSB0aGF0IGFuZCBlbnN1cmUgSSd2ZSBjb3ZlcmVkIGFsbCB0aGUgcmVxdWlyZW1lbnRzLlxuXG5gTmVlZHNLTVNBTmA6IGBmYWxzZWAuXG5gS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWRkcyBgbG9jYWxfYmhfZGlzYWJsZSgpYCBhbmQgYGxvY2FsX2JoX2VuYWJsZSgpYCBjYWxscyBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcCBpdGVyYXRpb24gbG9vcHMgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhpcyBtb2RpZmllcyBzb2Z0aXJxIGRpc2FibGluZy9sb2NraW5nIGNvbnRleHQgZHVyaW5nIG5ldGxpbmsgZHVtcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgaXQgZG9lcyBub3QgbW9kaWZ5IGFueSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBzaXplcyBvciBkYXRhIGNvcHlpbmcgbG9naWMsIGFuZCBzbywgaW50cm9kdWNlcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYnVncywgc3VjaCBhcyBzbGVlcGluZyB3aXRoIEJIIGRpc2FibGVkIG9yIGxvY2tkZXAgd2FybmluZ3MsIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUC9rZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRodXMsIEtNU0FOIGlzIG5vdCBuZWVkZWQuXG5cblJpZ2h0LCBJJ20gaGFwcHkgd2l0aCB0aGF0IGFuYWx5c2lzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTUsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6NDcuNzY5NDg5ODk1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 17:34:38 +0000 UTC FinishedAt: 2026-09-09 18:21:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8c9190bfd18a2548dea677faed7d6ee11f3cb0c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8c9190bfd18a2548dea677faed7d6ee11f3cb0c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "bcc7cf2e-c8da-4f29-ad06-a344bf762ba4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_flow_cmd_dump", "ovs_vport_cmd_dump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2Zsb3dfY21kX2R1bXAmIzM0OywKICAgICYjMzQ7b3ZzX3Zwb3J0X2NtZF9kdW1wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGxvY2FsX2JoX2Rpc2FibGUoKSBhbmQgbG9jYWxfYmhfZW5hYmxlKCkgYXJvdW5kIHRoZSBkdW1wIGxvb3BzIGluIG92c19mbG93X2NtZF9kdW1wKCkgYW5kIG92c192cG9ydF9jbWRfZHVtcCgpIHdpdGhpbiBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyB0byBoYW5kbGUgYm90dG9tLWhhbGYgZXhlY3V0aW9uIGNvbnRleHQgYW5kIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBhbmQgZG9lcyBub3QgdG91Y2ggZGF0YSBzZXJpYWxpemF0aW9uIG9yIGtlcm5lbC10by11c2VyIGNvcHlpbmcgbG9naWMuIENvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNvbnRleHQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJvdHRvbS1oYWxmIChCSCkgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcGluZyBsb29wcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBoYW5kbGVycyAob3ZzX2Zsb3dfY21kX2R1bXAgYW5kIG92c192cG9ydF9jbWRfZHVtcCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY4YjYyNmQ3N2Y4ZjcyZWU2YzBjOWM3NmY5MzUyODg3ODI3OWUxMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE4OjIwOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IDYzMWEwMzEzNmZhMTQuLmFlMmM5OTI0YWViMDUgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0xNTMzLDYgJiM0MzsxNTMzLDcgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHR9XG4gXG4gXHR0aSA9IHJjdV9kZXJlZmVyZW5jZShkcC1cdTAwM2V0YWJsZS50aSk7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzdHJ1Y3Qgc3dfZmxvdyAqZmxvdztcbiBcdFx0dTMyIGJ1Y2tldCwgb2JqO1xuQEAgLTE1NTIsNiAmIzQzOzE1NTMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGJ1Y2tldDtcbiBcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG9iajtcbiBcdH1cbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gfVxuQEAgLTI1NjUsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiYjNDM7XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRmb3IgKGkgPSBidWNrZXQ7IGkgXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHZwb3J0ICp2cG9ydDtcbiBcbkBAIC0yNTg1LDYgJiM0MzsyNTg4LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRza2lwID0gMDtcbiBcdH1cbiBvdXQ6XG4mIzQzO1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2Zsb3dfY21kX2R1bXAmIzM0OywKICAgICYjMzQ7b3ZzX3Zwb3J0X2NtZF9kdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJvdHRvbS1oYWxmIChCSCkgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcGluZyBsb29wcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBoYW5kbGVycyAob3ZzX2Zsb3dfY21kX2R1bXAgYW5kIG92c192cG9ydF9jbWRfZHVtcCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4YjYyNmQ3N2Y4ZjcyZWU2YzBjOWM3NmY5MzUyODg3ODI3OWUxMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE4OjIwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCA2MzFhMDMxMzZmYTE0Li5hZTJjOTkyNGFlYjA1IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMTUzMyw2ICYjNDM7MTUzMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCX0KIAogCXRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLSZndDt0YWJsZS50aSk7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBzd19mbG93ICpmbG93OwogCQl1MzIgYnVja2V0LCBvYmo7CkBAIC0xNTUyLDYgJiM0MzsxNTUzLDcgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCWNiLSZndDthcmdzWzBdID0gYnVja2V0OwogCQljYi0mZ3Q7YXJnc1sxXSA9IG9iajsKIAl9CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBza2ItJmd0O2xlbjsKIH0KQEAgLTI1NjUsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlmb3IgKGkgPSBidWNrZXQ7IGkgJmx0OyBEUF9WUE9SVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCB2cG9ydCAqdnBvcnQ7CiAKQEAgLTI1ODUsNiAmIzQzOzI1ODgsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXNraXAgPSAwOwogCX0KIG91dDoKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAljYi0mZ3Q7YXJnc1swXSA9IGk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjQKCQkJCQkJCW91dHB1dDogNzgKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG8gcmV2aWV3IGFuZCBzb21lIGluc3RydWN0aW9ucy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBoYW5kcy1vbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzIOKAkyB0aGUgZGlmZi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcmVhZCB0aGUgY29kZSBpbnZvbHZlZC4gQWZ0ZXIgdGhhdCwgSSB3aWxsIG5lZWQgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhvc2Ugc3BlY2lmaWMgZmlsZXMgYW5kIGxpbmUgbnVtYmVycyB0aGUgaW5zdHJ1Y3Rpb25zIHBvaW50IG91dCwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AgYXJvdW5kIHRoZSBjcml0aWNhbCBzZWN0aW9ucy4gSSYjMzk7bGwgcHJvYmFibHkgcmVhY2ggZm9yIGEgY29tbWFuZCBsaW5lIHRvIG1ha2UgdGhpcyBlZmZpY2llbnQuIEkmIzM5O20gdGhpbmtpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlciBnZXRzIG1lIHRoZXJlIHRoZSBmYXN0ZXN0LiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgbGluZXMgMTUzMyBhbmQgMjU2NSBhbmQgdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0IGluIHJlbGF0aW9uIHRvIHRoZSBkaWZmLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRpbnQgZXJyO1xuMTUyMTpcdFxuMTUyMjpcdFx0ZXJyID0gZ2VubG1zZ19wYXJzZV9kZXByZWNhdGVkKGNiLVx1MDAzZW5saCwgXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSwgYSxcbjE1MjM6XHRcdFx0XHRcdCAgICAgICBPVlNfRkxPV19BVFRSX01BWCwgZmxvd19wb2xpY3ksIE5VTEwpO1xuMTUyNDpcdFx0aWYgKGVycilcbjE1MjU6XHRcdFx0cmV0dXJuIGVycjtcbjE1MjY6XHRcdHVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dldF91ZmlkX2ZsYWdzKGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7XG4xNTI3Olx0XG4xNTI4Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xNTI5Olx0XHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4KTtcbjE1MzA6XHRcdGlmICghZHApIHtcbjE1MzE6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xNTMyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuMTUzMzpcdFx0fVxuMTUzNDpcdFxuMTUzNTpcdFx0dGkgPSByY3VfZGVyZWZlcmVuY2UoZHAtXHUwMDNldGFibGUudGkpO1xuMTUzNjpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuMTUzNzpcdFx0Zm9yICg7Oykge1xuMTUzODpcdFx0XHRzdHJ1Y3Qgc3dfZmxvdyAqZmxvdztcbjE1Mzk6XHRcdFx0dTMyIGJ1Y2tldCwgb2JqO1xuMTU0MDpcdFxuMTU0MTpcdFx0XHRidWNrZXQgPSBjYi1cdTAwM2VhcmdzWzBdO1xuMTU0MjpcdFx0XHRvYmogPSBjYi1cdTAwM2VhcmdzWzFdO1xuMTU0MzpcdFx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dCh0aSwgXHUwMDI2YnVja2V0LCBcdTAwMjZvYmopO1xuMTU0NDpcdFx0XHRpZiAoIWZsb3cpXG4xNTQ1Olx0XHRcdFx0YnJlYWs7XG4xNTQ2Olx0XG4xNTQ3Olx0XHRcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCwgc2tiLFxuMTU0ODpcdFx0XHRcdFx0XHQgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMTU0OTpcdFx0XHRcdFx0XHQgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBOTE1fRl9NVUxUSSxcbjE1NTA6XHRcdFx0XHRcdFx0ICAgT1ZTX0ZMT1dfQ01EX0dFVCwgdWZpZF9mbGFncykgXHUwMDNjIDApXG4xNTUxOlx0XHRcdFx0YnJlYWs7XG4xNTUyOlx0XG4xNTUzOlx0XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBidWNrZXQ7XG4xNTU0Olx0XHRcdGNiLVx1MDAzZWFyZ3NbMV0gPSBvYmo7XG4xNTU1Olx0XHR9XG4xNTU2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE1NTc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTU1ODpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4xNTU5Olx0fVxuMTU2MDpcdFxuMTU2MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmbG93X3BvbGljeVtPVlNfRkxPV19BVFRSX01BWCAmIzQzOyAxXSA9IHtcbjE1NjI6XHRcdFtPVlNfRkxPV19BVFRSX0tFWV0gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2MzpcdFx0W09WU19GTE9XX0FUVFJfTUFTS10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2NDpcdFx0W09WU19GTE9XX0FUVFJfQUNUSU9OU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2NTpcdFx0W09WU19GTE9XX0FUVFJfQ0xFQVJdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4xNTY2Olx0XHRbT1ZTX0ZMT1dfQVRUUl9QUk9CRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbjE1Njc6XHRcdFtPVlNfRkxPV19BVFRSX1VGSURdID0geyAudHlwZSA9IE5MQV9VTlNQRUMsIC5sZW4gPSAxIH0sXG4xNTY4Olx0XHRbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xNTY5Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTYwOlx0XHRzdHJ1Y3QgZGF0YXBhdGggKmRwO1xuMjU2MTpcdFx0aW50IGJ1Y2tldCA9IGNiLVx1MDAzZWFyZ3NbMF0sIHNraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuMjU2MjpcdFx0aW50IGksIGogPSAwO1xuMjU2MzpcdFxuMjU2NDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjU2NTpcdFx0ZHAgPSBnZXRfZHBfcmN1KHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCk7XG4yNTY2Olx0XHRpZiAoIWRwKSB7XG4yNTY3Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjU2ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjI1Njk6XHRcdH1cbjI1NzA6XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjI1NzE6XHRcdGZvciAoaSA9IGJ1Y2tldDsgaSBcdTAwM2MgRFBfVlBPUlRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOykge1xuMjU3MjpcdFx0XHRzdHJ1Y3QgdnBvcnQgKnZwb3J0O1xuMjU3MzpcdFxuMjU3NDpcdFx0XHRqID0gMDtcbjI1NzU6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZwb3J0LCBcdTAwMjZkcC1cdTAwM2Vwb3J0c1tpXSwgZHBfaGFzaF9ub2RlKSB7XG4yNTc2Olx0XHRcdFx0aWYgKGogXHUwMDNlPSBza2lwIFx1MDAyNlx1MDAyNlxuMjU3NzpcdFx0XHRcdCAgICBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyh2cG9ydCwgc2tiLFxuMjU3ODpcdFx0XHRcdFx0XHRcdCAgICBzb2NrX25ldChza2ItXHUwMDNlc2spLFxuMjU3OTpcdFx0XHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjU4MDpcdFx0XHRcdFx0XHRcdCAgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLFxuMjU4MTpcdFx0XHRcdFx0XHRcdCAgICBOTE1fRl9NVUxUSSxcbjI1ODI6XHRcdFx0XHRcdFx0XHQgICAgT1ZTX1ZQT1JUX0NNRF9HRVQsXG4yNTgzOlx0XHRcdFx0XHRcdFx0ICAgIEdGUF9BVE9NSUMpIFx1MDAzYyAwKVxuMjU4NDpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNTg1Olx0XG4yNTg2Olx0XHRcdFx0aiYjNDM7JiM0Mzs7XG4yNTg3Olx0XHRcdH1cbjI1ODg6XHRcdFx0c2tpcCA9IDA7XG4yNTg5Olx0XHR9XG4yNTkwOlx0b3V0OlxuMjU5MTpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4yNTkyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI1OTM6XHRcbjI1OTQ6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuMjU5NTpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IGo7XG4yNTk2Olx0XG4yNTk3Olx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbjI1OTg6XHR9XG4yNTk5Olx0XG4yNjAwOlx0c3RhdGljIHZvaWQgb3ZzX2RwX21hc2tzX3JlYmFsYW5jZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4yNjAxOlx0e1xuMjYwMjpcdFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG92c19uZXQsXG4yNjAzOlx0XHRcdFx0XHRcdCAgICAgICBtYXNrc19yZWJhbGFuY2Uud29yayk7XG4yNjA0Olx0XHRzdHJ1Y3QgZGF0YXBhdGggKmRwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwODAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBsb2NhbF9iaF9kaXNhYmxlKClgIGFuZCBgbG9jYWxfYmhfZW5hYmxlKClgIGNhbGxzIHdpdGhpbiBgb3ZzX2Zsb3dfY21kX2R1bXBgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9kdW1wYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IGFyZSB3ZSBkaXNhYmxpbmcgYm90dG9tIGhhbHZlcyBoZXJlPyYjMzQ7IEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYmVjYXVzZSBzb21ldGhpbmcgd2l0aGluIGVpdGhlciBgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mb2Agb3IgYG92c192cG9ydF9jbWRfZmlsbF9pbmZvYCDigJMgb3IgcGVyaGFwcyBhIGZ1bmN0aW9uICp0aGV5KiBjYWxsIOKAkyBpcyBjYXVzaW5nIGNvbnRlbnRpb24gb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gYWNjZXNzaW5nIHBlci1DUFUgc3RhdGlzdGljcyBvciBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIGxvY2tkZXAgYXNzZXJ0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGB1NjRfc3RhdHNgLCBSQ1UgdXNhZ2UsIG9yIGdlbmVyYWwgcGVyLUNQVSBkYXRhIGFjY2VzcyB0aGF0IHJlcXVpcmVzIGJvdHRvbSBoYWx2ZXMgdG8gYmUgZGlzYWJsZWQgZm9yIHNhZmUgb3BlcmF0aW9uLiBNYXliZSB0aGVyZSYjMzk7cyBhIGB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5gIGNhbGwgaW4gdGhlcmUgdGhhdCBuZWNlc3NpdGF0ZXMgdGhlIEJIIGRpc2FibGUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgdGhvc2UgdHdvIGZpbGwgZnVuY3Rpb25zIGluIHRoZSBgbmV0L29wZW52c3dpdGNoL2AgZGlyZWN0b3J5LiBUaW1lIHRvIGdyZXAgYW5kIGRpdmUgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfZmxvd19jbWRfZmlsbF9pbmZvfG92c192cG9ydF9jbWRfZmlsbF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTg2Nj1zdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX2FjdGlvbnMoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTA1LS8qIENhbGxlZCB3aXRoIG92c19tdXRleCBvciBSQ1UgcmVhZCBsb2NrLiAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6OTA2OnN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgaW50IGRwX2lmaW5kZXgsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05MDctXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9OTc3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3dfY21kX2J1aWxkX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTg5LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6OTkwOlx0cmV0dmFsID0gb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhmbG93LCBkcF9pZmluZGV4LCBza2IsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05OTEtXHRcdFx0XHRcdGluZm8tXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cdTAwM2VzbmRfc2VxLCAwLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEwMDA9c3RhdGljIGludCBvdnNfZmxvd19jbWRfbmV3KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA5NC1cdFx0aWYgKHVubGlrZWx5KHJlcGx5KSkge1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTA5NTpcdFx0XHRlcnJvciA9IG92c19mbG93X2NtZF9maWxsX2luZm8obmV3X2Zsb3csXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMDk2LVx0XHRcdFx0XHRcdCAgICAgICBvdnNfaGVhZGVyLVx1MDAzZWRwX2lmaW5kZXgsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTE1OS1cdFx0aWYgKHVubGlrZWx5KHJlcGx5KSkge1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTE2MDpcdFx0XHRlcnJvciA9IG92c19mbG93X2NtZF9maWxsX2luZm8oZmxvdyxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTExNjEtXHRcdFx0XHRcdFx0ICAgICAgIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xMjcwPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMzAtXHRcdGlmICh1bmxpa2VseShyZXBseSkpIHtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMzE6XHRcdFx0ZXJyb3IgPSBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzMyLVx0XHRcdFx0XHRcdCAgICAgICBvdnNfaGVhZGVyLVx1MDAzZWRwX2lmaW5kZXgsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTQzMj1zdGF0aWMgaW50IG92c19mbG93X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDg2LVx0aWYgKGxpa2VseShyZXBseSkpIHtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE0ODc6XHRcdGVyciA9IG92c19mbG93X2NtZF9maWxsX2luZm8oZmxvdywgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ4OC1cdFx0XHRcdFx0ICAgICByZXBseSwgaW5mby1cdTAwM2VzbmRfcG9ydGlkLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0OTUtXHR9XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDk2Olx0LyogUmVtb3ZhbCBoYXMgdG8gaGFwcGVuIGFmdGVyIG92c19mbG93X2NtZF9maWxsX2luZm8oKSwgYXMgaXQgdXNlc1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ5Ny1cdCAqIHRoZSBmbG93LVx1MDAzZW1hc2sgdGhhdCBjYW4gYmUgc2NoZWR1bGVkIHRvIGJlIGZyZWVkIGJ5IHRoZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE1MTM9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTU0Ni1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE1NDc6XHRcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCwgc2tiLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTU0OC1cdFx0XHRcdFx0ICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMTQwPXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfZGF0YXBhdGhfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxNTYtLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyMTU3OnN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxNTgtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjI0ND1zdHJ1Y3Qgc2tfYnVmZiAqb3ZzX3Zwb3J0X2NtZF9idWlsZF9pbmZvKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMjUzLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjI1NDpcdHJldHZhbCA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCBza2IsIG5ldCwgcG9ydGlkLCBzZXEsIDAsIGNtZCxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIyNTUtXHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMzMyPXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzk1LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjM5NjpcdGVyciA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCByZXBseSwgZ2VubF9pbmZvX25ldChpbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIzOTctXHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSwgMCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDE5PXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDU1LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1NjpcdGVyciA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCByZXBseSwgZ2VubF9pbmZvX25ldChpbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NTctXHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSwgMCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDcxPXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDk1LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ5NjpcdGVyciA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCByZXBseSwgZ2VubF9pbmZvX25ldChpbmZvKSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0OTctXHRcdFx0XHQgICAgICBpbmZvLVx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXHUwMDNlc25kX3NlcSwgMCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNTI2PXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNTQyLVx0XHRnb3RvIGV4aXRfdW5sb2NrX2ZyZWU7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNTQzOlx0ZXJyID0gb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHJlcGx5LCBnZW5sX2luZm9fbmV0KGluZm8pLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjU0NC1cdFx0XHRcdCAgICAgIGluZm8tXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cdTAwM2VzbmRfc2VxLCAwLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI1NTc9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI1NzYtXHRcdFx0aWYgKGogXHUwMDNlPSBza2lwIFx1MDAyNlx1MDAyNlxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjU3NzpcdFx0XHQgICAgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHNrYixcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI1NzgtXHRcdFx0XHRcdFx0ICAgIHNvY2tfbmV0KHNrYi1cdTAwM2VzayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mb2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2AqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYG92c19mbG93X2NtZF9maWxsX2luZm9gIGFuZCBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gLCBhcmUgYWN0dWFsbHkgZG9pbmcuIFRpbWUgdG8gY3JhY2sgdGhlbSBvcGVuIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTtyZSBhbGwgYWJvdXQuIExldCYjMzk7cyByZWFkIHRocm91Z2ggdGhlIGNvZGUgb2YgYm90aCBmdW5jdGlvbnMgY2FyZWZ1bGx5IGFuZCBtZXRob2RpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGlucHV0cywgb3V0cHV0cywgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCBhbnkga2V5IGFsZ29yaXRobXMgb3IgbG9naWMgd2l0aGluIHRoZW0uIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwNTpcdC8qIENhbGxlZCB3aXRoIG92c19tdXRleCBvciBSQ1UgcmVhZCBsb2NrLiAqL1xuIDkwNjpcdHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgaW50IGRwX2lmaW5kZXgsXG4gOTA3Olx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsXG4gOTA4Olx0XHRcdFx0XHQgIHUzMiBzZXEsIHUzMiBmbGFncywgdTggY21kLCB1MzIgdWZpZF9mbGFncylcbiA5MDk6XHR7XG4gOTEwOlx0XHRjb25zdCBpbnQgc2tiX29yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiA5MTE6XHRcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyO1xuIDkxMjpcdFx0aW50IGVycjtcbiA5MTM6XHRcbiA5MTQ6XHRcdG92c19oZWFkZXIgPSBnZW5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBcdTAwMjZkcF9mbG93X2dlbmxfZmFtaWx5LFxuIDkxNTpcdFx0XHRcdFx0IGZsYWdzLCBjbWQpO1xuIDkxNjpcdFx0aWYgKCFvdnNfaGVhZGVyKVxuIDkxNzpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDkxODpcdFxuIDkxOTpcdFx0b3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4ID0gZHBfaWZpbmRleDtcbiA5MjA6XHRcbiA5MjE6XHRcdGVyciA9IG92c19ubGFfcHV0X2lkZW50aWZpZXIoZmxvdywgc2tiKTtcbiA5MjI6XHRcdGlmIChlcnIpXG4gOTIzOlx0XHRcdGdvdG8gZXJyb3I7XG4gOTI0Olx0XG4gOTI1Olx0XHRpZiAoc2hvdWxkX2ZpbGxfa2V5KFx1MDAyNmZsb3ctXHUwMDNlaWQsIHVmaWRfZmxhZ3MpKSB7XG4gOTI2Olx0XHRcdGVyciA9IG92c19ubGFfcHV0X21hc2tlZF9rZXkoZmxvdywgc2tiKTtcbiA5Mjc6XHRcdFx0aWYgKGVycilcbiA5Mjg6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDkyOTpcdFx0fVxuIDkzMDpcdFxuIDkzMTpcdFx0aWYgKHNob3VsZF9maWxsX21hc2sodWZpZF9mbGFncykpIHtcbiA5MzI6XHRcdFx0ZXJyID0gb3ZzX25sYV9wdXRfbWFzayhmbG93LCBza2IpO1xuIDkzMzpcdFx0XHRpZiAoZXJyKVxuIDkzNDpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gOTM1Olx0XHR9XG4gOTM2Olx0XG4gOTM3Olx0XHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9zdGF0cyhmbG93LCBza2IpO1xuIDkzODpcdFx0aWYgKGVycilcbiA5Mzk6XHRcdFx0Z290byBlcnJvcjtcbiA5NDA6XHRcbiA5NDE6XHRcdGlmIChzaG91bGRfZmlsbF9hY3Rpb25zKHVmaWRfZmxhZ3MpKSB7XG4gOTQyOlx0XHRcdGVyciA9IG92c19mbG93X2NtZF9maWxsX2FjdGlvbnMoZmxvdywgc2tiLCBza2Jfb3JpZ19sZW4pO1xuIDk0MzpcdFx0XHRpZiAoZXJyKVxuIDk0NDpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gOTQ1Olx0XHR9XG4gOTQ2Olx0XG4gOTQ3Olx0XHRnZW5sbXNnX2VuZChza2IsIG92c19oZWFkZXIpO1xuIDk0ODpcdFx0cmV0dXJuIDA7XG4gOTQ5Olx0XG4gOTUwOlx0ZXJyb3I6XG4gOTUxOlx0XHRnZW5sbXNnX2NhbmNlbChza2IsIG92c19oZWFkZXIpO1xuIDk1MjpcdFx0cmV0dXJuIGVycjtcbiA5NTM6XHR9XG4gOTU0Olx0XG4gOTU1Olx0LyogTWF5IG5vdCBiZSBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLiAqL1xuIDk1NjpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3dfY21kX2FsbG9jX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqYWN0cyxcbiA5NTc6XHRcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICpzZmlkLFxuIDk1ODpcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiA5NTk6XHRcdFx0XHRcdFx0ICAgICAgIGJvb2wgYWx3YXlzLFxuIDk2MDpcdFx0XHRcdFx0XHQgICAgICAgdWludDMyX3QgdWZpZF9mbGFncylcbiA5NjE6XHR7XG4gOTYyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDk2MzpcdFx0c2l6ZV90IGxlbjtcbiA5NjQ6XHRcbiA5NjU6XHRcdGlmICghYWx3YXlzIFx1MDAyNlx1MDAyNiAhb3ZzX211c3Rfbm90aWZ5KFx1MDAyNmRwX2Zsb3dfZ2VubF9mYW1pbHksIGluZm8sIDApKVxuIDk2NjpcdFx0XHRyZXR1cm4gTlVMTDtcbiA5Njc6XHRcbiA5Njg6XHRcdGxlbiA9IG92c19mbG93X2NtZF9tc2dfc2l6ZShhY3RzLCBzZmlkLCB1ZmlkX2ZsYWdzKTtcbiA5Njk6XHRcdHNrYiA9IGdlbmxtc2dfbmV3KGxlbiwgR0ZQX0tFUk5FTCk7XG4gOTcwOlx0XHRpZiAoIXNrYilcbiA5NzE6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gOTcyOlx0XG4gOTczOlx0XHRyZXR1cm4gc2tiO1xuIDk3NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkyNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gRmlyc3QsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHNgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gLiBNeSBndXQgdGVsbHMgbWUgdGhhdCB0aGV5JiMzOTtyZSByZWxhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbSBpbmRpdmlkdWFsbHkgZmlyc3QgdG8gc2VlIHRoZSBjb25uZWN0aW9uLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IuIEkgYmV0IGl0JiMzOTtzIGludm9sdmVkIGluIGdhdGhlcmluZyBzdGF0cyBvbiB0aGUgZmxvd3MsIGxpa2VseSBmb3IgdGhlIGRhdGFwYXRoLCBhbmQgcHJvYmFibHkgZmlsbHMgYSBzdHJ1Y3R1cmUgd2l0aCB0aG9zZSByZXN1bHRzIHRvIGJlIHJldHVybmVkIG9yIHByb2Nlc3NlZCBlbHNld2hlcmUuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGRlZXBlciB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19mbG93X2NtZF9maWxsX3N0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTgwNT1zdGF0aWMgc2l6ZV90IG92c19mbG93X2NtZF9tc2dfc2l6ZShjb25zdCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICphY3RzLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTgzNy0vKiBDYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgUkNVIHJlYWQgbG9jay4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjgzODpzdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX3N0YXRzKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtODM5LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz05MDY9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LCBpbnQgZHBfaWZpbmRleCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05MzYtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo5Mzc6XHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9zdGF0cyhmbG93LCBza2IpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTM4LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzNQoJCQkJCQkJb3V0cHV0OiA3NwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBiYXNlZCBvbiBhIHF1aWNrIGdsYW5jZToKCioqRGl2aW5nIGludG8gT3BlbiB2U3dpdGNoIERhdGFwYXRoIFN0YXRzIGFuZCBJbmZvcm1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2Agd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZXNlIGFyZSAqY3JpdGljYWwqIGZvciBhbnkga2luZCBvZiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIG9yIG5ldHdvcmsgbWFuYWdlbWVudCB3aXRoaW4gdGhlIE9WUyBkYXRhcGF0aC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgb25lIGhhbmRsZXMgdGhlIGZpbGxpbmcgaW4gb2YgZmxvdyBzdGF0aXN0aWNzLCB3aGlsZSB0aGUgb3RoZXIgbGlrZWx5IGZvY3VzZXMgb24gdmlydHVhbCBwb3J0ICh2cG9ydCkgaW5mb3JtYXRpb24uCgpJJiMzOTtkIGV4cGVjdCBgb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHNgIHRvIGJlIHRoZSBndXRzIG9mIGhvdyB3ZSBnZXQgZmxvdyB0YWJsZSBjb3VudGVycy4gVGhpcyB3b3VsZCBpbnZvbHZlIGRpZ2dpbmcgdGhyb3VnaCB0aGUgZGF0YXBhdGgmIzM5O3MgaW50ZXJuYWwgc3RydWN0dXJlcyB0byByZXRyaWV2ZSBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBpZGxlIHRpbWVvdXRzLCBhY3RpdmUgZmxvdyB0aW1lb3V0cywgYW5kIGFueSBvdGhlciByZWxldmFudCBwZXJmb3JtYW5jZSBtZXRyaWNzIHJlbGF0ZWQgdG8gc3BlY2lmaWMgZmxvd3MuIEl0IHByb2JhYmx5IHRha2VzIGEgcmVxdWVzdCBmcm9tIHVzZXJzcGFjZSwgdHJhbnNsYXRlcyBpdCBpbnRvIHRoZSBkYXRhcGF0aCYjMzk7cyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgYSBmbG93LCB0aGVuIHF1ZXJpZXMgZm9yIHRoZSByZXF1aXJlZCBkYXRhLCBhbmQgYnVuZGxlcyBpdCBiYWNrIHVwIGZvciB0aGUgY2FsbGVyLCBsaWtlbHkgb3ZlciBOZXRsaW5rIG9yIHNvbWUgb3RoZXIgUlBDIG1lY2hhbmlzbS4gVGhlcmUgd291bGQgYmUgYSBnb29kIGNoYW5jZSB0byBzZWUgbG9ja2luZywgY2FjaGluZywgYW5kIGEgaGVhdnkgZm9jdXMgb24gY29uY3VycmVuY3kgaW4gaGVyZS4KCmBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2Agc291bmRzIGxpa2UgaXQmIzM5O3MgYWJvdXQgcHJvdmlkaW5nIHRoZSBkZXRhaWxzIG9mIHRoZSB2aXJ0dWFsIHBvcnRzIHRoZW1zZWx2ZXMuIFRoaXMgaXMgYWxsIHRoZSBiYXNpYyBpbmZvcm1hdGlvbiB5b3UgbmVlZCBhYm91dCBhIHNwZWNpZmljIGludGVyZmFjZSB0aGF0IHNpdHMgd2l0aGluIHRoZSBPVlMgZGF0YSBwbGFuZS4gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoaW5ncyBsaWtlIHRoZSBpbnRlcmZhY2UmIzM5O3MgbmFtZSwgdHlwZSAoZS5nLiwgaW50ZXJuYWwsIHRhcCwgdmV0aCksIGhhcmR3YXJlIGFkZHJlc3MsIE1UVSwgbWF5YmUgYXNzb2NpYXRlZCBwaHlzaWNhbCBpbnRlcmZhY2VzIChpZiBhbnkpLCBhbmQgcG9zc2libHkgaXRzIGN1cnJlbnQgc3RhdHVzICh1cC9kb3duKS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaGVyZSB3aWxsIGJlIGhvdyB0aGlzIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCDigJMgaXMgaXQgYSBkaXJlY3QgbG9va3VwIGZyb20gYSBnbG9iYWwgdnBvcnQgdGFibGUsIG9yIGlzIGl0IG1vcmUgY29tcGxleCBpZiB2aXJ0dWFsIHBvcnRzIGFyZSBkeW5hbWljYWxseSBjcmVhdGVkIG9yIGNvbmZpZ3VyZWQ/IE1pZ2h0IGFsc28gaW52b2x2ZSBnb2luZyB0byB0aGUga2VybmVsIHRvIGRpc2NvdmVyIHRoZSBpbnRlcmZhY2UgZGV0YWlscy4KCkkmIzM5O20gYmV0dGluZyB0aGVzZSBhcmUgY29yZSBjb21wb25lbnRzIGZvciB0b29scyBsaWtlIGBvdnMtb2ZjdGxgLCBgb3ZzLWFwcGN0bGAsIGFuZCBhbnkgb3RoZXIgbW9uaXRvcmluZyBvciBjb250cm9sIHV0aWxpdGllcyB0aGF0IGludGVyYWN0IHdpdGggdGhlIE9WUyBkYXRhcGF0aC4gVGhlIGRldmlsLCBhcyBhbHdheXMsIHdpbGwgYmUgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhvdyBlZmZpY2llbnRseSB0aGV5IGhhbmRsZSByZXF1ZXN0cywgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBsb2FkLiBUaGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBoZXJlIGlzIHByZXR0eSBoaWdoLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGVpciBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzU6XHR9XG4gODM2Olx0XG4gODM3Olx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXG4gODM4Olx0c3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbiA4Mzk6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4gODQwOlx0e1xuIDg0MTpcdFx0c3RydWN0IG92c19mbG93X3N0YXRzIHN0YXRzO1xuIDg0MjpcdFx0X19iZTE2IHRjcF9mbGFncztcbiA4NDM6XHRcdHVuc2lnbmVkIGxvbmcgdXNlZDtcbiA4NDQ6XHRcbiA4NDU6XHRcdG92c19mbG93X3N0YXRzX2dldChmbG93LCBcdTAwMjZzdGF0cywgXHUwMDI2dXNlZCwgXHUwMDI2dGNwX2ZsYWdzKTtcbiA4NDY6XHRcbiA4NDc6XHRcdGlmICh1c2VkIFx1MDAyNlx1MDAyNlxuIDg0ODpcdFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgT1ZTX0ZMT1dfQVRUUl9VU0VELCBvdnNfZmxvd191c2VkX3RpbWUodXNlZCksXG4gODQ5Olx0XHRcdFx0ICAgICAgT1ZTX0ZMT1dfQVRUUl9QQUQpKVxuIDg1MDpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDg1MTpcdFxuIDg1MjpcdFx0aWYgKHN0YXRzLm5fcGFja2V0cyBcdTAwMjZcdTAwMjZcbiA4NTM6XHRcdCAgICBubGFfcHV0XzY0Yml0KHNrYiwgT1ZTX0ZMT1dfQVRUUl9TVEFUUyxcbiA4NTQ6XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb3ZzX2Zsb3dfc3RhdHMpLCBcdTAwMjZzdGF0cyxcbiA4NTU6XHRcdFx0XHQgIE9WU19GTE9XX0FUVFJfUEFEKSlcbiA4NTY6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA4NTc6XHRcbiA4NTg6XHRcdGlmICgodTgpbnRvaHModGNwX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbiA4NTk6XHRcdCAgICAgbmxhX3B1dF91OChza2IsIE9WU19GTE9XX0FUVFJfVENQX0ZMQUdTLCAodTgpbnRvaHModGNwX2ZsYWdzKSkpXG4gODYwOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gODYxOlx0XG4gODYyOlx0XHRyZXR1cm4gMDtcbiA4NjM6XHR9XG4gODY0Olx0XG4gODY1Olx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXG4gODY2Olx0c3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9hY3Rpb25zKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxuIDg2NzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2tiX29yaWdfbGVuKVxuIDg2ODpcdHtcbiA4Njk6XHRcdHN0cnVjdCBubGF0dHIgKnN0YXJ0O1xuIDg3MDpcdFx0aW50IGVycjtcbiA4NzE6XHRcbiA4NzI6XHRcdC8qIElmIE9WU19GTE9XX0FUVFJfQUNUSU9OUyBkb2VzbiYjMzk7dCBmaXQsIHNraXAgZHVtcGluZyB0aGUgYWN0aW9ucyBpZlxuIDg3MzpcdFx0ICogdGhpcyBpcyB0aGUgZmlyc3QgZmxvdyB0byBiZSBkdW1wZWQgaW50byAmIzM5O3NrYiYjMzk7LiAgVGhpcyBpcyB1bnVzdWFsIGZvclxuIDg3NDpcdFx0ICogTmV0bGluayBidXQgaW5kaXZpZHVhbCBhY3Rpb24gbGlzdHMgY2FuIGJlIGxvbmdlciB0aGFuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNTU6XHRcbjIxNTY6XHQvKiBDYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgUkNVIHJlYWQgbG9jay4gKi9cbjIxNTc6XHRzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXG4yMTU4Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4yMTU5Olx0XHRcdFx0XHQgICB1MzIgZmxhZ3MsIHU4IGNtZCwgZ2ZwX3QgZ2ZwKVxuMjE2MDpcdHtcbjIxNjE6XHRcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyO1xuMjE2MjpcdFx0c3RydWN0IG92c192cG9ydF9zdGF0cyB2cG9ydF9zdGF0cztcbjIxNjM6XHRcdHN0cnVjdCBuZXQgKm5ldF92cG9ydDtcbjIxNjQ6XHRcdGludCBlcnI7XG4yMTY1Olx0XG4yMTY2Olx0XHRvdnNfaGVhZGVyID0gZ2VubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgXHUwMDI2ZHBfdnBvcnRfZ2VubF9mYW1pbHksXG4yMTY3Olx0XHRcdFx0XHQgZmxhZ3MsIGNtZCk7XG4yMTY4Olx0XHRpZiAoIW92c19oZWFkZXIpXG4yMTY5Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4yMTcwOlx0XG4yMTcxOlx0XHRvdnNfaGVhZGVyLVx1MDAzZWRwX2lmaW5kZXggPSBnZXRfZHBpZmluZGV4KHZwb3J0LVx1MDAzZWRwKTtcbjIxNzI6XHRcbjIxNzM6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIE9WU19WUE9SVF9BVFRSX1BPUlRfTk8sIHZwb3J0LVx1MDAzZXBvcnRfbm8pIHx8XG4yMTc0Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBPVlNfVlBPUlRfQVRUUl9UWVBFLCB2cG9ydC1cdTAwM2VvcHMtXHUwMDNldHlwZSkgfHxcbjIxNzU6XHRcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE9WU19WUE9SVF9BVFRSX05BTUUsXG4yMTc2Olx0XHRcdFx0ICAgb3ZzX3Zwb3J0X25hbWUodnBvcnQpKSB8fFxuMjE3NzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgT1ZTX1ZQT1JUX0FUVFJfSUZJTkRFWCwgdnBvcnQtXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgpKVxuMjE3ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIxNzk6XHRcbjIxODA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjIxODE6XHRcdG5ldF92cG9ydCA9IGRldl9uZXRfcmN1KHZwb3J0LVx1MDAzZWRldik7XG4yMTgyOlx0XHRpZiAoIW5ldF9lcShuZXQsIG5ldF92cG9ydCkpIHtcbjIxODM6XHRcdFx0aW50IGlkID0gcGVlcm5ldDJpZF9hbGxvYyhuZXQsIG5ldF92cG9ydCwgR0ZQX0FUT01JQyk7XG4yMTg0Olx0XG4yMTg1Olx0XHRcdGlmIChubGFfcHV0X3MzMihza2IsIE9WU19WUE9SVF9BVFRSX05FVE5TSUQsIGlkKSlcbjIxODY6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZV91bmxvY2s7XG4yMTg3Olx0XHR9XG4yMTg4Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIxODk6XHRcbjIxOTA6XHRcdG92c192cG9ydF9nZXRfc3RhdHModnBvcnQsIFx1MDAyNnZwb3J0X3N0YXRzKTtcbjIxOTE6XHRcdGlmIChubGFfcHV0XzY0Yml0KHNrYiwgT1ZTX1ZQT1JUX0FUVFJfU1RBVFMsXG4yMTkyOlx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG92c192cG9ydF9zdGF0cyksIFx1MDAyNnZwb3J0X3N0YXRzLFxuMjE5MzpcdFx0XHRcdCAgT1ZTX1ZQT1JUX0FUVFJfUEFEKSlcbjIxOTQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMTk1Olx0XG4yMTk2Olx0XHRpZiAob3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHModnBvcnQsIHNrYikpXG4yMTk3Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjE5ODpcdFxuMjE5OTpcdFx0aWYgKG92c192cG9ydF9nZXRfdXBjYWxsX3BvcnRpZHModnBvcnQsIHNrYikpXG4yMjAwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjIwMTpcdFxuMjIwMjpcdFx0Z2VubG1zZ19lbmQoc2tiLCBvdnNfaGVhZGVyKTtcbjIyMDM6XHRcdHJldHVybiAwO1xuMjIwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5NwoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnM6CgoqKkRpZ2dpbmcgaW50byBGbG93IGFuZCBQb3J0IFN0YXRzKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHR3byBmdW5jdGlvbnM6IGBvdnNfZmxvd19zdGF0c19nZXRgIGFuZCBgb3ZzX3Zwb3J0X2dldF9zdGF0c2AuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8sIG9mIGNvdXJzZSwgZmluZCBvdXQgd2hhdCBlYWNoIG9uZSYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgbWV0cmljcyB0aGV5JiMzOTtyZSByZXRyaWV2aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBwYWNrZXQgY291bnRzLCBieXRlIGNvdW50cywgZmxvdyB0aW1lb3V0cywgZXJyb3IgY291bnRzLCBpbnRlcmZhY2Ugc3RhdGlzdGljcywgb3IgYSBtaXggb2YgdGhpbmdzPyBBIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgKmV4YWN0bHkqIHdoYXQgZWFjaCBvbmUgbWVhc3VyZXMgaXMgdGhlIGZvdW5kYXRpb24gaGVyZS4gVGhlbiBJJiMzOTtsbCBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhleSYjMzk7cmUgcmVsYXRlZCwgd2hhdCB0aGVpciBpbnB1dHMgYXJlLCBhbmQgaG93IHRoZWlyIGRhdGEgZ2V0cyB1c2VkIGRvd25zdHJlYW0uIFByb2JhYmx5IEkmIzM5O2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IHRob3NlIHR3byBjYWxscyBhZmZlY3QgcGVyZm9ybWFuY2UsIGFuZCBjb25zaWRlciB0aGUgaW1wYWN0IG9uIGFueSBtb25pdG9yaW5nIHRvb2xzIHRoYXQgbWlnaHQgYmUgdXNpbmcgdGhlIG91dHB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2Zsb3dfc3RhdHNfZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTgzOD1zdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX3N0YXRzKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTg0NC1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjg0NTpcdG92c19mbG93X3N0YXRzX2dldChmbG93LCBcdTAwMjZzdGF0cywgXHUwMDI2dXNlZCwgXHUwMDI2dGNwX2ZsYWdzKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTg0Ni1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTYxPXZvaWQgb3ZzX2Zsb3dfc3RhdHNfdXBkYXRlKHN0cnVjdCBzd19mbG93ICpmbG93LCBfX2JlMTYgdGNwX2ZsYWdzLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTI3LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBvciBvdnNfbXV0ZXguICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEyODp2b2lkIG92c19mbG93X3N0YXRzX2dldChjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTI5LVx0XHRcdHN0cnVjdCBvdnNfZmxvd19zdGF0cyAqb3ZzX3N0YXRzLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg9MjgxPXZvaWQgb3ZzX2Zsb3dfc3RhdHNfdXBkYXRlKHN0cnVjdCBzd19mbG93ICosIF9fYmUxNiB0Y3BfZmxhZ3MsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTI4Mi1cdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6MjgzOnZvaWQgb3ZzX2Zsb3dfc3RhdHNfZ2V0KGNvbnN0IHN0cnVjdCBzd19mbG93ICosIHN0cnVjdCBvdnNfZmxvd19zdGF0cyAqLFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaC0yODQtXHRcdFx0dW5zaWduZWQgbG9uZyAqdXNlZCwgX19iZTE2ICp0Y3BfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfdnBvcnRfZ2V0X3N0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIxNTc9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxODktXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyMTkwOlx0b3ZzX3Zwb3J0X2dldF9zdGF0cyh2cG9ydCwgXHUwMDI2dnBvcnRfc3RhdHMpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjE5MS1cdGlmIChubGFfcHV0XzY0Yml0KHNrYiwgT1ZTX1ZQT1JUX0FUVFJfU1RBVFMsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9MjMwPXZvaWQgb3ZzX3Zwb3J0X2RlbChzdHJ1Y3QgdnBvcnQgKnZwb3J0KVxuLS1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTIzNi0vKipcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jOjIzNzogKlx0b3ZzX3Zwb3J0X2dldF9zdGF0cyAtIHJldHJpZXZlIGRldmljZSBzdGF0c1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtMjM4LSAqXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtMjQ1LSAqL1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6MjQ2OnZvaWQgb3ZzX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgb3ZzX3Zwb3J0X3N0YXRzICpzdGF0cylcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTI0Ny17XG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg9MzE9c3RydWN0IHZwb3J0ICpvdnNfdnBvcnRfbG9jYXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuaC0zMi1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oOjMzOnZvaWQgb3ZzX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKiwgc3RydWN0IG92c192cG9ydF9zdGF0cyAqKTtcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oLTM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgzMAoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgRGVlcCBpbnRvIE9WUyBTdGF0aXN0aWNzKioKCkFscmlnaHQsIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzLiBCZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHRyb3VibGVzaG9vdGluZyBvciBvcHRpbWl6aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiBob3cgYG92c19mbG93X3N0YXRzX2dldGAgYW5kIGBvdnNfdnBvcnRfZ2V0X3N0YXRzYCBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBkYXRhIHRoZXkmIzM5O3JlIHB1bGxpbmcsIHdoZXJlIGl0JiMzOTtzIGNvbWluZyBmcm9tIGluIHRoZSBPVlMgYXJjaGl0ZWN0dXJlLCBhbmQgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbnZvbHZlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGdyYW51bGFyIGRldGFpbHMgb2YgdGhlIGNvZGU7IGFyZSB0aGV5IGhpdHRpbmcgYW55IHNoYXJlZCByZXNvdXJjZXM/IERvIHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGxpdmUgZGF0YT8gV2hhdCBhYm91dCBjYWNoaW5nIHN0cmF0ZWdpZXMgaWYgYW55PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBvZiBhbnkgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHR9XG4gMTI2Olx0XG4gMTI3Olx0LyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIG9yIG92c19tdXRleC4gKi9cbiAxMjg6XHR2b2lkIG92c19mbG93X3N0YXRzX2dldChjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbiAxMjk6XHRcdFx0XHRzdHJ1Y3Qgb3ZzX2Zsb3dfc3RhdHMgKm92c19zdGF0cyxcbiAxMzA6XHRcdFx0XHR1bnNpZ25lZCBsb25nICp1c2VkLCBfX2JlMTYgKnRjcF9mbGFncylcbiAxMzE6XHR7XG4gMTMyOlx0XHR1bnNpZ25lZCBpbnQgY3B1O1xuIDEzMzpcdFxuIDEzNDpcdFx0KnVzZWQgPSAwO1xuIDEzNTpcdFx0KnRjcF9mbGFncyA9IDA7XG4gMTM2Olx0XHRtZW1zZXQob3ZzX3N0YXRzLCAwLCBzaXplb2YoKm92c19zdGF0cykpO1xuIDEzNzpcdFxuIDEzODpcdFx0Zm9yX2VhY2hfY3B1KGNwdSwgZmxvdy1cdTAwM2VjcHVfdXNlZF9tYXNrKSB7XG4gMTM5Olx0XHRcdHN0cnVjdCBzd19mbG93X3N0YXRzICpzdGF0cyA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKGZsb3ctXHUwMDNlc3RhdHNbY3B1XSk7XG4gMTQwOlx0XG4gMTQxOlx0XHRcdGlmIChzdGF0cykge1xuIDE0MjpcdFx0XHRcdC8qIExvY2FsIENQVSBtYXkgd3JpdGUgb24gbm9uLWxvY2FsIHN0YXRzLCBzbyB3ZSBtdXN0XG4gMTQzOlx0XHRcdFx0ICogYmxvY2sgYm90dG9tLWhhbHZlcyBoZXJlLlxuIDE0NDpcdFx0XHRcdCAqL1xuIDE0NTpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzdGF0cy1cdTAwM2Vsb2NrKTtcbiAxNDY6XHRcdFx0XHRpZiAoISp1c2VkIHx8IHRpbWVfYWZ0ZXIoc3RhdHMtXHUwMDNldXNlZCwgKnVzZWQpKVxuIDE0NzpcdFx0XHRcdFx0KnVzZWQgPSBzdGF0cy1cdTAwM2V1c2VkO1xuIDE0ODpcdFx0XHRcdCp0Y3BfZmxhZ3MgfD0gc3RhdHMtXHUwMDNldGNwX2ZsYWdzO1xuIDE0OTpcdFx0XHRcdG92c19zdGF0cy1cdTAwM2VuX3BhY2tldHMgJiM0Mzs9IHN0YXRzLVx1MDAzZXBhY2tldF9jb3VudDtcbiAxNTA6XHRcdFx0XHRvdnNfc3RhdHMtXHUwMDNlbl9ieXRlcyAmIzQzOz0gc3RhdHMtXHUwMDNlYnl0ZV9jb3VudDtcbiAxNTE6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzdGF0cy1cdTAwM2Vsb2NrKTtcbiAxNTI6XHRcdFx0fVxuIDE1MzpcdFx0fVxuIDE1NDpcdH1cbiAxNTU6XHRcbiAxNTY6XHQvKiBDYWxsZWQgd2l0aCBvdnNfbXV0ZXguICovXG4gMTU3Olx0dm9pZCBvdnNfZmxvd19zdGF0c19jbGVhcihzdHJ1Y3Qgc3dfZmxvdyAqZmxvdylcbiAxNTg6XHR7XG4gMTU5Olx0XHR1bnNpZ25lZCBpbnQgY3B1O1xuIDE2MDpcdFxuIDE2MTpcdFx0Zm9yX2VhY2hfY3B1KGNwdSwgZmxvdy1cdTAwM2VjcHVfdXNlZF9tYXNrKSB7XG4gMTYyOlx0XHRcdHN0cnVjdCBzd19mbG93X3N0YXRzICpzdGF0cyA9IG92c2xfZGVyZWZlcmVuY2UoZmxvdy1cdTAwM2VzdGF0c1tjcHVdKTtcbiAxNjM6XHRcbiAxNjQ6XHRcdFx0aWYgKHN0YXRzKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL3Zwb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdCAqIEBzdGF0czogbG9jYXRpb24gdG8gc3RvcmUgc3RhdHNcbiAyNDE6XHQgKlxuIDI0MjpcdCAqIFJldHJpZXZlcyB0cmFuc21pdCwgcmVjZWl2ZSwgYW5kIGVycm9yIHN0YXRzIGZvciB0aGUgZ2l2ZW4gZGV2aWNlLlxuIDI0MzpcdCAqXG4gMjQ0Olx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgcmN1X3JlYWRfbG9jay5cbiAyNDU6XHQgKi9cbiAyNDY6XHR2b2lkIG92c192cG9ydF9nZXRfc3RhdHMoc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IG92c192cG9ydF9zdGF0cyAqc3RhdHMpXG4gMjQ3Olx0e1xuIDI0ODpcdFx0Y29uc3Qgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpkZXZfc3RhdHM7XG4gMjQ5Olx0XHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDtcbiAyNTA6XHRcbiAyNTE6XHRcdGRldl9zdGF0cyA9IGRldl9nZXRfc3RhdHModnBvcnQtXHUwMDNlZGV2LCBcdTAwMjZ0ZW1wKTtcbiAyNTI6XHRcdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyAgPSBkZXZfc3RhdHMtXHUwMDNlcnhfZXJyb3JzO1xuIDI1MzpcdFx0c3RhdHMtXHUwMDNldHhfZXJyb3JzICA9IGRldl9zdGF0cy1cdTAwM2V0eF9lcnJvcnM7XG4gMjU0Olx0XHRzdGF0cy1cdTAwM2V0eF9kcm9wcGVkID0gZGV2X3N0YXRzLVx1MDAzZXR4X2Ryb3BwZWQ7XG4gMjU1Olx0XHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkID0gZGV2X3N0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQ7XG4gMjU2Olx0XG4gMjU3Olx0XHRzdGF0cy1cdTAwM2VyeF9ieXRlc1x0ICA9IGRldl9zdGF0cy1cdTAwM2VyeF9ieXRlcztcbiAyNTg6XHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSBkZXZfc3RhdHMtXHUwMDNlcnhfcGFja2V0cztcbiAyNTk6XHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzXHQgID0gZGV2X3N0YXRzLVx1MDAzZXR4X2J5dGVzO1xuIDI2MDpcdFx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IGRldl9zdGF0cy1cdTAwM2V0eF9wYWNrZXRzO1xuIDI2MTpcdH1cbiAyNjI6XHRcbiAyNjM6XHQvKipcbiAyNjQ6XHQgKlx0b3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHMgLSByZXRyaWV2ZSB1cGNhbGwgc3RhdHNcbiAyNjU6XHQgKlxuIDI2NjpcdCAqIEB2cG9ydDogdnBvcnQgZnJvbSB3aGljaCB0byByZXRyaWV2ZSB0aGUgc3RhdHMuXG4gMjY3Olx0ICogQHNrYjogc2tfYnVmZiB3aGVyZSB1cGNhbGwgc3RhdHMgc2hvdWxkIGJlIGFwcGVuZGVkLlxuIDI2ODpcdCAqXG4gMjY5Olx0ICogUmV0cmlldmVzIHVwY2FsbCBzdGF0cyBmb3IgdGhlIGdpdmVuIGRldmljZS5cbiAyNzA6XHQgKlxuIDI3MTpcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIHJjdV9yZWFkX2xvY2suXG4gMjcyOlx0ICovXG4gMjczOlx0aW50IG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gMjc0Olx0e1xuIDI3NTpcdFx0dTY0IHR4X3N1Y2Nlc3MgPSAwLCB0eF9mYWlsID0gMDtcbiAyNzY6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbiAyNzc6XHRcdGludCBpO1xuIDI3ODpcdFxuIDI3OTpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBPVlMgU3RhdGlzdGljcyBDb2xsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgT1ZTIGdhdGhlcnMgaXRzIHN0YXRpc3RpY3MsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHZwb3J0cy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYGRldl9nZXRfc3RhdHNgIGlzIGNhbGxlZCB3aXRoaW4gYm90aCBgb3ZzX3Zwb3J0X2dldF9zdGF0c2AgYW5kIGBvdnNfdnBvcnRfZ2V0X3VwY2FsbF9zdGF0c2AuIEludGVyZXN0aW5nLiBUaG9zZSBhcmUgdGhlIHR3byBwbGFjZXMgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGlmZmVyZW50IHVzYWdlcyBvZiB0aG9zZSB0d28uIExldCYjMzk7cyBzdGFydCBieSBkZWx2aW5nIGludG8gYG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzYCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3JlIGRpcmVjdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdXBjYWxsLXJlbGF0ZWQgc3RhdGlzdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0ICpcbiAyNzE6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG92c19tdXRleCBvciByY3VfcmVhZF9sb2NrLlxuIDI3MjpcdCAqL1xuIDI3MzpcdGludCBvdnNfdnBvcnRfZ2V0X3VwY2FsbF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDI3NDpcdHtcbiAyNzU6XHRcdHU2NCB0eF9zdWNjZXNzID0gMCwgdHhfZmFpbCA9IDA7XG4gMjc2Olx0XHRzdHJ1Y3QgbmxhdHRyICpubGE7XG4gMjc3Olx0XHRpbnQgaTtcbiAyNzg6XHRcbiAyNzk6XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG4gMjgwOlx0XHRcdGNvbnN0IHN0cnVjdCB2cG9ydF91cGNhbGxfc3RhdHNfcGVyY3B1ICpzdGF0cztcbiAyODE6XHRcdFx0dTY0IG5fc3VjY2Vzcywgbl9mYWlsO1xuIDI4MjpcdFx0XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gMjgzOlx0XG4gMjg0Olx0XHRcdHN0YXRzID0gcGVyX2NwdV9wdHIodnBvcnQtXHUwMDNldXBjYWxsX3N0YXRzLCBpKTtcbiAyODU6XHRcdFx0ZG8ge1xuIDI4NjpcdFx0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnN0YXRzLVx1MDAzZXN5bmNwKTtcbiAyODc6XHRcdFx0XHRuX3N1Y2Nlc3MgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZzdGF0cy1cdTAwM2VuX3N1Y2Nlc3MpO1xuIDI4ODpcdFx0XHRcdG5fZmFpbCA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZW5fZmFpbCk7XG4gMjg5Olx0XHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZzdGF0cy1cdTAwM2VzeW5jcCwgc3RhcnQpKTtcbiAyOTA6XHRcdFx0dHhfc3VjY2VzcyAmIzQzOz0gbl9zdWNjZXNzO1xuIDI5MTpcdFx0XHR0eF9mYWlsICYjNDM7PSBuX2ZhaWw7XG4gMjkyOlx0XHR9XG4gMjkzOlx0XG4gMjk0Olx0XHRubGEgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBPVlNfVlBPUlRfQVRUUl9VUENBTExfU1RBVFMpO1xuIDI5NTpcdFx0aWYgKCFubGEpXG4gMjk2Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gMjk3Olx0XG4gMjk4Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBPVlNfVlBPUlRfVVBDQUxMX0FUVFJfU1VDQ0VTUywgdHhfc3VjY2VzcyxcbiAyOTk6XHRcdFx0XHQgICAgICBPVlNfVlBPUlRfQVRUUl9QQUQpKSB7XG4gMzAwOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIG5sYSk7XG4gMzAxOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gMzAyOlx0XHR9XG4gMzAzOlx0XG4gMzA0Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBPVlNfVlBPUlRfVVBDQUxMX0FUVFJfRkFJTCwgdHhfZmFpbCxcbiAzMDU6XHRcdFx0XHQgICAgICBPVlNfVlBPUlRfQVRUUl9QQUQpKSB7XG4gMzA2Olx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIG5sYSk7XG4gMzA3Olx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gMzA4Olx0XHR9XG4gMzA5Olx0XHRubGFfbmVzdF9lbmQoc2tiLCBubGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQxMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgT3BlbiB2U3dpdGNoIFN0YXRpc3RpY3MgYW5kIExvY2tpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gbG9va2luZyBhdCBgb3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHNgLiBJIHNlZSB0aGF0IGB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5gIGlzIHVzZWQsIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbi4gVGhpcyBpcyBhIHBvdGVudGlhbCByZWQgZmxhZywgc3BlY2lmaWNhbGx5IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLCB3aXRoIGxvY2tkZXAgZW5hYmxlZCwgb3IgcmVhbGx5LCBhbnl0aW1lIHRoZSB3cml0ZXIgY291bGQgYmUgaW4gYSBib3R0b20taGFsZiAoQkgpIGNvbnRleHQuIFdlIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBgdTY0X3N0YXRzYCBvZnRlbiByZXF1aXJlcyBkaXNhYmxpbmcgQkhzIG9yIHNpbWlsYXIgbWVjaGFuaXNtcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHksIGVzcGVjaWFsbHkgaWYgdGhlIHdyaXRlciBpcyBleGVjdXRpbmcgaW4gYSBib3R0b20taGFsZiBjb250ZXh0LCBvciBsb2NrZGVwIG1heSBhc3NlcnQsIHdoaWNoIGlzIG5ldmVyIGEgZ29vZCB0aGluZy4KClRoZW4gSSBzZWUgYG92c19mbG93X3N0YXRzX2dldGAgdXNpbmcgYHNwaW5fbG9ja19iaGAuIFdhaXQgYSBtaW51dGUsIGBzcGluX2xvY2tfYmhgICppdHNlbGYqIGRpc2FibGVzIEJIcywgcGVyLWxvY2suIEJ1dCB0aGlzIG1ha2VzIG1lIHdvbmRlcjogd2hhdCBpZiBCSHMgYXJlIGRpc2FibGVkIG91dHNpZGUgdGhlIGxvb3AsIG9yIHRoZSBkdW1wIGNvZGUgZG9lcyByZXBlYXRlZCBsb2NraW5nIGFuZCB1bmxvY2tpbmc/IFRoaXMgc2VlbXMuLi4gaW5lZmZpY2llbnQuCgpBbHJpZ2h0LCB0aW1lIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb250ZXh0LiBBaCwgSSBzZWUgaXQgaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAuIEJpbmdvISBJIHNlZSBgbG9jYWxfYmhfZGlzYWJsZSgpYCB3cmFwcGVkIGFyb3VuZCB0aGUgKmVudGlyZSogZHVtcCBsb29wISBUaGlzIGlzIHdoYXQgSSB3YXMgbG9va2luZyBmb3IuCgpTcGVjaWZpY2FsbHkgaW4gYG92c19mbG93X2NtZF9kdW1wYCwgSSBzZWUgdGhpcyBwYXR0ZXJuOiBgbG9jYWxfYmhfZGlzYWJsZSgpYCBiZWZvcmUgdGhlIGxvb3AsIGBsb2NhbF9iaF9lbmFibGUoKWAgYWZ0ZXIgdGhlIGxvb3AuIEFuZCwgc2ltaWxhcmx5LCBpbiBgb3ZzX3Zwb3J0X2NtZF9kdW1wYCBJIHNlZSB0aGUgc2FtZSB0aGluZzogYGxvY2FsX2JoX2Rpc2FibGUoKWAgYXQgdGhlIGJlZ2lubmluZywgYGxvY2FsX2JoX2VuYWJsZSgpYCBhdCB0aGUgZW5kLgoKVGhpcyBjb25maXJtcyBteSBpbml0aWFsIHN1c3BpY2lvbi4gVGhlIGRlc2lnbmVycyB3ZXJlIGxpa2VseSB0cnlpbmcgdG8gYXZvaWQgQkgtcmVsYXRlZCBpc3N1ZXMgZHVyaW5nIHRoZSBkYXRhIGR1bXBzLCB3aGljaCBtYWtlcyBzZW5zZS4gSXQgbG9va3MgbGlrZSB0aGV5IHdlcmUgZW5zdXJpbmcgdGhhdCB0aGUgc3RhdGlzdGljcyBhbmQgZmxvdyB0YWJsZSBkdW1wcyBhcmUgYXRvbWljIHdpdGggcmVzcGVjdCB0byBib3R0b20taGFsZiBwcm9jZXNzaW5nLgoKTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBjb25zaWRlciBldmVyeXRoaW5nLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgT3BlbiB2U3dpdGNoLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHNlYXJjaCBmb3IgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7IGluIHRoZSBLY29uZmlnIGZpbGVzLiBJdCYjMzk7cyBhbHdheXMgd2lzZSB0byBlbnN1cmUgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGlzIGNvZGUgYXJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBPcGVuIHZTd2l0Y2gga2VybmVsIG1vZHVsZS4gTXkgbWluZCYjMzk7cyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMg4oCTIGhvdyYjMzk7cyBpdCBzdHJ1Y3R1cmVkPyBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgS2NvbmZpZyBzeW50YXg/IFdoYXQga2luZCBvZiBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdlbXMgaW4gdGhlcmUgcmVnYXJkaW5nIHNwZWNpZmljIGZlYXR1cmVzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb25hbGl0eT8gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQ7IHRoYXQmIzM5O2xsIHNhdmUgbWUgc29tZSB0aW1lLiBCYXNpY2FsbHksIEkgd2FudCB0aGUgY29yZSBibHVlcHJpbnQgZm9yIGhvdyB0aGlzIHRoaW5nIGdldHMgYnVpbHQgYW5kIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCBhbmQgdG8gc3RhcnQgZXhwbG9yaW5nIGhvdyB0byBwb3RlbnRpYWxseSBjdXN0b21pemUgYSBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE9wZW4gdlN3aXRjaFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT1BFTlZTV0lUQ0hcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcbiAgMTA6XHRcdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuICAxMTpcdFx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxuICAxMjpcdFx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG4gIDE0Olx0XHRzZWxlY3QgTVBMU1xuICAxNTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTY6XHRcdHNlbGVjdCBORVRfTVBMU19HU09cbiAgMTc6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAgMTg6XHRcdHNlbGVjdCBORVRfTlNIXG4gIDE5Olx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcbiAgMjA6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxuICAyMzpcdFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xuICAyNDpcdFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcbiAgMjU6XHRcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xuICAyNjpcdFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXG4gIDI3Olx0XHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxuICAyODpcdFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxuICAyOTpcdFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIHByb3ZpZGVzIGFuIGluLWtlcm5lbCBmYXN0IHBhdGggZm9yIHBhY2tldFxuICAzMjpcdFx0ICBmb3J3YXJkaW5nLiAgSXQgaXMgY29tcGxlbWVudGVkIGJ5IGEgdXNlcnNwYWNlIGRhZW1vbiwgb3ZzLXZzd2l0Y2hkLFxuICAzMzpcdFx0ICB3aGljaCBpcyBhYmxlIHRvIGFjY2VwdCBjb25maWd1cmF0aW9uIGZyb20gYSB2YXJpZXR5IG9mIHNvdXJjZXMgYW5kXG4gIDM0Olx0XHQgIHRyYW5zbGF0ZSBpdCBpbnRvIHBhY2tldCBwcm9jZXNzaW5nIHJ1bGVzLlxuICAzNTpcdFxuICAzNjpcdFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXG4gIDM3Olx0XHQgIHV0aWxpdGllcy5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICA0MDpcdFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEYXRhcGF0aCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZGF0YXBhdGgub2AgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBPcGVuIHZTd2l0Y2ggYnVpbGQgc3lzdGVtLiBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW47IGl0IHNob3VsZCBjb250YWluIHRoZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBidWlsZGluZyB0aGUgY29yZSBjb21wb25lbnRzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBsYXllci4gVGhpcyBNYWtlZmlsZSBzaG91bGQgb3V0bGluZSB0aGUgY29tbWFuZHMgYW5kIHByZXJlcXVpc2l0ZXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgb2JqZWN0IGZpbGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgY2x1ZXMgaXQgaG9sZHMgYWJvdXQgdGhlIGRhdGFwYXRoIGNvbXBpbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgT3BlbiB2U3dpdGNoLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfT1BFTlZTV0lUQ0gpICYjNDM7PSBvcGVudnN3aXRjaC5vXG4gICA3Olx0XG4gICA4Olx0b3BlbnZzd2l0Y2gteSA6PSBcXFxuICAgOTpcdFx0YWN0aW9ucy5vIFxcXG4gIDEwOlx0XHRkYXRhcGF0aC5vIFxcXG4gIDExOlx0XHRkcF9ub3RpZnkubyBcXFxuICAxMjpcdFx0Zmxvdy5vIFxcXG4gIDEzOlx0XHRmbG93X25ldGxpbmsubyBcXFxuICAxNDpcdFx0Zmxvd190YWJsZS5vIFxcXG4gIDE1Olx0XHRtZXRlci5vIFxcXG4gIDE2Olx0XHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXG4gIDE3Olx0XHR2cG9ydC5vIFxcXG4gIDE4Olx0XHR2cG9ydC1pbnRlcm5hbF9kZXYubyBcXFxuICAxOTpcdFx0dnBvcnQtbmV0ZGV2Lm9cbiAgMjA6XHRcbiAgMjE6XHRpZm5lcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLKSwpXG4gIDIyOlx0b3BlbnZzd2l0Y2gteSAmIzQzOz0gY29ubnRyYWNrLm9cbiAgMjM6XHRlbmRpZlxuICAyNDpcdFxuICAyNTpcdENGTEFHU19vcGVudnN3aXRjaF90cmFjZS5vID0gLUkkKHNyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTIKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogT3BlbiB2U3dpdGNoIE5ldGxpbmsgSW50ZXJmYWNlKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB2ZXJpZnkgaWYgT3BlbiB2U3dpdGNoIGlzIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKHNwZWNpZmljYWxseSB0aGUgYE9WU19EQVRBUEFUSF9GQU1JTFlgLCBgT1ZTX1ZQT1JUX0ZBTUlMWWAsIGFuZCBgT1ZTX0ZMT1dfRkFNSUxZYCBmYW1pbGllcyksIHdoaWNoIFN5emthbGxlciB1c2VzIHRvIGNvbW11bmljYXRlLiBUaGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIHRoZSBkdW1wIGNhbGxiYWNrczogYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAsIHdoaWNoIGNvcnJlc3BvbmQgdG8gdGhlIGBkcF9mbG93X2dlbmxfZmFtaWx5YCBhbmQgYGRwX3Zwb3J0X2dlbmxfZmFtaWx5YCByZXNwZWN0aXZlbHkuIFRoZXNlIGFyZSBlYXNpbHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSB2aWEgbmV0bGluayBkdW1wIHJlcXVlc3RzLgoKRXZhbHVhdGluZyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBPcGVuIHZTd2l0Y2gmIzM5O3MgbmV0bGluayBpbnRlcmZhY2Ugc2VlbXMgdG8gYmUgYSBjb3JlIHN1YnN5c3RlbSBhbmQgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBWTSBlbnZpcm9ubWVudHMsIGJlY2F1c2UgaXQgaXMgcHVyZWx5IHNvZnR3YXJlLWJhc2VkLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGxvY2tpbmcgY29udGV4dCB3aXRoaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAsIGNoYW5naW5nIHRoZSBjb2RlIHBhdGggdGhhdCYjMzk7cyBleGVjdXRlZCBieSB1c2luZyBgbG9jYWxfYmhfZGlzYWJsZWAgLyBgbG9jYWxfYmhfZW5hYmxlYC4gSSYjMzk7bSBnb2luZyB0byBzYXkgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyBgdHJ1ZWAgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSBgb3ZzX2Zsb3dfY21kX2R1bXBgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9kdW1wYC4KCkNoZWNraW5nIHRoZSBgZ2l0IGRpZmZgIGFnYWluLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIEl0JiMzOTtzIGp1c3QgdGhvc2UgdHdvLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhlc2UgYXJlbiYjMzk7dCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QgcGF0aHMsIGJ1dCByYXRoZXIsIHZlcnkgc3BlY2lmaWMgZHVtcCBoYW5kbGVycyBmb3IgT3BlbiB2U3dpdGNoIGZsb3cgYW5kIHZwb3J0IG5ldGxpbmsgY29tbWFuZHMuIFRoZXkmIzM5O3JlIGZlYXR1cmUgc3BlY2lmaWMgYW5kIHJlcHJlc2VudCByZWxldmFudCBlbnRyeXBvaW50cy4KClRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBjaGVjazogSXQgc2VlbXMgYE9QRU5WU1dJVENIYCBpcyB0aGUga2V5LCBhbHRob3VnaCBgSU5FVGAgaXMgYWxzbyBpbXBsaWVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdC4KCkFscmlnaHQsIGRvdWJsZS1jaGVja2luZyBldmVyeXRoaW5nLiAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIGB0cnVlYCwgdGhlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgYXJlIGBbJiMzNDtvdnNfZmxvd19jbWRfZHVtcCYjMzQ7LCAmIzM0O292c192cG9ydF9jbWRfZHVtcCYjMzQ7XWAsIGFuZCB0aGUgJiMzNDtFbmFibGVDb25maWdzJiMzNDsgaXMgYFsmIzM0O09QRU5WU1dJVENIJiMzNDtdYC4gVGhpcyBhbmFseXNpcyBwcm92aWRlcyBhIGNvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QuIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfZmxvd19jbWRfZHVtcCYjMzQ7LAogICAgJiMzNDtvdnNfdnBvcnRfY21kX2R1bXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYm90dG9tLWhhbGYgKEJIKSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCBmbG93IGFuZCB2cG9ydCBkdW1waW5nIGxvb3BzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGhhbmRsZXJzIChvdnNfZmxvd19jbWRfZHVtcCBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCBsb2NraW5nIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19mbG93X2NtZF9kdW1wJiMzNDssCiAgICAmIzM0O292c192cG9ydF9jbWRfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBib3R0b20taGFsZiAoQkgpIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIGZsb3cgYW5kIHZwb3J0IGR1bXBpbmcgbG9vcHMgaW4gT3BlbiB2U3dpdGNoIG5ldGxpbmsgaGFuZGxlcnMgKG92c19mbG93X2NtZF9kdW1wIGFuZCBvdnNfdnBvcnRfY21kX2R1bXApLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0cyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxvY2tpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4YjYyNmQ3N2Y4ZjcyZWU2YzBjOWM3NmY5MzUyODg3ODI3OWUxMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE4OjIwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCA2MzFhMDMxMzZmYTE0Li5hZTJjOTkyNGFlYjA1IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMTUzMyw2ICYjNDM7MTUzMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCX0KIAogCXRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLSZndDt0YWJsZS50aSk7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBzd19mbG93ICpmbG93OwogCQl1MzIgYnVja2V0LCBvYmo7CkBAIC0xNTUyLDYgJiM0MzsxNTUzLDcgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCWNiLSZndDthcmdzWzBdID0gYnVja2V0OwogCQljYi0mZ3Q7YXJnc1sxXSA9IG9iajsKIAl9CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBza2ItJmd0O2xlbjsKIH0KQEAgLTI1NjUsNiAmIzQzOzI1NjcsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlmb3IgKGkgPSBidWNrZXQ7IGkgJmx0OyBEUF9WUE9SVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCB2cG9ydCAqdnBvcnQ7CiAKQEAgLTI1ODUsNiAmIzQzOzI1ODgsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXNraXAgPSAwOwogCX0KIG91dDoKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAljYi0mZ3Q7YXJnc1swXSA9IGk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc2CgkJCQkJCQlvdXRwdXQ6IDc4CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSBQcm9maWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdXp6aW5nIHN0cmF0ZWd5IGZvciB0aGlzIHBhdGNoLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNjZW5hcmlvIHdoZXJlIEtNU0FOIGlzIHRydWx5IG5lY2Vzc2FyeSwgb3IgaWYgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBkZXRlY3RvcnMgd2lsbCBzdWZmaWNlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGFuZCBwaW5wb2ludCB0aGUgYXJlYXMgb2YgZ3JlYXRlc3QgY29uY2VybiBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgoKTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIgd29ya3MgYmVzdCBmb3IgYSBxdWljayBhbmQgdGFyZ2V0ZWQgaW5zcGVjdGlvbi4gSSYjMzk7bGwgbmVlZCBjb250ZXh0LCBzbyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IGZvciB0aGUgY29yZSBvZiB0aGUgZGF0YXBhdGguIEkmIzM5O2xsIGZvY3VzIG9uIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTUzMyBhbmQgMjU2NS4gVGhvc2UgbGluZSBudW1iZXJzIHNlZW0gc2lnbmlmaWNhbnQsIGFuZCB0aGV5IHNob3VsZCBwcm92aWRlIGVub3VnaCBjb250ZXh0IHRvIGdhdWdlIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBCeSBleGFtaW5pbmcgdGhvc2Ugc2VjdGlvbnMgY2xvc2VseSwgSSBzaG91bGQgZ2V0IGEgYmV0dGVyIGZlZWwgZm9yIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgYW5kIHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRpbnQgZXJyO1xuMTUyMTpcdFxuMTUyMjpcdFx0ZXJyID0gZ2VubG1zZ19wYXJzZV9kZXByZWNhdGVkKGNiLVx1MDAzZW5saCwgXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSwgYSxcbjE1MjM6XHRcdFx0XHRcdCAgICAgICBPVlNfRkxPV19BVFRSX01BWCwgZmxvd19wb2xpY3ksIE5VTEwpO1xuMTUyNDpcdFx0aWYgKGVycilcbjE1MjU6XHRcdFx0cmV0dXJuIGVycjtcbjE1MjY6XHRcdHVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dldF91ZmlkX2ZsYWdzKGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7XG4xNTI3Olx0XG4xNTI4Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xNTI5Olx0XHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4KTtcbjE1MzA6XHRcdGlmICghZHApIHtcbjE1MzE6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xNTMyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuMTUzMzpcdFx0fVxuMTUzNDpcdFxuMTUzNTpcdFx0dGkgPSByY3VfZGVyZWZlcmVuY2UoZHAtXHUwMDNldGFibGUudGkpO1xuMTUzNjpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuMTUzNzpcdFx0Zm9yICg7Oykge1xuMTUzODpcdFx0XHRzdHJ1Y3Qgc3dfZmxvdyAqZmxvdztcbjE1Mzk6XHRcdFx0dTMyIGJ1Y2tldCwgb2JqO1xuMTU0MDpcdFxuMTU0MTpcdFx0XHRidWNrZXQgPSBjYi1cdTAwM2VhcmdzWzBdO1xuMTU0MjpcdFx0XHRvYmogPSBjYi1cdTAwM2VhcmdzWzFdO1xuMTU0MzpcdFx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dCh0aSwgXHUwMDI2YnVja2V0LCBcdTAwMjZvYmopO1xuMTU0NDpcdFx0XHRpZiAoIWZsb3cpXG4xNTQ1Olx0XHRcdFx0YnJlYWs7XG4xNTQ2Olx0XG4xNTQ3Olx0XHRcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXHUwMDNlZHBfaWZpbmRleCwgc2tiLFxuMTU0ODpcdFx0XHRcdFx0XHQgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMTU0OTpcdFx0XHRcdFx0XHQgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBOTE1fRl9NVUxUSSxcbjE1NTA6XHRcdFx0XHRcdFx0ICAgT1ZTX0ZMT1dfQ01EX0dFVCwgdWZpZF9mbGFncykgXHUwMDNjIDApXG4xNTUxOlx0XHRcdFx0YnJlYWs7XG4xNTUyOlx0XG4xNTUzOlx0XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBidWNrZXQ7XG4xNTU0Olx0XHRcdGNiLVx1MDAzZWFyZ3NbMV0gPSBvYmo7XG4xNTU1Olx0XHR9XG4xNTU2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE1NTc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTU1ODpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4xNTU5Olx0fVxuMTU2MDpcdFxuMTU2MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmbG93X3BvbGljeVtPVlNfRkxPV19BVFRSX01BWCAmIzQzOyAxXSA9IHtcbjE1NjI6XHRcdFtPVlNfRkxPV19BVFRSX0tFWV0gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2MzpcdFx0W09WU19GTE9XX0FUVFJfTUFTS10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2NDpcdFx0W09WU19GTE9XX0FUVFJfQUNUSU9OU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuMTU2NTpcdFx0W09WU19GTE9XX0FUVFJfQ0xFQVJdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4xNTY2Olx0XHRbT1ZTX0ZMT1dfQVRUUl9QUk9CRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbjE1Njc6XHRcdFtPVlNfRkxPV19BVFRSX1VGSURdID0geyAudHlwZSA9IE5MQV9VTlNQRUMsIC5sZW4gPSAxIH0sXG4xNTY4Olx0XHRbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4xNTY5Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU1NTpcdH1cbjI1NTY6XHRcbjI1NTc6XHRzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTU4Olx0e1xuMjU1OTpcdFx0c3RydWN0IG92c19oZWFkZXIgKm92c19oZWFkZXIgPSBnZW5sbXNnX2RhdGEobmxtc2dfZGF0YShjYi1cdTAwM2VubGgpKTtcbjI1NjA6XHRcdHN0cnVjdCBkYXRhcGF0aCAqZHA7XG4yNTYxOlx0XHRpbnQgYnVja2V0ID0gY2ItXHUwMDNlYXJnc1swXSwgc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4yNTYyOlx0XHRpbnQgaSwgaiA9IDA7XG4yNTYzOlx0XG4yNTY0Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNTY1Olx0XHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4KTtcbjI1NjY6XHRcdGlmICghZHApIHtcbjI1Njc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yNTY4Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMjU2OTpcdFx0fVxuMjU3MDpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuMjU3MTpcdFx0Zm9yIChpID0gYnVja2V0OyBpIFx1MDAzYyBEUF9WUE9SVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KSB7XG4yNTcyOlx0XHRcdHN0cnVjdCB2cG9ydCAqdnBvcnQ7XG4yNTczOlx0XG4yNTc0Olx0XHRcdGogPSAwO1xuMjU3NTpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodnBvcnQsIFx1MDAyNmRwLVx1MDAzZXBvcnRzW2ldLCBkcF9oYXNoX25vZGUpIHtcbjI1NzY6XHRcdFx0XHRpZiAoaiBcdTAwM2U9IHNraXAgXHUwMDI2XHUwMDI2XG4yNTc3Olx0XHRcdFx0ICAgIG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCBza2IsXG4yNTc4Olx0XHRcdFx0XHRcdFx0ICAgIHNvY2tfbmV0KHNrYi1cdTAwM2VzayksXG4yNTc5Olx0XHRcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4yNTgwOlx0XHRcdFx0XHRcdFx0ICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsXG4yNTgxOlx0XHRcdFx0XHRcdFx0ICAgIE5MTV9GX01VTFRJLFxuMjU4MjpcdFx0XHRcdFx0XHRcdCAgICBPVlNfVlBPUlRfQ01EX0dFVCxcbjI1ODM6XHRcdFx0XHRcdFx0XHQgICAgR0ZQX0FUT01JQykgXHUwMDNjIDApXG4yNTg0Olx0XHRcdFx0XHRnb3RvIG91dDtcbjI1ODU6XHRcbjI1ODY6XHRcdFx0XHRqJiM0MzsmIzQzOztcbjI1ODc6XHRcdFx0fVxuMjU4ODpcdFx0XHRza2lwID0gMDtcbjI1ODk6XHRcdH1cbjI1OTA6XHRvdXQ6XG4yNTkxOlx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjI1OTI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjU5MzpcdFxuMjU5NDpcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4yNTk1Olx0XHRjYi1cdTAwM2VhcmdzWzFdID0gajtcbjI1OTY6XHRcbjI1OTc6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMjU5ODpcdH1cbjI1OTk6XHRcbjI2MDA6XHRzdGF0aWMgdm9pZCBvdnNfZHBfbWFza3NfcmViYWxhbmNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjI2MDE6XHR7XG4yNjAyOlx0XHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3ZzX25ldCxcbjI2MDM6XHRcdFx0XHRcdFx0ICAgICAgIG1hc2tzX3JlYmFsYW5jZS53b3JrKTtcbjI2MDQ6XHRcdHN0cnVjdCBkYXRhcGF0aCAqZHA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTUKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEtNU0FOIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aHkgdGhlc2UgYGxvY2FsX2JoX2Rpc2FibGUoKWAgYW5kIGBsb2NhbF9iaF9lbmFibGUoKWAgY2FsbHMgd2VyZSBpbnRyb2R1Y2VkIGFyb3VuZCB0aGUgbG9vcHMgaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGBvdnNfZmxvd19jbWRfZmlsbF9pbmZvYCwgYG92c192cG9ydF9jbWRfZmlsbF9pbmZvYCwgcG90ZW50aWFsbHkgc3RhdHMgcmVhZHMsIG9yIHBlcmhhcHMgdGhlIFJDVSBpdGVyYXRpb24gaXRzZWxmLCBvciBtYXliZSBldmVuIHJoYXNodGFibGUvcmhhc2h0YWJsZV93YWxrIGludGVyYWN0aW9ucywgcGVyLWNwdSBzdGF0cywgb3IgZXZlbiBsb2NrZGVwIGFzc2VydGlvbnMuIEl0IHNjcmVhbXMgc29mdGlycSBjb250ZXh0LCBib3R0b20gaGFsZiBpbnRlcmFjdGlvbiwgb3Igc29tZSBraW5kIG9mIGNvbmN1cnJlbmN5IGlzc3VlIHRoYXQgdGhpcyBhaW1zIHRvIHNvbHZlLgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgZnVuY3Rpb24gYXBwZWFycyB0byBkaXNhYmxlIGFuZCBlbmFibGUgbG9jYWwgYm90dG9tIGhhbHZlcyBhcm91bmQgdGhlc2UgbG9vcHMgdGhhdCBhcmUgZHVtcGluZyBlbnRyaWVzIHRvIHRoZSBuZXRsaW5rIGBza2JgLiBTbywgYSBxdWljayBzYW5pdHkgY2hlY2s6IGRvZXMgdGhpcyBjaGFuZ2UgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/CgpMb29raW5nIGNsb3NlciwgdGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBjcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBkYXRhIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBob3cgd2UgY29weSBidWZmZXJzLCBsZW5ndGhzLCBvciBzdHJ1Y3RzLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBrZXJuZWwtdG8tdXNlciBjb3B5IHN0cnVjdHVyZXMgYXJlIHRvdWNoZWQuIFRoaXMgaXMgcHVyZWx5IGFib3V0IGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHNvZnRpcnEgY29udGV4dCBzeW5jaHJvbml6YXRpb24uIEFueSBuZXcgaXNzdWVzIHRoYXQgcG9wIHVwIGhlcmUgd291bGQgYmUgaW4gdGhlIHJlYWxtIG9mIGxvY2tpbmcgcHJvYmxlbXMsIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxhdGVuY3kgY29uY2VybnMsIG9yLCBvZiBjb3Vyc2UsIHByb2JsZW1hdGljIHNvZnRpcnEgY29udGV4dCBpc3N1ZXMuIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzIGFyZSB0aGUgcmlnaHQgdG9vbHMgdG8gZmluZCB0aGVzZS4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhhdCBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4KCkxldCBtZSByZWl0ZXJhdGUgdGhhdCBhbmQgZW5zdXJlIEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSByZXF1aXJlbWVudHMuCgpgTmVlZHNLTVNBTmA6IGBmYWxzZWAuCmBLTVNBTlJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhZGRzIGBsb2NhbF9iaF9kaXNhYmxlKClgIGFuZCBgbG9jYWxfYmhfZW5hYmxlKClgIGNhbGxzIGFyb3VuZCBmbG93IGFuZCB2cG9ydCBkdW1wIGl0ZXJhdGlvbiBsb29wcyBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGlzIG1vZGlmaWVzIHNvZnRpcnEgZGlzYWJsaW5nL2xvY2tpbmcgY29udGV4dCBkdXJpbmcgbmV0bGluayBkdW1wcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBpdCBkb2VzIG5vdCBtb2RpZnkgYW55IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIHNpemVzIG9yIGRhdGEgY29weWluZyBsb2dpYywgYW5kIHNvLCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIG1lbW9yeS4gQW55IGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBleGVjdXRpb24gY29udGV4dCBidWdzLCBzdWNoIGFzIHNsZWVwaW5nIHdpdGggQkggZGlzYWJsZWQgb3IgbG9ja2RlcCB3YXJuaW5ncywgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQL2tlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGh1cywgS01TQU4gaXMgbm90IG5lZWRlZC4KClJpZ2h0LCBJJiMzOTttIGhhcHB5IHdpdGggdGhhdCBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGxvY2FsX2JoX2Rpc2FibGUoKSBhbmQgbG9jYWxfYmhfZW5hYmxlKCkgYXJvdW5kIHRoZSBkdW1wIGxvb3BzIGluIG92c19mbG93X2NtZF9kdW1wKCkgYW5kIG92c192cG9ydF9jbWRfZHVtcCgpIHdpdGhpbiBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyB0byBoYW5kbGUgYm90dG9tLWhhbGYgZXhlY3V0aW9uIGNvbnRleHQgYW5kIHN5bmNocm9uaXphdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBhbmQgZG9lcyBub3QgdG91Y2ggZGF0YSBzZXJpYWxpemF0aW9uIG9yIGtlcm5lbC10by11c2VyIGNvcHlpbmcgbG9naWMuIENvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNvbnRleHQgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjA6NTYuODIyMjg2NDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NDcyMzY1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfZmxvd19jbWRfZHVtcFwiLFxuICAgIFwib3ZzX3Zwb3J0X2NtZF9kdW1wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBib3R0b20taGFsZiAoQkgpIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIGZsb3cgYW5kIHZwb3J0IGR1bXBpbmcgbG9vcHMgaW4gT3BlbiB2U3dpdGNoIG5ldGxpbmsgaGFuZGxlcnMgKG92c19mbG93X2NtZF9kdW1wIGFuZCBvdnNfdnBvcnRfY21kX2R1bXApLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgc29ja2V0cyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IGxvY2tpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIwOjU2LjgyMjI5MTE1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MTk1NDEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY4YjYyNmQ3N2Y4ZjcyZWU2YzBjOWM3NmY5MzUyODg3ODI3OWUxMDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxODoyMDo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggNjMxYTAzMTM2ZmExNC4uYWUyYzk5MjRhZWIwNSAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTE1MzMsNiArMTUzMyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHR9XFxuIFxcbiBcXHR0aSA9IHJjdV9kZXJlZmVyZW5jZShkcC1cXHUwMDNldGFibGUudGkpO1xcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdGZvciAoOzspIHtcXG4gXFx0XFx0c3RydWN0IHN3X2Zsb3cgKmZsb3c7XFxuIFxcdFxcdHUzMiBidWNrZXQsIG9iajtcXG5AQCAtMTU1Miw2ICsxNTUzLDcgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gYnVja2V0O1xcbiBcXHRcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IG9iajtcXG4gXFx0fVxcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4gfVxcbkBAIC0yNTY1LDYgKzI1NjcsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdGZvciAoaSA9IGJ1Y2tldDsgaSBcXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCB2cG9ydCAqdnBvcnQ7XFxuIFxcbkBAIC0yNTg1LDYgKzI1ODgsNyBAQCBzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdHNraXAgPSAwO1xcbiBcXHR9XFxuIG91dDpcXG4rXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMDo1OC4yODQ5NDYzMzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM3MTgzOTQxNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2Zsb3dfY21kX2R1bXBcIixcbiAgICBcIm92c192cG9ydF9jbWRfZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJvdHRvbS1oYWxmIChCSCkgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcGluZyBsb29wcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBoYW5kbGVycyAob3ZzX2Zsb3dfY21kX2R1bXAgYW5kIG92c192cG9ydF9jbWRfZHVtcCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOGI2MjZkNzdmOGY3MmVlNmMwYzljNzZmOTM1Mjg4NzgyNzllMTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxODoyMDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IDYzMWEwMzEzNmZhMTQuLmFlMmM5OTI0YWViMDUgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0xNTMzLDYgKzE1MzMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdH1cbiBcbiBcdHRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLVx1MDAzZXRhYmxlLnRpKTtcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdGZvciAoOzspIHtcbiBcdFx0c3RydWN0IHN3X2Zsb3cgKmZsb3c7XG4gXHRcdHUzMiBidWNrZXQsIG9iajtcbkBAIC0xNTUyLDYgKzE1NTMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGJ1Y2tldDtcbiBcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG9iajtcbiBcdH1cbitcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG5AQCAtMjU2NSw2ICsyNTY3LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRmb3IgKGkgPSBidWNrZXQ7IGkgXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XG4gXHRcdHN0cnVjdCB2cG9ydCAqdnBvcnQ7XG4gXG5AQCAtMjU4NSw2ICsyNTg4LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRza2lwID0gMDtcbiBcdH1cbiBvdXQ6XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMDo1OC4yODQ5NDgyOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzAzMTM3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldyBhbmQgc29tZSBpbnN0cnVjdGlvbnMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBnZXQgaGFuZHMtb24uIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzIOKAkyB0aGUgZGlmZi4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byByZWFkIHRoZSBjb2RlIGludm9sdmVkLiBBZnRlciB0aGF0LCBJIHdpbGwgbmVlZCB0byBnZXQgZmFtaWxpYXIgd2l0aCB0aGUgY29kZWJhc2UuXG5cbk15IG5leHQgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHRob3NlIHNwZWNpZmljIGZpbGVzIGFuZCBsaW5lIG51bWJlcnMgdGhlIGluc3RydWN0aW9ucyBwb2ludCBvdXQsIHNwZWNpZmljYWxseSBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIGFyb3VuZCB0aGUgY3JpdGljYWwgc2VjdGlvbnMuIEknbGwgcHJvYmFibHkgcmVhY2ggZm9yIGEgY29tbWFuZCBsaW5lIHRvIG1ha2UgdGhpcyBlZmZpY2llbnQuIEknbSB0aGlua2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyIGdldHMgbWUgdGhlcmUgdGhlIGZhc3Rlc3QuIEkgd2FudCB0byBzZWUgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIGF0IGxpbmVzIDE1MzMgYW5kIDI1NjUgYW5kIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dCBpbiByZWxhdGlvbiB0byB0aGUgZGlmZi4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjQsIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjAzLjk4ODA4ODkyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTIwOlxcdFxcdGludCBlcnI7XFxuMTUyMTpcXHRcXG4xNTIyOlxcdFxcdGVyciA9IGdlbmxtc2dfcGFyc2VfZGVwcmVjYXRlZChjYi1cXHUwMDNlbmxoLCBcXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSwgYSxcXG4xNTIzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBPVlNfRkxPV19BVFRSX01BWCwgZmxvd19wb2xpY3ksIE5VTEwpO1xcbjE1MjQ6XFx0XFx0aWYgKGVycilcXG4xNTI1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTUyNjpcXHRcXHR1ZmlkX2ZsYWdzID0gb3ZzX25sYV9nZXRfdWZpZF9mbGFncyhhW09WU19GTE9XX0FUVFJfVUZJRF9GTEFHU10pO1xcbjE1Mjc6XFx0XFxuMTUyODpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTUyOTpcXHRcXHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgpO1xcbjE1MzA6XFx0XFx0aWYgKCFkcCkge1xcbjE1MzE6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTUzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xNTMzOlxcdFxcdH1cXG4xNTM0OlxcdFxcbjE1MzU6XFx0XFx0dGkgPSByY3VfZGVyZWZlcmVuY2UoZHAtXFx1MDAzZXRhYmxlLnRpKTtcXG4xNTM2OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4xNTM3OlxcdFxcdGZvciAoOzspIHtcXG4xNTM4OlxcdFxcdFxcdHN0cnVjdCBzd19mbG93ICpmbG93O1xcbjE1Mzk6XFx0XFx0XFx0dTMyIGJ1Y2tldCwgb2JqO1xcbjE1NDA6XFx0XFxuMTU0MTpcXHRcXHRcXHRidWNrZXQgPSBjYi1cXHUwMDNlYXJnc1swXTtcXG4xNTQyOlxcdFxcdFxcdG9iaiA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbjE1NDM6XFx0XFx0XFx0ZmxvdyA9IG92c19mbG93X3RibF9kdW1wX25leHQodGksIFxcdTAwMjZidWNrZXQsIFxcdTAwMjZvYmopO1xcbjE1NDQ6XFx0XFx0XFx0aWYgKCFmbG93KVxcbjE1NDU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTU0NjpcXHRcXG4xNTQ3OlxcdFxcdFxcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgsIHNrYixcXG4xNTQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbjE1NDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBOTE1fRl9NVUxUSSxcXG4xNTUwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9WU19GTE9XX0NNRF9HRVQsIHVmaWRfZmxhZ3MpIFxcdTAwM2MgMClcXG4xNTUxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1NTI6XFx0XFxuMTU1MzpcXHRcXHRcXHRjYi1cXHUwMDNlYXJnc1swXSA9IGJ1Y2tldDtcXG4xNTU0OlxcdFxcdFxcdGNiLVxcdTAwM2VhcmdzWzFdID0gb2JqO1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMTU1NzpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xNTU4OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4xNTU5OlxcdH1cXG4xNTYwOlxcdFxcbjE1NjE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZsb3dfcG9saWN5W09WU19GTE9XX0FUVFJfTUFYICsgMV0gPSB7XFxuMTU2MjpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9LRVldID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4xNTYzOlxcdFxcdFtPVlNfRkxPV19BVFRSX01BU0tdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4xNTY0OlxcdFxcdFtPVlNfRkxPV19BVFRSX0FDVElPTlNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4xNTY1OlxcdFxcdFtPVlNfRkxPV19BVFRSX0NMRUFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbjE1NjY6XFx0XFx0W09WU19GTE9XX0FUVFJfUFJPQkVdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuMTU2NzpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9VRklEXSA9IHsgLnR5cGUgPSBOTEFfVU5TUEVDLCAubGVuID0gMSB9LFxcbjE1Njg6XFx0XFx0W09WU19GTE9XX0FUVFJfVUZJRF9GTEFHU10gPSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbjE1Njk6XFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MDMuOTg4MzMyNjY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NjA6XFx0XFx0c3RydWN0IGRhdGFwYXRoICpkcDtcXG4yNTYxOlxcdFxcdGludCBidWNrZXQgPSBjYi1cXHUwMDNlYXJnc1swXSwgc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbjI1NjI6XFx0XFx0aW50IGksIGogPSAwO1xcbjI1NjM6XFx0XFxuMjU2NDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjU2NTpcXHRcXHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgpO1xcbjI1NjY6XFx0XFx0aWYgKCFkcCkge1xcbjI1Njc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjU2ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yNTY5OlxcdFxcdH1cXG4yNTcwOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4yNTcxOlxcdFxcdGZvciAoaSA9IGJ1Y2tldDsgaSBcXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XFxuMjU3MjpcXHRcXHRcXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0O1xcbjI1NzM6XFx0XFxuMjU3NDpcXHRcXHRcXHRqID0gMDtcXG4yNTc1OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2cG9ydCwgXFx1MDAyNmRwLVxcdTAwM2Vwb3J0c1tpXSwgZHBfaGFzaF9ub2RlKSB7XFxuMjU3NjpcXHRcXHRcXHRcXHRpZiAoaiBcXHUwMDNlPSBza2lwIFxcdTAwMjZcXHUwMDI2XFxuMjU3NzpcXHRcXHRcXHRcXHQgICAgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHNrYixcXG4yNTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG4yNTc5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4yNTgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsXFxuMjU4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgTkxNX0ZfTVVMVEksXFxuMjU4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgT1ZTX1ZQT1JUX0NNRF9HRVQsXFxuMjU4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0FUT01JQykgXFx1MDAzYyAwKVxcbjI1ODQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU4NTpcXHRcXG4yNTg2OlxcdFxcdFxcdFxcdGorKztcXG4yNTg3OlxcdFxcdFxcdH1cXG4yNTg4OlxcdFxcdFxcdHNraXAgPSAwO1xcbjI1ODk6XFx0XFx0fVxcbjI1OTA6XFx0b3V0OlxcbjI1OTE6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMjU5MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNTkzOlxcdFxcbjI1OTQ6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbjI1OTU6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMV0gPSBqO1xcbjI1OTY6XFx0XFxuMjU5NzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMjU5ODpcXHR9XFxuMjU5OTpcXHRcXG4yNjAwOlxcdHN0YXRpYyB2b2lkIG92c19kcF9tYXNrc19yZWJhbGFuY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjI2MDE6XFx0e1xcbjI2MDI6XFx0XFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG92c19uZXQsXFxuMjYwMzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbWFza3NfcmViYWxhbmNlLndvcmspO1xcbjI2MDQ6XFx0XFx0c3RydWN0IGRhdGFwYXRoICpkcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MDMuOTg4NDg2NDU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxOTcxODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBsb2NhbF9iaF9kaXNhYmxlKClgIGFuZCBgbG9jYWxfYmhfZW5hYmxlKClgIGNhbGxzIHdpdGhpbiBgb3ZzX2Zsb3dfY21kX2R1bXBgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9kdW1wYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2h5IGFyZSB3ZSBkaXNhYmxpbmcgYm90dG9tIGhhbHZlcyBoZXJlP1wiIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBiZWNhdXNlIHNvbWV0aGluZyB3aXRoaW4gZWl0aGVyIGBvdnNfZmxvd19jbWRfZmlsbF9pbmZvYCBvciBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gIOKAkyBvciBwZXJoYXBzIGEgZnVuY3Rpb24gKnRoZXkqIGNhbGwg4oCTIGlzIGNhdXNpbmcgY29udGVudGlvbiBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGFjY2Vzc2luZyBwZXItQ1BVIHN0YXRpc3RpY3Mgb3IgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBsb2NrZGVwIGFzc2VydGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGB1NjRfc3RhdHNgLCBSQ1UgdXNhZ2UsIG9yIGdlbmVyYWwgcGVyLUNQVSBkYXRhIGFjY2VzcyB0aGF0IHJlcXVpcmVzIGJvdHRvbSBoYWx2ZXMgdG8gYmUgZGlzYWJsZWQgZm9yIHNhZmUgb3BlcmF0aW9uLiBNYXliZSB0aGVyZSdzIGEgYHU2NF9zdGF0c19mZXRjaF9iZWdpbmAgY2FsbCBpbiB0aGVyZSB0aGF0IG5lY2Vzc2l0YXRlcyB0aGUgQkggZGlzYWJsZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiB0aG9zZSB0d28gZmlsbCBmdW5jdGlvbnMgaW4gdGhlIGBuZXQvb3BlbnZzd2l0Y2gvYCBkaXJlY3RvcnkuIFRpbWUgdG8gZ3JlcCBhbmQgZGl2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDgwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MDYuNjA4MjA3NzU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTQ2MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19mbG93X2NtZF9maWxsX2luZm98b3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTg2Nj1zdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX2FjdGlvbnMoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05MDUtLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6OTA2OnN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgaW50IGRwX2lmaW5kZXgsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTA3LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTk3Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm92c19mbG93X2NtZF9idWlsZF9pbmZvKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtOTg5LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjk5MDpcXHRyZXR2YWwgPSBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIGRwX2lmaW5kZXgsIHNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05OTEtXFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSwgMCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEwMDA9c3RhdGljIGludCBvdnNfZmxvd19jbWRfbmV3KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMDk0LVxcdFxcdGlmICh1bmxpa2VseShyZXBseSkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMDk1OlxcdFxcdFxcdGVycm9yID0gb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhuZXdfZmxvdyxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMDk2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBvdnNfaGVhZGVyLVxcdTAwM2VkcF9pZmluZGV4LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTE1OS1cXHRcXHRpZiAodW5saWtlbHkocmVwbHkpKSB7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTE2MDpcXHRcXHRcXHRlcnJvciA9IG92c19mbG93X2NtZF9maWxsX2luZm8oZmxvdyxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMTYxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBvdnNfaGVhZGVyLVxcdTAwM2VkcF9pZmluZGV4LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3MD1zdGF0aWMgaW50IG92c19mbG93X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMzAtXFx0XFx0aWYgKHVubGlrZWx5KHJlcGx5KSkge1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMzE6XFx0XFx0XFx0ZXJyb3IgPSBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMzMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgb3ZzX2hlYWRlci1cXHUwMDNlZHBfaWZpbmRleCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE0MzI9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDg2LVxcdGlmIChsaWtlbHkocmVwbHkpKSB7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTQ4NzpcXHRcXHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ4OC1cXHRcXHRcXHRcXHRcXHQgICAgIHJlcGx5LCBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ5NS1cXHR9XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTQ5NjpcXHQvKiBSZW1vdmFsIGhhcyB0byBoYXBwZW4gYWZ0ZXIgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbygpLCBhcyBpdCB1c2VzXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ5Ny1cXHQgKiB0aGUgZmxvdy1cXHUwMDNlbWFzayB0aGF0IGNhbiBiZSBzY2hlZHVsZWQgdG8gYmUgZnJlZWQgYnkgdGhlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNTEzPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTU0Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNTQ3OlxcdFxcdGlmIChvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZsb3csIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgsIHNrYixcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTQ4LVxcdFxcdFxcdFxcdFxcdCAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjE0MD1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGRwX2RhdGFwYXRoX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxNTYtLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjE1NzpzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjE1OC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMjQ0PXN0cnVjdCBza19idWZmICpvdnNfdnBvcnRfY21kX2J1aWxkX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjI1My1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyMjU0OlxcdHJldHZhbCA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCBza2IsIG5ldCwgcG9ydGlkLCBzZXEsIDAsIGNtZCxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMjU1LVxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMzI9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjM5NS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyMzk2OlxcdGVyciA9IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHZwb3J0LCByZXBseSwgZ2VubF9pbmZvX25ldChpbmZvKSxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzk3LVxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZXNuZF9wb3J0aWQsIGluZm8tXFx1MDAzZXNuZF9zZXEsIDAsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDE5PXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NTUtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1NjpcXHRlcnIgPSBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyh2cG9ydCwgcmVwbHksIGdlbmxfaW5mb19uZXQoaW5mbyksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ1Ny1cXHRcXHRcXHRcXHQgICAgICBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLCAwLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ3MT1zdGF0aWMgaW50IG92c192cG9ydF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDk1LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI0OTY6XFx0ZXJyID0gb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHJlcGx5LCBnZW5sX2luZm9fbmV0KGluZm8pLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0OTctXFx0XFx0XFx0XFx0ICAgICAgaW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSwgMCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI1MjY9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjU0Mi1cXHRcXHRnb3RvIGV4aXRfdW5sb2NrX2ZyZWU7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjU0MzpcXHRlcnIgPSBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyh2cG9ydCwgcmVwbHksIGdlbmxfaW5mb19uZXQoaW5mbyksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjU0NC1cXHRcXHRcXHRcXHQgICAgICBpbmZvLVxcdTAwM2VzbmRfcG9ydGlkLCBpbmZvLVxcdTAwM2VzbmRfc2VxLCAwLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjU1Nz1zdGF0aWMgaW50IG92c192cG9ydF9jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNTc2LVxcdFxcdFxcdGlmIChqIFxcdTAwM2U9IHNraXAgXFx1MDAyNlxcdTAwMjZcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNTc3OlxcdFxcdFxcdCAgICBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mbyh2cG9ydCwgc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI1NzgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTowNi42NTk3NTk3MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDAzMDg4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mb2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2AqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSB0d28gZnVuY3Rpb25zLCBgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mb2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2AsIGFyZSBhY3R1YWxseSBkb2luZy4gVGltZSB0byBjcmFjayB0aGVtIG9wZW4gYW5kIHNlZSB3aGF0IHRoZXkncmUgYWxsIGFib3V0LiBMZXQncyByZWFkIHRocm91Z2ggdGhlIGNvZGUgb2YgYm90aCBmdW5jdGlvbnMgY2FyZWZ1bGx5IGFuZCBtZXRob2RpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGlucHV0cywgb3V0cHV0cywgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCBhbnkga2V5IGFsZ29yaXRobXMgb3IgbG9naWMgd2l0aGluIHRoZW0uIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjE1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MDguOTYwMDcwMzUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDU6XFx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxuIDkwNjpcXHRzdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csIGludCBkcF9pZmluZGV4LFxcbiA5MDc6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLFxcbiA5MDg6XFx0XFx0XFx0XFx0XFx0ICB1MzIgc2VxLCB1MzIgZmxhZ3MsIHU4IGNtZCwgdTMyIHVmaWRfZmxhZ3MpXFxuIDkwOTpcXHR7XFxuIDkxMDpcXHRcXHRjb25zdCBpbnQgc2tiX29yaWdfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIDkxMTpcXHRcXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX2hlYWRlcjtcXG4gOTEyOlxcdFxcdGludCBlcnI7XFxuIDkxMzpcXHRcXG4gOTE0OlxcdFxcdG92c19oZWFkZXIgPSBnZW5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBcXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSxcXG4gOTE1OlxcdFxcdFxcdFxcdFxcdCBmbGFncywgY21kKTtcXG4gOTE2OlxcdFxcdGlmICghb3ZzX2hlYWRlcilcXG4gOTE3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDkxODpcXHRcXG4gOTE5OlxcdFxcdG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXggPSBkcF9pZmluZGV4O1xcbiA5MjA6XFx0XFxuIDkyMTpcXHRcXHRlcnIgPSBvdnNfbmxhX3B1dF9pZGVudGlmaWVyKGZsb3csIHNrYik7XFxuIDkyMjpcXHRcXHRpZiAoZXJyKVxcbiA5MjM6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gOTI0OlxcdFxcbiA5MjU6XFx0XFx0aWYgKHNob3VsZF9maWxsX2tleShcXHUwMDI2Zmxvdy1cXHUwMDNlaWQsIHVmaWRfZmxhZ3MpKSB7XFxuIDkyNjpcXHRcXHRcXHRlcnIgPSBvdnNfbmxhX3B1dF9tYXNrZWRfa2V5KGZsb3csIHNrYik7XFxuIDkyNzpcXHRcXHRcXHRpZiAoZXJyKVxcbiA5Mjg6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gOTI5OlxcdFxcdH1cXG4gOTMwOlxcdFxcbiA5MzE6XFx0XFx0aWYgKHNob3VsZF9maWxsX21hc2sodWZpZF9mbGFncykpIHtcXG4gOTMyOlxcdFxcdFxcdGVyciA9IG92c19ubGFfcHV0X21hc2soZmxvdywgc2tiKTtcXG4gOTMzOlxcdFxcdFxcdGlmIChlcnIpXFxuIDkzNDpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5MzU6XFx0XFx0fVxcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9zdGF0cyhmbG93LCBza2IpO1xcbiA5Mzg6XFx0XFx0aWYgKGVycilcXG4gOTM5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDk0MDpcXHRcXG4gOTQxOlxcdFxcdGlmIChzaG91bGRfZmlsbF9hY3Rpb25zKHVmaWRfZmxhZ3MpKSB7XFxuIDk0MjpcXHRcXHRcXHRlcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9hY3Rpb25zKGZsb3csIHNrYiwgc2tiX29yaWdfbGVuKTtcXG4gOTQzOlxcdFxcdFxcdGlmIChlcnIpXFxuIDk0NDpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA5NDU6XFx0XFx0fVxcbiA5NDY6XFx0XFxuIDk0NzpcXHRcXHRnZW5sbXNnX2VuZChza2IsIG92c19oZWFkZXIpO1xcbiA5NDg6XFx0XFx0cmV0dXJuIDA7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdGVycm9yOlxcbiA5NTE6XFx0XFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBvdnNfaGVhZGVyKTtcXG4gOTUyOlxcdFxcdHJldHVybiBlcnI7XFxuIDk1MzpcXHR9XFxuIDk1NDpcXHRcXG4gOTU1OlxcdC8qIE1heSBub3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay4gKi9cXG4gOTU2OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3dfY21kX2FsbG9jX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqYWN0cyxcXG4gOTU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19pZCAqc2ZpZCxcXG4gOTU4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbiA5NTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYWx3YXlzLFxcbiA5NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVpbnQzMl90IHVmaWRfZmxhZ3MpXFxuIDk2MTpcXHR7XFxuIDk2MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA5NjM6XFx0XFx0c2l6ZV90IGxlbjtcXG4gOTY0OlxcdFxcbiA5NjU6XFx0XFx0aWYgKCFhbHdheXMgXFx1MDAyNlxcdTAwMjYgIW92c19tdXN0X25vdGlmeShcXHUwMDI2ZHBfZmxvd19nZW5sX2ZhbWlseSwgaW5mbywgMCkpXFxuIDk2NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gOTY3OlxcdFxcbiA5Njg6XFx0XFx0bGVuID0gb3ZzX2Zsb3dfY21kX21zZ19zaXplKGFjdHMsIHNmaWQsIHVmaWRfZmxhZ3MpO1xcbiA5Njk6XFx0XFx0c2tiID0gZ2VubG1zZ19uZXcobGVuLCBHRlBfS0VSTkVMKTtcXG4gOTcwOlxcdFxcdGlmICghc2tiKVxcbiA5NzE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdHJldHVybiBza2I7XFxuIDk3NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjA4Ljk2MTIzNjY2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjAyMDM3MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBGaXJzdCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AgYW5kIGBvdnNfdnBvcnRfY21kX2ZpbGxfaW5mb2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IHRoZXkncmUgcmVsYXRlZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZW0gaW5kaXZpZHVhbGx5IGZpcnN0IHRvIHNlZSB0aGUgY29ubmVjdGlvbi4gQWxyaWdodCwgbGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IuIEkgYmV0IGl0J3MgaW52b2x2ZWQgaW4gZ2F0aGVyaW5nIHN0YXRzIG9uIHRoZSBmbG93cywgbGlrZWx5IGZvciB0aGUgZGF0YXBhdGgsIGFuZCBwcm9iYWJseSBmaWxscyBhIHN0cnVjdHVyZSB3aXRoIHRob3NlIHJlc3VsdHMgdG8gYmUgcmV0dXJuZWQgb3IgcHJvY2Vzc2VkIGVsc2V3aGVyZS4gSSdtIGdvaW5nIHRvIGRpZyBkZWVwZXIgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCdzIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkyNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTAuNTYzMjc2OTQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM5OTUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZmxvd19jbWRfZmlsbF9zdGF0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9ODA1PXN0YXRpYyBzaXplX3Qgb3ZzX2Zsb3dfY21kX21zZ19zaXplKGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy04MzctLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6ODM4OnN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHMoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtODM5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz05MDY9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LCBpbnQgZHBfaWZpbmRleCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTkzNi1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo5Mzc6XFx0ZXJyID0gb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHMoZmxvdywgc2tiKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy05MzgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTAuNjA5Njg1OTk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMDM3OTA0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYmFzZWQgb24gYSBxdWljayBnbGFuY2U6XG5cbioqRGl2aW5nIGludG8gT3BlbiB2U3dpdGNoIERhdGFwYXRoIFN0YXRzIGFuZCBJbmZvcm1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHNgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGVzZSBhcmUgKmNyaXRpY2FsKiBmb3IgYW55IGtpbmQgb2YgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBvciBuZXR3b3JrIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBPVlMgZGF0YXBhdGguIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IG9uZSBoYW5kbGVzIHRoZSBmaWxsaW5nIGluIG9mIGZsb3cgc3RhdGlzdGljcywgd2hpbGUgdGhlIG90aGVyIGxpa2VseSBmb2N1c2VzIG9uIHZpcnR1YWwgcG9ydCAodnBvcnQpIGluZm9ybWF0aW9uLlxuXG5JJ2QgZXhwZWN0IGBvdnNfZmxvd19jbWRfZmlsbF9zdGF0c2AgdG8gYmUgdGhlIGd1dHMgb2YgaG93IHdlIGdldCBmbG93IHRhYmxlIGNvdW50ZXJzLiBUaGlzIHdvdWxkIGludm9sdmUgZGlnZ2luZyB0aHJvdWdoIHRoZSBkYXRhcGF0aCdzIGludGVybmFsIHN0cnVjdHVyZXMgdG8gcmV0cmlldmUgcGFja2V0IGFuZCBieXRlIGNvdW50cywgaWRsZSB0aW1lb3V0cywgYWN0aXZlIGZsb3cgdGltZW91dHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgcGVyZm9ybWFuY2UgbWV0cmljcyByZWxhdGVkIHRvIHNwZWNpZmljIGZsb3dzLiBJdCBwcm9iYWJseSB0YWtlcyBhIHJlcXVlc3QgZnJvbSB1c2Vyc3BhY2UsIHRyYW5zbGF0ZXMgaXQgaW50byB0aGUgZGF0YXBhdGgncyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgYSBmbG93LCB0aGVuIHF1ZXJpZXMgZm9yIHRoZSByZXF1aXJlZCBkYXRhLCBhbmQgYnVuZGxlcyBpdCBiYWNrIHVwIGZvciB0aGUgY2FsbGVyLCBsaWtlbHkgb3ZlciBOZXRsaW5rIG9yIHNvbWUgb3RoZXIgUlBDIG1lY2hhbmlzbS4gVGhlcmUgd291bGQgYmUgYSBnb29kIGNoYW5jZSB0byBzZWUgbG9ja2luZywgY2FjaGluZywgYW5kIGEgaGVhdnkgZm9jdXMgb24gY29uY3VycmVuY3kgaW4gaGVyZS5cblxuYG92c192cG9ydF9jbWRfZmlsbF9pbmZvYCBzb3VuZHMgbGlrZSBpdCdzIGFib3V0IHByb3ZpZGluZyB0aGUgZGV0YWlscyBvZiB0aGUgdmlydHVhbCBwb3J0cyB0aGVtc2VsdmVzLiBUaGlzIGlzIGFsbCB0aGUgYmFzaWMgaW5mb3JtYXRpb24geW91IG5lZWQgYWJvdXQgYSBzcGVjaWZpYyBpbnRlcmZhY2UgdGhhdCBzaXRzIHdpdGhpbiB0aGUgT1ZTIGRhdGEgcGxhbmUuIEknZCBleHBlY3QgdG8gc2VlIHRoaW5ncyBsaWtlIHRoZSBpbnRlcmZhY2UncyBuYW1lLCB0eXBlIChlLmcuLCBpbnRlcm5hbCwgdGFwLCB2ZXRoKSwgaGFyZHdhcmUgYWRkcmVzcywgTVRVLCBtYXliZSBhc3NvY2lhdGVkIHBoeXNpY2FsIGludGVyZmFjZXMgKGlmIGFueSksIGFuZCBwb3NzaWJseSBpdHMgY3VycmVudCBzdGF0dXMgKHVwL2Rvd24pLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBoZXJlIHdpbGwgYmUgaG93IHRoaXMgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkIOKAkyBpcyBpdCBhIGRpcmVjdCBsb29rdXAgZnJvbSBhIGdsb2JhbCB2cG9ydCB0YWJsZSwgb3IgaXMgaXQgbW9yZSBjb21wbGV4IGlmIHZpcnR1YWwgcG9ydHMgYXJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQgb3IgY29uZmlndXJlZD8gTWlnaHQgYWxzbyBpbnZvbHZlIGdvaW5nIHRvIHRoZSBrZXJuZWwgdG8gZGlzY292ZXIgdGhlIGludGVyZmFjZSBkZXRhaWxzLlxuXG5JJ20gYmV0dGluZyB0aGVzZSBhcmUgY29yZSBjb21wb25lbnRzIGZvciB0b29scyBsaWtlIGBvdnMtb2ZjdGxgLCBgb3ZzLWFwcGN0bGAsIGFuZCBhbnkgb3RoZXIgbW9uaXRvcmluZyBvciBjb250cm9sIHV0aWxpdGllcyB0aGF0IGludGVyYWN0IHdpdGggdGhlIE9WUyBkYXRhcGF0aC4gVGhlIGRldmlsLCBhcyBhbHdheXMsIHdpbGwgYmUgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhvdyBlZmZpY2llbnRseSB0aGV5IGhhbmRsZSByZXF1ZXN0cywgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBsb2FkLiBUaGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBoZXJlIGlzIHByZXR0eSBoaWdoLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGVpciBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDM1LCJPdXRwdXRUb2tlbnMiOjc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTQuNzEzNDc4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM1OlxcdH1cXG4gODM2OlxcdFxcbiA4Mzc6XFx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxuIDgzODpcXHRzdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX3N0YXRzKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxcbiA4Mzk6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gODQwOlxcdHtcXG4gODQxOlxcdFxcdHN0cnVjdCBvdnNfZmxvd19zdGF0cyBzdGF0cztcXG4gODQyOlxcdFxcdF9fYmUxNiB0Y3BfZmxhZ3M7XFxuIDg0MzpcXHRcXHR1bnNpZ25lZCBsb25nIHVzZWQ7XFxuIDg0NDpcXHRcXG4gODQ1OlxcdFxcdG92c19mbG93X3N0YXRzX2dldChmbG93LCBcXHUwMDI2c3RhdHMsIFxcdTAwMjZ1c2VkLCBcXHUwMDI2dGNwX2ZsYWdzKTtcXG4gODQ2OlxcdFxcbiA4NDc6XFx0XFx0aWYgKHVzZWQgXFx1MDAyNlxcdTAwMjZcXG4gODQ4OlxcdFxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE9WU19GTE9XX0FUVFJfVVNFRCwgb3ZzX2Zsb3dfdXNlZF90aW1lKHVzZWQpLFxcbiA4NDk6XFx0XFx0XFx0XFx0ICAgICAgT1ZTX0ZMT1dfQVRUUl9QQUQpKVxcbiA4NTA6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gODUxOlxcdFxcbiA4NTI6XFx0XFx0aWYgKHN0YXRzLm5fcGFja2V0cyBcXHUwMDI2XFx1MDAyNlxcbiA4NTM6XFx0XFx0ICAgIG5sYV9wdXRfNjRiaXQoc2tiLCBPVlNfRkxPV19BVFRSX1NUQVRTLFxcbiA4NTQ6XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG92c19mbG93X3N0YXRzKSwgXFx1MDAyNnN0YXRzLFxcbiA4NTU6XFx0XFx0XFx0XFx0ICBPVlNfRkxPV19BVFRSX1BBRCkpXFxuIDg1NjpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRpZiAoKHU4KW50b2hzKHRjcF9mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gODU5OlxcdFxcdCAgICAgbmxhX3B1dF91OChza2IsIE9WU19GTE9XX0FUVFJfVENQX0ZMQUdTLCAodTgpbnRvaHModGNwX2ZsYWdzKSkpXFxuIDg2MDpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRyZXR1cm4gMDtcXG4gODYzOlxcdH1cXG4gODY0OlxcdFxcbiA4NjU6XFx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxuIDg2NjpcXHRzdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX2FjdGlvbnMoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxuIDg2NzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBza2Jfb3JpZ19sZW4pXFxuIDg2ODpcXHR7XFxuIDg2OTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpzdGFydDtcXG4gODcwOlxcdFxcdGludCBlcnI7XFxuIDg3MTpcXHRcXG4gODcyOlxcdFxcdC8qIElmIE9WU19GTE9XX0FUVFJfQUNUSU9OUyBkb2Vzbid0IGZpdCwgc2tpcCBkdW1waW5nIHRoZSBhY3Rpb25zIGlmXFxuIDg3MzpcXHRcXHQgKiB0aGlzIGlzIHRoZSBmaXJzdCBmbG93IHRvIGJlIGR1bXBlZCBpbnRvICdza2InLiAgVGhpcyBpcyB1bnVzdWFsIGZvclxcbiA4NzQ6XFx0XFx0ICogTmV0bGluayBidXQgaW5kaXZpZHVhbCBhY3Rpb24gbGlzdHMgY2FuIGJlIGxvbmdlciB0aGFuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjE0LjcxMzYxNTkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTU1OlxcdFxcbjIxNTY6XFx0LyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovXFxuMjE1NzpcXHRzdGF0aWMgaW50IG92c192cG9ydF9jbWRfZmlsbF9pbmZvKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjE1ODpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuMjE1OTpcXHRcXHRcXHRcXHRcXHQgICB1MzIgZmxhZ3MsIHU4IGNtZCwgZ2ZwX3QgZ2ZwKVxcbjIxNjA6XFx0e1xcbjIxNjE6XFx0XFx0c3RydWN0IG92c19oZWFkZXIgKm92c19oZWFkZXI7XFxuMjE2MjpcXHRcXHRzdHJ1Y3Qgb3ZzX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzO1xcbjIxNjM6XFx0XFx0c3RydWN0IG5ldCAqbmV0X3Zwb3J0O1xcbjIxNjQ6XFx0XFx0aW50IGVycjtcXG4yMTY1OlxcdFxcbjIxNjY6XFx0XFx0b3ZzX2hlYWRlciA9IGdlbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFxcdTAwMjZkcF92cG9ydF9nZW5sX2ZhbWlseSxcXG4yMTY3OlxcdFxcdFxcdFxcdFxcdCBmbGFncywgY21kKTtcXG4yMTY4OlxcdFxcdGlmICghb3ZzX2hlYWRlcilcXG4yMTY5OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjE3MDpcXHRcXG4yMTcxOlxcdFxcdG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXggPSBnZXRfZHBpZmluZGV4KHZwb3J0LVxcdTAwM2VkcCk7XFxuMjE3MjpcXHRcXG4yMTczOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIE9WU19WUE9SVF9BVFRSX1BPUlRfTk8sIHZwb3J0LVxcdTAwM2Vwb3J0X25vKSB8fFxcbjIxNzQ6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgT1ZTX1ZQT1JUX0FUVFJfVFlQRSwgdnBvcnQtXFx1MDAzZW9wcy1cXHUwMDNldHlwZSkgfHxcXG4yMTc1OlxcdFxcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIE9WU19WUE9SVF9BVFRSX05BTUUsXFxuMjE3NjpcXHRcXHRcXHRcXHQgICBvdnNfdnBvcnRfbmFtZSh2cG9ydCkpIHx8XFxuMjE3NzpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBPVlNfVlBPUlRfQVRUUl9JRklOREVYLCB2cG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4KSlcXG4yMTc4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIxNzk6XFx0XFxuMjE4MDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE4MTpcXHRcXHRuZXRfdnBvcnQgPSBkZXZfbmV0X3JjdSh2cG9ydC1cXHUwMDNlZGV2KTtcXG4yMTgyOlxcdFxcdGlmICghbmV0X2VxKG5ldCwgbmV0X3Zwb3J0KSkge1xcbjIxODM6XFx0XFx0XFx0aW50IGlkID0gcGVlcm5ldDJpZF9hbGxvYyhuZXQsIG5ldF92cG9ydCwgR0ZQX0FUT01JQyk7XFxuMjE4NDpcXHRcXG4yMTg1OlxcdFxcdFxcdGlmIChubGFfcHV0X3MzMihza2IsIE9WU19WUE9SVF9BVFRSX05FVE5TSUQsIGlkKSlcXG4yMTg2OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlX3VubG9jaztcXG4yMTg3OlxcdFxcdH1cXG4yMTg4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIxODk6XFx0XFxuMjE5MDpcXHRcXHRvdnNfdnBvcnRfZ2V0X3N0YXRzKHZwb3J0LCBcXHUwMDI2dnBvcnRfc3RhdHMpO1xcbjIxOTE6XFx0XFx0aWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBPVlNfVlBPUlRfQVRUUl9TVEFUUyxcXG4yMTkyOlxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvdnNfdnBvcnRfc3RhdHMpLCBcXHUwMDI2dnBvcnRfc3RhdHMsXFxuMjE5MzpcXHRcXHRcXHRcXHQgIE9WU19WUE9SVF9BVFRSX1BBRCkpXFxuMjE5NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMTk1OlxcdFxcbjIxOTY6XFx0XFx0aWYgKG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzKHZwb3J0LCBza2IpKVxcbjIxOTc6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjE5ODpcXHRcXG4yMTk5OlxcdFxcdGlmIChvdnNfdnBvcnRfZ2V0X3VwY2FsbF9wb3J0aWRzKHZwb3J0LCBza2IpKVxcbjIyMDA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdGdlbmxtc2dfZW5kKHNrYiwgb3ZzX2hlYWRlcik7XFxuMjIwMzpcXHRcXHRyZXR1cm4gMDtcXG4yMjA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMToxNC43MTM3MTk5MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDAxMzMyOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOlxuXG4qKkRpZ2dpbmcgaW50byBGbG93IGFuZCBQb3J0IFN0YXRzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGVzZSB0d28gZnVuY3Rpb25zOiBgb3ZzX2Zsb3dfc3RhdHNfZ2V0YCBhbmQgYG92c192cG9ydF9nZXRfc3RhdHNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGZpbmQgb3V0IHdoYXQgZWFjaCBvbmUncyBjb3JlIGZ1bmN0aW9uIGlzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgbWV0cmljcyB0aGV5J3JlIHJldHJpZXZpbmc/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldCBjb3VudHMsIGJ5dGUgY291bnRzLCBmbG93IHRpbWVvdXRzLCBlcnJvciBjb3VudHMsIGludGVyZmFjZSBzdGF0aXN0aWNzLCBvciBhIG1peCBvZiB0aGluZ3M/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiAqZXhhY3RseSogd2hhdCBlYWNoIG9uZSBtZWFzdXJlcyBpcyB0aGUgZm91bmRhdGlvbiBoZXJlLiBUaGVuIEknbGwgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXkncmUgcmVsYXRlZCwgd2hhdCB0aGVpciBpbnB1dHMgYXJlLCBhbmQgaG93IHRoZWlyIGRhdGEgZ2V0cyB1c2VkIGRvd25zdHJlYW0uIFByb2JhYmx5IEknbGwgaGF2ZSB0byBjb25zaWRlciBob3cgdGhvc2UgdHdvIGNhbGxzIGFmZmVjdCBwZXJmb3JtYW5jZSwgYW5kIGNvbnNpZGVyIHRoZSBpbXBhY3Qgb24gYW55IG1vbml0b3JpbmcgdG9vbHMgdGhhdCBtaWdodCBiZSB1c2luZyB0aGUgb3V0cHV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5NywiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTYuNzE1MDU2MjQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDcxNDkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZmxvd19zdGF0c19nZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTgzOD1zdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX3N0YXRzKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtODQ0LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjg0NTpcXHRvdnNfZmxvd19zdGF0c19nZXQoZmxvdywgXFx1MDAyNnN0YXRzLCBcXHUwMDI2dXNlZCwgXFx1MDAyNnRjcF9mbGFncyk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtODQ2LVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz02MT12b2lkIG92c19mbG93X3N0YXRzX3VwZGF0ZShzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgX19iZTE2IHRjcF9mbGFncyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTI3LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBvciBvdnNfbXV0ZXguICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMjg6dm9pZCBvdnNfZmxvd19zdGF0c19nZXQoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMjktXFx0XFx0XFx0c3RydWN0IG92c19mbG93X3N0YXRzICpvdnNfc3RhdHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oPTI4MT12b2lkIG92c19mbG93X3N0YXRzX3VwZGF0ZShzdHJ1Y3Qgc3dfZmxvdyAqLCBfX2JlMTYgdGNwX2ZsYWdzLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmgtMjgyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICopO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6MjgzOnZvaWQgb3ZzX2Zsb3dfc3RhdHNfZ2V0KGNvbnN0IHN0cnVjdCBzd19mbG93ICosIHN0cnVjdCBvdnNfZmxvd19zdGF0cyAqLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmgtMjg0LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnVzZWQsIF9fYmUxNiAqdGNwX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTYuNzY1Nzc1MzkzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ5MDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfdnBvcnRfZ2V0X3N0YXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMTU3PXN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8oc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxODktXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjE5MDpcXHRvdnNfdnBvcnRfZ2V0X3N0YXRzKHZwb3J0LCBcXHUwMDI2dnBvcnRfc3RhdHMpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIxOTEtXFx0aWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBPVlNfVlBPUlRfQVRUUl9TVEFUUyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jPTIzMD12b2lkIG92c192cG9ydF9kZWwoc3RydWN0IHZwb3J0ICp2cG9ydClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTIzNi0vKipcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzoyMzc6ICpcXHRvdnNfdnBvcnRfZ2V0X3N0YXRzIC0gcmV0cmlldmUgZGV2aWNlIHN0YXRzXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtMjM4LSAqXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy0yNDUtICovXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6MjQ2OnZvaWQgb3ZzX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgb3ZzX3Zwb3J0X3N0YXRzICpzdGF0cylcXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy0yNDcte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg9MzE9c3RydWN0IHZwb3J0ICpvdnNfdnBvcnRfbG9jYXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmgtMzItXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0Lmg6MzM6dm9pZCBvdnNfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCB2cG9ydCAqLCBzdHJ1Y3Qgb3ZzX3Zwb3J0X3N0YXRzICopO1xcbm5ldC9vcGVudnN3aXRjaC92cG9ydC5oLTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMToxNi44MTIyNzA3OTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NjU2MDMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIERlZXAgaW50byBPVlMgU3RhdGlzdGljcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzLiBCZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHRyb3VibGVzaG9vdGluZyBvciBvcHRpbWl6aW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBMZXQncyBtYWtlIHN1cmUgSSdtIGNyeXN0YWwgY2xlYXIgb24gaG93IGBvdnNfZmxvd19zdGF0c19nZXRgIGFuZCBgb3ZzX3Zwb3J0X2dldF9zdGF0c2AgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgZGF0YSB0aGV5J3JlIHB1bGxpbmcsIHdoZXJlIGl0J3MgY29taW5nIGZyb20gaW4gdGhlIE9WUyBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGludm9sdmVkLiBJIG5lZWQgdG8ga25vdyB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiB0aGUgY29kZTsgYXJlIHRoZXkgaGl0dGluZyBhbnkgc2hhcmVkIHJlc291cmNlcz8gRG8gdGhlc2UgZnVuY3Rpb25zIG9wZXJhdGUgb24gbGl2ZSBkYXRhPyBXaGF0IGFib3V0IGNhY2hpbmcgc3RyYXRlZ2llcyBpZiBhbnk/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gVGhhdCdzIHRoZSBmb3VuZGF0aW9uIG9mIGFueSBpbnZlc3RpZ2F0aW9uLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODMwLCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjE5LjY3ODgzMzAxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdC8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBvciBvdnNfbXV0ZXguICovXFxuIDEyODpcXHR2b2lkIG92c19mbG93X3N0YXRzX2dldChjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcXG4gMTI5OlxcdFxcdFxcdFxcdHN0cnVjdCBvdnNfZmxvd19zdGF0cyAqb3ZzX3N0YXRzLFxcbiAxMzA6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqdXNlZCwgX19iZTE2ICp0Y3BfZmxhZ3MpXFxuIDEzMTpcXHR7XFxuIDEzMjpcXHRcXHR1bnNpZ25lZCBpbnQgY3B1O1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQqdXNlZCA9IDA7XFxuIDEzNTpcXHRcXHQqdGNwX2ZsYWdzID0gMDtcXG4gMTM2OlxcdFxcdG1lbXNldChvdnNfc3RhdHMsIDAsIHNpemVvZigqb3ZzX3N0YXRzKSk7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGZvcl9lYWNoX2NwdShjcHUsIGZsb3ctXFx1MDAzZWNwdV91c2VkX21hc2spIHtcXG4gMTM5OlxcdFxcdFxcdHN0cnVjdCBzd19mbG93X3N0YXRzICpzdGF0cyA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKGZsb3ctXFx1MDAzZXN0YXRzW2NwdV0pO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRcXHRpZiAoc3RhdHMpIHtcXG4gMTQyOlxcdFxcdFxcdFxcdC8qIExvY2FsIENQVSBtYXkgd3JpdGUgb24gbm9uLWxvY2FsIHN0YXRzLCBzbyB3ZSBtdXN0XFxuIDE0MzpcXHRcXHRcXHRcXHQgKiBibG9jayBib3R0b20taGFsdmVzIGhlcmUuXFxuIDE0NDpcXHRcXHRcXHRcXHQgKi9cXG4gMTQ1OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c3RhdHMtXFx1MDAzZWxvY2spO1xcbiAxNDY6XFx0XFx0XFx0XFx0aWYgKCEqdXNlZCB8fCB0aW1lX2FmdGVyKHN0YXRzLVxcdTAwM2V1c2VkLCAqdXNlZCkpXFxuIDE0NzpcXHRcXHRcXHRcXHRcXHQqdXNlZCA9IHN0YXRzLVxcdTAwM2V1c2VkO1xcbiAxNDg6XFx0XFx0XFx0XFx0KnRjcF9mbGFncyB8PSBzdGF0cy1cXHUwMDNldGNwX2ZsYWdzO1xcbiAxNDk6XFx0XFx0XFx0XFx0b3ZzX3N0YXRzLVxcdTAwM2VuX3BhY2tldHMgKz0gc3RhdHMtXFx1MDAzZXBhY2tldF9jb3VudDtcXG4gMTUwOlxcdFxcdFxcdFxcdG92c19zdGF0cy1cXHUwMDNlbl9ieXRlcyArPSBzdGF0cy1cXHUwMDNlYnl0ZV9jb3VudDtcXG4gMTUxOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzdGF0cy1cXHUwMDNlbG9jayk7XFxuIDE1MjpcXHRcXHRcXHR9XFxuIDE1MzpcXHRcXHR9XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdC8qIENhbGxlZCB3aXRoIG92c19tdXRleC4gKi9cXG4gMTU3OlxcdHZvaWQgb3ZzX2Zsb3dfc3RhdHNfY2xlYXIoc3RydWN0IHN3X2Zsb3cgKmZsb3cpXFxuIDE1ODpcXHR7XFxuIDE1OTpcXHRcXHR1bnNpZ25lZCBpbnQgY3B1O1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRmb3JfZWFjaF9jcHUoY3B1LCBmbG93LVxcdTAwM2VjcHVfdXNlZF9tYXNrKSB7XFxuIDE2MjpcXHRcXHRcXHRzdHJ1Y3Qgc3dfZmxvd19zdGF0cyAqc3RhdHMgPSBvdnNsX2RlcmVmZXJlbmNlKGZsb3ctXFx1MDAzZXN0YXRzW2NwdV0pO1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRcXHRcXHRpZiAoc3RhdHMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MTkuNjc4OTE2NzA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC92cG9ydC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHQgKiBAc3RhdHM6IGxvY2F0aW9uIHRvIHN0b3JlIHN0YXRzXFxuIDI0MTpcXHQgKlxcbiAyNDI6XFx0ICogUmV0cmlldmVzIHRyYW5zbWl0LCByZWNlaXZlLCBhbmQgZXJyb3Igc3RhdHMgZm9yIHRoZSBnaXZlbiBkZXZpY2UuXFxuIDI0MzpcXHQgKlxcbiAyNDQ6XFx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgcmN1X3JlYWRfbG9jay5cXG4gMjQ1OlxcdCAqL1xcbiAyNDY6XFx0dm9pZCBvdnNfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBvdnNfdnBvcnRfc3RhdHMgKnN0YXRzKVxcbiAyNDc6XFx0e1xcbiAyNDg6XFx0XFx0Y29uc3Qgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpkZXZfc3RhdHM7XFxuIDI0OTpcXHRcXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDtcXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0ZGV2X3N0YXRzID0gZGV2X2dldF9zdGF0cyh2cG9ydC1cXHUwMDNlZGV2LCBcXHUwMDI2dGVtcCk7XFxuIDI1MjpcXHRcXHRzdGF0cy1cXHUwMDNlcnhfZXJyb3JzICA9IGRldl9zdGF0cy1cXHUwMDNlcnhfZXJyb3JzO1xcbiAyNTM6XFx0XFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyAgPSBkZXZfc3RhdHMtXFx1MDAzZXR4X2Vycm9ycztcXG4gMjU0OlxcdFxcdHN0YXRzLVxcdTAwM2V0eF9kcm9wcGVkID0gZGV2X3N0YXRzLVxcdTAwM2V0eF9kcm9wcGVkO1xcbiAyNTU6XFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQgPSBkZXZfc3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQ7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdHN0YXRzLVxcdTAwM2VyeF9ieXRlc1xcdCAgPSBkZXZfc3RhdHMtXFx1MDAzZXJ4X2J5dGVzO1xcbiAyNTg6XFx0XFx0c3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMgPSBkZXZfc3RhdHMtXFx1MDAzZXJ4X3BhY2tldHM7XFxuIDI1OTpcXHRcXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXNcXHQgID0gZGV2X3N0YXRzLVxcdTAwM2V0eF9ieXRlcztcXG4gMjYwOlxcdFxcdHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzID0gZGV2X3N0YXRzLVxcdTAwM2V0eF9wYWNrZXRzO1xcbiAyNjE6XFx0fVxcbiAyNjI6XFx0XFxuIDI2MzpcXHQvKipcXG4gMjY0OlxcdCAqXFx0b3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHMgLSByZXRyaWV2ZSB1cGNhbGwgc3RhdHNcXG4gMjY1OlxcdCAqXFxuIDI2NjpcXHQgKiBAdnBvcnQ6IHZwb3J0IGZyb20gd2hpY2ggdG8gcmV0cmlldmUgdGhlIHN0YXRzLlxcbiAyNjc6XFx0ICogQHNrYjogc2tfYnVmZiB3aGVyZSB1cGNhbGwgc3RhdHMgc2hvdWxkIGJlIGFwcGVuZGVkLlxcbiAyNjg6XFx0ICpcXG4gMjY5OlxcdCAqIFJldHJpZXZlcyB1cGNhbGwgc3RhdHMgZm9yIHRoZSBnaXZlbiBkZXZpY2UuXFxuIDI3MDpcXHQgKlxcbiAyNzE6XFx0ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgcmN1X3JlYWRfbG9jay5cXG4gMjcyOlxcdCAqL1xcbiAyNzM6XFx0aW50IG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDI3NDpcXHR7XFxuIDI3NTpcXHRcXHR1NjQgdHhfc3VjY2VzcyA9IDAsIHR4X2ZhaWwgPSAwO1xcbiAyNzY6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbiAyNzc6XFx0XFx0aW50IGk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjE5LjY3ODk4NTMyNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTEwNjAyMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBPVlMgU3RhdGlzdGljcyBDb2xsZWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IE9WUyBnYXRoZXJzIGl0cyBzdGF0aXN0aWNzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB2cG9ydHMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBkZXZfZ2V0X3N0YXRzYCBpcyBjYWxsZWQgd2l0aGluIGJvdGggYG92c192cG9ydF9nZXRfc3RhdHNgIGFuZCBgb3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHNgLiBJbnRlcmVzdGluZy4gVGhvc2UgYXJlIHRoZSB0d28gcGxhY2VzIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0IGxvb2tzIGxpa2UgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGRpZmZlcmVudCB1c2FnZXMgb2YgdGhvc2UgdHdvLiBMZXQncyBzdGFydCBieSBkZWx2aW5nIGludG8gYG92c192cG9ydF9nZXRfdXBjYWxsX3N0YXRzYCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3JlIGRpcmVjdCBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgdXBjYWxsLXJlbGF0ZWQgc3RhdGlzdGljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjIxLjc4OTU4OTY5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvdnBvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0ICpcXG4gMjcxOlxcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIHJjdV9yZWFkX2xvY2suXFxuIDI3MjpcXHQgKi9cXG4gMjczOlxcdGludCBvdnNfdnBvcnRfZ2V0X3VwY2FsbF9zdGF0cyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyNzQ6XFx0e1xcbiAyNzU6XFx0XFx0dTY0IHR4X3N1Y2Nlc3MgPSAwLCB0eF9mYWlsID0gMDtcXG4gMjc2OlxcdFxcdHN0cnVjdCBubGF0dHIgKm5sYTtcXG4gMjc3OlxcdFxcdGludCBpO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbiAyODA6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHZwb3J0X3VwY2FsbF9zdGF0c19wZXJjcHUgKnN0YXRzO1xcbiAyODE6XFx0XFx0XFx0dTY0IG5fc3VjY2Vzcywgbl9mYWlsO1xcbiAyODI6XFx0XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRcXHRzdGF0cyA9IHBlcl9jcHVfcHRyKHZwb3J0LVxcdTAwM2V1cGNhbGxfc3RhdHMsIGkpO1xcbiAyODU6XFx0XFx0XFx0ZG8ge1xcbiAyODY6XFx0XFx0XFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNnN0YXRzLVxcdTAwM2VzeW5jcCk7XFxuIDI4NzpcXHRcXHRcXHRcXHRuX3N1Y2Nlc3MgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2c3RhdHMtXFx1MDAzZW5fc3VjY2Vzcyk7XFxuIDI4ODpcXHRcXHRcXHRcXHRuX2ZhaWwgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2c3RhdHMtXFx1MDAzZW5fZmFpbCk7XFxuIDI4OTpcXHRcXHRcXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNnN0YXRzLVxcdTAwM2VzeW5jcCwgc3RhcnQpKTtcXG4gMjkwOlxcdFxcdFxcdHR4X3N1Y2Nlc3MgKz0gbl9zdWNjZXNzO1xcbiAyOTE6XFx0XFx0XFx0dHhfZmFpbCArPSBuX2ZhaWw7XFxuIDI5MjpcXHRcXHR9XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdG5sYSA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIE9WU19WUE9SVF9BVFRSX1VQQ0FMTF9TVEFUUyk7XFxuIDI5NTpcXHRcXHRpZiAoIW5sYSlcXG4gMjk2OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE9WU19WUE9SVF9VUENBTExfQVRUUl9TVUNDRVNTLCB0eF9zdWNjZXNzLFxcbiAyOTk6XFx0XFx0XFx0XFx0ICAgICAgT1ZTX1ZQT1JUX0FUVFJfUEFEKSkge1xcbiAzMDA6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmxhKTtcXG4gMzAxOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDMwMjpcXHRcXHR9XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE9WU19WUE9SVF9VUENBTExfQVRUUl9GQUlMLCB0eF9mYWlsLFxcbiAzMDU6XFx0XFx0XFx0XFx0ICAgICAgT1ZTX1ZQT1JUX0FUVFJfUEFEKSkge1xcbiAzMDY6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmxhKTtcXG4gMzA3OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDMwODpcXHRcXHR9XFxuIDMwOTpcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBubGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMToyMS43ODk2NzEzMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNDc0NTIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIFN0YXRpc3RpY3MgYW5kIExvY2tpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCBgb3ZzX3Zwb3J0X2dldF91cGNhbGxfc3RhdHNgLiBJIHNlZSB0aGF0IGB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5gIGlzIHVzZWQsIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbi4gVGhpcyBpcyBhIHBvdGVudGlhbCByZWQgZmxhZywgc3BlY2lmaWNhbGx5IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLCB3aXRoIGxvY2tkZXAgZW5hYmxlZCwgb3IgcmVhbGx5LCBhbnl0aW1lIHRoZSB3cml0ZXIgY291bGQgYmUgaW4gYSBib3R0b20taGFsZiAoQkgpIGNvbnRleHQuIFdlIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBgdTY0X3N0YXRzYCBvZnRlbiByZXF1aXJlcyBkaXNhYmxpbmcgQkhzIG9yIHNpbWlsYXIgbWVjaGFuaXNtcyB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHksIGVzcGVjaWFsbHkgaWYgdGhlIHdyaXRlciBpcyBleGVjdXRpbmcgaW4gYSBib3R0b20taGFsZiBjb250ZXh0LCBvciBsb2NrZGVwIG1heSBhc3NlcnQsIHdoaWNoIGlzIG5ldmVyIGEgZ29vZCB0aGluZy5cblxuVGhlbiBJIHNlZSBgb3ZzX2Zsb3dfc3RhdHNfZ2V0YCB1c2luZyBgc3Bpbl9sb2NrX2JoYC4gV2FpdCBhIG1pbnV0ZSwgYHNwaW5fbG9ja19iaGAgKml0c2VsZiogZGlzYWJsZXMgQkhzLCBwZXItbG9jay4gQnV0IHRoaXMgbWFrZXMgbWUgd29uZGVyOiB3aGF0IGlmIEJIcyBhcmUgZGlzYWJsZWQgb3V0c2lkZSB0aGUgbG9vcCwgb3IgdGhlIGR1bXAgY29kZSBkb2VzIHJlcGVhdGVkIGxvY2tpbmcgYW5kIHVubG9ja2luZz8gVGhpcyBzZWVtcy4uLiBpbmVmZmljaWVudC5cblxuQWxyaWdodCwgdGltZSB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb250ZXh0LiBBaCwgSSBzZWUgaXQgaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAuIEJpbmdvISBJIHNlZSBgbG9jYWxfYmhfZGlzYWJsZSgpYCB3cmFwcGVkIGFyb3VuZCB0aGUgKmVudGlyZSogZHVtcCBsb29wISBUaGlzIGlzIHdoYXQgSSB3YXMgbG9va2luZyBmb3IuXG5cblNwZWNpZmljYWxseSBpbiBgb3ZzX2Zsb3dfY21kX2R1bXBgLCBJIHNlZSB0aGlzIHBhdHRlcm46IGBsb2NhbF9iaF9kaXNhYmxlKClgIGJlZm9yZSB0aGUgbG9vcCwgYGxvY2FsX2JoX2VuYWJsZSgpYCBhZnRlciB0aGUgbG9vcC4gQW5kLCBzaW1pbGFybHksIGluIGBvdnNfdnBvcnRfY21kX2R1bXBgIEkgc2VlIHRoZSBzYW1lIHRoaW5nOiBgbG9jYWxfYmhfZGlzYWJsZSgpYCBhdCB0aGUgYmVnaW5uaW5nLCBgbG9jYWxfYmhfZW5hYmxlKClgIGF0IHRoZSBlbmQuXG5cblRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb24uIFRoZSBkZXNpZ25lcnMgd2VyZSBsaWtlbHkgdHJ5aW5nIHRvIGF2b2lkIEJILXJlbGF0ZWQgaXNzdWVzIGR1cmluZyB0aGUgZGF0YSBkdW1wcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0IGxvb2tzIGxpa2UgdGhleSB3ZXJlIGVuc3VyaW5nIHRoYXQgdGhlIHN0YXRpc3RpY3MgYW5kIGZsb3cgdGFibGUgZHVtcHMgYXJlIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8gYm90dG9tLWhhbGYgcHJvY2Vzc2luZy5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBjb25zaWRlciBldmVyeXRoaW5nLCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBPcGVuIHZTd2l0Y2guIFNwZWNpZmljYWxseSwgSSdsbCBzZWFyY2ggZm9yIFwiT1BFTlZTV0lUQ0hcIiBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gSXQncyBhbHdheXMgd2lzZSB0byBlbnN1cmUgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGlzIGNvZGUgYXJlIGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDEyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MjUuOTk0NDE4NTYzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc1MzI1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjI2LjA0MTE3NzIyNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDAyMjgxOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBPcGVuIHZTd2l0Y2gga2VybmVsIG1vZHVsZS4gTXkgbWluZCdzIGFscmVhZHkgcmFjaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyDigJMgaG93J3MgaXQgc3RydWN0dXJlZD8gSXMgaXQgdXNpbmcgdGhlIHN0YW5kYXJkIEtjb25maWcgc3ludGF4PyBXaGF0IGtpbmQgb2YgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBnZW1zIGluIHRoZXJlIHJlZ2FyZGluZyBzcGVjaWZpYyBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWxpdHk/IEknbSBob3BpbmcgaXQncyB3ZWxsLWNvbW1lbnRlZDsgdGhhdCdsbCBzYXZlIG1lIHNvbWUgdGltZS4gQmFzaWNhbGx5LCBJIHdhbnQgdGhlIGNvcmUgYmx1ZXByaW50IGZvciBob3cgdGhpcyB0aGluZyBnZXRzIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbC4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCBhbmQgdG8gc3RhcnQgZXhwbG9yaW5nIGhvdyB0byBwb3RlbnRpYWxseSBjdXN0b21pemUgYSBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMToyOC40NDM0NjE0NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MjguNDQzNTI5MzAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTEyMDI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEYXRhcGF0aCBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkYXRhcGF0aC5vYCBpcyBiZWluZyBjb21waWxlZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBidWlsZCBzeXN0ZW0uIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbmV0L29wZW52c3dpdGNoL01ha2VmaWxlYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW47IGl0IHNob3VsZCBjb250YWluIHRoZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBidWlsZGluZyB0aGUgY29yZSBjb21wb25lbnRzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBsYXllci4gVGhpcyBNYWtlZmlsZSBzaG91bGQgb3V0bGluZSB0aGUgY29tbWFuZHMgYW5kIHByZXJlcXVpc2l0ZXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgb2JqZWN0IGZpbGVzLiBMZXQncyBzZWUgd2hhdCBjbHVlcyBpdCBob2xkcyBhYm91dCB0aGUgZGF0YXBhdGggY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTozMC4yNTQ3MzQ5NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBPcGVuIHZTd2l0Y2guXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSCkgKz0gb3BlbnZzd2l0Y2gub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvcGVudnN3aXRjaC15IDo9IFxcXFxcXG4gICA5OlxcdFxcdGFjdGlvbnMubyBcXFxcXFxuICAxMDpcXHRcXHRkYXRhcGF0aC5vIFxcXFxcXG4gIDExOlxcdFxcdGRwX25vdGlmeS5vIFxcXFxcXG4gIDEyOlxcdFxcdGZsb3cubyBcXFxcXFxuICAxMzpcXHRcXHRmbG93X25ldGxpbmsubyBcXFxcXFxuICAxNDpcXHRcXHRmbG93X3RhYmxlLm8gXFxcXFxcbiAgMTU6XFx0XFx0bWV0ZXIubyBcXFxcXFxuICAxNjpcXHRcXHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXFxcXG4gIDE3OlxcdFxcdHZwb3J0Lm8gXFxcXFxcbiAgMTg6XFx0XFx0dnBvcnQtaW50ZXJuYWxfZGV2Lm8gXFxcXFxcbiAgMTk6XFx0XFx0dnBvcnQtbmV0ZGV2Lm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxcbiAgMjI6XFx0b3BlbnZzd2l0Y2gteSArPSBjb25udHJhY2sub1xcbiAgMjM6XFx0ZW5kaWZcXG4gIDI0OlxcdFxcbiAgMjU6XFx0Q0ZMQUdTX29wZW52c3dpdGNoX3RyYWNlLm8gPSAtSSQoc3JjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTozMC4yNTQ3OTYyOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTMzMTEyNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogT3BlbiB2U3dpdGNoIE5ldGxpbmsgSW50ZXJmYWNlKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdmVyaWZ5IGlmIE9wZW4gdlN3aXRjaCBpcyBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVhY2hhYmxlIHZpYSBHZW5lcmljIE5ldGxpbmsgKHNwZWNpZmljYWxseSB0aGUgYE9WU19EQVRBUEFUSF9GQU1JTFlgLCBgT1ZTX1ZQT1JUX0ZBTUlMWWAsIGFuZCBgT1ZTX0ZMT1dfRkFNSUxZYCBmYW1pbGllcyksIHdoaWNoIFN5emthbGxlciB1c2VzIHRvIGNvbW11bmljYXRlLiBUaGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIHRoZSBkdW1wIGNhbGxiYWNrczogYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAsIHdoaWNoIGNvcnJlc3BvbmQgdG8gdGhlIGBkcF9mbG93X2dlbmxfZmFtaWx5YCBhbmQgYGRwX3Zwb3J0X2dlbmxfZmFtaWx5YCByZXNwZWN0aXZlbHkuIFRoZXNlIGFyZSBlYXNpbHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSB2aWEgbmV0bGluayBkdW1wIHJlcXVlc3RzLlxuXG5FdmFsdWF0aW5nIFwiV29ydGhGdXp6aW5nXCI6IE9wZW4gdlN3aXRjaCdzIG5ldGxpbmsgaW50ZXJmYWNlIHNlZW1zIHRvIGJlIGEgY29yZSBzdWJzeXN0ZW0gYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgVk0gZW52aXJvbm1lbnRzLCBiZWNhdXNlIGl0IGlzIHB1cmVseSBzb2Z0d2FyZS1iYXNlZC4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBsb2NraW5nIGNvbnRleHQgd2l0aGluIGBvdnNfZmxvd19jbWRfZHVtcGAgYW5kIGBvdnNfdnBvcnRfY21kX2R1bXBgLCBjaGFuZ2luZyB0aGUgY29kZSBwYXRoIHRoYXQncyBleGVjdXRlZCBieSB1c2luZyBgbG9jYWxfYmhfZGlzYWJsZWAgLyBgbG9jYWxfYmhfZW5hYmxlYC4gSSdtIGdvaW5nIHRvIHNheSBcIldvcnRoRnV6emluZ1wiIGlzIGB0cnVlYCBoZXJlLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIFwiRm9jdXNTeW1ib2xzXCIuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSBgb3ZzX2Zsb3dfY21kX2R1bXBgIGFuZCBgb3ZzX3Zwb3J0X2NtZF9kdW1wYC5cblxuQ2hlY2tpbmcgdGhlIGBnaXQgZGlmZmAgYWdhaW4sIEknbSBjb25maWRlbnQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIEl0J3MganVzdCB0aG9zZSB0d28sIHNwZWNpZmljYWxseSBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGVzZSBhcmVuJ3QgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90IHBhdGhzLCBidXQgcmF0aGVyLCB2ZXJ5IHNwZWNpZmljIGR1bXAgaGFuZGxlcnMgZm9yIE9wZW4gdlN3aXRjaCBmbG93IGFuZCB2cG9ydCBuZXRsaW5rIGNvbW1hbmRzLiBUaGV5J3JlIGZlYXR1cmUgc3BlY2lmaWMgYW5kIHJlcHJlc2VudCByZWxldmFudCBlbnRyeXBvaW50cy5cblxuVGhlIFwiRW5hYmxlQ29uZmlnc1wiIGNoZWNrOiBJdCBzZWVtcyBgT1BFTlZTV0lUQ0hgIGlzIHRoZSBrZXksIGFsdGhvdWdoIGBJTkVUYCBpcyBhbHNvIGltcGxpZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgY29ycmVjdC5cblxuQWxyaWdodCwgZG91YmxlLWNoZWNraW5nIGV2ZXJ5dGhpbmcuIFwiV29ydGhGdXp6aW5nXCIgaXMgYHRydWVgLCB0aGUgXCJGb2N1c1N5bWJvbHNcIiBhcmUgYFtcIm92c19mbG93X2NtZF9kdW1wXCIsIFwib3ZzX3Zwb3J0X2NtZF9kdW1wXCJdYCwgYW5kIHRoZSBcIkVuYWJsZUNvbmZpZ3NcIiBpcyBgW1wiT1BFTlZTV0lUQ0hcIl1gLiBUaGlzIGFuYWx5c2lzIHByb3ZpZGVzIGEgY29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC4gSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY5MiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTozNS4zODc5MTE1NzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk3MjYwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfZmxvd19jbWRfZHVtcFwiLFxuICAgIFwib3ZzX3Zwb3J0X2NtZF9kdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYm90dG9tLWhhbGYgKEJIKSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCBmbG93IGFuZCB2cG9ydCBkdW1waW5nIGxvb3BzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGhhbmRsZXJzIChvdnNfZmxvd19jbWRfZHVtcCBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIHNvY2tldHMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHN5bmNocm9uaXphdGlvbiBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCBsb2NraW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2Zsb3dfY21kX2R1bXBcIixcbiAgICBcIm92c192cG9ydF9jbWRfZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJvdHRvbS1oYWxmIChCSCkgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcGluZyBsb29wcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBoYW5kbGVycyAob3ZzX2Zsb3dfY21kX2R1bXAgYW5kIG92c192cG9ydF9jbWRfZHVtcCkuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGdlbmVyaWMgbmV0bGluayBzb2NrZXRzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6MzUuNDY4ODkyMzY1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwMDYyMDQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjM1LjQ2OTM5ODc5NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMzAwMTA4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOGI2MjZkNzdmOGY3MmVlNmMwYzljNzZmOTM1Mjg4NzgyNzllMTA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxODoyMDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IDYzMWEwMzEzNmZhMTQuLmFlMmM5OTI0YWViMDUgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0xNTMzLDYgKzE1MzMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdH1cbiBcbiBcdHRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLVx1MDAzZXRhYmxlLnRpKTtcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdGZvciAoOzspIHtcbiBcdFx0c3RydWN0IHN3X2Zsb3cgKmZsb3c7XG4gXHRcdHUzMiBidWNrZXQsIG9iajtcbkBAIC0xNTUyLDYgKzE1NTMsNyBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0Y2ItXHUwMDNlYXJnc1swXSA9IGJ1Y2tldDtcbiBcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG9iajtcbiBcdH1cbitcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG5AQCAtMjU2NSw2ICsyNTY3LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRmb3IgKGkgPSBidWNrZXQ7IGkgXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XG4gXHRcdHN0cnVjdCB2cG9ydCAqdnBvcnQ7XG4gXG5AQCAtMjU4NSw2ICsyNTg4LDcgQEAgc3RhdGljIGludCBvdnNfdnBvcnRfY21kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRza2lwID0gMDtcbiBcdH1cbiBvdXQ6XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODoyMTozNS40Njk0MDAxMDVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAwNTIwNTc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBQYXRjaCdzIFZ1bG5lcmFiaWxpdHkgUHJvZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdXp6aW5nIHN0cmF0ZWd5IGZvciB0aGlzIHBhdGNoLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSdyZSBsb29raW5nIGF0IGEgc2NlbmFyaW8gd2hlcmUgS01TQU4gaXMgdHJ1bHkgbmVjZXNzYXJ5LCBvciBpZiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGRldGVjdG9ycyB3aWxsIHN1ZmZpY2UuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byBiZSBlZmZpY2llbnQgYW5kIHBpbnBvaW50IHRoZSBhcmVhcyBvZiBncmVhdGVzdCBjb25jZXJuIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG5cbk15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIgd29ya3MgYmVzdCBmb3IgYSBxdWljayBhbmQgdGFyZ2V0ZWQgaW5zcGVjdGlvbi4gSSdsbCBuZWVkIGNvbnRleHQsIHNvIEknbSBnb2luZyBzdHJhaWdodCBmb3IgdGhlIGNvcmUgb2YgdGhlIGRhdGFwYXRoLiBJJ2xsIGZvY3VzIG9uIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTUzMyBhbmQgMjU2NS4gVGhvc2UgbGluZSBudW1iZXJzIHNlZW0gc2lnbmlmaWNhbnQsIGFuZCB0aGV5IHNob3VsZCBwcm92aWRlIGVub3VnaCBjb250ZXh0IHRvIGdhdWdlIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBCeSBleGFtaW5pbmcgdGhvc2Ugc2VjdGlvbnMgY2xvc2VseSwgSSBzaG91bGQgZ2V0IGEgYmV0dGVyIGZlZWwgZm9yIHRoZSBwYXRjaCdzIGltcGFjdCBhbmQgdGhlIGFwcHJvcHJpYXRlIGZ1enppbmcgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzYsIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjQyLjQ3NDYwOTA0MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUyMDpcXHRcXHRpbnQgZXJyO1xcbjE1MjE6XFx0XFxuMTUyMjpcXHRcXHRlcnIgPSBnZW5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQoY2ItXFx1MDAzZW5saCwgXFx1MDAyNmRwX2Zsb3dfZ2VubF9mYW1pbHksIGEsXFxuMTUyMzpcXHRcXHRcXHRcXHRcXHQgICAgICAgT1ZTX0ZMT1dfQVRUUl9NQVgsIGZsb3dfcG9saWN5LCBOVUxMKTtcXG4xNTI0OlxcdFxcdGlmIChlcnIpXFxuMTUyNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MjY6XFx0XFx0dWZpZF9mbGFncyA9IG92c19ubGFfZ2V0X3VmaWRfZmxhZ3MoYVtPVlNfRkxPV19BVFRSX1VGSURfRkxBR1NdKTtcXG4xNTI3OlxcdFxcbjE1Mjg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjE1Mjk6XFx0XFx0ZHAgPSBnZXRfZHBfcmN1KHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfaGVhZGVyLVxcdTAwM2VkcF9pZmluZGV4KTtcXG4xNTMwOlxcdFxcdGlmICghZHApIHtcXG4xNTMxOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE1MzI6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTUzMzpcXHRcXHR9XFxuMTUzNDpcXHRcXG4xNTM1OlxcdFxcdHRpID0gcmN1X2RlcmVmZXJlbmNlKGRwLVxcdTAwM2V0YWJsZS50aSk7XFxuMTUzNjpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuMTUzNzpcXHRcXHRmb3IgKDs7KSB7XFxuMTUzODpcXHRcXHRcXHRzdHJ1Y3Qgc3dfZmxvdyAqZmxvdztcXG4xNTM5OlxcdFxcdFxcdHUzMiBidWNrZXQsIG9iajtcXG4xNTQwOlxcdFxcbjE1NDE6XFx0XFx0XFx0YnVja2V0ID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuMTU0MjpcXHRcXHRcXHRvYmogPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4xNTQzOlxcdFxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfZHVtcF9uZXh0KHRpLCBcXHUwMDI2YnVja2V0LCBcXHUwMDI2b2JqKTtcXG4xNTQ0OlxcdFxcdFxcdGlmICghZmxvdylcXG4xNTQ1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1NDY6XFx0XFxuMTU0NzpcXHRcXHRcXHRpZiAob3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhmbG93LCBvdnNfaGVhZGVyLVxcdTAwM2VkcF9pZmluZGV4LCBza2IsXFxuMTU0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4xNTQ5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksXFxuMTU1MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBPVlNfRkxPV19DTURfR0VULCB1ZmlkX2ZsYWdzKSBcXHUwMDNjIDApXFxuMTU1MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xNTUyOlxcdFxcbjE1NTM6XFx0XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBidWNrZXQ7XFxuMTU1NDpcXHRcXHRcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IG9iajtcXG4xNTU1OlxcdFxcdH1cXG4xNTU2OlxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjE1NTc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTU1ODpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTU1OTpcXHR9XFxuMTU2MDpcXHRcXG4xNTYxOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmbG93X3BvbGljeVtPVlNfRkxPV19BVFRSX01BWCArIDFdID0ge1xcbjE1NjI6XFx0XFx0W09WU19GTE9XX0FUVFJfS0VZXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuMTU2MzpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9NQVNLXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuMTU2NDpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9BQ1RJT05TXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuMTU2NTpcXHRcXHRbT1ZTX0ZMT1dfQVRUUl9DTEVBUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4xNTY2OlxcdFxcdFtPVlNfRkxPV19BVFRSX1BST0JFXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbjE1Njc6XFx0XFx0W09WU19GTE9XX0FUVFJfVUZJRF0gPSB7IC50eXBlID0gTkxBX1VOU1BFQywgLmxlbiA9IDEgfSxcXG4xNTY4OlxcdFxcdFtPVlNfRkxPV19BVFRSX1VGSURfRkxBR1NdID0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4xNTY5OlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjIxOjQyLjQ3NDc5ODMyMloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU1NTpcXHR9XFxuMjU1NjpcXHRcXG4yNTU3OlxcdHN0YXRpYyBpbnQgb3ZzX3Zwb3J0X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4yNTU4OlxcdHtcXG4yNTU5OlxcdFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyID0gZ2VubG1zZ19kYXRhKG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCkpO1xcbjI1NjA6XFx0XFx0c3RydWN0IGRhdGFwYXRoICpkcDtcXG4yNTYxOlxcdFxcdGludCBidWNrZXQgPSBjYi1cXHUwMDNlYXJnc1swXSwgc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbjI1NjI6XFx0XFx0aW50IGksIGogPSAwO1xcbjI1NjM6XFx0XFxuMjU2NDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjU2NTpcXHRcXHRkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19oZWFkZXItXFx1MDAzZWRwX2lmaW5kZXgpO1xcbjI1NjY6XFx0XFx0aWYgKCFkcCkge1xcbjI1Njc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjU2ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yNTY5OlxcdFxcdH1cXG4yNTcwOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4yNTcxOlxcdFxcdGZvciAoaSA9IGJ1Y2tldDsgaSBcXHUwMDNjIERQX1ZQT1JUX0hBU0hfQlVDS0VUUzsgaSsrKSB7XFxuMjU3MjpcXHRcXHRcXHRzdHJ1Y3QgdnBvcnQgKnZwb3J0O1xcbjI1NzM6XFx0XFxuMjU3NDpcXHRcXHRcXHRqID0gMDtcXG4yNTc1OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2cG9ydCwgXFx1MDAyNmRwLVxcdTAwM2Vwb3J0c1tpXSwgZHBfaGFzaF9ub2RlKSB7XFxuMjU3NjpcXHRcXHRcXHRcXHRpZiAoaiBcXHUwMDNlPSBza2lwIFxcdTAwMjZcXHUwMDI2XFxuMjU3NzpcXHRcXHRcXHRcXHQgICAgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm8odnBvcnQsIHNrYixcXG4yNTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzb2NrX25ldChza2ItXFx1MDAzZXNrKSxcXG4yNTc5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4yNTgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsXFxuMjU4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgTkxNX0ZfTVVMVEksXFxuMjU4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgT1ZTX1ZQT1JUX0NNRF9HRVQsXFxuMjU4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0FUT01JQykgXFx1MDAzYyAwKVxcbjI1ODQ6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU4NTpcXHRcXG4yNTg2OlxcdFxcdFxcdFxcdGorKztcXG4yNTg3OlxcdFxcdFxcdH1cXG4yNTg4OlxcdFxcdFxcdHNraXAgPSAwO1xcbjI1ODk6XFx0XFx0fVxcbjI1OTA6XFx0b3V0OlxcbjI1OTE6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMjU5MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNTkzOlxcdFxcbjI1OTQ6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbjI1OTU6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMV0gPSBqO1xcbjI1OTY6XFx0XFxuMjU5NzpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMjU5ODpcXHR9XFxuMjU5OTpcXHRcXG4yNjAwOlxcdHN0YXRpYyB2b2lkIG92c19kcF9tYXNrc19yZWJhbGFuY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjI2MDE6XFx0e1xcbjI2MDI6XFx0XFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG92c19uZXQsXFxuMjYwMzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbWFza3NfcmViYWxhbmNlLndvcmspO1xcbjI2MDQ6XFx0XFx0c3RydWN0IGRhdGFwYXRoICpkcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6NDIuNDc0OTY4MzIyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTQ1MTg5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogS01TQU4gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aHkgdGhlc2UgYGxvY2FsX2JoX2Rpc2FibGUoKWAgYW5kIGBsb2NhbF9iaF9lbmFibGUoKWAgY2FsbHMgd2VyZSBpbnRyb2R1Y2VkIGFyb3VuZCB0aGUgbG9vcHMgaW4gYG92c19mbG93X2NtZF9kdW1wYCBhbmQgYG92c192cG9ydF9jbWRfZHVtcGAuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gYG92c19mbG93X2NtZF9maWxsX2luZm9gLCBgb3ZzX3Zwb3J0X2NtZF9maWxsX2luZm9gLCBwb3RlbnRpYWxseSBzdGF0cyByZWFkcywgb3IgcGVyaGFwcyB0aGUgUkNVIGl0ZXJhdGlvbiBpdHNlbGYsIG9yIG1heWJlIGV2ZW4gcmhhc2h0YWJsZS9yaGFzaHRhYmxlX3dhbGsgaW50ZXJhY3Rpb25zLCBwZXItY3B1IHN0YXRzLCBvciBldmVuIGxvY2tkZXAgYXNzZXJ0aW9ucy4gSXQgc2NyZWFtcyBzb2Z0aXJxIGNvbnRleHQsIGJvdHRvbSBoYWxmIGludGVyYWN0aW9uLCBvciBzb21lIGtpbmQgb2YgY29uY3VycmVuY3kgaXNzdWUgdGhhdCB0aGlzIGFpbXMgdG8gc29sdmUuXG5cblRoZSBwYXRjaCdzIGNvcmUgZnVuY3Rpb24gYXBwZWFycyB0byBkaXNhYmxlIGFuZCBlbmFibGUgbG9jYWwgYm90dG9tIGhhbHZlcyBhcm91bmQgdGhlc2UgbG9vcHMgdGhhdCBhcmUgZHVtcGluZyBlbnRyaWVzIHRvIHRoZSBuZXRsaW5rIGBza2JgLiBTbywgYSBxdWljayBzYW5pdHkgY2hlY2s6IGRvZXMgdGhpcyBjaGFuZ2UgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/XG5cbkxvb2tpbmcgY2xvc2VyLCB0aGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIGNyaXRpY2FsbHksIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGRhdGEgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGhvdyB3ZSBjb3B5IGJ1ZmZlcnMsIGxlbmd0aHMsIG9yIHN0cnVjdHMuIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGtlcm5lbC10by11c2VyIGNvcHkgc3RydWN0dXJlcyBhcmUgdG91Y2hlZC4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgY29uY3VycmVuY3kgY29udHJvbCBhbmQgc29mdGlycSBjb250ZXh0IHN5bmNocm9uaXphdGlvbi4gQW55IG5ldyBpc3N1ZXMgdGhhdCBwb3AgdXAgaGVyZSB3b3VsZCBiZSBpbiB0aGUgcmVhbG0gb2YgbG9ja2luZyBwcm9ibGVtcywgcG90ZW50aWFsIGRlYWRsb2NrcywgbGF0ZW5jeSBjb25jZXJucywgb3IsIG9mIGNvdXJzZSwgcHJvYmxlbWF0aWMgc29mdGlycSBjb250ZXh0IGlzc3Vlcy4gTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MgYXJlIHRoZSByaWdodCB0b29scyB0byBmaW5kIHRoZXNlLlxuXG5UaGVyZWZvcmUsIGFmdGVyIHRoYXQgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC5cblxuTGV0IG1lIHJlaXRlcmF0ZSB0aGF0IGFuZCBlbnN1cmUgSSd2ZSBjb3ZlcmVkIGFsbCB0aGUgcmVxdWlyZW1lbnRzLlxuXG5gTmVlZHNLTVNBTmA6IGBmYWxzZWAuXG5gS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWRkcyBgbG9jYWxfYmhfZGlzYWJsZSgpYCBhbmQgYGxvY2FsX2JoX2VuYWJsZSgpYCBjYWxscyBhcm91bmQgZmxvdyBhbmQgdnBvcnQgZHVtcCBpdGVyYXRpb24gbG9vcHMgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhpcyBtb2RpZmllcyBzb2Z0aXJxIGRpc2FibGluZy9sb2NraW5nIGNvbnRleHQgZHVyaW5nIG5ldGxpbmsgZHVtcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgaXQgZG9lcyBub3QgbW9kaWZ5IGFueSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBzaXplcyBvciBkYXRhIGNvcHlpbmcgbG9naWMsIGFuZCBzbywgaW50cm9kdWNlcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3IgZXhlY3V0aW9uIGNvbnRleHQgYnVncywgc3VjaCBhcyBzbGVlcGluZyB3aXRoIEJIIGRpc2FibGVkIG9yIGxvY2tkZXAgd2FybmluZ3MsIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUC9rZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRodXMsIEtNU0FOIGlzIG5vdCBuZWVkZWQuXG5cblJpZ2h0LCBJJ20gaGFwcHkgd2l0aCB0aGF0IGFuYWx5c2lzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTUsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6MjE6NDcuNzY5NDg5ODk1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbG9jYWxfYmhfZGlzYWJsZSgpIGFuZCBsb2NhbF9iaF9lbmFibGUoKSBhcm91bmQgdGhlIGR1bXAgbG9vcHMgaW4gb3ZzX2Zsb3dfY21kX2R1bXAoKSBhbmQgb3ZzX3Zwb3J0X2NtZF9kdW1wKCkgd2l0aGluIG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIHRvIGhhbmRsZSBib3R0b20taGFsZiBleGVjdXRpb24gY29udGV4dCBhbmQgc3luY2hyb25pemF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGFuZCBkb2VzIG5vdCB0b3VjaCBkYXRhIHNlcmlhbGl6YXRpb24gb3Iga2VybmVsLXRvLXVzZXIgY29weWluZyBsb2dpYy4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY29udGV4dCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[1] Phase: Succeeded StartedAt: 2026-09-09 18:21:59 +0000 UTC FinishedAt: 2026-09-09 18:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 18:21:59 +0000 UTC FinishedAt: 2026-09-09 18:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2] Phase: Succeeded StartedAt: 2026-09-09 18:21:59 +0000 UTC FinishedAt: 2026-09-09 22:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 18:21:59 +0000 UTC FinishedAt: 2026-09-09 22:03:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 18:21:59 +0000 UTC FinishedAt: 2026-09-09 18:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 18:21:59 +0000 UTC FinishedAt: 2026-09-09 18:22:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-convert-artifact-963140786/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 18:22:09 +0000 UTC FinishedAt: 2026-09-09 18:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 18:22:09 +0000 UTC FinishedAt: 2026-09-09 18:38:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*849b874d-906e-4f2f-8b29-19224525f7a8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-convert-artifact-963140786/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "4adf1461-6795-4678-87b5-14bb8d2b40c6", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-3437538864/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 18:22:09 +0000 UTC FinishedAt: 2026-09-09 18:38:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*849b874d-906e-4f2f-8b29-19224525f7a8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-convert-artifact-963140786/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "4adf1461-6795-4678-87b5-14bb8d2b40c6", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-3437538864/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 18:38:42 +0000 UTC FinishedAt: 2026-09-09 18:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 18:38:42 +0000 UTC FinishedAt: 2026-09-09 18:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 18:38:42 +0000 UTC FinishedAt: 2026-09-09 18:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 18:38:42 +0000 UTC FinishedAt: 2026-09-09 18:38:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-convert-artifact-4224571341/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 18:38:53 +0000 UTC FinishedAt: 2026-09-09 18:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 18:38:53 +0000 UTC FinishedAt: 2026-09-09 18:40:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4adf1461-6795-4678-87b5-14bb8d2b40c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-3437538864/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 18:41:02 +0000 UTC FinishedAt: 2026-09-09 18:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 18:41:02 +0000 UTC FinishedAt: 2026-09-09 18:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 18:41:02 +0000 UTC FinishedAt: 2026-09-09 18:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 18:41:02 +0000 UTC FinishedAt: 2026-09-09 18:58:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*849b874d-906e-4f2f-8b29-19224525f7a8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-convert-artifact-4224571341/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "668f447d-c304-412f-a14d-ad18f13e6cb0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-82118057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 18:41:02 +0000 UTC FinishedAt: 2026-09-09 18:58:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*849b874d-906e-4f2f-8b29-19224525f7a8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-convert-artifact-4224571341/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "668f447d-c304-412f-a14d-ad18f13e6cb0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-82118057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 18:58:26 +0000 UTC FinishedAt: 2026-09-09 18:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 18:58:26 +0000 UTC FinishedAt: 2026-09-09 18:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 18:58:26 +0000 UTC FinishedAt: 2026-09-09 19:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 18:58:26 +0000 UTC FinishedAt: 2026-09-09 19:00:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*668f447d-c304-412f-a14d-ad18f13e6cb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-82118057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 19:00:14 +0000 UTC FinishedAt: 2026-09-09 22:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 19:00:14 +0000 UTC FinishedAt: 2026-09-09 22:03:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*4adf1461-6795-4678-87b5-14bb8d2b40c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*668f447d-c304-412f-a14d-ad18f13e6cb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-3437538864/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-82118057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 19:00:14 +0000 UTC FinishedAt: 2026-09-09 19:00:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 19:00:14 +0000 UTC FinishedAt: 2026-09-09 19:00:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-convert-artifact-3682789554/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 19:00:14 +0000 UTC FinishedAt: 2026-09-09 19:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 19:00:14 +0000 UTC FinishedAt: 2026-09-09 19:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 19:00:14 +0000 UTC FinishedAt: 2026-09-09 19:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 19:00:24 +0000 UTC FinishedAt: 2026-09-09 22:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtblpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_flow_cmd_dump","ovs_vport_cmd_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c9190bfd18a2548dea677faed7d6ee11f3cb0c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"bcc7cf2e-c8da-4f29-ad06-a344bf762ba4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 19:00:24 +0000 UTC FinishedAt: 2026-09-09 22:02:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4adf1461-6795-4678-87b5-14bb8d2b40c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*668f447d-c304-412f-a14d-ad18f13e6cb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-3437538864/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-build-action-82118057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtblpk/series-workflowtblpk-convert-artifact-3682789554/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}