Name: series-workflow995sp Phase: Succeeded StartedAt: 2026-08-14 19:26:55 +0000 UTC FinishedAt: 2026-08-14 23:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[0] Phase: Succeeded StartedAt: 2026-08-14 19:26:55 +0000 UTC FinishedAt: 2026-08-14 19:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 19:26:55 +0000 UTC FinishedAt: 2026-08-14 19:30:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_NETLINK_QUEUE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_NETLINK_QUEUE" ], "series_id": "d5e59ec5-2307-45e4-abb9-cf60108d9d02" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_zerocopy", "tcp_sendmsg_locked", "ovs_dp_upcall" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtvdnNfZHBfdXBjYWxsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBcJiMzNDt1bnJlYWRhYmxlXCYjMzQ7IHNrYiBmcmFnbWVudHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIGRldmljZSBtZW1vcnkgKGUuZy4sIFRDUCBkZXZtZW0pLiBJdCBlbnN1cmVzIHRoYXQgdW5yZWFkYWJsZSBmcmFnbWVudHMgYXJlIG5vdCBtaXhlZCB3aXRoIHJlYWRhYmxlIG9uZXMsIGNvcnJlY3RseSBwcm9wYWdhdGVzIHRoZSBgdW5yZWFkYWJsZWAgZmxhZyB3aGVuIHplcm8tY29weWluZyBza2JzLCBhbmQgcHJldmVudHMgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgcXVldWVkIHRvIHVzZXJzcGFjZSBvciBjb2xsYXBzZWQgaW5jb3JyZWN0bHkgaW4gVENQLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcsIG9yIHN0YWNrIHZhcmlhYmxlcykgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggRE1BLW1hcHBlZCBkZXZpY2UgbWVtb3J5LCB3aGljaCBhcmUgbm90IHRhcmdldHMgZm9yIEtNU0FOLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhpcyBjb250ZXh0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIGBza2JfemVyb2NvcHlgIGFuZCBgdGNwX3NlbmRtc2dfbG9ja2VkYCB0byBhZGQgY2hlY2tzIGZvciBgc2tiX2ZyYWdzX3JlYWRhYmxlYC4gSXQgYWxzbyBtb2RpZmllcyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaW4gb3BlbnZzd2l0Y2guIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgb3BlbnZzd2l0Y2ggY29kZSBwYXRocywgd2hpY2ggYXJlIHdvcnRoIGZ1enppbmcuIFRoZSBgc2tiX3plcm9jb3B5YCBmdW5jdGlvbiBpcyB1c2VkIGJ5IG9wZW52c3dpdGNoIGFuZCBuZm5ldGxpbmtfcXVldWUsIHNvIHdlIGluY2x1ZGUgdGhlaXIgY29uZmlncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIwYTdmYWNmNGQ3MzUxMjU5OGRhZjliZTdlZDNhNjRmOTI1N2QyM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxOToyODozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMzg3MCw3ICYjNDM7Mzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbiAgKlx0UmV0dXJuIHZhbHVlOlxuICAqXHQwOiBldmVyeXRoaW5nIGlzIE9LXG4gICpcdC1FTk9NRU06IGNvdWxkbiYjMzk7dCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5XG4tICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnlcbiYjNDM7ICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWRcbiYjNDM7ICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cbiAgKi9cbiBpbnRcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5AQCAtMzkwNSwxMCAmIzQzOzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgXHUwMDI2XHUwMDI2IGogXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxlbikge1xuJiM0MztcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTtcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuIFx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4mIzQzO1x0XHRpZiAoaiBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbkBAIC0zOTI4LDYgJiM0MzszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0fVxuIFx0c2tiX3NoaW5mbyh0byktXHUwMDNlbnJfZnJhZ3MgPSBqO1xuIFxuJiM0MztcdGlmIChpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBmcm9tLVx1MDAzZXVucmVhZGFibGUpXG4mIzQzO1x0XHR0by1cdTAwM2V1bnJlYWRhYmxlID0gMTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCA0NTU0NDFmMWI2OTQ5Li5iNDIzN2QwZTk5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTI0MCw3ICYjNDM7MTI0MCw4IEBAIGludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFxuIFx0XHR0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2tiLCBzaXplX2dvYWwpO1xuIFxuLVx0XHRpZiAoY29weSBcdTAwM2M9IDAgfHwgIXRjcF9za2JfY2FuX2NvbGxhcHNlX3RvKHNrYikpIHtcbiYjNDM7XHRcdGlmIChjb3B5IFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSB8fFxuJiM0MztcdFx0ICAgIHVubGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpICE9ICFiaW5kaW5nKSkge1xuIFx0XHRcdGJvb2wgZmlyc3Rfc2tiO1xuIFxuIG5ld19zZWdtZW50OlxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC00NjcsNiAmIzQzOzQ2Nyw5IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFkcF9pZmluZGV4KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuIFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbiBcdFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIW5za2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtvdnNfZHBfdXBjYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl96ZXJvY29weWAgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIGFkZCBjaGVja3MgZm9yIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBJdCBhbHNvIG1vZGlmaWVzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBvcGVudnN3aXRjaC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBvcGVudnN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4gVGhlIGBza2JfemVyb2NvcHlgIGZ1bmN0aW9uIGlzIHVzZWQgYnkgb3BlbnZzd2l0Y2ggYW5kIG5mbmV0bGlua19xdWV1ZSwgc28gd2UgaW5jbHVkZSB0aGVpciBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjBhN2ZhY2Y0ZDczNTEyNTk4ZGFmOWJlN2VkM2E2NGY5MjU3ZDIzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE5OjI4OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMzg3MCw3ICYjNDM7Mzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTsKICAqCVJldHVybiB2YWx1ZToKICAqCTA6IGV2ZXJ5dGhpbmcgaXMgT0sKICAqCS1FTk9NRU06IGNvdWxkbiYjMzk7dCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5Ci0gKgktRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5CiYjNDM7ICoJLUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeSwgb3IgcmVhZGFibGUgaGVhZAomIzQzOyAqICAgICAgcGF5bG9hZCB3b3VsZCBiZSBtaXhlZCB3aXRoIHVucmVhZGFibGUgZnJhZ3MuCiAgKi8KIGludAogc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQpAQCAtMzkwNSwxMCAmIzQzOzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCQl9CiAJfQogCiYjNDM7CWlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pICZhbXA7JmFtcDsgaiAmZ3Q7IDAgJmFtcDsmYW1wOyBsZW4pIHsKJiM0MzsJCXB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tJmd0O2hlYWQpKTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAogCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewogCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CQlpZiAoaiAmZ3Q7IDApCiYjNDM7CQkJcHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS0mZ3Q7aGVhZCkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTsKQEAgLTM5MjgsNiAmIzQzOzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCiAJfQogCXNrYl9zaGluZm8odG8pLSZndDtucl9mcmFncyA9IGo7CiAKJiM0MzsJaWYgKGkgJmd0OyAwICZhbXA7JmFtcDsgZnJvbS0mZ3Q7dW5yZWFkYWJsZSkKJiM0MzsJCXRvLSZndDt1bnJlYWRhYmxlID0gMTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmI0MjM3ZDBlOTk0ZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0xMjQwLDcgJiM0MzsxMjQwLDggQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAKIAkJdHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTsKIAotCQlpZiAoY29weSAmbHQ7PSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpKSB7CiYjNDM7CQlpZiAoY29weSAmbHQ7PSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpIHx8CiYjNDM7CQkgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7CiAJCQlib29sIGZpcnN0X3NrYjsKIAogbmV3X3NlZ21lbnQ6CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC00NjcsNiAmIzQzOzQ2Nyw5IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghZHBfaWZpbmRleCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwogCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFuc2tiKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGFyZWFzOiBgbmV0L2NvcmUvc2tidWZmLmNgLCBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBwYWNrZXQgYnVmZmVyaW5nIGFuZCB6ZXJvLWNvcHkgbWVjaGFuaXNtcywgd2hpY2ggaXMgYWx3YXlzIHNvbWV0aGluZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhZGRpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gYHNrYl9mcmFnc19yZWFkYWJsZSgpYCBhbmQgdGhlIGBmcm9tLSZndDt1bnJlYWRhYmxlYCBmbGFnIHdpdGhpbiBgc2tiX3plcm9jb3B5KClgLiBUaGF0JiMzOTtzIHNtYXJ0OyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgaGFuZGxpbmcgZnJhZ21lbnQgcmVhZGFiaWxpdHkgY29ycmVjdGx5IGJlZm9yZSBhdHRlbXB0aW5nIHplcm8tY29weSBvcGVyYXRpb25zLiBUaGVyZSYjMzk7cyBhbHNvIGEgY29uZGl0aW9uYWwgY2hlY2sgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZCgpYCB0aGF0IHNlZW1zIHRvIGJlIHZlcmlmeWluZyB0aGUgc3RhdGUgb2YgZnJhZ21lbnQgcmVhZGFiaWxpdHkgYWdhaW5zdCBhIGBiaW5kaW5nYCB2YXJpYWJsZS4gQW5kIGZpbmFsbHksIGluIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KClgIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHRoZXJlIGlzIGEgY2hlY2sgZW5zdXJpbmcgdGhhdCBmcmFnbWVudHMgYXJlICpub3QqIHJlYWRhYmxlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGludm9sdmVkOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoZXNlIGFyZSBhbGwgY29yZSBuZXR3b3JraW5nIGVsZW1lbnRzLCBzbyBhbnkgY2hhbmdlcyBuZWVkIHRvIGJlIHRob3JvdWdobHkgdmV0dGVkLiBgc2tiX3plcm9jb3B5YCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3Rpbmcgc2luY2UgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3MgbGlrZWx5IHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzIHdpdGhpbiB0aGUga2VybmVsIG9yIGV2ZW4gYnkgZXh0ZXJuYWwgbW9kdWxlcy4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMsIG9mIGNvdXJzZSwgdGhlIGhlYXJ0IG9mIFRDUCBzZW5kaW5nLiBBbmQgdGhlbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCBpcyBzcGVjaWZpYyB0byBPcGVuIHZTd2l0Y2gsIHdoaWNoIEkgd2FudCB0byB2ZXJpZnkgaWYgYW55IHNwZWNpZmljIE9wZW4gdlN3aXRjaCBjb25maWd1cmF0aW9uIGlzIG5lY2Vzc2FyeS4KCk5leHQsIEkmIzM5O2xsIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYHNrYl96ZXJvY29weWAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGl0cyB1c2FnZSB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBvZiB0aGlzIHBhdGNoIGJlZm9yZSBJIGNhbiBnaXZlIGEgc29saWQgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfemVyb2NvcHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg9NDEzPWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICp4ZW5fbmV0YmFja19kYmdfcm9vdDtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTUtXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaDo0MTY6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUsXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTctXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaDo0MTg6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxOS1cbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy00OS0gKiBjb3VudGVyIGJlY2F1c2UgY29yZSBkcml2ZXIgY2FsbHMgaW50byB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2tcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUwOiAqIHdoaWNoIGNhbGxzIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUuXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01MS0gKi9cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUyOnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTMtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01OC1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjU5OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTYwLXtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTE3Mj1zdGF0aWMgaW50IHhlbnZpZl90eF9zdWJtaXQoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTAtXHRcdFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ19saXN0O1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMTE6XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBuc2tiKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEyLVx0XHRcdGlmICh4ZW52aWZfaGFuZGxlX2ZyYWdfbGlzdChxdWV1ZSwgc2tiKSkge1xuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjE1LVx0XHRcdFx0XHRcdCAgIFwmIzM0O05vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbnNvbGlkYXRlIGZyYWdfbGlzdCFcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMTY6XHRcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNy1cdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjMzLVx0XHRcdGlmIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcpXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTIzNDpcdFx0XHRcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjM1LVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjcyLVx0XHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnKSB7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTI3MzpcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTI3NC1cdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF96ZXJvY29weV9zZW50JiM0MzsmIzQzOztcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTI4Mz1zdGF0aWMgdm9pZCB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTMxNC1cdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfemVyb2NvcHlfZmFpbCYjNDM7JiM0Mzs7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTMxNTpcdHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUocXVldWUpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTYtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXHRcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3ODppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNjk9dm9pZCBza2JfY29weV9hbmRfY3N1bV9kZXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKnRvKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MDp1bnNpZ25lZCBpbnQgc2tiX3plcm9jb3B5X2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MjcxOmludCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI3Mi1cdFx0IGludCBsZW4sIGludCBobGVuKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODEyPUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV9yZWFsbG9jKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTMtXG5uZXQvY29yZS9za2J1ZmYuYzoxODE0OnN0YXRpYyBib29sIHNrYl96ZXJvY29weV9ub3RpZnlfZXh0ZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBsbywgdTE2IGxlbilcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTUte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE4MzQ9c3RhdGljIHZvaWQgX19tc2dfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHVidWZfaW5mb19tc2d6YyAqdWFyZylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xODcwLVx0aWYgKCF0YWlsIHx8IFNLQl9FWFRfRVJSKHRhaWwpLVx1MDAzZWVlLmVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fWkVST0NPUFkgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4NzE6XHQgICAgIXNrYl96ZXJvY29weV9ub3RpZnlfZXh0ZW5kKHRhaWwsIGxvLCBsZW4pKSB7XG5uZXQvY29yZS9za2J1ZmYuYy0xODcyLVx0XHRfX3NrYl9xdWV1ZV90YWlsKHEsIHNrYik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkxMD1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xubmV0L2NvcmUvc2tidWZmLmMtMTkxMS1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTEzLVx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxubmV0L2NvcmUvc2tidWZmLmM6MTk1MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xubmV0L2NvcmUvc2tidWZmLmMtMTk1MS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xOTYwPUVYUE9SVF9TWU1CT0xfR1BMKF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NjEtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTYyOnN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NjMtXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMjQ5LVx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSB8fFxubmV0L2NvcmUvc2tidWZmLmM6MjI1MDpcdFx0ICAgIHNrYl96ZXJvY29weV9jbG9uZShuLCBza2IsIGdmcF9tYXNrKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMjI1MS1cdFx0XHRrZnJlZV9za2Iobik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzgyOD1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzE6ICpcdHNrYl96ZXJvY29weV9oZWFkbGVuIC0gQ2FsY3VsYXRlIGhlYWRyb29tIG5lZWRlZCBmb3Igc2tiX3plcm9jb3B5KClcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICYjMzk7dG8mIzM5OyBza2IgcGFzc2VkXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXHRpbnRvIHNrYl96ZXJvY29weSgpLlxubmV0L2NvcmUvc2tidWZmLmMtMzgzNi0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mzc9dW5zaWduZWQgaW50XG5uZXQvY29yZS9za2J1ZmYuYzozODM4OnNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxubmV0L2NvcmUvc2tidWZmLmMtMzgzOS17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzg1NC19XG5uZXQvY29yZS9za2J1ZmYuYzozODU1OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTYtXG5uZXQvY29yZS9za2J1ZmYuYy0zODU3LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODogKlx0c2tiX3plcm9jb3B5IC0gWmVybyBjb3B5IHNrYiB0byBza2Jcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTktICpcdEB0bzogZGVzdGluYXRpb24gYnVmZmVyXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzg2Ni0gKlxubmV0L2NvcmUvc2tidWZmLmM6Mzg2NzogKlx0VGhlIGBobGVuYCBhcyBjYWxjdWxhdGVkIGJ5IHNrYl96ZXJvY29weV9oZWFkbGVuKCkgc3BlY2lmaWVzIHRoZVxubmV0L2NvcmUvc2tidWZmLmMtMzg2OC0gKlx0aGVhZHJvb20gaW4gdGhlIGB0b2AgYnVmZmVyLlxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4NzY9aW50XG5uZXQvY29yZS9za2J1ZmYuYzozODc3OnNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjEtXHR9XG5uZXQvY29yZS9za2J1ZmYuYzozOTIyOlx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjMtXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzk0My19XG5uZXQvY29yZS9za2J1ZmYuYzozOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTQ1LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQyNDI9dm9pZCBza2Jfc3BsaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjEsIGNvbnN0IHUzMiBsZW4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDI0OS1cdHNrYl9zaGluZm8oc2tiMSktXHUwMDNlZmxhZ3MgfD0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiB6Y19mbGFncztcbm5ldC9jb3JlL3NrYnVmZi5jOjQyNTA6XHRza2JfemVyb2NvcHlfY2xvbmUoc2tiMSwgc2tiLCAwKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXHRpZiAobGVuIFx1MDAzYyBwb3MpXHQvKiBTcGxpdCBsaW5lIGlzIGluc2lkZSBoZWFkZXIuICovXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDc4OD1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTEtXG5uZXQvY29yZS9za2J1ZmYuYzo1MDEyOlx0XHRpZiAoc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGZyYWdfc2tiLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTMtXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTAxNy1cdFx0XHRcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKGxpc3Rfc2tiLCBHRlBfQVRPTUlDKSB8fFxubmV0L2NvcmUvc2tidWZmLmM6NTAxODpcdFx0XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobnNrYiwgbGlzdF9za2IsXG5uZXQvY29yZS9za2J1ZmYuYy01MDE5LVx0XHRcdFx0XHRcdCAgICAgICBHRlBfQVRPTUlDKSlcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NDk9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVx0XHR9IGVsc2Uge1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2Ny1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTMzOS1cbm5ldC9pcHY0L3RjcC5jOjEzNDA6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZyxcbm5ldC9pcHY0L3RjcC5jLTEzNDEtXHRcdFx0XHRcdFx0ICAgICAgIGJpbmRpbmcpO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xNDQ5PXN0YXRpYyBpbnQgX19pcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVx0XHR9IGVsc2Uge1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMzLVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDU9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVx0XHRkYXRhX2xlbiA9IG5mcW5sX2dldF9kYXRhX2xlbihlbnRza2IsIFJFQURfT05DRShxdWV1ZS1cdTAwM2Vjb3B5X3JhbmdlKSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjc3MDpcdFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc3MS1cdFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTUzLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XHRcdGlmIChza2JfemVyb2NvcHkoc2tiLCBlbnRza2IsIGRhdGFfbGVuLCBobGVuKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTQ1MT1zdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01MDAtXHRpZiAoZHAtXHUwMDNldXNlcl9mZWF0dXJlcyBcdTAwMjYgT1ZTX0RQX0ZfVU5BTElHTkVEKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTAxOlx0XHRobGVuID0gbWluKHNrYl96ZXJvY29weV9oZWFkbGVuKHNrYiksIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01MDItXHRlbHNlXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg3LVx0LyogT25seSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBoZWFkZXIsIHBhY2tldCBkYXRhIGlzIGFkZGVkXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1ODg6XHQgKiBpbiBza2JfemVyb2NvcHkoKSAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg5LVx0aWYgKCEobmxhID0gbmxhX3Jlc2VydmUodXNlcl9za2IsIE9WU19QQUNLRVRfQVRUUl9QQUNLRVQsIDApKSkge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5NC1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjU5NTpcdGVyciA9IHNrYl96ZXJvY29weSh1c2VyX3NrYiwgc2tiLCBza2JfbGVuLCBobGVuKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5Ni1cdGlmIChlcnIpXG4tLVxubmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbi0tXG5uZXQveGRwL3hzay5jLTEwMDgtXG5uZXQveGRwL3hzay5jOjEwMDk6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTEwMTAtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jPTEwODU9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy0xMDkyLVx0aWYgKGRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfVFhfU0tCX05PX0xJTkVBUikge1xubmV0L3hkcC94c2suYzoxMDkzOlx0XHRza2IgPSB4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHhzLCBkZXNjKTtcbm5ldC94ZHAveHNrLmMtMTA5NC1cdFx0aWYgKElTX0VSUihza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg4NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzLCBzcGVjaWZpY2FsbHkgYHNrYl96ZXJvY29weWAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHplcm8tY29weSBvcGVyYXRpb25zLCBhbmQgdGhhdCYjMzk7cyB1c2VkIGluIGJvdGggdGhlIE5ldGZpbHRlciBOZXRsaW5rIFF1ZXVlIGltcGxlbWVudGF0aW9uIGFuZCB3aXRoaW4gT3BlbiB2U3dpdGNoJiMzOTtzIGRhdGFwYXRoLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhIGNoYW5nZSB0byBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgd2hpY2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBUQ1Agc2VuZCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZS4KClRoZSBPcGVuIHZTd2l0Y2ggY2hhbmdlIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIGF0IGZpcnN0IGdsYW5jZS4gVGhleSYjMzk7cmUgZXhwbGljaXRseSBhZGRpbmcgYSBgIXNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBjaGVjayB0byBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbGlrZWx5IGFkZHJlc3NlcyBzb21lIGtpbmQgb2YgZnJhZ21lbnRhdGlvbiBpc3N1ZSBvciB6ZXJvLWNvcHkgcmVsaWFiaWxpdHkgcHJvYmxlbSB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCB1c2VyIHNwYWNlIHBhY2tldCBxdWV1aW5nIHBhdGguIExldCBtZSBndWVzcywgbWF5YmUgdGhlcmUmIzM5O3MgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiBmcmFnbWVudGVkIHNrYnMgYW5kIHplcm8tY29weSBvcGVyYXRpb25zLCBhbmQgdGhpcyBjaGVjayBpcyBtZWFudCB0byBwcm90ZWN0IGFnYWluc3Qgc29tZSBraW5kIG9mIGNvcnJ1cHRpb24gb3IgbWlzYmVoYXZpb3IuCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYENPTkZJR19PUEVOVlNXSVRDSGAgYW5kIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJJiMzOTttIGFscmVhZHkgc2VlaW5nIHNvbWUgc3BlY2lmaWMgcG9pbnRzIG9mIGNvbm5lY3Rpb24sIHdoaWNoIGluZGljYXRlcyB0byBtZSB0aGF0IGFueSBidWcgaGVyZSB3b3VsZCBpbXBhY3QgYm90aCBzeXN0ZW1zLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHdpbGwgZXhhbWluZSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGlzIGNoZWNrIGFuZCB3aGVyZSB0aGUgb3JpZ2luYWwgZmFpbHVyZSB3YXMgaWRlbnRpZmllZC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgcGF0Y2gmIzM5O3MgbG9naWMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfdXNlcnNwYWNlX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xMjc9c3RhdGljIGludCBxdWV1ZV9nc29fcGFja2V0cyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMC1cdFx0XHQgICAgIHVpbnQzMl90IGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMzE6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICosXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzItXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTMyOT1pbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM0NS1cdGlmICghc2tiX2lzX2dzbyhza2IpKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzQ2Olx0XHRlcnIgPSBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KGRwLCBza2IsIGtleSwgdXBjYWxsX2luZm8sIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDctXHRlbHNlXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzY2PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTYtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzozOTc6XHRcdGVyciA9IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbywgY3V0bGVuKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5OC1cdFx0aWYgKGVycilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NDE9c3RhdGljIHZvaWQgcGFkX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1MC1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjQ1MTpzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkwNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBQZXJmb3JtYW5jZSBpbiBPcGVuIHZTd2l0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gT3BlbiB2U3dpdGNoIHBlcmZvcm1hbmNlIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy4gRmlyc3QsIEkga25vdyB0aGF0IGBvdnNfZHBfdXBjYWxsYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHB1c2hpbmcgdGhpbmdzIGZyb20gdGhlIGRhdGFwYXRoIHVwIHRvIHVzZXJzcGFjZS4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGludGVyYWN0aW9uLiBUaGVuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFRDUCBzaWRlIG9mIHRoaW5ncywgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHdoZXJlIHRoZSBUQ1Agc2VuZCBvcGVyYXRpb25zIGtpY2sgb2ZmLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhpcyBpcyBhIGtleSBzcG90IHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gVENQIGRhdGEgdHJhbnNmZXIuCgpJIGFsc28gc2VlIHRoYXQgYHNrYl96ZXJvY29weWAgaXMgaW1wb3J0YW50OyBpdCBzaG93cyB1cCBpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBpbiBPcGVuIHZTd2l0Y2gmIzM5O3MgZGF0YXBhdGggY29kZSAoYGRhdGFwYXRoLmNgKS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYXMgemVyb2NvcHkgaXMgYWxsIGFib3V0IG9wdGltaXppbmcgZGF0YSB0cmFuc2ZlciBieSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcywgd2hpY2ggc2hvdWxkIGhhdmUgYSBwcmV0dHkgYmlnIHBlcmZvcm1hbmNlIGltcGFjdC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGluIHRoZSBrZXJuZWwmIzM5O3MgVENQIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoZSBwYWNrZXQgaXMgYWN0dWFsbHkgc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0PTEzPXVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9ERUxBWUVEQUNLTE9DS0VEICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9kZWxhY2tfdGltZXJfaGFuZGxlcix0Y3BfZGVsYWNrX3RpbWVyXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvc25tcC5yc3Q6MTQ6dW5zaWduZWRfbG9uZyAgTElOVVhfTUlCX1RDUEFVVE9DT1JLSU5HICAgICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3B1c2gsdGNwX3NlbmRtc2dfbG9ja2VkXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvc25tcC5yc3QtMTUtdW5zaWduZWRfbG9uZyAgTElOVVhfTUlCX1RDUEZST01aRVJPV0lORE9XQURWICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3NlbGVjdF93aW5kb3csdGNwX3RyYW5zbWl0LXNrYlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmM9MzIzPXN0YXRpYyBpbnQgc2l3X3RjcF9zZW5kcGFnZXMoc3RydWN0IHNvY2tldCAqcywgc3RydWN0IHBhZ2UgKipwYWdlLCBpbnQgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmMtMzQ2LVx0XHRsb2NrX3NvY2soc2spO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfcXBfdHguYzozNDc6XHRcdHJ2ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2csIGJ5dGVzKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmMtMzQ4LVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTM2Nz1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjM2ODppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL25ldC90Y3AuaC0zNjktaW50IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgKmNvcGllZCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaD0yODk9VFJBQ0VfRVZFTlQodGNwX3JldHJhbnNtaXRfc3luYWNrLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oLTMzNC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oOjMzNTpUUkFDRV9FVkVOVCh0Y3Bfc2VuZG1zZ19sb2NrZWQsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaC0zMzYtXHRUUF9QUk9UTyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTY2NTY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmF3X3RwX251bGxfYXJncyByYXdfdHBfbnVsbF9hcmdzW10gPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy02NzM2LVx0eyBcJiMzNDt0Y3Bfc2VuZF9yZXNldFwmIzM0OywgMHgxMSB9LFxua2VybmVsL2JwZi9idGYuYzo2NzM3Olx0eyBcJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWRcJiMzNDssIDB4MTAwIH0sXG5rZXJuZWwvYnBmL2J0Zi5jLTY3MzgtXHQvKiB0ZWdyYV9hcGJfZG1hICovXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTEwNjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODUtXHQucmVhZF9za2JcdCAgID0gdGNwX3JlYWRfc2tiLFxubmV0L2lwdjQvYWZfaW5ldC5jOjEwODY6XHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4Ny1cdC5wZWVrX2xlblx0ICAgPSB0Y3BfcGVla19sZW4sXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExND1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxubmV0L2lwdjQvdGNwLmM6MTExNjppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTEyNDAtXG5uZXQvaXB2NC90Y3AuYzoxMjQxOlx0XHR0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2tiLCBzaXplX2dvYWwpO1xubmV0L2lwdjQvdGNwLmMtMTI0Mi1cbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDQ0LX1cbm5ldC9pcHY0L3RjcC5jOjE0NDU6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTE0NDYtXG5uZXQvaXB2NC90Y3AuYz0xNDQ3PWludCB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTQ1MS1cdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzoxNDUyOlx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNpemUpO1xubmV0L2lwdjQvdGNwLmMtMTQ1My1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTkxPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTEyMi1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbm5ldC9pcHY0L3RjcF9icGYuYzoxMjM6XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnaGRyLCBzaXplKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xMjQtXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjYwPWNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldDZfc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY4MS1cdC5zcGxpY2VfZW9mXHQgICA9IGluZXRfc3BsaWNlX2VvZixcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjgyOlx0LnNlbmRtc2dfbG9ja2VkICAgID0gdGNwX3NlbmRtc2dfbG9ja2VkLFxubmV0L2lwdjYvYWZfaW5ldDYuYy02ODMtXHQuc3BsaWNlX3JlYWRcdCAgID0gdGNwX3NwbGljZV9yZWFkLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYz0xNjg9aW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtMTk0LVxubmV0L3Rscy90bHNfbWFpbi5jOjE5NTpcdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2csIHNpemUpO1xubmV0L3Rscy90bHNfbWFpbi5jLTE5Ni1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTIwNj1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjI1LVx0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFx1MDAyNmJ2ZWMsIDEsIHNnLVx1MDAzZWxlbmd0aCk7XG5uZXQveGZybS9lc3BpbnRjcC5jOjIyNjpcdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2doZHIsIHNnLVx1MDAzZWxlbmd0aCk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTIyNy1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jPTExNz1zdGF0aWMgYm9vbCBicGZfdGVzdF9kZWxheShzdHJ1Y3QgYnBmX3NvY2tfb3BzICpza29wcywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmMtMTg3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYzoxODg6U0VDKFwmIzM0O2ZlbnRyeS90Y3Bfc2VuZG1zZ19sb2NrZWRcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jOjE4OTppbnQgQlBGX1BST0codHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmMtMTkwLVx0ICAgICBzaXplX3Qgc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE2MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IC0gVENQIFNlbmQgUGF0aCoqCgpPa2F5LCBzbyBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBhIGtleSBmdW5jdGlvbiwgbm8gZG91YnQgYWJvdXQgaXQuIFRoZSBwcm9wb3NlZCBjaGFuZ2VzIHdhcnJhbnQgc29tZSBzZXJpb3VzIGZ1enppbmcuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY3JpdGljYWwgc3ltYm9sczogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgc3RhdGljIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGZ1enppbmcsIGJ1dCBpdCBzdWdnZXN0cyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IGl0JiMzOTtzICp1c2VkKi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQgZnVuY3Rpb24gYG92c19kcF91cGNhbGxgIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgdG8gdGhhdCBzdGF0aWMgZnVuY3Rpb24sIGFuZCB0aHVzIHRoZSBrZXkgYXJlYSBvZiBzdHVkeS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBwYXRoIHVwY2FsbCBtZWNoYW5pc20gdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2UsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlIGlzIGxpa2VseSB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2RwX3VwY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTg1OD1zdGF0aWMgaW50IG91dHB1dF91c2Vyc3BhY2Uoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkxNC1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTE1Olx0cmV0dXJuIG92c19kcF91cGNhbGwoZHAsIHNrYiwga2V5LCBcdTAwMjZ1cGNhbGwsIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkxNi19XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3OC1cdFx0dXBjYWxsLm1ydSA9IE9WU19DQihza2IpLVx1MDAzZW1ydTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3OTpcdFx0ZXJyb3IgPSBvdnNfZHBfdXBjYWxsKGRwLCBza2IsIGtleSwgXHUwMDI2dXBjYWxsLCBVMzJfTUFYKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4MC1cdFx0c3dpdGNoIChlcnJvcikge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMyOC1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMyOTppbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzMwLVx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMzNi1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMzNzpcdGlmICh0cmFjZV9vdnNfZHBfdXBjYWxsX2VuYWJsZWQoKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMzODpcdFx0dHJhY2Vfb3ZzX2RwX3VwY2FsbChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMzOS1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaD0zMjE9dm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICopO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg6MzIyOmludCBvdnNfZHBfdXBjYWxsKHN0cnVjdCBkYXRhcGF0aCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIzLVx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBjb25zdCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaD0xMj1UUkFDRV9FVkVOVChvdnNfZG9fZXhlY3V0ZV9hY3Rpb24sXG4tLVxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtODEtXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaDo4MjpUUkFDRV9FVkVOVChvdnNfZHBfdXBjYWxsLFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiB0aGUgRGF0YSBQbGFuZSoqCgpPa2F5LCBzbyBJIHRoaW5rIGBvdnNfZHBfdXBjYWxsYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRpdmluZyBpbnRvIHRoaXMuIFRoYXQgc2VlbXMgdG8gYmUgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBkYXRhIHBsYW5lLiBMZXQmIzM5O3Mgc2VlIGhvdyB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgcGVyZm9ybWFuY2UgY291bGQgYmUgaW1wYWN0ZWQuIEkgc2hvdWxkIGNoZWNrIGBuZm5ldGxpbmtfcXVldWUuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggcGFja2V0IGRhdGE7IHNwZWNpZmljYWxseSwgd2hhdCBjYWxscyBhcmUgYmVpbmcgbWFkZSB0byBgc2tiX3plcm9jb3B5YC4gVGhhdCB3b3VsZCBiZSBhIHNtYXJ0IHdheSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc2OS1cdFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlY29weV9yYW5nZSkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XHRcdGhsZW4gPSBza2JfemVyb2NvcHlfaGVhZGxlbihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXHRcdGhsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGhsZW4sIGRhdGFfbGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTU0Olx0XHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1NS1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgWmVyby1Db3B5IE1lY2hhbmlzbSBpbiBOZXR3b3JrIFBhY2tldCBDb25zdHJ1Y3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZWAgYW5kIHRyYWNpbmcgaXRzIGV4ZWN1dGlvbi4gSXQgbG9va3MgbGlrZSB0aGUga2V5IG9wZXJhdGlvbiBoZXJlIGlzIHRoZSBjYWxsIHRvIGBza2JfemVyb2NvcHlgLiAgUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHRlbGwuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJiMzOTttIGJldHRpbmcgdGhpcyBmdW5jdGlvbiBpcyBsZXZlcmFnaW5nIHRoZSB6ZXJvLWNvcHkgY2FwYWJpbGl0eSBvZiB0aGUga2VybmVsJiMzOTtzIHNvY2tldCBidWZmZXIgKHNrYikgdG8gZWZmaWNpZW50bHkgY29uc3RydWN0IGFuZCBtYW5hZ2UgbmV0d29yayBwYWNrZXRzIGZvciB0aGUgTmV0ZmlsdGVyIHF1ZXVlLiBJbnN0ZWFkIG9mIGEgZnVsbCBtZW1vcnkgY29weSwgd2hpY2ggd291bGQgYmUgaW5jcmVkaWJseSBpbmVmZmljaWVudCwgZXNwZWNpYWxseSBmb3IgbGFyZ2VyIHBheWxvYWRzLCB0aGlzIGlzIHByb2JhYmx5IGFib3V0IHNoYXJpbmcgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZSBjb3VudHMuIEl0IHNob3VsZCBhbGxvdyBkYXRhIGZyb20gb3RoZXIgYnVmZmVycyBvciBtZW1vcnkgcmVnaW9ucyB0byBiZSBpbmNvcnBvcmF0ZWQgZGlyZWN0bHkgaW50byB0aGUgb3V0Z29pbmcgc2tiIHdpdGhvdXQgdW5uZWNlc3NhcnkgZGF0YSBkdXBsaWNhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYHNrYl96ZXJvY29weWAgaXRzZWxmIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgc3BlY2lmaWNhbGx5LCBob3cgaXQmIzM5O3MgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSByZWdpb25zIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGxvY2tpbmcgaXMgaW52b2x2ZWQgYW5kIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZWxlbWVudHMgb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSwgaG93IHRoZSBkYXRhIHNvdXJjZSBpcyBzcGVjaWZpZWQgYW5kIHJlZmVyZW5jZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDQ9c3RhdGljIHN0cnVjdCBza19idWZmICpcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzA1Om5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzA2LVx0XHRcdCAgIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzQ9X19uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05ODEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk4MjpcdG5za2IgPSBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShuZXQsIHF1ZXVlLCBlbnRyeSwgXHUwMDI2cGFja2V0X2lkX3B0cik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk4My1cdGlmIChuc2tiID09IE5VTEwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxOTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIHBhY2tldCBoYW5kbGluZzoKCioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBRdWV1ZTogQSBUcmFjZSBUaHJvdWdoIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZmxvdyBvZiBwYWNrZXRzLCBhbmQgd2hlcmUgdGhleSB1bHRpbWF0ZWx5IGVuZCB1cC4gVGhlIGNyaXRpY2FsIGp1bmN0dXJlIHNlZW1zIHRvIGJlIGBfX25mcW5sX2VucXVldWVfcGFja2V0YC4gVGhpcyBmdW5jdGlvbiwgZnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGlzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIHBhY2tldHMgZGVzdGluZWQgZm9yIHRoZSBOZXRmaWx0ZXIgcXVldWUgZ2V0Li4uIHdlbGwsIGVucXVldWVkLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgc3RlcC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0LCB0aGUgYWN0IG9mIHB1dHRpbmcgdGhlIHBhY2tldCBpbnRvIHRoZSBxdWV1ZSB0byBiZSBwcm9jZXNzZWQsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIHN0ZXAgb2YgdGhlIHByb2Nlc3MuIEkgcmVhbGx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGl0cyByb2xlIGluIHRoZSBncmVhdGVyIGFyY2hpdGVjdHVyZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhlIGNhbGxpbmcgY29udGV4dCBpcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZnFubF9lbnF1ZXVlX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzM9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NzQ6X19uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk3NS1cdFx0XHRzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA3Nj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwNzc6X19uZnFubF9lbnF1ZXVlX3BhY2tldF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDc4LVx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg3LVx0XHRlbnRyeS1cdTAwM2Vza2IgPSBza2I7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwODg6XHRcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg5LVx0XHRpZiAocmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA5OC1cdFx0ZW50cnlfc2VnLVx1MDAzZXNrYiA9IHNrYjtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA5OTpcdFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeV9zZWcpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTAwLVx0XHRpZiAocmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTEwNz1uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBpbnQgcXVldWVudW0pXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ1LVx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgKChxdWV1ZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZRQV9DRkdfRl9HU08pIFx1MDAyNlx1MDAyNiAhc2tiX2lzX2dzb19zY3RwKHNrYikpKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTQ2Olx0XHRyZXR1cm4gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNDctXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTc1LVx0XHRpZiAoZXJyID09IDApXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjExNzY6XHRcdFx0ZXJyID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldF9nc28obmV0LCBxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3Ny1cdFx0XHRcdFx0XHRcdHNlZ3MsIGVudHJ5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwOTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBGaWx0ZXIgUXVldWUqKgoKT2theSwgc28gSSYjMzk7bSBzdGFydGluZyBmcmVzaCBvbiB0aGlzLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZ2V0IG15IGJlYXJpbmdzLiBJIG5lZWQgYSBjbGVhciBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHdob2xlIG5ldHdvcmsgZmlsdGVyaW5nIHF1ZXVlIGlzIHdvcmtpbmcuIFJpZ2h0LCBzbyBJIHNlZSBpdDsgYG5mcW5sX2VucXVldWVfcGFja2V0YCBpcyB0aGUgZGVzaWduYXRlZCBlbnRyeSBwb2ludC4gVGhhdCYjMzk7cyB3aGVyZSBpdCBhbGwgYmVnaW5zLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwcm9jZXNzZXMgYW5kIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoLCBhbmQgd2hhdCB0aGUgY29udHJvbCBmbG93IGxvb2tzIGxpa2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZxbmxfZW5xdWV1ZV9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3Mz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk3NDpfX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTc1LVx0XHRcdHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMDc2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA3NzpfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNzgtXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODctXHRcdGVudHJ5LVx1MDAzZXNrYiA9IHNrYjtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA4ODpcdFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODktXHRcdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDk4LVx0XHRlbnRyeV9zZWctXHUwMDNlc2tiID0gc2tiO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDk5Olx0XHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5X3NlZyk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDAtXHRcdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMTA2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTEwNzpuZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBpbnQgcXVldWVudW0pXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE0NS1cdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GUUFfQ0ZHX0ZfR1NPKSBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc29fc2N0cChza2IpKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE0NjpcdFx0cmV0dXJuIF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3NS1cdFx0aWYgKGVyciA9PSAwKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTc2Olx0XHRcdGVyciA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKG5ldCwgcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzctXHRcdFx0XHRcdFx0XHRzZWdzLCBlbnRyeSk7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfaGFuZGxlciBuZnFoID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODAxOlx0Lm91dGZuXHRcdD0gbmZxbmxfZW5xdWV1ZV9wYWNrZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MDItXHQubmZfaG9va19kcm9wXHQ9IG5mcW5sX25mX2hvb2tfZHJvcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBQbGFuZSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5mcW5sX2VucXVldWVfcGFja2V0YCBmdW5jdGlvbiDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBhY3RpbmcgYXMgYSBxdWV1ZSBoYW5kbGVyLCBzbyB0aGF0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIG1vdmVzIGFyb3VuZCwgYW5kIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcG90ZW50aWFsbHkgaW52b2x2ZWQuCgpgc2tiX3plcm9jb3B5YCBpcyBleHBvcnRlZCwgc28gdGhhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHBvaW50IG9mIGludGVyZXN0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNpcmNsZSBiYWNrIHRvIHRoYXQgbGF0ZXIsIGFzIHRoYXQgc2VlbXMgcmVsZXZhbnQgZm9yIHplcm8tY29weSBtZWNoYW5pc21zLiBTaW1pbGFybHksIGJvdGggYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGBvdnNfZHBfdXBjYWxsYCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSBvZiB0aGVpciByb2xlcyBpbiBUQ1AgZGF0YSB0cmFuc2ZlciBhbmQgT3BlbiB2U3dpdGNoIHVwY2FsbHMsIHJlc3BlY3RpdmVseS4gVGhhdCBzdWdnZXN0cyBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGF0YSBwbGFuZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGZpbHRlcmluZyBhbmQgcXVldWluZy4KCkkgbmVlZCB0byBjb25maXJtIHNvbWUgYXNzdW1wdGlvbnMsIHNvLCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIHNlZWluZyBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGFuZCBgT1BFTlZTV0lUQ0hgLiBUaGUgcHJlc2VuY2Ugb2YgYm90aCBjbGVhcmx5IGZsYWdzIHRoYXQgdGhpcyBoYXMgdG8gZG8gd2l0aCBuZXRmaWx0ZXIgYW5kIE9wZW4gdlN3aXRjaCwgYXMgZXhwZWN0ZWQuCgpGaW5hbGx5LCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBpbiB0aGVyZS4gSXQmIzM5O3MgYSBrZXkgcGxhY2UgdG8gbG9vayBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBvciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLCBvciB0aGF0IHRoZSBpbml0aWFsIGNvbnRleHQgaXMgbWlzc2luZy4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBpbiBkcmF3aW5nIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgTkVURklMVEVSX05FVExJTktfUVVFVUUqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgdXN1YWxseSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWFyY2ggZm9yIHRoYXQgc3BlY2lmaWMgc3ltYm9sLiBIb3BlZnVsbHksIGl0JiMzOTtzIGRlZmluZWQgYW5kIHdlbGwtZG9jdW1lbnRlZCB0aGVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJvdW5kIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGRlZmluaXRpdmUgcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGRldGVybWluZSB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBhdmFpbGFiaWxpdHkgb3IgYmVoYXZpb3Igb2YgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyDigJMgd2hhdCB0aGluZ3MgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGJlY29tZXMgc2VsZWN0YWJsZSwgYW5kIHdoYXQgbWlnaHQgYmUgY29uZmlndXJlZCBhbG9uZ3NpZGUgaXQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgbmV0ZmlsdGVyIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XHRoZWxwXG4gIDUxOlx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNTI6XHRcdCAgZm9yIGV4dGVuZGVkIGFjY291bnRpbmcgdmlhIE5GTkVUTElOSy5cbiAgNTM6XHRcbiAgNTQ6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbiAgNTU6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA1NjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNTc6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1ODpcdFx0aGVscFxuICA1OTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDYwOlx0XHQgIGZvciBxdWV1ZWluZyBwYWNrZXRzIHZpYSBORk5FVExJTksuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xuICA2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNjQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA2NTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNjg6XHRcdCAgZm9yIGxvZ2dpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYwOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBOZXR3b3JrIEZpbHRlcmluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBtb2R1bGUgYW5kLCBhcyBJIHN1c3BlY3RlZCwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWxpYW50IG9uIHRoZSBicm9hZGVyIGBORVRGSUxURVJfQURWQU5DRURgIGZlYXR1cmUuIFRoaXMgaXNuJiMzOTt0IHN1cnByaXNpbmcsIGJ1dCBJIGFsd2F5cyB2ZXJpZnkgdGhlc2UgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSBhIGNsZWFuIGJ1aWxkIGFuZCBhdm9pZCB1bmV4cGVjdGVkIGNvbmZsaWN0cy4gTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYE9QRU5WU1dJVENIYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0JiMzOTtsbCBsaWtlbHkgZGV0YWlsIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGZvciBhbiBgT1BFTlZTV0lUQ0hgIGludGVncmF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTM0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYCwgd2hpY2gsIG9mIGNvdXJzZSwgcmVsaWVzIGhlYXZpbHkgb24gYElORVRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIFRDUCBmdW5jdGlvbiwgc28gbm8gb2JzY3VyZSBjb25maWd1cmF0aW9ucyBzaG91bGQgYmUgaW1wYWN0aW5nIGl0IGRpcmVjdGx5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEZ1bmN0aW9uYWxseSwgdGhlc2UgY2hhbmdlcyBzZWVtIHNvdW5kIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnQgc29tZSBmdXp6aW5nLgoKTXkgZm9jdXMgc2hvdWxkIGJlIHNoYXJwIG9uIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBvdnNfZHBfdXBjYWxsYCBmb3IgdnVsbmVyYWJpbGl0eS4KCkFuZCBqdXN0IHRvIGJlIGNvbXBsZXRlLCBJIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBhcmUgZW5hYmxlZC4KCk5vdywgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgYHNrYl96ZXJvY29weWAgdXNhZ2UuIEkgc2VlIGl0JiMzOTtzIHVzZWQgaW4gYm90aCBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCB3aXRoaW4gYG9wZW52c3dpdGNoL2RhdGFwYXRoLmNgLCB0aGF0IG1ha2VzIHNlbnNlLiBXYWl0IGEgbWludXRlLi4uIGl0JiMzOTtzIGFsc28gdXNlZCBkaXJlY3RseSBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGl0c2VsZi4gVGhpcyBtZWFucyBpdCYjMzk7cyBwcmV0dHkgY2VudHJhbCB0byB0aGUgU0tCIG1hbmFnZW1lbnQuIEh1aCwgaXMgaXQgZXhwb3J0ZWQgYW55d2hlcmUgZWxzZT8gWWVhaCwgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHVzZWQgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBpbiBgc2tiX2NvcHlfYW5kX2NzdW1fZGV2YD8gTm8sICpgc2tiX3plcm9jb3B5YCogaXMgZXhwb3J0ZWQuIExldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCBgc2tiX3plcm9jb3B5YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oPTQxMz1leHRlcm4gc3RydWN0IGRlbnRyeSAqeGVuX25ldGJhY2tfZGJnX3Jvb3Q7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE2OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE4OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSk7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTktXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNDktICogY291bnRlciBiZWNhdXNlIGNvcmUgZHJpdmVyIGNhbGxzIGludG8geGVudmlmX3plcm9jb3B5X2NhbGxiYWNrXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1MDogKiB3aGljaCBjYWxscyB4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlLlxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1Mjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTUzLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTgtXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy02MC17XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEwLVx0XHRcdHN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdDtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjExOlx0XHRcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgbnNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxMi1cdFx0XHRpZiAoeGVudmlmX2hhbmRsZV9mcmFnX2xpc3QocXVldWUsIHNrYikpIHtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNS1cdFx0XHRcdFx0XHQgICBcJiMzNDtOb3QgZW5vdWdoIG1lbW9yeSB0byBjb25zb2xpZGF0ZSBmcmFnX2xpc3QhXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2Olx0XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTctXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzMy1cdFx0XHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnKVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMzQ6XHRcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTI3Mi1cdFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2VkZXN0cnVjdG9yX2FyZykge1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzQtXHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfemVyb2NvcHlfc2VudCYjNDM7JiM0Mzs7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTEyODM9c3RhdGljIHZvaWQgeGVudmlmX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTQtXHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X2ZhaWwmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XHR4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHF1ZXVlKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3Njg9aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3MTpzdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVx0XHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzktXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjY5PXZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNzA6dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNzItXHRcdCBpbnQgbGVuLCBpbnQgaGxlbik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTgxMj1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfcmVhbGxvYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxubmV0L2NvcmUvc2tidWZmLmM6MTgxNDpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0xODE1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODM0PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cdTAwM2VlZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1pFUk9DT1BZIHx8XG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTg3Mi1cdFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTEyOmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTYxLVxubmV0L2NvcmUvc2tidWZmLmM6MTk2MjpzdGF0aWMgaW50IHNrYl96ZXJvY29weV9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKm9yaWcsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVx0XHRcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI0OS1cdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTA6XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTEtXHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzMC0gLyoqXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXG5uZXQvY29yZS9za2J1ZmYuYy0zODMyLSAqXHRAZnJvbTogc291cmNlIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzQtICpcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAmIzM5O3RvJiMzOTsgc2tiIHBhc3NlZFxubmV0L2NvcmUvc2tidWZmLmM6MzgzNTogKlx0aW50byBza2JfemVyb2NvcHkoKS5cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzYtICovXG5uZXQvY29yZS9za2J1ZmYuYz0zODM3PXVuc2lnbmVkIGludFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Mzkte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1NTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU2LVxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTg6ICpcdHNrYl96ZXJvY29weSAtIFplcm8gY29weSBza2IgdG8gc2tiXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Njc6ICpcdFRoZSBgaGxlbmAgYXMgY2FsY3VsYXRlZCBieSBza2JfemVyb2NvcHlfaGVhZGxlbigpIHNwZWNpZmllcyB0aGVcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3Nzpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODc4LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTIxLVx0fVxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTIzLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5NDMtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzk0NDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00MjQyPXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQyNDktXHRza2Jfc2hpbmZvKHNrYjEpLVx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgemNfZmxhZ3M7XG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XG5uZXQvY29yZS9za2J1ZmYuYy00MjUxLVx0aWYgKGxlbiBcdTAwM2MgcG9zKVx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3ODg9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxubmV0L2NvcmUvc2tidWZmLmM6NTAxMjpcdFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01MDEzLVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXHRcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTg6XHRcdFx0XHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTAxOS1cdFx0XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2NS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEyNjY6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTEzMzktXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYy0xMzQxLVx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxODMyOlx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc2OS1cdFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlY29weV9yYW5nZSkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XHRcdGhsZW4gPSBza2JfemVyb2NvcHlfaGVhZGxlbihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXHRcdGhsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGhsZW4sIGRhdGFfbGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTU0Olx0XHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1NS1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTE9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVx0aWYgKGRwLVx1MDAzZXVzZXJfZmVhdHVyZXMgXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUwMTpcdFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAyLVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4Ny1cdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4Olx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OS1cdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTQtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTYtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9OTY0PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L3hkcC94c2suYy0xMDA4LVxubmV0L3hkcC94c2suYzoxMDA5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xMDEwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYz0xMDg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTA5Mi1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTA5MzpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTEwOTQtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA4MAoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBza2JfemVyb2NvcHkgVXNhZ2UqKgoKT2theSwgc28gYHNrYl96ZXJvY29weWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5LCBzcGVjaWZpY2FsbHkgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCBhbmQgYG9wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGF0IG1lYW5zIGBPUEVOVlNXSVRDSGAgYW5kIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYXJlIHNvbGlkIGNvbmZpZyBvcHRpb25zIHRvIGZvY3VzIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IGBza2JfemVyb2NvcHlgIGludGVyYWN0cyB3aXRoIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgb3ZzX2RwX3VwY2FsbGAgaW4gdGhlc2UgY29udGV4dHMuIFRob3NlIGFyZSBrZXkgc3ltYm9scyB0byBrZWVwIGluIG1pbmQuCgpKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBMZXQmIzM5O3Mgc2VlIGlmIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaGFzIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBBaGEsIGl0IHB1bGxzIGluIGBORVRGSUxURVJfQURWQU5DRURgLCB3aGljaCBpcyBhIGJvb2xlYW4sIGRlZmF1bHRpbmcgdG8gJiMzNDt5ZXMuJiMzNDsgTm8gc3VycHJpc2VzIHRoZXJlOyB0aGF0JiMzOTtzIGV4cGVjdGVkLgoKQWxyaWdodCwgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSByZWFkeSB0byBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O292c19kcF91cGNhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3plcm9jb3B5YCBhbmQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gYWRkIGNoZWNrcyBmb3IgYHNrYl9mcmFnc19yZWFkYWJsZWAuIEl0IGFsc28gbW9kaWZpZXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIG9wZW52c3dpdGNoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiBUaGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXMgdXNlZCBieSBvcGVudnN3aXRjaCBhbmQgbmZuZXRsaW5rX3F1ZXVlLCBzbyB3ZSBpbmNsdWRlIHRoZWlyIGNvbmZpZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtvdnNfZHBfdXBjYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl96ZXJvY29weWAgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIGFkZCBjaGVja3MgZm9yIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBJdCBhbHNvIG1vZGlmaWVzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBvcGVudnN3aXRjaC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBvcGVudnN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4gVGhlIGBza2JfemVyb2NvcHlgIGZ1bmN0aW9uIGlzIHVzZWQgYnkgb3BlbnZzd2l0Y2ggYW5kIG5mbmV0bGlua19xdWV1ZSwgc28gd2UgaW5jbHVkZSB0aGVpciBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXCYjMzQ7dW5yZWFkYWJsZVwmIzM0OyBza2IgZnJhZ21lbnRzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgbWVtb3J5IChlLmcuLCBUQ1AgZGV2bWVtKS4gSXQgZW5zdXJlcyB0aGF0IHVucmVhZGFibGUgZnJhZ21lbnRzIGFyZSBub3QgbWl4ZWQgd2l0aCByZWFkYWJsZSBvbmVzLCBjb3JyZWN0bHkgcHJvcGFnYXRlcyB0aGUgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB6ZXJvLWNvcHlpbmcgc2ticywgYW5kIHByZXZlbnRzIHVucmVhZGFibGUgc2ticyBmcm9tIGJlaW5nIHF1ZXVlZCB0byB1c2Vyc3BhY2Ugb3IgY29sbGFwc2VkIGluY29ycmVjdGx5IGluIFRDUC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciBzdGFjayB2YXJpYWJsZXMpIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzIHdoZW4gZGVhbGluZyB3aXRoIERNQS1tYXBwZWQgZGV2aWNlIG1lbW9yeSwgd2hpY2ggYXJlIG5vdCB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjBhN2ZhY2Y0ZDczNTEyNTk4ZGFmOWJlN2VkM2E2NGY5MjU3ZDIzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE5OjI4OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMzg3MCw3ICYjNDM7Mzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTsKICAqCVJldHVybiB2YWx1ZToKICAqCTA6IGV2ZXJ5dGhpbmcgaXMgT0sKICAqCS1FTk9NRU06IGNvdWxkbiYjMzk7dCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5Ci0gKgktRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5CiYjNDM7ICoJLUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeSwgb3IgcmVhZGFibGUgaGVhZAomIzQzOyAqICAgICAgcGF5bG9hZCB3b3VsZCBiZSBtaXhlZCB3aXRoIHVucmVhZGFibGUgZnJhZ3MuCiAgKi8KIGludAogc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQpAQCAtMzkwNSwxMCAmIzQzOzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCQl9CiAJfQogCiYjNDM7CWlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pICZhbXA7JmFtcDsgaiAmZ3Q7IDAgJmFtcDsmYW1wOyBsZW4pIHsKJiM0MzsJCXB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tJmd0O2hlYWQpKTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAogCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewogCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CQlpZiAoaiAmZ3Q7IDApCiYjNDM7CQkJcHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS0mZ3Q7aGVhZCkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTsKQEAgLTM5MjgsNiAmIzQzOzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCiAJfQogCXNrYl9zaGluZm8odG8pLSZndDtucl9mcmFncyA9IGo7CiAKJiM0MzsJaWYgKGkgJmd0OyAwICZhbXA7JmFtcDsgZnJvbS0mZ3Q7dW5yZWFkYWJsZSkKJiM0MzsJCXRvLSZndDt1bnJlYWRhYmxlID0gMTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmI0MjM3ZDBlOTk0ZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0xMjQwLDcgJiM0MzsxMjQwLDggQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAKIAkJdHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTsKIAotCQlpZiAoY29weSAmbHQ7PSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpKSB7CiYjNDM7CQlpZiAoY29weSAmbHQ7PSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpIHx8CiYjNDM7CQkgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7CiAJCQlib29sIGZpcnN0X3NrYjsKIAogbmV3X3NlZ21lbnQ6CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC00NjcsNiAmIzQzOzQ2Nyw5IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghZHBfaWZpbmRleCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwogCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFuc2tiKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgVW5yZWFkYWJsZSBTS0IgRnJhZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhczogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGUgY29tbW9uIHRocmVhZCBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGVzZSAmIzM0O3VucmVhZGFibGUmIzM0OyBTS0IgZnJhZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGFyZSByZWxhdGVkIHRvIGRldmljZSBtZW1vcnkg4oCTIFRDUCBkZXZtZW0gc3BlY2lmaWNhbGx5LCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O3ZlIHNlZW4gdGhpcyBraW5kIG9mIGNvbnN0cnVjdCB1c2VkIGJlZm9yZS4KCkluIGBza2JfemVyb2NvcHlgLCB0aGUgcGF0Y2ggYWRkcyBjaGVja3MgYXJvdW5kIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBUaGUgZmlyc3Qgb25lIGxvb2tzIHRvIG1lIGxpa2UgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgY29weSBpZiB0aGUgc291cmNlIFNLQiBoYXMgdW5yZWFkYWJsZSBmcmFncyBhbmQgc29tZXRoaW5nIGhhcyBhbHJlYWR5IGJlZW4gY29waWVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzdXNwZWN0IHRoaXMgaXMgdHJ5aW5nIHRvIGF2b2lkIGEgYHB1dF9wYWdlYCBvbiBhbiBpbnZhbGlkIHBhZ2UuIFRoZSBzZWNvbmQgb25lIHNlZW1zIHRvIHByb3BhZ2F0ZSB0aGUgYHVucmVhZGFibGVgIGZsYWcgdG8gdGhlIGRlc3RpbmF0aW9uIFNLQiBpZiB0aGUgc291cmNlIGhhZCBpdCwgc28gd2UgZG9uJiMzOTt0IGFjY2lkZW50YWxseSB0cnkgdG8gcmVhZCBpdCBsYXRlci4KCmB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIHRvIHNlZSBpZiB3ZSBjb3VsZCBjb2xsYXBzZSBTS0JzLCBidXQgbm93IGl0JiMzOTtzIGFkZGVkIGEgY2hlY2sgZm9yIHRoZSAqcmVhZGFiaWxpdHkqIG9mIGZyYWdzIGluIHJlbGF0aW9uIHRvIHRoZSBgYmluZGluZ2AgZmxhZy4gVGhpcyBzY3JlYW1zIERNQSBjb25zaWRlcmF0aW9ucy4gSSB0aGluayB0aGUgaW50ZW50aW9uIGlzIHRvIGVuc3VyZSB0aGUgc2tiIGNhbiBiZSBzYWZlbHkgd3JpdHRlbiwgYW5kIHRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiBmaXguIEl0JiMzOTtzIG1ha2luZyBzdXJlIHdlIGRvbiYjMzk7dCB0cnkgdG8gc2VuZCBkZXZpY2UgbWVtb3J5IGFzIGEgdXNlciBidWZmZXIgd2hlcmUgaXQgZG9lc24mIzM5O3QgYmVsb25nLgoKRmluYWxseSwgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGhhcyBhIHNpbXBsZSBjaGVjay4gSWYgdGhlIFNLQiBpc24mIzM5O3QgcmVhZGFibGUsIGl0JiMzOTtzIHJlamVjdGVkLiBUaGlzIGlzIHByb2JhYmx5IHRoZSBtb3N0IGNydWNpYWwgcGFydCBiZWNhdXNlLCBpZiB3ZSAqZGlkKiBxdWV1ZSBhbiB1bnJlYWRhYmxlIFNLQiB0byB1c2Vyc3BhY2UsIHdlJiMzOTtkIGJlIHNldHRpbmcgdXAgYSBjcmFzaCBvciBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyBpbmZvcm1hdGlvbiBsZWFrIHdoZW4gYSB1c2VyIHByb2Nlc3MgdHJpZWQgdG8gYWNjZXNzIGl0LiBOb3csIHRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgICpjb3VsZCogaGF2ZSBiZWVuIGNhbGxpbmcgYHNrYl9jb3B5X2JpdHNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCB3b3VsZCBoYXZlIHRyaWdnZXJlZCBhIGZhdWx0IGlmIHdlIHRyaWVkIHRvIGNvcHkgdGhvc2UgZGV2aWNlIG1lbW9yeSByZWdpb25zIGRpcmVjdGx5IHRvIHVzZXJzcGFjZS4gV2UgbmVlZCB0byBwcmV2ZW50IHRoaXMuCgpJIG5lZWQgdG8gY29uZmlybSB3aGF0IGBza2JfZnJhZ3NfcmVhZGFibGVgIGFjdHVhbGx5ICpkb2VzKi4gSSBiZXQgaXQmIzM5O3MgY2hlY2tpbmcgc29tZSBmbGFncyByZWxhdGVkIHRvIERNQSBtYXBwaW5ncyBvciBwYWdlIHRhYmxlIGVudHJpZXMuIExldCBtZSBydW4gYSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4gVW5kZXJzdGFuZGluZyB0aGF0IGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gY29uZmlybWluZyBteSBhc3N1bXB0aW9ucyBhYm91dCBkZXZpY2UgbWVtb3J5IGFuZCBETUEgc2FmZXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfZnJhZ3NfcmVhZGFibGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9NDcxPXN0YXRpYyBuZXRkZXZfdHhfdCBibnh0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy01NzUtXHRpZiAoZnJlZV9zaXplID09IGJwLVx1MDAzZXR4X3Jpbmdfc2l6ZSBcdTAwMjZcdTAwMjYgbGVuZ3RoIFx1MDAzYz0gYnAtXHUwMDNldHhfcHVzaF90aHJlc2ggXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzo1NzY6XHQgICAgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgXHUwMDI2XHUwMDI2ICFsZmxhZ3MpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTU3Ny1cdFx0c3RydWN0IHR4X3B1c2hfYnVmZmVyICp0eF9wdXNoX2J1ZiA9IHR4ci1cdTAwM2V0eF9wdXNoO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTg4ND1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODkwLS8qIFJldHVybiB0cnVlIGlmIGZyYWdzIGluIHRoaXMgc2tiIGFyZSByZWFkYWJsZSBieSB0aGUgaG9zdC4gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg5MTpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZyYWdzX3JlYWRhYmxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4OTIte1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTEyMzM9c3RhdGljIGlubGluZSBib29sIHRjcF9za2JfY2FuX2NvbGxhcHNlKGNvbnN0IHN0cnVjdCBza19idWZmICp0byxcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0xMjM5LVx0XHQgICAgICBza2JfcHVyZV96Y29weV9zYW1lKHRvLCBmcm9tKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbmV0L3RjcC5oOjEyNDA6XHRcdCAgICAgIHNrYl9mcmFnc19yZWFkYWJsZSh0bykgPT0gc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTEyNDEtfVxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9Mzg5PXN0YXRpYyBpbnQgX19za2JfZGF0YWdyYW1faXRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNDEwLVxubmV0L2NvcmUvZGF0YWdyYW0uYzo0MTE6XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L2NvcmUvZGF0YWdyYW0uYy00MTItXHRcdGdvdG8gc2hvcnRfY29weTtcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzNT1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzktXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjY0MDpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTY0MS1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzE0LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MTU6XHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTcxNi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxubmV0L2NvcmUvZGV2LmM9MzU2OT1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy0zNTgxLVxubmV0L2NvcmUvZGV2LmM6MzU4MjpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcbm5ldC9jb3JlL2Rldi5jLTM1ODMtXHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTM5OTE9c3RhdGljIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3VucmVhZGFibGVfc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtMzk5Ni1cbm5ldC9jb3JlL2Rldi5jOjM5OTc6XHRpZiAobGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpIHx8XG5uZXQvY29yZS9kZXYuYy0zOTk4LVx0XHQgICBkZXYtXHUwMDNlbmV0bWVtX3R4ID09IE5FVE1FTV9UWF9OT19ETUEpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5OTc9aW50IHNrYl9jb3B5X3VidWZzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIwMDYtXG5uZXQvY29yZS9za2J1ZmYuYzoyMDA3Olx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTIwMDgtXHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIxODItXG5uZXQvY29yZS9za2J1ZmYuYzoyMTgzOlx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTIxODQtXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDI9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1MTItXG5uZXQvY29yZS9za2J1ZmYuYzoyNTEzOlx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MTQtXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI4MDg9c3RhdGljIGludCBwc2tiX3RyaW1fcmNzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yODExLVxubmV0L2NvcmUvc2tidWZmLmM6MjgxMjpcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMjgxMy1cdFx0c2tiLVx1MDAzZWNzdW0gPSBjc3VtX2Jsb2NrX3N1Yihza2ItXHUwMDNlY3N1bSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yODc1PXZvaWQgKl9fcHNrYl9wdWxsX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlbHRhKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI4ODItXG5uZXQvY29yZS9za2J1ZmYuYzoyODgzOlx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI4ODQtXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTMwMTk9aW50IHNrYl9jb3B5X2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgdm9pZCAqdG8sIGludCBsZW4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzAzOC1cbm5ldC9jb3JlL3NrYnVmZi5jOjMwMzk6XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L2NvcmUvc2tidWZmLmMtMzA0MC1cdFx0Z290byBmYXVsdDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zMjA1PXN0YXRpYyBib29sIF9fc2tiX3NwbGljZV9iaXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzIyNy1cdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6MzIyODpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9za2J1ZmYuYy0zMjI5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzQ0OD1pbnQgc2tiX3N0b3JlX2JpdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zNDY2LVxubmV0L2NvcmUvc2tidWZmLmM6MzQ2NzpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9za2J1ZmYuYy0zNDY4LVx0XHRnb3RvIGZhdWx0O1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM1Mjk9X193c3VtIHNrYl9jaGVja3N1bShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBfX3dzdW0gY3N1bSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zNTQ2LVxubmV0L2NvcmUvc2tidWZmLmM6MzU0NzpcdGlmIChXQVJOX09OX09OQ0UoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM1NDgtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM2MTE9X193c3VtIHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zNjMyLVxubmV0L2NvcmUvc2tidWZmLmM6MzYzMzpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9za2J1ZmYuYy0zNjM0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zNzAwPXUzMiBza2JfY3JjMzJjKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiBjcmMpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzcxNC1cbm5ldC9jb3JlL3NrYnVmZi5jOjM3MTU6XHRpZiAoV0FSTl9PTl9PTkNFKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkpXG5uZXQvY29yZS9za2J1ZmYuYy0zNzE2LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc3PXNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTA4LVxubmV0L2NvcmUvc2tidWZmLmM6MzkwOTpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFx1MDAyNlx1MDAyNiBqIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4pIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MTAtXHRcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXHUwMDNlaGVhZCkpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ0NTE9dW5zaWduZWQgaW50IHNrYl9zZXFfcmVhZCh1bnNpZ25lZCBpbnQgY29uc3VtZWQsIGNvbnN0IHU4ICoqZGF0YSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00NDcyLVxubmV0L2NvcmUvc2tidWZmLmM6NDQ3MzpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHN0LVx1MDAzZWN1cl9za2IpKVxubmV0L2NvcmUvc2tidWZmLmMtNDQ3NC1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjE4Mz1ib29sIHNrYl90cnlfY29hbGVzY2Uoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02MjAyLVxubmV0L2NvcmUvc2tidWZmLmM6NjIwMzpcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgIT0gc2tiX2ZyYWdzX3JlYWRhYmxlKHRvKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTYyMDQtXHRcdHJldHVybiBmYWxzZTtcbm5ldC9jb3JlL3NrYnVmZi5jLTYyMDUtXG5uZXQvY29yZS9za2J1ZmYuYzo2MjA2Olx0aWYgKGxlbiBcdTAwM2M9IHNrYl90YWlscm9vbSh0bykgXHUwMDI2XHUwMDI2IHNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSkge1xubmV0L2NvcmUvc2tidWZmLmMtNjIwNy1cdFx0aWYgKGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MDczPXZvaWQgc2tiX2NvbmRlbnNlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3Ni1cdFx0aWYgKHNrYi1cdTAwM2VkYXRhX2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWVuZCAtIHNrYi1cdTAwM2V0YWlsIHx8XG5uZXQvY29yZS9za2J1ZmYuYzo3MDc3Olx0XHQgICAgc2tiX2Nsb25lZChza2IpIHx8ICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNzgtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTI0My1cdFx0aWYgKGNvcHkgXHUwMDNjPSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpIHx8XG5uZXQvaXB2NC90Y3AuYzoxMjQ0Olx0XHQgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7XG5uZXQvaXB2NC90Y3AuYy0xMjQ1LVx0XHRcdGJvb2wgZmlyc3Rfc2tiO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTIxOTY9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMjI2OS1cbm5ldC9pcHY0L3RjcC5jOjIyNzA6XHRcdFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9pcHY0L3RjcC5jLTIyNzEtXHRcdFx0XHRicmVhaztcbi0tXG5uZXQvaXB2NC90Y3AuYz0yNTAwPXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTE1LVxubmV0L2lwdjQvdGNwLmM6MjUxNjpcdFx0aWYgKHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSB7XG5uZXQvaXB2NC90Y3AuYy0yNTE3LVx0XHRcdGVyciA9IC1FTk9ERVY7XG4tLVxubmV0L2lwdjQvdGNwLmMtMjU2Mi1cbm5ldC9pcHY0L3RjcC5jOjI1NjM6XHRcdFx0LyogIXNrYl9mcmFnc19yZWFkYWJsZSgpIHNob3VsZCBpbmRpY2F0ZSB0aGF0IEFMTCB0aGVcbm5ldC9pcHY0L3RjcC5jLTI1NjQtXHRcdFx0ICogZnJhZ3MgaW4gdGhpcyBza2IgYXJlIGRtYWJ1ZiBuZXRfaW92cy4gV2UmIzM5O3JlIGNoZWNraW5nXG4tLVxubmV0L2lwdjQvdGNwLmMtMjU2Ni1cdFx0XHQgKiBoZXJlLiBJZiB0aGUgdGNwIHN0YWNrIGlzIG5vdCBzZXR0aW5nXG5uZXQvaXB2NC90Y3AuYzoyNTY3Olx0XHRcdCAqIHNrYl9mcmFnc19yZWFkYWJsZSgpIGNvcnJlY3RseSwgd2Ugc3RpbGwgZG9uJiMzOTt0IHdhbnRcbm5ldC9pcHY0L3RjcC5jLTI1NjgtXHRcdFx0ICogdG8gY3Jhc2ggaGVyZS5cbi0tXG5uZXQvaXB2NC90Y3AuYz0yNjU2PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTI4MzYtXHRcdFx0aWYgKGxhc3RfY29waWVkX2RtYWJ1ZiAhPSAtMSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L3RjcC5jOjI4Mzc6XHRcdFx0ICAgIGxhc3RfY29waWVkX2RtYWJ1ZiAhPSAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvaXB2NC90Y3AuYy0yODM4LVx0XHRcdFx0YnJlYWs7XG5uZXQvaXB2NC90Y3AuYy0yODM5LVxubmV0L2lwdjQvdGNwLmM6Mjg0MDpcdFx0XHRpZiAoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcbm5ldC9pcHY0L3RjcC5jLTI4NDEtXHRcdFx0XHRlcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCBvZmZzZXQsIG1zZyxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yODcxLVxubmV0L2lwdjQvdGNwLmM6Mjg3MjpcdFx0bGFzdF9jb3BpZWRfZG1hYnVmID0gIXNrYl9mcmFnc19yZWFkYWJsZShza2IpO1xubmV0L2lwdjQvdGNwLmMtMjg3My1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01NzczPXRjcF9jb2xsYXBzZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHN0cnVjdCByYl9yb290ICpyb290LFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU3ODYtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Nzg3Olx0XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTc4OC1cdFx0XHRnb3RvIHNraXBfdGhpcztcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01ODA5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTgxMDpcdFx0aWYgKG4gXHUwMDI2XHUwMDI2IG4gIT0gdGFpbCBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKG4pIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgxMS1cdFx0ICAgIHRjcF9za2JfY2FuX2NvbGxhcHNlX3J4KHNrYiwgbikgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgyMi1cdCAgICAoVENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF9mbGFncyBcdTAwMjYgKFRDUEhEUl9TWU4gfCBUQ1BIRFJfRklOKSkgfHxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU4MjM6XHQgICAgIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgyNC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU4NjUtXHRcdFx0XHQgICAgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IChUQ1BIRFJfU1lOIHwgVENQSERSX0ZJTikpIHx8XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1ODY2Olx0XHRcdFx0ICAgICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU4NjctXHRcdFx0XHRcdGdvdG8gZW5kO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zNDkxPXN0YXRpYyBib29sIHRjcF9jYW5fY29sbGFwc2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNDk2LVx0XHRyZXR1cm4gZmFsc2U7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzQ5NzpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzQ5OC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTcwMT1zdGF0aWMgdW5zaWduZWQgaW50IG5mdWxubF9nZXRfY29weV9sZW4oY29uc3Qgc3RydWN0IG5mX2xvZ2luZm8gKmxpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTcwOS1cdFx0Y29weV9sZW4gPSBsaS1cdTAwM2V1LnVsb2cuY29weV9sZW47XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo3MTA6XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNzExLVx0XHRsZW4gPSBza2JfaGVhZGxlbihza2IpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NjkzPXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZxbmxfZ2V0X2RhdGFfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICplbnRza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02OTctXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjY5ODpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGVudHNrYikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTY5OS1cdFx0ZGF0YV9sZW4gPSBza2JfaGVhZGxlbihlbnRza2IpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTQ1MT1zdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NjktXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NzA6XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNDcxLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIxMzM9c3RhdGljIGludCBwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTcwLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTcxOlx0c25hcGxlbiA9IHNrYl9mcmFnc19yZWFkYWJsZShza2IpID8gc2tiLVx1MDAzZWxlbiA6IHNrYl9oZWFkbGVuKHNrYik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNzItXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ2PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyOTAtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyOTE6XHRzbmFwbGVuID0gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgPyBza2ItXHUwMDNlbGVuIDogc2tiX2hlYWRsZW4oc2tiKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI5Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY2MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTWVtb3J5IFByb3RlY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhbGwgYWJvdXQgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gZG9pbmcgc29tZXRoaW5nIHN0dXBpZCB3aXRoIGRldmljZSBtZW1vcnkg4oCTIHNwZWNpZmljYWxseSwgbWVtb3J5IHJlZ2lvbnMgdGhhdCB0aGUgQ1BVIHNob3VsZG4mIzM5O3QgZGlyZWN0bHkgcmVhZC4gVGhlIGNvcmUgaXNzdWUgaXMgYWJvdXQgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBhbmQgZW5zdXJpbmcgdGhhdCBpZiBhIGZyYWdtZW50IHdpdGhpbiBhbiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaXNuJiMzOTt0IHJlYWRhYmxlLCB3ZSBkb24mIzM5O3QgdHJ5IHRvIHRyZWF0IGl0IGFzIGlmIGl0IGlzLiBJdCYjMzk7cyBhIG1hdHRlciBvZiBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuICYjMzQ7aG9zdC1hY2Nlc3NpYmxlJiMzNDsgbWVtb3J5IGFuZCBtZW1vcnkgcmVzaWRpbmcgaW4gdGhlIG5ldHdvcmsgZGV2aWNlLCB3aGljaCB0aGUgQ1BVIHR5cGljYWxseSBzaG91bGRuJiMzOTt0IHRvdWNoIGRpcmVjdGx5LgoKTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHdoZXRoZXIgdGhpcyB3YXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSWYgd2Ugd2VyZSB0byBxdWV1ZSBhbiB1bnJlYWRhYmxlIGBza2JgIHRvIHVzZXJzcGFjZSwgd2hhdCBjb3VsZCBoYXBwZW4/IFRoaXMgcGF0Y2ggYWltcyB0byBwcmV2ZW50IHRoZSBjb3B5aW5nIG9mIHVucmVhZGFibGUgZnJhZ21lbnRzLCByZXR1cm5pbmcgYW4gZXJyb3Igb3IgaGFsdGluZyB0aGUgb3BlcmF0aW9uIGVudGlyZWx5LiBJIHdhcyBpbml0aWFsbHkgd29ycmllZCBhYm91dCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gdGFyZ2V0IGEgYnVnIHJlbGF0ZWQgdG8gVENQIGRldm1lbSwgd2hpY2ggbWFrZXMgc2Vuc2UuIERldm1lbSAoZGV2aWNlIG1lbW9yeSkgaXNuJiMzOTt0IGxpa2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5ICh0aGluayB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcykuIEl0JiMzOTtzIGRhdGEgdGhhdCYjMzk7cyAqYWxyZWFkeSogaW4gYSBidWZmZXIsIGFuZCBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSBhY2Nlc3NlZCBieSBhIGRldmljZS4gSWYgdGhlIENQVSB0cmllcyB0byBkaXJlY3RseSBhY2Nlc3MgZGV2aWNlIG1lbW9yeSwgaXQmIzM5O3MgZWl0aGVyIGFuIGludmFsaWQgbWVtb3J5IGFjY2VzcyBvciBhIHBhZ2UgZmF1bHQsIGRlcGVuZGluZyBvbiBob3cgdGhhdCBtZW1vcnkgaXMgbWFwcGVkLiBLQVNBTiAqbWlnaHQqIGNhdGNoIHRoaXMgaWYgdGhlIG1lbW9yeSBpcyB2YWxpZCBidXQgbm90IG1lYW50IGZvciBDUFUgdXNlLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuCgpTbyB0aGUgYWRkZWQgY2hlY2tzIGluIGBza2JfemVyb2NvcHlgIHNlZW0gY3J1Y2lhbCwgcHJpbWFyaWx5IHRoZSBvbmUgdGhhdCByZXR1cm5zIGAtRUZBVUxUYCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIHVucmVhZGFibGUgZnJhZ21lbnQgYnV0IGFsc28gdGhlIHByb3BhZ2F0aW9uIG9mIHRoZSBgdW5yZWFkYWJsZWAgZmxhZy4gSXQmIzM5O3Mgdml0YWwgdGhhdCB0aGUgZGVzdGluYXRpb24gYHNrYmAgaXMgYWxzbyBtYXJrZWQgYXMgdW5yZWFkYWJsZSBpZiBpdCBpbmhlcml0cyBkZXZpY2UgbWVtb3J5LiBUaGUgbG9naWMgaGVyZSBpcyB0aGF0IGlmIHdlIGRvbiYjMzk7dCwgdGhlbiB3ZSBtaWdodCBlbmQgdXAgd2l0aCBjb2RlIHRoYXQgdGhpbmtzIHRoZSBkYXRhIGlzIHJlYWRhYmxlIGFuZCB0cmllcyB0byBhY2Nlc3MgaXQsIGxlYWRpbmcgdG8gYSBjcmFzaCBvciBhbiBpbmNvcnJlY3QgZGF0YSByZWFkLgoKQ3J1Y2lhbGx5LCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzICpub3QqIHRoZSB0b29sIGZvciB0aGlzLiBLTVNBTiBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpc24mIzM5O3QgdGhlIHByb2JsZW0gaGVyZS4gVGhpcyBwYXRjaCBwcmV2ZW50cyByZWFkcyBvZiB2YWxpZCBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLCBvciBqdXN0IGdvb2Qgb2xkLWZhc2hpb25lZCB0ZXN0aW5nLCBhcmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIGJ1Zy4gSXTigJlzIGEgbG9naWMgYnVnLCBhbiBhY2Nlc3MgdG8gbWVtb3J5IHRoYXQgaXQmIzM5O3Mgbm90IHN1cHBvc2VkIHRvLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBza2JfemVyb2NvcHlgLiBJbiB0aGUgY2FzZSB3aGVyZSBgbGVuICZndDsgc2tiX3RhaWxyb29tKHRvKWAsIHdlIHNlZSB0aGF0IGl0IGhhcyB0byBjb3B5IHRoZSBmcmFncy4gV2hlbiBhbiBgc2tiYCB3aXRoIHVucmVhZGFibGUgZnJhZ3MgaXMgdXNlZCBhcyBzb3VyY2UsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGFsc28gbWFya2VkIHVucmVhZGFibGUgdmlhIGB0by0mZ3Q7dW5yZWFkYWJsZSA9IDFgLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHJlYWQgZnJvbSB1bnJlYWRhYmxlIG1lbW9yeS4gU28gdGhlIGZsb3cgaXMsIGlmIHdlIGRldGVjdCB3ZSBhcmUgcmVjZWl2aW5nIHVucmVhZGFibGUgZnJhZ21lbnRzIGluIGBza2JfemVyb2NvcHlgIHdlIG1hcmsgdGhlIGB0b2AgYnVmZmVyIGFzIHVucmVhZGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VucmVhZGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9NzI4PWVudW0gc2tiX3RzdGFtcF90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTg0OS0gKlx0XHRDSEVDS1NVTV9VTk5FQ0VTU0FSWSAobWF4IDMpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg1MDogKlx0QHVucmVhZGFibGU6IGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IDEgb2YgdGhlIGZyYWdtZW50cyBpbiB0aGlzIHNrYiBpc1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo4NTE6ICpcdFx0dW5yZWFkYWJsZS5cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtODUyLSAqXHRAZHN0X3BlbmRpbmdfY29uZmlybTogbmVlZCB0byBjb25maXJtIG5laWdoYm91clxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9ODg2PXN0cnVjdCBza19idWZmIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEwMzItI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEwMzM6XHRfX3U4XHRcdFx0dW5yZWFkYWJsZToxO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDM0LVx0X191OFx0XHRcdHRjX2RlcHRoOjI7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xODkxPXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZnJhZ3NfcmVhZGFibGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg5Mi17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4OTM6XHRyZXR1cm4gIXNrYi1cdTAwM2V1bnJlYWRhYmxlO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODk0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI2MTA9X19za2JfZmlsbF9uZXRtZW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaSwgbmV0bWVtX3JlZiBuZXRtZW0sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNjE3LVx0aWYgKG5ldG1lbV9pc19uZXRfaW92KG5ldG1lbSkpIHtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjYxODpcdFx0c2tiLVx1MDAzZXVucmVhZGFibGUgPSB0cnVlO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNjE5LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA1CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIGB1bnJlYWRhYmxlYCBiaXRmaWVsZCB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuIFJpZ2h0LCB0aGUgYHNrYi0mZ3Q7dW5yZWFkYWJsZWAgZmxhZyBzaWduaWZpZXMgdGhhdCB0aGUgc2tiIGlzIGhvbGRpbmcgZGV2aWNlIG1lbW9yeSwgc3BlY2lmaWNhbGx5IGBuZXRfaW92YCwgYW5kIHRoYXQgdGhlIENQVSBjYW4mIzM5O3QgZGlyZWN0bHkgcmVhZCBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBpc3N1ZXMgaW4gaG93IHRoZXNlIHVucmVhZGFibGUgc2ticyBhcmUgaGFuZGxlZC4KCkl0IGxvb2tzIGxpa2UgdGhlIGtleSBwcm9ibGVtcyBpdCYjMzk7cyBmaXhpbmcgYXJlOiBlbnN1cmluZyByZWFkYWJsZSBhbmQgdW5yZWFkYWJsZSBmcmFnbWVudHMgZG9uJiMzOTt0IGdldCBtaXhlZCwgY29ycmVjdGx5IHByb3BhZ2F0aW5nIHRoYXQgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB0aGUgc2tiIGlzIGJlaW5nIGNvcGllZCB3aXRoIHplcm8tY29weSBmZWF0dXJlcywgYW5kIHByZXZlbnRpbmcgdGhlc2UgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgc2VudCB1cCB0byB1c2Vyc3BhY2Ugd2hpY2ggd291bGQgbGlrZWx5IGNhdXNlIGFuIGltbWVkaWF0ZSBjcmFzaCBvciB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBUQ1AgY2hhbmdlcyBzb3VuZCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LgoKTm93LCBJIHdhcyBpbml0aWFsbHkgd29uZGVyaW5nIGlmIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgbWlnaHQgYmUgcmVsZXZhbnQgaGVyZSwgYnV0IG9uIGZ1cnRoZXIgcmVmbGVjdGlvbiwgaXQmIzM5O3Mgbm90LiBUaGlzIGlzbiYjMzk7dCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk7IGl0JiMzOTtzIGFib3V0IHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGRldmljZSBtZW1vcnkgYWNjZXNzZWQgdGhyb3VnaCBETUEgYW5kIGhvc3QgQ1BVIG1lbW9yeS4gS01TQU4mIzM5O3MgcHVycG9zZSBpcyB0byBmaW5kIGluc3RhbmNlcyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBiZWZvcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIHdoaWNoIGlzbiYjMzk7dCB0aGUgaXNzdWUgaGVyZS4gVGhlIHJpc2tzIGFkZHJlc3NlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIGxvZ2ljYWwgZXJyb3JzIGR1ZSB0byBoYW5kbGluZyBETUEtbWFwcGVkIGRldmljZSBtZW1vcnkuIFNvLCBLTVNBTiBpcyBjb21wbGV0ZWx5IG92ZXJraWxsIGZvciB0aGlzLiBLQVNBTiBhbmQgdGhvcm91Z2ggdGVzdGluZyB3aWxsIGJlIGVub3VnaCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZXJyb3JzLiBUaGlzIHBhdGNoIGlzIHNvbGlkIGluIGl0cyBmb2N1cywgYWRkcmVzc2luZyBhIHZlcnkgc3BlY2lmaWMgc2V0IG9mIHByb2JsZW1zIHJlbGF0ZWQgdG8gYHVucmVhZGFibGVgIHNrYnMgYW5kIGRldmljZSBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXCYjMzQ7dW5yZWFkYWJsZVwmIzM0OyBza2IgZnJhZ21lbnRzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgbWVtb3J5IChlLmcuLCBUQ1AgZGV2bWVtKS4gSXQgZW5zdXJlcyB0aGF0IHVucmVhZGFibGUgZnJhZ21lbnRzIGFyZSBub3QgbWl4ZWQgd2l0aCByZWFkYWJsZSBvbmVzLCBjb3JyZWN0bHkgcHJvcGFnYXRlcyB0aGUgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB6ZXJvLWNvcHlpbmcgc2ticywgYW5kIHByZXZlbnRzIHVucmVhZGFibGUgc2ticyBmcm9tIGJlaW5nIHF1ZXVlZCB0byB1c2Vyc3BhY2Ugb3IgY29sbGFwc2VkIGluY29ycmVjdGx5IGluIFRDUC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciBzdGFjayB2YXJpYWJsZXMpIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzIHdoZW4gZGVhbGluZyB3aXRoIERNQS1tYXBwZWQgZGV2aWNlIG1lbW9yeSwgd2hpY2ggYXJlIG5vdCB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXCYjMzQ7dW5yZWFkYWJsZVwmIzM0OyBza2IgZnJhZ21lbnRzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgbWVtb3J5IChlLmcuLCBUQ1AgZGV2bWVtKS4gSXQgZW5zdXJlcyB0aGF0IHVucmVhZGFibGUgZnJhZ21lbnRzIGFyZSBub3QgbWl4ZWQgd2l0aCByZWFkYWJsZSBvbmVzLCBjb3JyZWN0bHkgcHJvcGFnYXRlcyB0aGUgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB6ZXJvLWNvcHlpbmcgc2ticywgYW5kIHByZXZlbnRzIHVucmVhZGFibGUgc2ticyBmcm9tIGJlaW5nIHF1ZXVlZCB0byB1c2Vyc3BhY2Ugb3IgY29sbGFwc2VkIGluY29ycmVjdGx5IGluIFRDUC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciBzdGFjayB2YXJpYWJsZXMpIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzIHdoZW4gZGVhbGluZyB3aXRoIERNQS1tYXBwZWQgZGV2aWNlIG1lbW9yeSwgd2hpY2ggYXJlIG5vdCB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6MzEuOTg4NDQ4NDk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NDU2MzM3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJvdnNfZHBfdXBjYWxsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIFxcXCJ1bnJlYWRhYmxlXFxcIiBza2IgZnJhZ21lbnRzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgbWVtb3J5IChlLmcuLCBUQ1AgZGV2bWVtKS4gSXQgZW5zdXJlcyB0aGF0IHVucmVhZGFibGUgZnJhZ21lbnRzIGFyZSBub3QgbWl4ZWQgd2l0aCByZWFkYWJsZSBvbmVzLCBjb3JyZWN0bHkgcHJvcGFnYXRlcyB0aGUgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB6ZXJvLWNvcHlpbmcgc2ticywgYW5kIHByZXZlbnRzIHVucmVhZGFibGUgc2ticyBmcm9tIGJlaW5nIHF1ZXVlZCB0byB1c2Vyc3BhY2Ugb3IgY29sbGFwc2VkIGluY29ycmVjdGx5IGluIFRDUC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcsIG9yIHN0YWNrIHZhcmlhYmxlcykgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggRE1BLW1hcHBlZCBkZXZpY2UgbWVtb3J5LCB3aGljaCBhcmUgbm90IHRhcmdldHMgZm9yIEtNU0FOLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl96ZXJvY29weWAgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIGFkZCBjaGVja3MgZm9yIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBJdCBhbHNvIG1vZGlmaWVzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBvcGVudnN3aXRjaC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBvcGVudnN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4gVGhlIGBza2JfemVyb2NvcHlgIGZ1bmN0aW9uIGlzIHVzZWQgYnkgb3BlbnZzd2l0Y2ggYW5kIG5mbmV0bGlua19xdWV1ZSwgc28gd2UgaW5jbHVkZSB0aGVpciBjb25maWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyODozMS45ODg0NTU3OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDA4MjQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIwYTdmYWNmNGQ3MzUxMjU5OGRhZjliZTdlZDNhNjRmOTI1N2QyM2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTk6Mjg6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IGJhM2RiYWM4MGZiNDkuLmQyMWFmNjgxNTY5NTAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0zODcwLDcgKzM4NzAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XFxuICAqXFx0UmV0dXJuIHZhbHVlOlxcbiAgKlxcdDA6IGV2ZXJ5dGhpbmcgaXMgT0tcXG4gICpcXHQtRU5PTUVNOiBjb3VsZG4ndCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5XFxuLSAqXFx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeVxcbisgKlxcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWRcXG4rICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cXG4gICovXFxuIGludFxcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxuQEAgLTM5MDUsMTAgKzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFxcdTAwMjZcXHUwMDI2IGogXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGxlbikge1xcbitcXHRcXHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLVxcdTAwM2VoZWFkKSk7XFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHR9XFxuK1xcbiBcXHRza2JfbGVuX2FkZCh0bywgbGVuICsgcGxlbik7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHtcXG4gXFx0XFx0c2tiX3R4X2Vycm9yKGZyb20pO1xcbitcXHRcXHRpZiAoaiBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXFx1MDAzZWhlYWQpKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcXG5AQCAtMzkyOCw2ICszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbiBcXHR9XFxuIFxcdHNrYl9zaGluZm8odG8pLVxcdTAwM2Vucl9mcmFncyA9IGo7XFxuIFxcbitcXHRpZiAoaSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgZnJvbS1cXHUwMDNldW5yZWFkYWJsZSlcXG4rXFx0XFx0dG8tXFx1MDAzZXVucmVhZGFibGUgPSAxO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmI0MjM3ZDBlOTk0ZDYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0xMjQwLDcgKzEyNDAsOCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFxuIFxcdFxcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XFxuIFxcbi1cXHRcXHRpZiAoY29weSBcXHUwMDNjPSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpKSB7XFxuK1xcdFxcdGlmIChjb3B5IFxcdTAwM2M9IDAgfHwgIXRjcF9za2JfY2FuX2NvbGxhcHNlX3RvKHNrYikgfHxcXG4rXFx0XFx0ICAgIHVubGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpICE9ICFiaW5kaW5nKSkge1xcbiBcXHRcXHRcXHRib29sIGZpcnN0X3NrYjtcXG4gXFxuIG5ld19zZWdtZW50OlxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggYWU2OWIyY2FiYWI5ZS4uNDgyODkzYTVmNjdkYyAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTQ2Nyw2ICs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKCFkcF9pZmluZGV4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuK1xcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gXFx0XFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbiBcXHRcXHRpZiAoIW5za2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjMyLjM4OTI1MDExNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4ODk2NDMyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJvdnNfZHBfdXBjYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3plcm9jb3B5YCBhbmQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gYWRkIGNoZWNrcyBmb3IgYHNrYl9mcmFnc19yZWFkYWJsZWAuIEl0IGFsc28gbW9kaWZpZXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIG9wZW52c3dpdGNoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiBUaGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXMgdXNlZCBieSBvcGVudnN3aXRjaCBhbmQgbmZuZXRsaW5rX3F1ZXVlLCBzbyB3ZSBpbmNsdWRlIHRoZWlyIGNvbmZpZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIwYTdmYWNmNGQ3MzUxMjU5OGRhZjliZTdlZDNhNjRmOTI1N2QyM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxOToyODozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLmQyMWFmNjgxNTY5NTAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0zODcwLDcgKzM4NzAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG4gICpcdFJldHVybiB2YWx1ZTpcbiAgKlx0MDogZXZlcnl0aGluZyBpcyBPS1xuICAqXHQtRU5PTUVNOiBjb3VsZG4ndCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5XG4tICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnlcbisgKlx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeSwgb3IgcmVhZGFibGUgaGVhZFxuKyAqICAgICAgcGF5bG9hZCB3b3VsZCBiZSBtaXhlZCB3aXRoIHVucmVhZGFibGUgZnJhZ3MuXG4gICovXG4gaW50XG4gc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuQEAgLTM5MDUsMTAgKzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0XHR9XG4gXHR9XG4gXG4rXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSBcdTAwMjZcdTAwMjYgaiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGVuKSB7XG4rXHRcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXHUwMDNlaGVhZCkpO1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdH1cbitcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuIFx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4rXHRcdGlmIChqIFx1MDAzZSAwKVxuK1x0XHRcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXHUwMDNlaGVhZCkpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5AQCAtMzkyOCw2ICszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0fVxuIFx0c2tiX3NoaW5mbyh0byktXHUwMDNlbnJfZnJhZ3MgPSBqO1xuIFxuK1x0aWYgKGkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGZyb20tXHUwMDNldW5yZWFkYWJsZSlcbitcdFx0dG8tXHUwMDNldW5yZWFkYWJsZSA9IDE7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCA0NTU0NDFmMWI2OTQ5Li5iNDIzN2QwZTk5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTI0MCw3ICsxMjQwLDggQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXG4gXHRcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XG4gXG4tXHRcdGlmIChjb3B5IFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSkge1xuK1x0XHRpZiAoY29weSBcdTAwM2M9IDAgfHwgIXRjcF9za2JfY2FuX2NvbGxhcHNlX3RvKHNrYikgfHxcbitcdFx0ICAgIHVubGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpICE9ICFiaW5kaW5nKSkge1xuIFx0XHRcdGJvb2wgZmlyc3Rfc2tiO1xuIFxuIG5ld19zZWdtZW50OlxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC00NjcsNiArNDY3LDkgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWRwX2lmaW5kZXgpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4gXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xuIFx0XHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghbnNrYilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjMyLjM4OTI2MTE0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDY2NDI2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgY3JpdGljYWwgYXJlYXM6IGBuZXQvY29yZS9za2J1ZmYuY2AsIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggcGFja2V0IGJ1ZmZlcmluZyBhbmQgemVyby1jb3B5IG1lY2hhbmlzbXMsIHdoaWNoIGlzIGFsd2F5cyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhZGRpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gYHNrYl9mcmFnc19yZWFkYWJsZSgpYCBhbmQgdGhlIGBmcm9tLVx1MDAzZXVucmVhZGFibGVgIGZsYWcgd2l0aGluIGBza2JfemVyb2NvcHkoKWAuIFRoYXQncyBzbWFydDsgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgZnJhZ21lbnQgcmVhZGFiaWxpdHkgY29ycmVjdGx5IGJlZm9yZSBhdHRlbXB0aW5nIHplcm8tY29weSBvcGVyYXRpb25zLiBUaGVyZSdzIGFsc28gYSBjb25kaXRpb25hbCBjaGVjayBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHRoYXQgc2VlbXMgdG8gYmUgdmVyaWZ5aW5nIHRoZSBzdGF0ZSBvZiBmcmFnbWVudCByZWFkYWJpbGl0eSBhZ2FpbnN0IGEgYGJpbmRpbmdgIHZhcmlhYmxlLiBBbmQgZmluYWxseSwgaW4gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoKWAgd2l0aGluIE9wZW4gdlN3aXRjaCwgdGhlcmUgaXMgYSBjaGVjayBlbnN1cmluZyB0aGF0IGZyYWdtZW50cyBhcmUgKm5vdCogcmVhZGFibGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZDogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGVzZSBhcmUgYWxsIGNvcmUgbmV0d29ya2luZyBlbGVtZW50cywgc28gYW55IGNoYW5nZXMgbmVlZCB0byBiZSB0aG9yb3VnaGx5IHZldHRlZC4gYHNrYl96ZXJvY29weWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHNpbmNlIGl0J3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBsaWtlbHkgdXNlZCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aGluIHRoZSBrZXJuZWwgb3IgZXZlbiBieSBleHRlcm5hbCBtb2R1bGVzLiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcywgb2YgY291cnNlLCB0aGUgaGVhcnQgb2YgVENQIHNlbmRpbmcuIEFuZCB0aGVuIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KClgIGlzIHNwZWNpZmljIHRvIE9wZW4gdlN3aXRjaCwgd2hpY2ggSSB3YW50IHRvIHZlcmlmeSBpZiBhbnkgc3BlY2lmaWMgT3BlbiB2U3dpdGNoIGNvbmZpZ3VyYXRpb24gaXMgbmVjZXNzYXJ5LlxuXG5OZXh0LCBJJ2xsIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYHNrYl96ZXJvY29weWAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGl0cyB1c2FnZSB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBvZiB0aGlzIHBhdGNoIGJlZm9yZSBJIGNhbiBnaXZlIGEgc29saWQgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjM3LjYzNTkwNzI0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE0MzAzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaD00MTM9ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnhlbl9uZXRiYWNrX2RiZ19yb290O1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxNjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxODp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTQ5LSAqIGNvdW50ZXIgYmVjYXVzZSBjb3JlIGRyaXZlciBjYWxscyBpbnRvIHhlbnZpZl96ZXJvY29weV9jYWxsYmFja1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUwOiAqIHdoaWNoIGNhbGxzIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUuXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmM6NTI6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01OC1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNjAte1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTAtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdfbGlzdDtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTIxMTpcXHRcXHRcXHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIG5za2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEyLVxcdFxcdFxcdGlmICh4ZW52aWZfaGFuZGxlX2ZyYWdfbGlzdChxdWV1ZSwgc2tiKSkge1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbnNvbGlkYXRlIGZyYWdfbGlzdCFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNy1cXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjMzLVxcdFxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjM0OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjcyLVxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKSB7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjc0LVxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9zZW50Kys7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTI4Mz1zdGF0aWMgdm9pZCB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE0LVxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9mYWlsKys7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XFx0eGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShxdWV1ZSk7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzY4PWludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzE6c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI2OT12b2lkIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MDp1bnNpZ25lZCBpbnQgc2tiX3plcm9jb3B5X2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjcyLVxcdFxcdCBpbnQgbGVuLCBpbnQgaGxlbik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODEyPUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV9yZWFsbG9jKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4MTQ6c3RhdGljIGJvb2wgc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxvLCB1MTYgbGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTgzND1zdGF0aWMgdm9pZCBfX21zZ196ZXJvY29weV9jYWxsYmFjayhzdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjICp1YXJnKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cXHRpZiAoIXRhaWwgfHwgU0tCX0VYVF9FUlIodGFpbCktXFx1MDAzZWVlLmVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fWkVST0NPUFkgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlxcdCAgICAhc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQodGFpbCwgbG8sIGxlbikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODcyLVxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTk2MS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxOTYyOnN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNDktXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjUwOlxcdFxcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjUxLVxcdFxcdFxcdGtmcmVlX3NrYihuKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXFx0c2tiX3plcm9jb3B5X2hlYWRsZW4gLSBDYWxjdWxhdGUgaGVhZHJvb20gbmVlZGVkIGZvciBza2JfemVyb2NvcHkoKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcXHRAZnJvbTogc291cmNlIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlxcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAndG8nIHNrYiBwYXNzZWRcXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXFx0aW50byBza2JfemVyb2NvcHkoKS5cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mzc9dW5zaWduZWQgaW50XFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG5uZXQvY29yZS9za2J1ZmYuYy0zODM5LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTU6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTYtXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODU4OiAqXFx0c2tiX3plcm9jb3B5IC0gWmVybyBjb3B5IHNrYiB0byBza2JcXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXFx0QHRvOiBkZXN0aW5hdGlvbiBidWZmZXJcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcXG5uZXQvY29yZS9za2J1ZmYuYzozODY3OiAqXFx0VGhlIGBobGVuYCBhcyBjYWxjdWxhdGVkIGJ5IHNrYl96ZXJvY29weV9oZWFkbGVuKCkgc3BlY2lmaWVzIHRoZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcXHRoZWFkcm9vbSBpbiB0aGUgYHRvYCBidWZmZXIuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzc6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkyMS1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjMtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTQzLX1cXG5uZXQvY29yZS9za2J1ZmYuYzozOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQyNDI9dm9pZCBza2Jfc3BsaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjEsIGNvbnN0IHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00MjQ5LVxcdHNrYl9zaGluZm8oc2tiMSktXFx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB6Y19mbGFncztcXG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlxcdHNrYl96ZXJvY29weV9jbG9uZShza2IxLCBza2IsIDApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXFx0aWYgKGxlbiBcXHUwMDNjIHBvcylcXHQvKiBTcGxpdCBsaW5lIGlzIGluc2lkZSBoZWFkZXIuICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzg4PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTI6XFx0XFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTAxMy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXFx0XFx0XFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3MobGlzdF9za2IsIEdGUF9BVE9NSUMpIHx8XFxubmV0L2NvcmUvc2tidWZmLmM6NTAxODpcXHRcXHRcXHRcXHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOS1cXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVxcdFxcdGRhdGFfbGVuID0gbmZxbmxfZ2V0X2RhdGFfbGVuKGVudHNrYiwgUkVBRF9PTkNFKHF1ZXVlLVxcdTAwM2Vjb3B5X3JhbmdlKSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XFx0XFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXFx0XFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVxcdGlmIChkcC1cXHUwMDNldXNlcl9mZWF0dXJlcyBcXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1MDE6XFx0XFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUwMi1cXHRlbHNlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01ODctXFx0LyogT25seSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBoZWFkZXIsIHBhY2tldCBkYXRhIGlzIGFkZGVkXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4OlxcdCAqIGluIHNrYl96ZXJvY29weSgpICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg5LVxcdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5NC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XFx0ZXJyID0gc2tiX3plcm9jb3B5KHVzZXJfc2tiLCBza2IsIHNrYl9sZW4sIGhsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5Ni1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAwOC1cXG5uZXQveGRwL3hzay5jOjEwMDk6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMDEwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTA4NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTA5Mi1cXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG5uZXQveGRwL3hzay5jOjEwOTM6XFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XFxubmV0L3hkcC94c2suYy0xMDk0LVxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyODozOS40NTAyMTgyOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDAxMzQxMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcywgc3BlY2lmaWNhbGx5IGBza2JfemVyb2NvcHlgLCB3aGljaCBpcyBjcnVjaWFsIGZvciB6ZXJvLWNvcHkgb3BlcmF0aW9ucywgYW5kIHRoYXQncyB1c2VkIGluIGJvdGggdGhlIE5ldGZpbHRlciBOZXRsaW5rIFF1ZXVlIGltcGxlbWVudGF0aW9uIGFuZCB3aXRoaW4gT3BlbiB2U3dpdGNoJ3MgZGF0YXBhdGguIEl0J3MgYWxzbyBtYWtpbmcgYSBjaGFuZ2UgdG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAsIHdoaWNoIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggVENQIHNlbmQgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBgbmV0L2lwdjQvdGNwLmNgIGZpbGUuXG5cblRoZSBPcGVuIHZTd2l0Y2ggY2hhbmdlIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIGF0IGZpcnN0IGdsYW5jZS4gVGhleSdyZSBleHBsaWNpdGx5IGFkZGluZyBhIGAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgIGNoZWNrIHRvIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBsaWtlbHkgYWRkcmVzc2VzIHNvbWUga2luZCBvZiBmcmFnbWVudGF0aW9uIGlzc3VlIG9yIHplcm8tY29weSByZWxpYWJpbGl0eSBwcm9ibGVtIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIHVzZXIgc3BhY2UgcGFja2V0IHF1ZXVpbmcgcGF0aC4gTGV0IG1lIGd1ZXNzLCBtYXliZSB0aGVyZSdzIGFuIGludGVyYWN0aW9uIGJldHdlZW4gZnJhZ21lbnRlZCBza2JzIGFuZCB6ZXJvLWNvcHkgb3BlcmF0aW9ucywgYW5kIHRoaXMgY2hlY2sgaXMgbWVhbnQgdG8gcHJvdGVjdCBhZ2FpbnN0IHNvbWUga2luZCBvZiBjb3JydXB0aW9uIG9yIG1pc2JlaGF2aW9yLlxuXG5Ob3csIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBMZXQncyBzZWUuLi4gd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfT1BFTlZTV0lUQ0hgIGFuZCBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSdtIGFscmVhZHkgc2VlaW5nIHNvbWUgc3BlY2lmaWMgcG9pbnRzIG9mIGNvbm5lY3Rpb24sIHdoaWNoIGluZGljYXRlcyB0byBtZSB0aGF0IGFueSBidWcgaGVyZSB3b3VsZCBpbXBhY3QgYm90aCBzeXN0ZW1zLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgd2lsbCBleGFtaW5lIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoaXMgY2hlY2sgYW5kIHdoZXJlIHRoZSBvcmlnaW5hbCBmYWlsdXJlIHdhcyBpZGVudGlmaWVkLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCdzIGxvZ2ljIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODg0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjQ0LjQ1MTU2MjYzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM3MDQwNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMC1cXHRcXHRcXHQgICAgIHVpbnQzMl90IGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzI5PWludCBvdnNfZHBfdXBjYWxsKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDUtXFx0aWYgKCFza2JfaXNfZ3NvKHNrYikpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzQ2OlxcdFxcdGVyciA9IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbywgY3V0bGVuKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDctXFx0ZWxzZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzY2PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzozOTc6XFx0XFx0ZXJyID0gcXVldWVfdXNlcnNwYWNlX3BhY2tldChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDQxPXN0YXRpYyB2b2lkIHBhZF9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1MC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NTE6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNDUyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjQ2LjI4ODYwODUzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDg3NDQ2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgUGVyZm9ybWFuY2UgaW4gT3BlbiB2U3dpdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBPcGVuIHZTd2l0Y2ggcGVyZm9ybWFuY2UgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LiBGaXJzdCwgSSBrbm93IHRoYXQgYG92c19kcF91cGNhbGxgIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgcHVzaGluZyB0aGluZ3MgZnJvbSB0aGUgZGF0YXBhdGggdXAgdG8gdXNlcnNwYWNlLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBpbnRlcmFjdGlvbi4gVGhlbiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIFRDUCBzaWRlIG9mIHRoaW5ncywgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHdoZXJlIHRoZSBUQ1Agc2VuZCBvcGVyYXRpb25zIGtpY2sgb2ZmLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGlzIGlzIGEga2V5IHNwb3QgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiBUQ1AgZGF0YSB0cmFuc2Zlci5cblxuSSBhbHNvIHNlZSB0aGF0IGBza2JfemVyb2NvcHlgIGlzIGltcG9ydGFudDsgaXQgc2hvd3MgdXAgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCBhbmQgaW4gT3BlbiB2U3dpdGNoJ3MgZGF0YXBhdGggY29kZSAoYGRhdGFwYXRoLmNgKS4gVGhhdCdzIGludGVyZXN0aW5nLCBhcyB6ZXJvY29weSBpcyBhbGwgYWJvdXQgb3B0aW1pemluZyBkYXRhIHRyYW5zZmVyIGJ5IGF2b2lkaW5nIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzLCB3aGljaCBzaG91bGQgaGF2ZSBhIHByZXR0eSBiaWcgcGVyZm9ybWFuY2UgaW1wYWN0LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aGUga2VybmVsJ3MgVENQIGltcGxlbWVudGF0aW9uLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gTGV0J3Mgc2VlIGhvdyB0aGUgcGFja2V0IGlzIGFjdHVhbGx5IHNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MDYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6NTAuMzk3MzU1MjQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODgyMzE5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3NlbmRtc2dfbG9ja2VkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9zbm1wLnJzdD0xMz11bnNpZ25lZF9sb25nICBMSU5VWF9NSUJfREVMQVlFREFDS0xPQ0tFRCAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIsdGNwX2RlbGFja190aW1lclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9zbm1wLnJzdDoxNDp1bnNpZ25lZF9sb25nICBMSU5VWF9NSUJfVENQQVVUT0NPUktJTkcgICAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfcHVzaCx0Y3Bfc2VuZG1zZ19sb2NrZWRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvc25tcC5yc3QtMTUtdW5zaWduZWRfbG9uZyAgTElOVVhfTUlCX1RDUEZST01aRVJPV0lORE9XQURWICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3NlbGVjdF93aW5kb3csdGNwX3RyYW5zbWl0LXNrYlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfcXBfdHguYz0zMjM9c3RhdGljIGludCBzaXdfdGNwX3NlbmRwYWdlcyhzdHJ1Y3Qgc29ja2V0ICpzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsIGludCBvZmZzZXQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jLTM0Ni1cXHRcXHRsb2NrX3NvY2soc2spO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmM6MzQ3OlxcdFxcdHJ2ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnLCBieXRlcyk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfcXBfdHguYy0zNDgtXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTM2Nz1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL25ldC90Y3AuaDozNjg6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTM2OS1pbnQgdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCAqY29waWVkLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmg9Mjg5PVRSQUNFX0VWRU5UKHRjcF9yZXRyYW5zbWl0X3N5bmFjayxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oLTMzNC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaDozMzU6VFJBQ0VfRVZFTlQodGNwX3NlbmRtc2dfbG9ja2VkLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oLTMzNi1cXHRUUF9QUk9UTyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjY1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yYXdfdHBfbnVsbF9hcmdzIHJhd190cF9udWxsX2FyZ3NbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNjczNi1cXHR7IFxcXCJ0Y3Bfc2VuZF9yZXNldFxcXCIsIDB4MTEgfSxcXG5rZXJuZWwvYnBmL2J0Zi5jOjY3Mzc6XFx0eyBcXFwidGNwX3NlbmRtc2dfbG9ja2VkXFxcIiwgMHgxMDAgfSxcXG5rZXJuZWwvYnBmL2J0Zi5jLTY3MzgtXFx0LyogdGVncmFfYXBiX2RtYSAqL1xcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTEwNjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4NS1cXHQucmVhZF9za2JcXHQgICA9IHRjcF9yZWFkX3NrYixcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTA4NjpcXHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODctXFx0LnBlZWtfbGVuXFx0ICAgPSB0Y3BfcGVla19sZW4sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE0PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxcbm5ldC9pcHY0L3RjcC5jOjExMTY6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwLmMtMTExNy17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMjQwLVxcbm5ldC9pcHY0L3RjcC5jOjEyNDE6XFx0XFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcXG5uZXQvaXB2NC90Y3AuYy0xMjQyLVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQ0NC19XFxubmV0L2lwdjQvdGNwLmM6MTQ0NTpFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NDYtXFxubmV0L2lwdjQvdGNwLmM9MTQ0Nz1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQ1MS1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3RjcC5jOjE0NTI6XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNpemUpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NTMtXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz05MT1zdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTEyMi1cXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjEyMzpcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNpemUpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xMjQtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz02NjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9zdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02ODEtXFx0LnNwbGljZV9lb2ZcXHQgICA9IGluZXRfc3BsaWNlX2VvZixcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY4MjpcXHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02ODMtXFx0LnNwbGljZV9yZWFkXFx0ICAgPSB0Y3Bfc3BsaWNlX3JlYWQsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9MTY4PWludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMTk0LVxcbm5ldC90bHMvdGxzX21haW4uYzoxOTU6XFx0XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnLCBzaXplKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTk2LVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0yMDY9c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjI1LVxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFxcdTAwMjZidmVjLCAxLCBzZy1cXHUwMDNlbGVuZ3RoKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjIyNjpcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNnLVxcdTAwM2VsZW5ndGgpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMjI3LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYz0xMTc9c3RhdGljIGJvb2wgYnBmX3Rlc3RfZGVsYXkoc3RydWN0IGJwZl9zb2NrX29wcyAqc2tvcHMsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmMtMTg3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmM6MTg4OlNFQyhcXFwiZmVudHJ5L3RjcF9zZW5kbXNnX2xvY2tlZFxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYzoxODk6aW50IEJQRl9QUk9HKHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYy0xOTAtXFx0ICAgICBzaXplX3Qgc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6NTIuMDg1NTkzMTY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NTQ1NzQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IC0gVENQIFNlbmQgUGF0aCoqXG5cbk9rYXksIHNvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIGEga2V5IGZ1bmN0aW9uLCBubyBkb3VidCBhYm91dCBpdC4gVGhlIHByb3Bvc2VkIGNoYW5nZXMgd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEhvd2V2ZXIsIHdhaXQgYSBtaW51dGUsIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpcyBzdGF0aWMgd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFRoYXQncyBub3QgaWRlYWwgZm9yIGRpcmVjdCBmdXp6aW5nLCBidXQgaXQgc3VnZ2VzdHMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGhvdyBpdCdzICp1c2VkKi4gTGV0J3Mgc2VlLi4uIHRoZSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiBgb3ZzX2RwX3VwY2FsbGAgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCB0byB0aGF0IHN0YXRpYyBmdW5jdGlvbiwgYW5kIHRodXMgdGhlIGtleSBhcmVhIG9mIHN0dWR5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgcGF0aCB1cGNhbGwgbWVjaGFuaXNtIHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlIGlzIGxpa2VseSB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6NTUuNzUxMDUzODQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU0OTc0NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19kcF91cGNhbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz04NTg9c3RhdGljIGludCBvdXRwdXRfdXNlcnNwYWNlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkxNC1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjkxNTpcXHRyZXR1cm4gb3ZzX2RwX3VwY2FsbChkcCwgc2tiLCBrZXksIFxcdTAwMjZ1cGNhbGwsIGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05MTYtfVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc4LVxcdFxcdHVwY2FsbC5tcnUgPSBPVlNfQ0Ioc2tiKS1cXHUwMDNlbXJ1O1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3OTpcXHRcXHRlcnJvciA9IG92c19kcF91cGNhbGwoZHAsIHNrYiwga2V5LCBcXHUwMDI2dXBjYWxsLCBVMzJfTUFYKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODAtXFx0XFx0c3dpdGNoIChlcnJvcikge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzI4LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMyOTppbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMzMC1cXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzM2LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMzNzpcXHRpZiAodHJhY2Vfb3ZzX2RwX3VwY2FsbF9lbmFibGVkKCkpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzM4OlxcdFxcdHRyYWNlX292c19kcF91cGNhbGwoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbyk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzM5LVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzIxPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjI6aW50IG92c19kcF91cGNhbGwoc3RydWN0IGRhdGFwYXRoICosIHN0cnVjdCBza19idWZmICosXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIzLVxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIGNvbnN0IHN0cnVjdCBkcF91cGNhbGxfaW5mbyAqLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmg9MTI9VFJBQ0VfRVZFTlQob3ZzX2RvX2V4ZWN1dGVfYWN0aW9uLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtODEtXFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmg6ODI6VFJBQ0VfRVZFTlQob3ZzX2RwX3VwY2FsbCxcXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaC04My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6NTcuMzA2MDM2NjgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzAyNzY0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gdGhlIERhdGEgUGxhbmUqKlxuXG5Pa2F5LCBzbyBJIHRoaW5rIGBvdnNfZHBfdXBjYWxsYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRpdmluZyBpbnRvIHRoaXMuIFRoYXQgc2VlbXMgdG8gYmUgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBkYXRhIHBsYW5lLiBMZXQncyBzZWUgaG93IHplcm8tY29weSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGFuZCBwb3RlbnRpYWxseSB3aGVyZSBwZXJmb3JtYW5jZSBjb3VsZCBiZSBpbXBhY3RlZC4gSSBzaG91bGQgY2hlY2sgYG5mbmV0bGlua19xdWV1ZS5jYCB0byBzZWUgaG93IGl0J3MgZGVhbGluZyB3aXRoIHBhY2tldCBkYXRhOyBzcGVjaWZpY2FsbHksIHdoYXQgY2FsbHMgYXJlIGJlaW5nIG1hZGUgdG8gYHNrYl96ZXJvY29weWAuIFRoYXQgd291bGQgYmUgYSBzbWFydCB3YXkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTowMi41MzYzMTUxMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzU0OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVxcdFxcdGRhdGFfbGVuID0gbmZxbmxfZ2V0X2RhdGFfbGVuKGVudHNrYiwgUkVBRF9PTkNFKHF1ZXVlLVxcdTAwM2Vjb3B5X3JhbmdlKSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XFx0XFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXFx0XFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTowMi41ODA2NzYzODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MjI1MTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFplcm8tQ29weSBNZWNoYW5pc20gaW4gTmV0d29yayBQYWNrZXQgQ29uc3RydWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYCBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgb3BlcmF0aW9uIGhlcmUgaXMgdGhlIGNhbGwgdG8gYHNrYl96ZXJvY29weWAuICBSaWdodCwgdGhhdCdzIHRoZSB0ZWxsLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSdtIGJldHRpbmcgdGhpcyBmdW5jdGlvbiBpcyBsZXZlcmFnaW5nIHRoZSB6ZXJvLWNvcHkgY2FwYWJpbGl0eSBvZiB0aGUga2VybmVsJ3Mgc29ja2V0IGJ1ZmZlciAoc2tiKSB0byBlZmZpY2llbnRseSBjb25zdHJ1Y3QgYW5kIG1hbmFnZSBuZXR3b3JrIHBhY2tldHMgZm9yIHRoZSBOZXRmaWx0ZXIgcXVldWUuIEluc3RlYWQgb2YgYSBmdWxsIG1lbW9yeSBjb3B5LCB3aGljaCB3b3VsZCBiZSBpbmNyZWRpYmx5IGluZWZmaWNpZW50LCBlc3BlY2lhbGx5IGZvciBsYXJnZXIgcGF5bG9hZHMsIHRoaXMgaXMgcHJvYmFibHkgYWJvdXQgc2hhcmluZyBwb2ludGVycyBhbmQgcmVmZXJlbmNlIGNvdW50cy4gSXQgc2hvdWxkIGFsbG93IGRhdGEgZnJvbSBvdGhlciBidWZmZXJzIG9yIG1lbW9yeSByZWdpb25zIHRvIGJlIGluY29ycG9yYXRlZCBkaXJlY3RseSBpbnRvIHRoZSBvdXRnb2luZyBza2Igd2l0aG91dCB1bm5lY2Vzc2FyeSBkYXRhIGR1cGxpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBza2JfemVyb2NvcHlgIGl0c2VsZiB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIHNwZWNpZmljYWxseSwgaG93IGl0J3MgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSByZWdpb25zIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgbG9ja2luZyBpcyBpbnZvbHZlZCBhbmQgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBlbGVtZW50cyBvZiB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lLCBob3cgdGhlIGRhdGEgc291cmNlIGlzIHNwZWNpZmllZCBhbmQgcmVmZXJlbmNlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjA5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MDYuMTMyOTMwMzUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ4OTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3MDU6bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzA2LVxcdFxcdFxcdCAgIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3ND1fX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTgxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTgyOlxcdG5za2IgPSBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShuZXQsIHF1ZXVlLCBlbnRyeSwgXFx1MDAyNnBhY2tldF9pZF9wdHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTgzLVxcdGlmIChuc2tiID09IE5VTEwpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MDYuMTc3NDI0NjA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDEzNTQ3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgcGFja2V0IGhhbmRsaW5nOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgUXVldWU6IEEgVHJhY2UgVGhyb3VnaCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIHBhY2tldHMsIGFuZCB3aGVyZSB0aGV5IHVsdGltYXRlbHkgZW5kIHVwLiBUaGUgY3JpdGljYWwganVuY3R1cmUgc2VlbXMgdG8gYmUgYF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRgLiBUaGlzIGZ1bmN0aW9uLCBmcm9tIHdoYXQgSSd2ZSBzZWVuLCBpcyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBwYWNrZXRzIGRlc3RpbmVkIGZvciB0aGUgTmV0ZmlsdGVyIHF1ZXVlIGdldC4uLiB3ZWxsLCBlbnF1ZXVlZC4gSXQncyB0aGUgY3JpdGljYWwgc3RlcC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQsIHRoZSBhY3Qgb2YgcHV0dGluZyB0aGUgcGFja2V0IGludG8gdGhlIHF1ZXVlIHRvIGJlIHByb2Nlc3NlZCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgc3RlcCBvZiB0aGUgcHJvY2Vzcy4gSSByZWFsbHkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiwgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGUgY2FsbGluZyBjb250ZXh0IGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjA5LjIxODc4OTg3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTUyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZnFubF9lbnF1ZXVlX3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9OTczPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk3NDpfX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk3NS1cXHRcXHRcXHRzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMDc2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwNzc6X19uZnFubF9lbnF1ZXVlX3BhY2tldF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA3OC1cXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg3LVxcdFxcdGVudHJ5LVxcdTAwM2Vza2IgPSBza2I7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDg4OlxcdFxcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA4OS1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDk4LVxcdFxcdGVudHJ5X3NlZy1cXHUwMDNlc2tiID0gc2tiO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA5OTpcXHRcXHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5X3NlZyk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTAwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTExMDc9bmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSwgdW5zaWduZWQgaW50IHF1ZXVlbnVtKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ1LVxcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZRQV9DRkdfRl9HU08pIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvX3NjdHAoc2tiKSkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTQ2OlxcdFxcdHJldHVybiBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNDctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzUtXFx0XFx0aWYgKGVyciA9PSAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE3NjpcXHRcXHRcXHRlcnIgPSBfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhuZXQsIHF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzZWdzLCBlbnRyeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjA5LjI2Mzg4OTU2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk2NTMyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBGaWx0ZXIgUXVldWUqKlxuXG5Pa2F5LCBzbyBJJ20gc3RhcnRpbmcgZnJlc2ggb24gdGhpcywgYW5kIHRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgZ2V0IG15IGJlYXJpbmdzLiBJIG5lZWQgYSBjbGVhciBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHdob2xlIG5ldHdvcmsgZmlsdGVyaW5nIHF1ZXVlIGlzIHdvcmtpbmcuIFJpZ2h0LCBzbyBJIHNlZSBpdDsgYG5mcW5sX2VucXVldWVfcGFja2V0YCBpcyB0aGUgZGVzaWduYXRlZCBlbnRyeSBwb2ludC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByb2Nlc3NlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHdoYXQgdGhlIGNvbnRyb2wgZmxvdyBsb29rcyBsaWtlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA5OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjEyLjE2MDQyNTEzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MTcxMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfZW5xdWV1ZV9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTc0Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTc1LVxcdFxcdFxcdHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEwNzY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA3NzpfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDc4LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODctXFx0XFx0ZW50cnktXFx1MDAzZXNrYiA9IHNrYjtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwODg6XFx0XFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg5LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwOTgtXFx0XFx0ZW50cnlfc2VnLVxcdTAwM2Vza2IgPSBza2I7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDk5OlxcdFxcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnlfc2VnKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTEwNj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTA3Om5mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGludCBxdWV1ZW51bSlcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ1LVxcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZRQV9DRkdfRl9HU08pIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvX3NjdHAoc2tiKSkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTQ2OlxcdFxcdHJldHVybiBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNDctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzUtXFx0XFx0aWYgKGVyciA9PSAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE3NjpcXHRcXHRcXHRlcnIgPSBfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhuZXQsIHF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzZWdzLCBlbnRyeSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE4MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9oYW5kbGVyIG5mcWggPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODAxOlxcdC5vdXRmblxcdFxcdD0gbmZxbmxfZW5xdWV1ZV9wYWNrZXQsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODAyLVxcdC5uZl9ob29rX2Ryb3BcXHQ9IG5mcW5sX25mX2hvb2tfZHJvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MTIuMjA4MDQ2NzA3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyODMwNDcxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBQbGFuZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgZnVuY3Rpb24g4oCTIGl0J3MgZGVmaW5pdGVseSBhY3RpbmcgYXMgYSBxdWV1ZSBoYW5kbGVyLCBzbyB0aGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBtb3ZlcyBhcm91bmQsIGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHBvdGVudGlhbGx5IGludm9sdmVkLlxuXG5gc2tiX3plcm9jb3B5YCBpcyBleHBvcnRlZCwgc28gdGhhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHBvaW50IG9mIGludGVyZXN0LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2lyY2xlIGJhY2sgdG8gdGhhdCBsYXRlciwgYXMgdGhhdCBzZWVtcyByZWxldmFudCBmb3IgemVyby1jb3B5IG1lY2hhbmlzbXMuIFNpbWlsYXJseSwgYm90aCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBhbmQgYG92c19kcF91cGNhbGxgIGFyZSBleHBvcnRlZCwgd2hpY2ggYXJlIGltcG9ydGFudCBiZWNhdXNlIG9mIHRoZWlyIHJvbGVzIGluIFRDUCBkYXRhIHRyYW5zZmVyIGFuZCBPcGVuIHZTd2l0Y2ggdXBjYWxscywgcmVzcGVjdGl2ZWx5LiBUaGF0IHN1Z2dlc3RzIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBkYXRhIHBsYW5lLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZmlsdGVyaW5nIGFuZCBxdWV1aW5nLlxuXG5JIG5lZWQgdG8gY29uZmlybSBzb21lIGFzc3VtcHRpb25zLCBzbywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gc2VlaW5nIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBPUEVOVlNXSVRDSGAuIFRoZSBwcmVzZW5jZSBvZiBib3RoIGNsZWFybHkgZmxhZ3MgdGhhdCB0aGlzIGhhcyB0byBkbyB3aXRoIG5ldGZpbHRlciBhbmQgT3BlbiB2U3dpdGNoLCBhcyBleHBlY3RlZC5cblxuRmluYWxseSwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIGluIHRoZXJlLiBJdCdzIGEga2V5IHBsYWNlIHRvIGxvb2sgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cywgb3IgdGhhdCB0aGUgaW5pdGlhbCBjb250ZXh0IGlzIG1pc3NpbmcuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgaW4gZHJhd2luZyB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTExOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOToxOS40OTEwOTYxMDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzA0OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MTkuNTM2ODA1MDQxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTkxMzY4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBORVRGSUxURVJfTkVUTElOS19RVUVVRSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgdXN1YWxseSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHNlYXJjaCBmb3IgdGhhdCBzcGVjaWZpYyBzeW1ib2wuIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkIGFuZCB3ZWxsLWRvY3VtZW50ZWQgdGhlcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjIyLjUzNTk0NTcyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4ODQyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjIyLjU4MDgzNjg3M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEwMjM5NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIHdoYXQgb3RoZXIgb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMg4oCTIHdoYXQgdGhpbmdzIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBiZWNvbWVzIHNlbGVjdGFibGUsIGFuZCB3aGF0IG1pZ2h0IGJlIGNvbmZpZ3VyZWQgYWxvbmdzaWRlIGl0LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIG5ldGZpbHRlciBlY29zeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MjUuNDkxMDc4NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNTI6XFx0XFx0ICBmb3IgZXh0ZW5kZWQgYWNjb3VudGluZyB2aWEgTkZORVRMSU5LLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG4gIDU1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA1NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgNTc6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICA1ODpcXHRcXHRoZWxwXFxuICA1OTpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcXG4gIDYwOlxcdFxcdCAgZm9yIHF1ZXVlaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbiAgNjM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNjQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA2NTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDY2OlxcdFxcdGhlbHBcXG4gIDY3OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjg6XFx0XFx0ICBmb3IgbG9nZ2luZyBwYWNrZXRzIHZpYSBORk5FVExJTksuXFxuICA2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MjUuNDkxMTc1MjY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjM1OTc2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE5ldHdvcmsgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBtb2R1bGUgYW5kLCBhcyBJIHN1c3BlY3RlZCwgaXQgbG9va3MgbGlrZSBpdCdzIHJlbGlhbnQgb24gdGhlIGJyb2FkZXIgYE5FVEZJTFRFUl9BRFZBTkNFRGAgZmVhdHVyZS4gVGhpcyBpc24ndCBzdXJwcmlzaW5nLCBidXQgSSBhbHdheXMgdmVyaWZ5IHRoZXNlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgYSBjbGVhbiBidWlsZCBhbmQgYXZvaWQgdW5leHBlY3RlZCBjb25mbGljdHMuIE5vdywgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYE9QRU5WU1dJVENIYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgSSdsbCBkaXZlIGludG8gdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdsbCBsaWtlbHkgZGV0YWlsIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGZvciBhbiBgT1BFTlZTV0lUQ0hgIGludGVncmF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYwOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MjkuMTE0Nzc1MzcxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOToyOS4xMTQ4NDQ3MjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2OTA4NDI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgT3BlbiB2U3dpdGNoIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYCwgd2hpY2gsIG9mIGNvdXJzZSwgcmVsaWVzIGhlYXZpbHkgb24gYElORVRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCdzIGEgZnVuZGFtZW50YWwgVENQIGZ1bmN0aW9uLCBzbyBubyBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBpbXBhY3RpbmcgaXQgZGlyZWN0bHkuIFRoZSBwYXRjaCB0b3VjaGVzIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gRnVuY3Rpb25hbGx5LCB0aGVzZSBjaGFuZ2VzIHNlZW0gc291bmQgYW5kIGRlZmluaXRlbHkgd2FycmFudCBzb21lIGZ1enppbmcuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBzaGFycCBvbiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgb3ZzX2RwX3VwY2FsbGAgZm9yIHZ1bG5lcmFiaWxpdHkuXG5cbkFuZCBqdXN0IHRvIGJlIGNvbXBsZXRlLCBJIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBhcmUgZW5hYmxlZC5cblxuTm93LCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBgc2tiX3plcm9jb3B5YCB1c2FnZS4gSSBzZWUgaXQncyB1c2VkIGluIGJvdGggYG5mbmV0bGlua19xdWV1ZS5jYCBhbmQgd2l0aGluIGBvcGVudnN3aXRjaC9kYXRhcGF0aC5jYCwgdGhhdCBtYWtlcyBzZW5zZS4gV2FpdCBhIG1pbnV0ZS4uLiBpdCdzIGFsc28gdXNlZCBkaXJlY3RseSBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGl0c2VsZi4gVGhpcyBtZWFucyBpdCdzIHByZXR0eSBjZW50cmFsIHRvIHRoZSBTS0IgbWFuYWdlbWVudC4gSHVoLCBpcyBpdCBleHBvcnRlZCBhbnl3aGVyZSBlbHNlPyBZZWFoLCBpdCdzIGV4cG9ydGVkIGFuZCB1c2VkIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgaW4gYHNrYl9jb3B5X2FuZF9jc3VtX2RldmA/IE5vLCAqYHNrYl96ZXJvY29weWAqIGlzIGV4cG9ydGVkLiBMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgYHNrYl96ZXJvY29weWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTM0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MzQuMjgzOTMyNDYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYxMzAyMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaD00MTM9ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnhlbl9uZXRiYWNrX2RiZ19yb290O1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxNjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxODp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTQ5LSAqIGNvdW50ZXIgYmVjYXVzZSBjb3JlIGRyaXZlciBjYWxscyBpbnRvIHhlbnZpZl96ZXJvY29weV9jYWxsYmFja1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUwOiAqIHdoaWNoIGNhbGxzIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUuXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmM6NTI6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01OC1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNjAte1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTAtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdfbGlzdDtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTIxMTpcXHRcXHRcXHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIG5za2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEyLVxcdFxcdFxcdGlmICh4ZW52aWZfaGFuZGxlX2ZyYWdfbGlzdChxdWV1ZSwgc2tiKSkge1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbnNvbGlkYXRlIGZyYWdfbGlzdCFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNy1cXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjMzLVxcdFxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjM0OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjcyLVxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKSB7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjc0LVxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9zZW50Kys7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTI4Mz1zdGF0aWMgdm9pZCB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE0LVxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9mYWlsKys7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XFx0eGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShxdWV1ZSk7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzY4PWludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzE6c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI2OT12b2lkIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MDp1bnNpZ25lZCBpbnQgc2tiX3plcm9jb3B5X2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjcyLVxcdFxcdCBpbnQgbGVuLCBpbnQgaGxlbik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODEyPUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV9yZWFsbG9jKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4MTQ6c3RhdGljIGJvb2wgc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxvLCB1MTYgbGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTgzND1zdGF0aWMgdm9pZCBfX21zZ196ZXJvY29weV9jYWxsYmFjayhzdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjICp1YXJnKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cXHRpZiAoIXRhaWwgfHwgU0tCX0VYVF9FUlIodGFpbCktXFx1MDAzZWVlLmVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fWkVST0NPUFkgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlxcdCAgICAhc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQodGFpbCwgbG8sIGxlbikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODcyLVxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTk2MS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxOTYyOnN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNDktXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjUwOlxcdFxcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjUxLVxcdFxcdFxcdGtmcmVlX3NrYihuKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXFx0c2tiX3plcm9jb3B5X2hlYWRsZW4gLSBDYWxjdWxhdGUgaGVhZHJvb20gbmVlZGVkIGZvciBza2JfemVyb2NvcHkoKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcXHRAZnJvbTogc291cmNlIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlxcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAndG8nIHNrYiBwYXNzZWRcXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXFx0aW50byBza2JfemVyb2NvcHkoKS5cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mzc9dW5zaWduZWQgaW50XFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG5uZXQvY29yZS9za2J1ZmYuYy0zODM5LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTU6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTYtXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODU4OiAqXFx0c2tiX3plcm9jb3B5IC0gWmVybyBjb3B5IHNrYiB0byBza2JcXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXFx0QHRvOiBkZXN0aW5hdGlvbiBidWZmZXJcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcXG5uZXQvY29yZS9za2J1ZmYuYzozODY3OiAqXFx0VGhlIGBobGVuYCBhcyBjYWxjdWxhdGVkIGJ5IHNrYl96ZXJvY29weV9oZWFkbGVuKCkgc3BlY2lmaWVzIHRoZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcXHRoZWFkcm9vbSBpbiB0aGUgYHRvYCBidWZmZXIuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzc6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkyMS1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjMtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTQzLX1cXG5uZXQvY29yZS9za2J1ZmYuYzozOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQyNDI9dm9pZCBza2Jfc3BsaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjEsIGNvbnN0IHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00MjQ5LVxcdHNrYl9zaGluZm8oc2tiMSktXFx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB6Y19mbGFncztcXG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlxcdHNrYl96ZXJvY29weV9jbG9uZShza2IxLCBza2IsIDApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXFx0aWYgKGxlbiBcXHUwMDNjIHBvcylcXHQvKiBTcGxpdCBsaW5lIGlzIGluc2lkZSBoZWFkZXIuICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzg4PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTI6XFx0XFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTAxMy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXFx0XFx0XFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3MobGlzdF9za2IsIEdGUF9BVE9NSUMpIHx8XFxubmV0L2NvcmUvc2tidWZmLmM6NTAxODpcXHRcXHRcXHRcXHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOS1cXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVxcdFxcdGRhdGFfbGVuID0gbmZxbmxfZ2V0X2RhdGFfbGVuKGVudHNrYiwgUkVBRF9PTkNFKHF1ZXVlLVxcdTAwM2Vjb3B5X3JhbmdlKSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XFx0XFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXFx0XFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVxcdGlmIChkcC1cXHUwMDNldXNlcl9mZWF0dXJlcyBcXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1MDE6XFx0XFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUwMi1cXHRlbHNlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01ODctXFx0LyogT25seSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBoZWFkZXIsIHBhY2tldCBkYXRhIGlzIGFkZGVkXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4OlxcdCAqIGluIHNrYl96ZXJvY29weSgpICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg5LVxcdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5NC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XFx0ZXJyID0gc2tiX3plcm9jb3B5KHVzZXJfc2tiLCBza2IsIHNrYl9sZW4sIGhsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5Ni1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAwOC1cXG5uZXQveGRwL3hzay5jOjEwMDk6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMDEwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTA4NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTA5Mi1cXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG5uZXQveGRwL3hzay5jOjEwOTM6XFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XFxubmV0L3hkcC94c2suYy0xMDk0LVxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTozNS45NDUyNDExNDhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MzA2NDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHNrYl96ZXJvY29weSBVc2FnZSoqXG5cbk9rYXksIHNvIGBza2JfemVyb2NvcHlgIGlzIGRlZmluaXRlbHkgaW4gcGxheSwgc3BlY2lmaWNhbGx5IGluIGBuZm5ldGxpbmtfcXVldWUuY2AgYW5kIGBvcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhhdCBtZWFucyBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGFyZSBzb2xpZCBjb25maWcgb3B0aW9ucyB0byBmb2N1cyBvbi4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IGBza2JfemVyb2NvcHlgIGludGVyYWN0cyB3aXRoIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgb3ZzX2RwX3VwY2FsbGAgaW4gdGhlc2UgY29udGV4dHMuIFRob3NlIGFyZSBrZXkgc3ltYm9scyB0byBrZWVwIGluIG1pbmQuXG5cbkp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2s6IExldCdzIHNlZSBpZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGhhcyBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWhhLCBpdCBwdWxscyBpbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggaXMgYSBib29sZWFuLCBkZWZhdWx0aW5nIHRvIFwieWVzLlwiIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhhdCdzIGV4cGVjdGVkLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ20gY29uZmlkZW50IGluIG15IHVuZGVyc3RhbmRpbmcuIEknbSByZWFkeSB0byBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA4MCwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6NDEuMjA4MzA3MzI4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczNzA3OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJvdnNfZHBfdXBjYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3plcm9jb3B5YCBhbmQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gYWRkIGNoZWNrcyBmb3IgYHNrYl9mcmFnc19yZWFkYWJsZWAuIEl0IGFsc28gbW9kaWZpZXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIG9wZW52c3dpdGNoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiBUaGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXMgdXNlZCBieSBvcGVudnN3aXRjaCBhbmQgbmZuZXRsaW5rX3F1ZXVlLCBzbyB3ZSBpbmNsdWRlIHRoZWlyIGNvbmZpZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgICBcIm92c19kcF91cGNhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIGBza2JfemVyb2NvcHlgIGFuZCBgdGNwX3NlbmRtc2dfbG9ja2VkYCB0byBhZGQgY2hlY2tzIGZvciBgc2tiX2ZyYWdzX3JlYWRhYmxlYC4gSXQgYWxzbyBtb2RpZmllcyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaW4gb3BlbnZzd2l0Y2guIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgb3BlbnZzd2l0Y2ggY29kZSBwYXRocywgd2hpY2ggYXJlIHdvcnRoIGZ1enppbmcuIFRoZSBgc2tiX3plcm9jb3B5YCBmdW5jdGlvbiBpcyB1c2VkIGJ5IG9wZW52c3dpdGNoIGFuZCBuZm5ldGxpbmtfcXVldWUsIHNvIHdlIGluY2x1ZGUgdGhlaXIgY29uZmlncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6NDEuMjg1NzEwNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxNTkwNjEzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTo0MS4yODYyNzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzUxNTg0OTIzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXFxcInVucmVhZGFibGVcXFwiIHNrYiBmcmFnbWVudHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIGRldmljZSBtZW1vcnkgKGUuZy4sIFRDUCBkZXZtZW0pLiBJdCBlbnN1cmVzIHRoYXQgdW5yZWFkYWJsZSBmcmFnbWVudHMgYXJlIG5vdCBtaXhlZCB3aXRoIHJlYWRhYmxlIG9uZXMsIGNvcnJlY3RseSBwcm9wYWdhdGVzIHRoZSBgdW5yZWFkYWJsZWAgZmxhZyB3aGVuIHplcm8tY29weWluZyBza2JzLCBhbmQgcHJldmVudHMgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgcXVldWVkIHRvIHVzZXJzcGFjZSBvciBjb2xsYXBzZWQgaW5jb3JyZWN0bHkgaW4gVENQLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3Igc3RhY2sgdmFyaWFibGVzKSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlIHJpc2tzIG1pdGlnYXRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBETUEtbWFwcGVkIGRldmljZSBtZW1vcnksIHdoaWNoIGFyZSBub3QgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvbnRleHQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjBhN2ZhY2Y0ZDczNTEyNTk4ZGFmOWJlN2VkM2E2NGY5MjU3ZDIzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDE5OjI4OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYmEzZGJhYzgwZmI0OS4uZDIxYWY2ODE1Njk1MCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTM4NzAsNyArMzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbiAgKlx0UmV0dXJuIHZhbHVlOlxuICAqXHQwOiBldmVyeXRoaW5nIGlzIE9LXG4gICpcdC1FTk9NRU06IGNvdWxkbid0IG9ycGhhbiBmcmFncyBvZiBAZnJvbSBkdWUgdG8gbGFjayBvZiBtZW1vcnlcbi0gKlx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeVxuKyAqXHQtRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5LCBvciByZWFkYWJsZSBoZWFkXG4rICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cbiAgKi9cbiBpbnRcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5AQCAtMzkwNSwxMCArMzkwNiwxNyBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFx1MDAyNlx1MDAyNiBqIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4pIHtcbitcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4gXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbitcdFx0aWYgKGogXHUwMDNlIDApXG4rXHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbkBAIC0zOTI4LDYgKzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXHR9XG4gXHRza2Jfc2hpbmZvKHRvKS1cdTAwM2Vucl9mcmFncyA9IGo7XG4gXG4rXHRpZiAoaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgZnJvbS1cdTAwM2V1bnJlYWRhYmxlKVxuK1x0XHR0by1cdTAwM2V1bnJlYWRhYmxlID0gMTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmI0MjM3ZDBlOTk0ZDYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0xMjQwLDcgKzEyNDAsOCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcbiBcdFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcbiBcbi1cdFx0aWYgKGNvcHkgXHUwMDNjPSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpKSB7XG4rXHRcdGlmIChjb3B5IFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSB8fFxuK1x0XHQgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7XG4gXHRcdFx0Ym9vbCBmaXJzdF9za2I7XG4gXG4gbmV3X3NlZ21lbnQ6XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggYWU2OWIyY2FiYWI5ZS4uNDgyODkzYTVmNjdkYyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTQ2Nyw2ICs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghZHBfaWZpbmRleClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbiBcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuc2tiKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6NDEuMjg2Mjc3MDJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk2Mjk2OTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgVW5yZWFkYWJsZSBTS0IgRnJhZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhczogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGUgY29tbW9uIHRocmVhZCBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGVzZSBcInVucmVhZGFibGVcIiBTS0IgZnJhZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGFyZSByZWxhdGVkIHRvIGRldmljZSBtZW1vcnkg4oCTIFRDUCBkZXZtZW0gc3BlY2lmaWNhbGx5LCBhcyB0aGF0J3Mgd2hlcmUgSSd2ZSBzZWVuIHRoaXMga2luZCBvZiBjb25zdHJ1Y3QgdXNlZCBiZWZvcmUuXG5cbkluIGBza2JfemVyb2NvcHlgLCB0aGUgcGF0Y2ggYWRkcyBjaGVja3MgYXJvdW5kIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBUaGUgZmlyc3Qgb25lIGxvb2tzIHRvIG1lIGxpa2UgaXQncyBwcmV2ZW50aW5nIHRoZSBjb3B5IGlmIHRoZSBzb3VyY2UgU0tCIGhhcyB1bnJlYWRhYmxlIGZyYWdzIGFuZCBzb21ldGhpbmcgaGFzIGFscmVhZHkgYmVlbiBjb3BpZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHN1c3BlY3QgdGhpcyBpcyB0cnlpbmcgdG8gYXZvaWQgYSBgcHV0X3BhZ2VgIG9uIGFuIGludmFsaWQgcGFnZS4gVGhlIHNlY29uZCBvbmUgc2VlbXMgdG8gcHJvcGFnYXRlIHRoZSBgdW5yZWFkYWJsZWAgZmxhZyB0byB0aGUgZGVzdGluYXRpb24gU0tCIGlmIHRoZSBzb3VyY2UgaGFkIGl0LCBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgdHJ5IHRvIHJlYWQgaXQgbGF0ZXIuXG5cbmB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIHRvIHNlZSBpZiB3ZSBjb3VsZCBjb2xsYXBzZSBTS0JzLCBidXQgbm93IGl0J3MgYWRkZWQgYSBjaGVjayBmb3IgdGhlICpyZWFkYWJpbGl0eSogb2YgZnJhZ3MgaW4gcmVsYXRpb24gdG8gdGhlIGBiaW5kaW5nYCBmbGFnLiBUaGlzIHNjcmVhbXMgRE1BIGNvbnNpZGVyYXRpb25zLiBJIHRoaW5rIHRoZSBpbnRlbnRpb24gaXMgdG8gZW5zdXJlIHRoZSBza2IgY2FuIGJlIHNhZmVseSB3cml0dGVuLCBhbmQgdGhpcyBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uIGZpeC4gSXQncyBtYWtpbmcgc3VyZSB3ZSBkb24ndCB0cnkgdG8gc2VuZCBkZXZpY2UgbWVtb3J5IGFzIGEgdXNlciBidWZmZXIgd2hlcmUgaXQgZG9lc24ndCBiZWxvbmcuXG5cbkZpbmFsbHksIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBoYXMgYSBzaW1wbGUgY2hlY2suIElmIHRoZSBTS0IgaXNuJ3QgcmVhZGFibGUsIGl0J3MgcmVqZWN0ZWQuIFRoaXMgaXMgcHJvYmFibHkgdGhlIG1vc3QgY3J1Y2lhbCBwYXJ0IGJlY2F1c2UsIGlmIHdlICpkaWQqIHF1ZXVlIGFuIHVucmVhZGFibGUgU0tCIHRvIHVzZXJzcGFjZSwgd2UnZCBiZSBzZXR0aW5nIHVwIGEgY3Jhc2ggb3IgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgaW5mb3JtYXRpb24gbGVhayB3aGVuIGEgdXNlciBwcm9jZXNzIHRyaWVkIHRvIGFjY2VzcyBpdC4gTm93LCB0aGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCAqY291bGQqIGhhdmUgYmVlbiBjYWxsaW5nIGBza2JfY29weV9iaXRzYCBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggd291bGQgaGF2ZSB0cmlnZ2VyZWQgYSBmYXVsdCBpZiB3ZSB0cmllZCB0byBjb3B5IHRob3NlIGRldmljZSBtZW1vcnkgcmVnaW9ucyBkaXJlY3RseSB0byB1c2Vyc3BhY2UuIFdlIG5lZWQgdG8gcHJldmVudCB0aGlzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGF0IGBza2JfZnJhZ3NfcmVhZGFibGVgIGFjdHVhbGx5ICpkb2VzKi4gSSBiZXQgaXQncyBjaGVja2luZyBzb21lIGZsYWdzIHJlbGF0ZWQgdG8gRE1BIG1hcHBpbmdzIG9yIHBhZ2UgdGFibGUgZW50cmllcy4gTGV0IG1lIHJ1biBhIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24gaXMgdGhlIGtleSB0byBjb25maXJtaW5nIG15IGFzc3VtcHRpb25zIGFib3V0IGRldmljZSBtZW1vcnkgYW5kIERNQSBzYWZldHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTo0OS4yNDkyNTA1NDhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDI1MTU2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2ZyYWdzX3JlYWRhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTQ3MT1zdGF0aWMgbmV0ZGV2X3R4X3QgYm54dF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy01NzUtXFx0aWYgKGZyZWVfc2l6ZSA9PSBicC1cXHUwMDNldHhfcmluZ19zaXplIFxcdTAwMjZcXHUwMDI2IGxlbmd0aCBcXHUwMDNjPSBicC1cXHUwMDNldHhfcHVzaF90aHJlc2ggXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzo1NzY6XFx0ICAgIHNrYl9mcmFnc19yZWFkYWJsZShza2IpIFxcdTAwMjZcXHUwMDI2ICFsZmxhZ3MpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy01NzctXFx0XFx0c3RydWN0IHR4X3B1c2hfYnVmZmVyICp0eF9wdXNoX2J1ZiA9IHR4ci1cXHUwMDNldHhfcHVzaDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTg4ND1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4OTAtLyogUmV0dXJuIHRydWUgaWYgZnJhZ3MgaW4gdGhpcyBza2IgYXJlIHJlYWRhYmxlIGJ5IHRoZSBob3N0LiAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg5MTpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZyYWdzX3JlYWRhYmxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODkyLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTEyMzM9c3RhdGljIGlubGluZSBib29sIHRjcF9za2JfY2FuX2NvbGxhcHNlKGNvbnN0IHN0cnVjdCBza19idWZmICp0byxcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTEyMzktXFx0XFx0ICAgICAgc2tiX3B1cmVfemNvcHlfc2FtZSh0bywgZnJvbSkgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL25ldC90Y3AuaDoxMjQwOlxcdFxcdCAgICAgIHNrYl9mcmFnc19yZWFkYWJsZSh0bykgPT0gc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0xMjQxLX1cXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9Mzg5PXN0YXRpYyBpbnQgX19za2JfZGF0YWdyYW1faXRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy00MTAtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo0MTE6XFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTQxMi1cXHRcXHRnb3RvIHNob3J0X2NvcHk7XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzNT1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzOS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjY0MDpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjQxLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MTQtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MTU6XFx0aWYgKGkgXFx1MDAyNlxcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MTYtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0zNTY5PWludCBza2JfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMzU4MS1cXG5uZXQvY29yZS9kZXYuYzozNTgyOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcXG5uZXQvY29yZS9kZXYuYy0zNTgzLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Mzk5MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfdW5yZWFkYWJsZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM5OTYtXFxubmV0L2NvcmUvZGV2LmM6Mzk5NzpcXHRpZiAobGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpIHx8XFxubmV0L2NvcmUvZGV2LmMtMzk5OC1cXHRcXHQgICBkZXYtXFx1MDAzZW5ldG1lbV90eCA9PSBORVRNRU1fVFhfTk9fRE1BKSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5OTc9aW50IHNrYl9jb3B5X3VidWZzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjAwNi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMDA3OlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2NvcmUvc2tidWZmLmMtMjAwOC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjE4Mi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMTgzOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2NvcmUvc2tidWZmLmMtMjE4NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDI9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjUxMi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyNTEzOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2NvcmUvc2tidWZmLmMtMjUxNC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4MDg9c3RhdGljIGludCBwc2tiX3RyaW1fcmNzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI4MTEtXFxubmV0L2NvcmUvc2tidWZmLmM6MjgxMjpcXHRpZiAoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0yODEzLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IGNzdW1fYmxvY2tfc3ViKHNrYi1cXHUwMDNlY3N1bSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4NzU9dm9pZCAqX19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yODgyLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjI4ODM6XFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0yODg0LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzAxOT1pbnQgc2tiX2NvcHlfYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCB2b2lkICp0bywgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMwMzgtXFxubmV0L2NvcmUvc2tidWZmLmM6MzAzOTpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMwNDAtXFx0XFx0Z290byBmYXVsdDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTMyMDU9c3RhdGljIGJvb2wgX19za2Jfc3BsaWNlX2JpdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMyMjctXFx0ICovXFxubmV0L2NvcmUvc2tidWZmLmM6MzIyODpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMyMjktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzQ0OD1pbnQgc2tiX3N0b3JlX2JpdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM0NjYtXFxubmV0L2NvcmUvc2tidWZmLmM6MzQ2NzpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM0NjgtXFx0XFx0Z290byBmYXVsdDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM1Mjk9X193c3VtIHNrYl9jaGVja3N1bShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBfX3dzdW0gY3N1bSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM1NDYtXFxubmV0L2NvcmUvc2tidWZmLmM6MzU0NzpcXHRpZiAoV0FSTl9PTl9PTkNFKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkpXFxubmV0L2NvcmUvc2tidWZmLmMtMzU0OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM2MTE9X193c3VtIHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM2MzItXFxubmV0L2NvcmUvc2tidWZmLmM6MzYzMzpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM2MzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zNzAwPXUzMiBza2JfY3JjMzJjKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiBjcmMpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zNzE0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM3MTU6XFx0aWYgKFdBUk5fT05fT05DRSghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM3MTYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc3PXNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MDgtXFxubmV0L2NvcmUvc2tidWZmLmM6MzkwOTpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSBcXHUwMDI2XFx1MDAyNiBqIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsZW4pIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0zOTEwLVxcdFxcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXFx1MDAzZWhlYWQpKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQ0NTE9dW5zaWduZWQgaW50IHNrYl9zZXFfcmVhZCh1bnNpZ25lZCBpbnQgY29uc3VtZWQsIGNvbnN0IHU4ICoqZGF0YSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ0NzItXFxubmV0L2NvcmUvc2tidWZmLmM6NDQ3MzpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShzdC1cXHUwMDNlY3VyX3NrYikpXFxubmV0L2NvcmUvc2tidWZmLmMtNDQ3NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTYxODM9Ym9vbCBza2JfdHJ5X2NvYWxlc2NlKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MjAyLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjYyMDM6XFx0aWYgKHNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSAhPSBza2JfZnJhZ3NfcmVhZGFibGUodG8pKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTYyMDQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTYyMDUtXFxubmV0L2NvcmUvc2tidWZmLmM6NjIwNjpcXHRpZiAobGVuIFxcdTAwM2M9IHNrYl90YWlscm9vbSh0bykgXFx1MDAyNlxcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pKSB7XFxubmV0L2NvcmUvc2tidWZmLmMtNjIwNy1cXHRcXHRpZiAobGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzA3Mz12b2lkIHNrYl9jb25kZW5zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA3Ni1cXHRcXHRpZiAoc2tiLVxcdTAwM2VkYXRhX2xlbiBcXHUwMDNlIHNrYi1cXHUwMDNlZW5kIC0gc2tiLVxcdTAwM2V0YWlsIHx8XFxubmV0L2NvcmUvc2tidWZmLmM6NzA3NzpcXHRcXHQgICAgc2tiX2Nsb25lZChza2IpIHx8ICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvY29yZS9za2J1ZmYuYy03MDc4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMjQzLVxcdFxcdGlmIChjb3B5IFxcdTAwM2M9IDAgfHwgIXRjcF9za2JfY2FuX2NvbGxhcHNlX3RvKHNrYikgfHxcXG5uZXQvaXB2NC90Y3AuYzoxMjQ0OlxcdFxcdCAgICB1bmxpa2VseShza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSAhPSAhYmluZGluZykpIHtcXG5uZXQvaXB2NC90Y3AuYy0xMjQ1LVxcdFxcdFxcdGJvb2wgZmlyc3Rfc2tiO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE5Nj1zdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIyNjktXFxubmV0L2lwdjQvdGNwLmM6MjI3MDpcXHRcXHRcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9pcHY0L3RjcC5jLTIyNzEtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yNTAwPXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI1MTUtXFxubmV0L2lwdjQvdGNwLmM6MjUxNjpcXHRcXHRpZiAoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcXG5uZXQvaXB2NC90Y3AuYy0yNTE3LVxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTYyLVxcbm5ldC9pcHY0L3RjcC5jOjI1NjM6XFx0XFx0XFx0LyogIXNrYl9mcmFnc19yZWFkYWJsZSgpIHNob3VsZCBpbmRpY2F0ZSB0aGF0IEFMTCB0aGVcXG5uZXQvaXB2NC90Y3AuYy0yNTY0LVxcdFxcdFxcdCAqIGZyYWdzIGluIHRoaXMgc2tiIGFyZSBkbWFidWYgbmV0X2lvdnMuIFdlJ3JlIGNoZWNraW5nXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTY2LVxcdFxcdFxcdCAqIGhlcmUuIElmIHRoZSB0Y3Agc3RhY2sgaXMgbm90IHNldHRpbmdcXG5uZXQvaXB2NC90Y3AuYzoyNTY3OlxcdFxcdFxcdCAqIHNrYl9mcmFnc19yZWFkYWJsZSgpIGNvcnJlY3RseSwgd2Ugc3RpbGwgZG9uJ3Qgd2FudFxcbm5ldC9pcHY0L3RjcC5jLTI1NjgtXFx0XFx0XFx0ICogdG8gY3Jhc2ggaGVyZS5cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI2NTY9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yODM2LVxcdFxcdFxcdGlmIChsYXN0X2NvcGllZF9kbWFidWYgIT0gLTEgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3AuYzoyODM3OlxcdFxcdFxcdCAgICBsYXN0X2NvcGllZF9kbWFidWYgIT0gIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9pcHY0L3RjcC5jLTI4MzgtXFx0XFx0XFx0XFx0YnJlYWs7XFxubmV0L2lwdjQvdGNwLmMtMjgzOS1cXG5uZXQvaXB2NC90Y3AuYzoyODQwOlxcdFxcdFxcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkge1xcbm5ldC9pcHY0L3RjcC5jLTI4NDEtXFx0XFx0XFx0XFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fbXNnKHNrYiwgb2Zmc2V0LCBtc2csXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yODcxLVxcbm5ldC9pcHY0L3RjcC5jOjI4NzI6XFx0XFx0bGFzdF9jb3BpZWRfZG1hYnVmID0gIXNrYl9mcmFnc19yZWFkYWJsZShza2IpO1xcbm5ldC9pcHY0L3RjcC5jLTI4NzMtXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01NzczPXRjcF9jb2xsYXBzZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHN0cnVjdCByYl9yb290ICpyb290LFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTc4Ni1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Nzg3OlxcdFxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTc4OC1cXHRcXHRcXHRnb3RvIHNraXBfdGhpcztcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU4MDktXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTgxMDpcXHRcXHRpZiAobiBcXHUwMDI2XFx1MDAyNiBuICE9IHRhaWwgXFx1MDAyNlxcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKG4pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgxMS1cXHRcXHQgICAgdGNwX3NrYl9jYW5fY29sbGFwc2Vfcngoc2tiLCBuKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgyMi1cXHQgICAgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjYgKFRDUEhEUl9TWU4gfCBUQ1BIRFJfRklOKSkgfHxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1ODIzOlxcdCAgICAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgyNC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01ODY1LVxcdFxcdFxcdFxcdCAgICAoVENQX1NLQl9DQihza2IpLVxcdTAwM2V0Y3BfZmxhZ3MgXFx1MDAyNiAoVENQSERSX1NZTiB8IFRDUEhEUl9GSU4pKSB8fFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU4NjY6XFx0XFx0XFx0XFx0ICAgICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01ODY3LVxcdFxcdFxcdFxcdFxcdGdvdG8gZW5kO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM0OTE9c3RhdGljIGJvb2wgdGNwX2Nhbl9jb2xsYXBzZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzQ5Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM0OTc6XFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzQ5OC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz03MDE9c3RhdGljIHVuc2lnbmVkIGludCBuZnVsbmxfZ2V0X2NvcHlfbGVuKGNvbnN0IHN0cnVjdCBuZl9sb2dpbmZvICpsaSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTcwOS1cXHRcXHRjb3B5X2xlbiA9IGxpLVxcdTAwM2V1LnVsb2cuY29weV9sZW47XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NzEwOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNzExLVxcdFxcdGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTY5Mz1zdGF0aWMgdW5zaWduZWQgaW50IG5mcW5sX2dldF9kYXRhX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZW50c2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02OTctXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo2OTg6XFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZW50c2tiKSlcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTY5OS1cXHRcXHRkYXRhX2xlbiA9IHNrYl9oZWFkbGVuKGVudHNrYik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTE9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NjktXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NDcwOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNDcxLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTMzPXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTcwLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjE3MTpcXHRzbmFwbGVuID0gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgPyBza2ItXFx1MDAzZWxlbiA6IHNrYl9oZWFkbGVuKHNrYik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTcyLVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ2PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI5MC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyOTE6XFx0c25hcGxlbiA9IHNrYl9mcmFnc19yZWFkYWJsZShza2IpID8gc2tiLVxcdTAwM2VsZW4gOiBza2JfaGVhZGxlbihza2IpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI5Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6NTEuMDkxNzc3MTI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzAzNDYxODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGV2aWNlIE1lbW9yeSBQcm90ZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWxsIGFib3V0IHByZXZlbnRpbmcgdGhlIGtlcm5lbCBmcm9tIGRvaW5nIHNvbWV0aGluZyBzdHVwaWQgd2l0aCBkZXZpY2UgbWVtb3J5IOKAkyBzcGVjaWZpY2FsbHksIG1lbW9yeSByZWdpb25zIHRoYXQgdGhlIENQVSBzaG91bGRuJ3QgZGlyZWN0bHkgcmVhZC4gVGhlIGNvcmUgaXNzdWUgaXMgYWJvdXQgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBhbmQgZW5zdXJpbmcgdGhhdCBpZiBhIGZyYWdtZW50IHdpdGhpbiBhbiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaXNuJ3QgcmVhZGFibGUsIHdlIGRvbid0IHRyeSB0byB0cmVhdCBpdCBhcyBpZiBpdCBpcy4gSXQncyBhIG1hdHRlciBvZiBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIFwiaG9zdC1hY2Nlc3NpYmxlXCIgbWVtb3J5IGFuZCBtZW1vcnkgcmVzaWRpbmcgaW4gdGhlIG5ldHdvcmsgZGV2aWNlLCB3aGljaCB0aGUgQ1BVIHR5cGljYWxseSBzaG91bGRuJ3QgdG91Y2ggZGlyZWN0bHkuXG5cbk15IGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB3aGV0aGVyIHRoaXMgd2FzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIElmIHdlIHdlcmUgdG8gcXVldWUgYW4gdW5yZWFkYWJsZSBgc2tiYCB0byB1c2Vyc3BhY2UsIHdoYXQgY291bGQgaGFwcGVuPyBUaGlzIHBhdGNoIGFpbXMgdG8gcHJldmVudCB0aGUgY29weWluZyBvZiB1bnJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGFuIGVycm9yIG9yIGhhbHRpbmcgdGhlIG9wZXJhdGlvbiBlbnRpcmVseS4gSSB3YXMgaW5pdGlhbGx5IHdvcnJpZWQgYWJvdXQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gdGFyZ2V0IGEgYnVnIHJlbGF0ZWQgdG8gVENQIGRldm1lbSwgd2hpY2ggbWFrZXMgc2Vuc2UuIERldm1lbSAoZGV2aWNlIG1lbW9yeSkgaXNuJ3QgbGlrZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHRoaW5rIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzKS4gSXQncyBkYXRhIHRoYXQncyAqYWxyZWFkeSogaW4gYSBidWZmZXIsIGFuZCBpdCdzIGludGVuZGVkIHRvIGJlIGFjY2Vzc2VkIGJ5IGEgZGV2aWNlLiBJZiB0aGUgQ1BVIHRyaWVzIHRvIGRpcmVjdGx5IGFjY2VzcyBkZXZpY2UgbWVtb3J5LCBpdCdzIGVpdGhlciBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgb3IgYSBwYWdlIGZhdWx0LCBkZXBlbmRpbmcgb24gaG93IHRoYXQgbWVtb3J5IGlzIG1hcHBlZC4gS0FTQU4gKm1pZ2h0KiBjYXRjaCB0aGlzIGlmIHRoZSBtZW1vcnkgaXMgdmFsaWQgYnV0IG5vdCBtZWFudCBmb3IgQ1BVIHVzZSwgYnV0IGl0J3Mgbm90IHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuXG5cblNvIHRoZSBhZGRlZCBjaGVja3MgaW4gYHNrYl96ZXJvY29weWAgc2VlbSBjcnVjaWFsLCBwcmltYXJpbHkgdGhlIG9uZSB0aGF0IHJldHVybnMgYC1FRkFVTFRgIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB1bnJlYWRhYmxlIGZyYWdtZW50IGJ1dCBhbHNvIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgYHVucmVhZGFibGVgIGZsYWcuIEl0J3Mgdml0YWwgdGhhdCB0aGUgZGVzdGluYXRpb24gYHNrYmAgaXMgYWxzbyBtYXJrZWQgYXMgdW5yZWFkYWJsZSBpZiBpdCBpbmhlcml0cyBkZXZpY2UgbWVtb3J5LiBUaGUgbG9naWMgaGVyZSBpcyB0aGF0IGlmIHdlIGRvbid0LCB0aGVuIHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGNvZGUgdGhhdCB0aGlua3MgdGhlIGRhdGEgaXMgcmVhZGFibGUgYW5kIHRyaWVzIHRvIGFjY2VzcyBpdCwgbGVhZGluZyB0byBhIGNyYXNoIG9yIGFuIGluY29ycmVjdCBkYXRhIHJlYWQuXG5cbkNydWNpYWxseSwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqbm90KiB0aGUgdG9vbCBmb3IgdGhpcy4gS01TQU4gZGVhbHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXNuJ3QgdGhlIHByb2JsZW0gaGVyZS4gVGhpcyBwYXRjaCBwcmV2ZW50cyByZWFkcyBvZiB2YWxpZCBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLCBvciBqdXN0IGdvb2Qgb2xkLWZhc2hpb25lZCB0ZXN0aW5nLCBhcmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIGJ1Zy4gSXTigJlzIGEgbG9naWMgYnVnLCBhbiBhY2Nlc3MgdG8gbWVtb3J5IHRoYXQgaXQncyBub3Qgc3VwcG9zZWQgdG8uXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBza2JfemVyb2NvcHlgLiBJbiB0aGUgY2FzZSB3aGVyZSBgbGVuIFx1MDAzZSBza2JfdGFpbHJvb20odG8pYCwgd2Ugc2VlIHRoYXQgaXQgaGFzIHRvIGNvcHkgdGhlIGZyYWdzLiBXaGVuIGFuIGBza2JgIHdpdGggdW5yZWFkYWJsZSBmcmFncyBpcyB1c2VkIGFzIHNvdXJjZSwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYWxzbyBtYXJrZWQgdW5yZWFkYWJsZSB2aWEgYHRvLVx1MDAzZXVucmVhZGFibGUgPSAxYCwgcHJldmVudGluZyBhIHBvdGVudGlhbCByZWFkIGZyb20gdW5yZWFkYWJsZSBtZW1vcnkuIFNvIHRoZSBmbG93IGlzLCBpZiB3ZSBkZXRlY3Qgd2UgYXJlIHJlY2VpdmluZyB1bnJlYWRhYmxlIGZyYWdtZW50cyBpbiBgc2tiX3plcm9jb3B5YCB3ZSBtYXJrIHRoZSBgdG9gIGJ1ZmZlciBhcyB1bnJlYWRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjYzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOTozMDowOC4zOTUyNDQwMjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODQyMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVucmVhZGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTcyOD1lbnVtIHNrYl90c3RhbXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTg0OS0gKlxcdFxcdENIRUNLU1VNX1VOTkVDRVNTQVJZIChtYXggMylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg1MDogKlxcdEB1bnJlYWRhYmxlOiBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCAxIG9mIHRoZSBmcmFnbWVudHMgaW4gdGhpcyBza2IgaXNcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg1MTogKlxcdFxcdHVucmVhZGFibGUuXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC04NTItICpcXHRAZHN0X3BlbmRpbmdfY29uZmlybTogbmVlZCB0byBjb25maXJtIG5laWdoYm91clxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDMyLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTAzMzpcXHRfX3U4XFx0XFx0XFx0dW5yZWFkYWJsZToxO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTAzNC1cXHRfX3U4XFx0XFx0XFx0dGNfZGVwdGg6MjtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTg5MT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZyYWdzX3JlYWRhYmxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODkyLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4OTM6XFx0cmV0dXJuICFza2ItXFx1MDAzZXVucmVhZGFibGU7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODk0LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjYxMD1fX3NrYl9maWxsX25ldG1lbV9kZXNjKHN0cnVjdCBza19idWZmICpza2IsIGludCBpLCBuZXRtZW1fcmVmIG5ldG1lbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjYxNy1cXHRpZiAobmV0bWVtX2lzX25ldF9pb3YobmV0bWVtKSkge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjYxODpcXHRcXHRza2ItXFx1MDAzZXVucmVhZGFibGUgPSB0cnVlO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjYxOS1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjMwOjA4LjQ0ODA5OTIxNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk2NjQzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCdzIGRlYWxpbmcgd2l0aCB0aGUgYHVucmVhZGFibGVgIGJpdGZpZWxkIHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gUmlnaHQsIHRoZSBgc2tiLVx1MDAzZXVucmVhZGFibGVgIGZsYWcgc2lnbmlmaWVzIHRoYXQgdGhlIHNrYiBpcyBob2xkaW5nIGRldmljZSBtZW1vcnksIHNwZWNpZmljYWxseSBgbmV0X2lvdmAsIGFuZCB0aGF0IHRoZSBDUFUgY2FuJ3QgZGlyZWN0bHkgcmVhZCBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBpc3N1ZXMgaW4gaG93IHRoZXNlIHVucmVhZGFibGUgc2ticyBhcmUgaGFuZGxlZC5cblxuSXQgbG9va3MgbGlrZSB0aGUga2V5IHByb2JsZW1zIGl0J3MgZml4aW5nIGFyZTogZW5zdXJpbmcgcmVhZGFibGUgYW5kIHVucmVhZGFibGUgZnJhZ21lbnRzIGRvbid0IGdldCBtaXhlZCwgY29ycmVjdGx5IHByb3BhZ2F0aW5nIHRoYXQgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB0aGUgc2tiIGlzIGJlaW5nIGNvcGllZCB3aXRoIHplcm8tY29weSBmZWF0dXJlcywgYW5kIHByZXZlbnRpbmcgdGhlc2UgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgc2VudCB1cCB0byB1c2Vyc3BhY2Ugd2hpY2ggd291bGQgbGlrZWx5IGNhdXNlIGFuIGltbWVkaWF0ZSBjcmFzaCBvciB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBUQ1AgY2hhbmdlcyBzb3VuZCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LlxuXG5Ob3csIEkgd2FzIGluaXRpYWxseSB3b25kZXJpbmcgaWYgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBtaWdodCBiZSByZWxldmFudCBoZXJlLCBidXQgb24gZnVydGhlciByZWZsZWN0aW9uLCBpdCdzIG5vdC4gVGhpcyBpc24ndCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk7IGl0J3MgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZGV2aWNlIG1lbW9yeSBhY2Nlc3NlZCB0aHJvdWdoIERNQSBhbmQgaG9zdCBDUFUgbWVtb3J5LiBLTVNBTidzIHB1cnBvc2UgaXMgdG8gZmluZCBpbnN0YW5jZXMgd2hlcmUgbWVtb3J5IGlzIHVzZWQgYmVmb3JlIGJlaW5nIHByb3Blcmx5IGluaXRpYWxpemVkLCB3aGljaCBpc24ndCB0aGUgaXNzdWUgaGVyZS4gVGhlIHJpc2tzIGFkZHJlc3NlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIGxvZ2ljYWwgZXJyb3JzIGR1ZSB0byBoYW5kbGluZyBETUEtbWFwcGVkIGRldmljZSBtZW1vcnkuIFNvLCBLTVNBTiBpcyBjb21wbGV0ZWx5IG92ZXJraWxsIGZvciB0aGlzLiBLQVNBTiBhbmQgdGhvcm91Z2ggdGVzdGluZyB3aWxsIGJlIGVub3VnaCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZXJyb3JzLiBUaGlzIHBhdGNoIGlzIHNvbGlkIGluIGl0cyBmb2N1cywgYWRkcmVzc2luZyBhIHZlcnkgc3BlY2lmaWMgc2V0IG9mIHByb2JsZW1zIHJlbGF0ZWQgdG8gYHVucmVhZGFibGVgIHNrYnMgYW5kIGRldmljZSBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjA1LCJPdXRwdXRUb2tlbnMiOjE5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOTozMDoxNi40NDQ3NDUwNDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXFxcInVucmVhZGFibGVcXFwiIHNrYiBmcmFnbWVudHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIGRldmljZSBtZW1vcnkgKGUuZy4sIFRDUCBkZXZtZW0pLiBJdCBlbnN1cmVzIHRoYXQgdW5yZWFkYWJsZSBmcmFnbWVudHMgYXJlIG5vdCBtaXhlZCB3aXRoIHJlYWRhYmxlIG9uZXMsIGNvcnJlY3RseSBwcm9wYWdhdGVzIHRoZSBgdW5yZWFkYWJsZWAgZmxhZyB3aGVuIHplcm8tY29weWluZyBza2JzLCBhbmQgcHJldmVudHMgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgcXVldWVkIHRvIHVzZXJzcGFjZSBvciBjb2xsYXBzZWQgaW5jb3JyZWN0bHkgaW4gVENQLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3Igc3RhY2sgdmFyaWFibGVzKSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlIHJpc2tzIG1pdGlnYXRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBETUEtbWFwcGVkIGRldmljZSBtZW1vcnksIHdoaWNoIGFyZSBub3QgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvbnRleHQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBcXFwidW5yZWFkYWJsZVxcXCIgc2tiIGZyYWdtZW50cywgd2hpY2ggYXJlIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggZGV2aWNlIG1lbW9yeSAoZS5nLiwgVENQIGRldm1lbSkuIEl0IGVuc3VyZXMgdGhhdCB1bnJlYWRhYmxlIGZyYWdtZW50cyBhcmUgbm90IG1peGVkIHdpdGggcmVhZGFibGUgb25lcywgY29ycmVjdGx5IHByb3BhZ2F0ZXMgdGhlIGB1bnJlYWRhYmxlYCBmbGFnIHdoZW4gemVyby1jb3B5aW5nIHNrYnMsIGFuZCBwcmV2ZW50cyB1bnJlYWRhYmxlIHNrYnMgZnJvbSBiZWluZyBxdWV1ZWQgdG8gdXNlcnNwYWNlIG9yIGNvbGxhcHNlZCBpbmNvcnJlY3RseSBpbiBUQ1AuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciBzdGFjayB2YXJpYWJsZXMpIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzIHdoZW4gZGVhbGluZyB3aXRoIERNQS1tYXBwZWQgZGV2aWNlIG1lbW9yeSwgd2hpY2ggYXJlIG5vdCB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29udGV4dC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow995sp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 19:26:55 +0000 UTC FinishedAt: 2026-08-14 19:30:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_NETLINK_QUEUE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_NETLINK_QUEUE" ], "series_id": "d5e59ec5-2307-45e4-abb9-cf60108d9d02" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_zerocopy", "tcp_sendmsg_locked", "ovs_dp_upcall" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtvdnNfZHBfdXBjYWxsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBcJiMzNDt1bnJlYWRhYmxlXCYjMzQ7IHNrYiBmcmFnbWVudHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIGRldmljZSBtZW1vcnkgKGUuZy4sIFRDUCBkZXZtZW0pLiBJdCBlbnN1cmVzIHRoYXQgdW5yZWFkYWJsZSBmcmFnbWVudHMgYXJlIG5vdCBtaXhlZCB3aXRoIHJlYWRhYmxlIG9uZXMsIGNvcnJlY3RseSBwcm9wYWdhdGVzIHRoZSBgdW5yZWFkYWJsZWAgZmxhZyB3aGVuIHplcm8tY29weWluZyBza2JzLCBhbmQgcHJldmVudHMgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgcXVldWVkIHRvIHVzZXJzcGFjZSBvciBjb2xsYXBzZWQgaW5jb3JyZWN0bHkgaW4gVENQLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcsIG9yIHN0YWNrIHZhcmlhYmxlcykgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggRE1BLW1hcHBlZCBkZXZpY2UgbWVtb3J5LCB3aGljaCBhcmUgbm90IHRhcmdldHMgZm9yIEtNU0FOLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhpcyBjb250ZXh0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIGBza2JfemVyb2NvcHlgIGFuZCBgdGNwX3NlbmRtc2dfbG9ja2VkYCB0byBhZGQgY2hlY2tzIGZvciBgc2tiX2ZyYWdzX3JlYWRhYmxlYC4gSXQgYWxzbyBtb2RpZmllcyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaW4gb3BlbnZzd2l0Y2guIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgb3BlbnZzd2l0Y2ggY29kZSBwYXRocywgd2hpY2ggYXJlIHdvcnRoIGZ1enppbmcuIFRoZSBgc2tiX3plcm9jb3B5YCBmdW5jdGlvbiBpcyB1c2VkIGJ5IG9wZW52c3dpdGNoIGFuZCBuZm5ldGxpbmtfcXVldWUsIHNvIHdlIGluY2x1ZGUgdGhlaXIgY29uZmlncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIwYTdmYWNmNGQ3MzUxMjU5OGRhZjliZTdlZDNhNjRmOTI1N2QyM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxOToyODozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMzg3MCw3ICYjNDM7Mzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbiAgKlx0UmV0dXJuIHZhbHVlOlxuICAqXHQwOiBldmVyeXRoaW5nIGlzIE9LXG4gICpcdC1FTk9NRU06IGNvdWxkbiYjMzk7dCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5XG4tICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnlcbiYjNDM7ICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWRcbiYjNDM7ICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cbiAgKi9cbiBpbnRcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5AQCAtMzkwNSwxMCAmIzQzOzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgXHUwMDI2XHUwMDI2IGogXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxlbikge1xuJiM0MztcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTtcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuIFx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4mIzQzO1x0XHRpZiAoaiBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbkBAIC0zOTI4LDYgJiM0MzszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0fVxuIFx0c2tiX3NoaW5mbyh0byktXHUwMDNlbnJfZnJhZ3MgPSBqO1xuIFxuJiM0MztcdGlmIChpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBmcm9tLVx1MDAzZXVucmVhZGFibGUpXG4mIzQzO1x0XHR0by1cdTAwM2V1bnJlYWRhYmxlID0gMTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCA0NTU0NDFmMWI2OTQ5Li5iNDIzN2QwZTk5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTI0MCw3ICYjNDM7MTI0MCw4IEBAIGludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFxuIFx0XHR0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2tiLCBzaXplX2dvYWwpO1xuIFxuLVx0XHRpZiAoY29weSBcdTAwM2M9IDAgfHwgIXRjcF9za2JfY2FuX2NvbGxhcHNlX3RvKHNrYikpIHtcbiYjNDM7XHRcdGlmIChjb3B5IFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSB8fFxuJiM0MztcdFx0ICAgIHVubGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpICE9ICFiaW5kaW5nKSkge1xuIFx0XHRcdGJvb2wgZmlyc3Rfc2tiO1xuIFxuIG5ld19zZWdtZW50OlxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC00NjcsNiAmIzQzOzQ2Nyw5IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFkcF9pZmluZGV4KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuIFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbiBcdFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIW5za2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtvdnNfZHBfdXBjYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl96ZXJvY29weWAgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIGFkZCBjaGVja3MgZm9yIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBJdCBhbHNvIG1vZGlmaWVzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBvcGVudnN3aXRjaC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBvcGVudnN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4gVGhlIGBza2JfemVyb2NvcHlgIGZ1bmN0aW9uIGlzIHVzZWQgYnkgb3BlbnZzd2l0Y2ggYW5kIG5mbmV0bGlua19xdWV1ZSwgc28gd2UgaW5jbHVkZSB0aGVpciBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjBhN2ZhY2Y0ZDczNTEyNTk4ZGFmOWJlN2VkM2E2NGY5MjU3ZDIzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE5OjI4OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMzg3MCw3ICYjNDM7Mzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTsKICAqCVJldHVybiB2YWx1ZToKICAqCTA6IGV2ZXJ5dGhpbmcgaXMgT0sKICAqCS1FTk9NRU06IGNvdWxkbiYjMzk7dCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5Ci0gKgktRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5CiYjNDM7ICoJLUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeSwgb3IgcmVhZGFibGUgaGVhZAomIzQzOyAqICAgICAgcGF5bG9hZCB3b3VsZCBiZSBtaXhlZCB3aXRoIHVucmVhZGFibGUgZnJhZ3MuCiAgKi8KIGludAogc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQpAQCAtMzkwNSwxMCAmIzQzOzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCQl9CiAJfQogCiYjNDM7CWlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pICZhbXA7JmFtcDsgaiAmZ3Q7IDAgJmFtcDsmYW1wOyBsZW4pIHsKJiM0MzsJCXB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tJmd0O2hlYWQpKTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAogCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewogCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CQlpZiAoaiAmZ3Q7IDApCiYjNDM7CQkJcHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS0mZ3Q7aGVhZCkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTsKQEAgLTM5MjgsNiAmIzQzOzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCiAJfQogCXNrYl9zaGluZm8odG8pLSZndDtucl9mcmFncyA9IGo7CiAKJiM0MzsJaWYgKGkgJmd0OyAwICZhbXA7JmFtcDsgZnJvbS0mZ3Q7dW5yZWFkYWJsZSkKJiM0MzsJCXRvLSZndDt1bnJlYWRhYmxlID0gMTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmI0MjM3ZDBlOTk0ZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0xMjQwLDcgJiM0MzsxMjQwLDggQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAKIAkJdHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTsKIAotCQlpZiAoY29weSAmbHQ7PSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpKSB7CiYjNDM7CQlpZiAoY29weSAmbHQ7PSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpIHx8CiYjNDM7CQkgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7CiAJCQlib29sIGZpcnN0X3NrYjsKIAogbmV3X3NlZ21lbnQ6CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC00NjcsNiAmIzQzOzQ2Nyw5IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghZHBfaWZpbmRleCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwogCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFuc2tiKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGFyZWFzOiBgbmV0L2NvcmUvc2tidWZmLmNgLCBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBwYWNrZXQgYnVmZmVyaW5nIGFuZCB6ZXJvLWNvcHkgbWVjaGFuaXNtcywgd2hpY2ggaXMgYWx3YXlzIHNvbWV0aGluZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhZGRpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gYHNrYl9mcmFnc19yZWFkYWJsZSgpYCBhbmQgdGhlIGBmcm9tLSZndDt1bnJlYWRhYmxlYCBmbGFnIHdpdGhpbiBgc2tiX3plcm9jb3B5KClgLiBUaGF0JiMzOTtzIHNtYXJ0OyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgaGFuZGxpbmcgZnJhZ21lbnQgcmVhZGFiaWxpdHkgY29ycmVjdGx5IGJlZm9yZSBhdHRlbXB0aW5nIHplcm8tY29weSBvcGVyYXRpb25zLiBUaGVyZSYjMzk7cyBhbHNvIGEgY29uZGl0aW9uYWwgY2hlY2sgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZCgpYCB0aGF0IHNlZW1zIHRvIGJlIHZlcmlmeWluZyB0aGUgc3RhdGUgb2YgZnJhZ21lbnQgcmVhZGFiaWxpdHkgYWdhaW5zdCBhIGBiaW5kaW5nYCB2YXJpYWJsZS4gQW5kIGZpbmFsbHksIGluIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KClgIHdpdGhpbiBPcGVuIHZTd2l0Y2gsIHRoZXJlIGlzIGEgY2hlY2sgZW5zdXJpbmcgdGhhdCBmcmFnbWVudHMgYXJlICpub3QqIHJlYWRhYmxlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGludm9sdmVkOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoZXNlIGFyZSBhbGwgY29yZSBuZXR3b3JraW5nIGVsZW1lbnRzLCBzbyBhbnkgY2hhbmdlcyBuZWVkIHRvIGJlIHRob3JvdWdobHkgdmV0dGVkLiBgc2tiX3plcm9jb3B5YCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3Rpbmcgc2luY2UgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3MgbGlrZWx5IHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzIHdpdGhpbiB0aGUga2VybmVsIG9yIGV2ZW4gYnkgZXh0ZXJuYWwgbW9kdWxlcy4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMsIG9mIGNvdXJzZSwgdGhlIGhlYXJ0IG9mIFRDUCBzZW5kaW5nLiBBbmQgdGhlbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCBpcyBzcGVjaWZpYyB0byBPcGVuIHZTd2l0Y2gsIHdoaWNoIEkgd2FudCB0byB2ZXJpZnkgaWYgYW55IHNwZWNpZmljIE9wZW4gdlN3aXRjaCBjb25maWd1cmF0aW9uIGlzIG5lY2Vzc2FyeS4KCk5leHQsIEkmIzM5O2xsIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYHNrYl96ZXJvY29weWAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGl0cyB1c2FnZSB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBvZiB0aGlzIHBhdGNoIGJlZm9yZSBJIGNhbiBnaXZlIGEgc29saWQgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfemVyb2NvcHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg9NDEzPWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICp4ZW5fbmV0YmFja19kYmdfcm9vdDtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTUtXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaDo0MTY6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUsXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTctXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaDo0MTg6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxOS1cbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy00OS0gKiBjb3VudGVyIGJlY2F1c2UgY29yZSBkcml2ZXIgY2FsbHMgaW50byB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2tcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUwOiAqIHdoaWNoIGNhbGxzIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUuXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01MS0gKi9cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUyOnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTMtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01OC1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjU5OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSlcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTYwLXtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTE3Mj1zdGF0aWMgaW50IHhlbnZpZl90eF9zdWJtaXQoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTAtXHRcdFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ19saXN0O1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMTE6XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBuc2tiKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEyLVx0XHRcdGlmICh4ZW52aWZfaGFuZGxlX2ZyYWdfbGlzdChxdWV1ZSwgc2tiKSkge1xuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjE1LVx0XHRcdFx0XHRcdCAgIFwmIzM0O05vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbnNvbGlkYXRlIGZyYWdfbGlzdCFcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMTY6XHRcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNy1cdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjMzLVx0XHRcdGlmIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcpXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTIzNDpcdFx0XHRcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjM1LVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjcyLVx0XHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnKSB7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTI3MzpcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTI3NC1cdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF96ZXJvY29weV9zZW50JiM0MzsmIzQzOztcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTI4Mz1zdGF0aWMgdm9pZCB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTMxNC1cdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfemVyb2NvcHlfZmFpbCYjNDM7JiM0Mzs7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTMxNTpcdHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUocXVldWUpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTYtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXHRcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3ODppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNjk9dm9pZCBza2JfY29weV9hbmRfY3N1bV9kZXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKnRvKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MDp1bnNpZ25lZCBpbnQgc2tiX3plcm9jb3B5X2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MjcxOmludCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI3Mi1cdFx0IGludCBsZW4sIGludCBobGVuKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODEyPUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV9yZWFsbG9jKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTMtXG5uZXQvY29yZS9za2J1ZmYuYzoxODE0OnN0YXRpYyBib29sIHNrYl96ZXJvY29weV9ub3RpZnlfZXh0ZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBsbywgdTE2IGxlbilcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTUte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE4MzQ9c3RhdGljIHZvaWQgX19tc2dfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHVidWZfaW5mb19tc2d6YyAqdWFyZylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xODcwLVx0aWYgKCF0YWlsIHx8IFNLQl9FWFRfRVJSKHRhaWwpLVx1MDAzZWVlLmVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fWkVST0NPUFkgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4NzE6XHQgICAgIXNrYl96ZXJvY29weV9ub3RpZnlfZXh0ZW5kKHRhaWwsIGxvLCBsZW4pKSB7XG5uZXQvY29yZS9za2J1ZmYuYy0xODcyLVx0XHRfX3NrYl9xdWV1ZV90YWlsKHEsIHNrYik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkxMD1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xubmV0L2NvcmUvc2tidWZmLmMtMTkxMS1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTEzLVx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxubmV0L2NvcmUvc2tidWZmLmM6MTk1MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xubmV0L2NvcmUvc2tidWZmLmMtMTk1MS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xOTYwPUVYUE9SVF9TWU1CT0xfR1BMKF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NjEtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTYyOnN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NjMtXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMjQ5LVx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSB8fFxubmV0L2NvcmUvc2tidWZmLmM6MjI1MDpcdFx0ICAgIHNrYl96ZXJvY29weV9jbG9uZShuLCBza2IsIGdmcF9tYXNrKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMjI1MS1cdFx0XHRrZnJlZV9za2Iobik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzgyOD1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzE6ICpcdHNrYl96ZXJvY29weV9oZWFkbGVuIC0gQ2FsY3VsYXRlIGhlYWRyb29tIG5lZWRlZCBmb3Igc2tiX3plcm9jb3B5KClcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICYjMzk7dG8mIzM5OyBza2IgcGFzc2VkXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXHRpbnRvIHNrYl96ZXJvY29weSgpLlxubmV0L2NvcmUvc2tidWZmLmMtMzgzNi0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mzc9dW5zaWduZWQgaW50XG5uZXQvY29yZS9za2J1ZmYuYzozODM4OnNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxubmV0L2NvcmUvc2tidWZmLmMtMzgzOS17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzg1NC19XG5uZXQvY29yZS9za2J1ZmYuYzozODU1OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTYtXG5uZXQvY29yZS9za2J1ZmYuYy0zODU3LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODogKlx0c2tiX3plcm9jb3B5IC0gWmVybyBjb3B5IHNrYiB0byBza2Jcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTktICpcdEB0bzogZGVzdGluYXRpb24gYnVmZmVyXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzg2Ni0gKlxubmV0L2NvcmUvc2tidWZmLmM6Mzg2NzogKlx0VGhlIGBobGVuYCBhcyBjYWxjdWxhdGVkIGJ5IHNrYl96ZXJvY29weV9oZWFkbGVuKCkgc3BlY2lmaWVzIHRoZVxubmV0L2NvcmUvc2tidWZmLmMtMzg2OC0gKlx0aGVhZHJvb20gaW4gdGhlIGB0b2AgYnVmZmVyLlxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4NzY9aW50XG5uZXQvY29yZS9za2J1ZmYuYzozODc3OnNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjEtXHR9XG5uZXQvY29yZS9za2J1ZmYuYzozOTIyOlx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjMtXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzk0My19XG5uZXQvY29yZS9za2J1ZmYuYzozOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTQ1LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQyNDI9dm9pZCBza2Jfc3BsaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjEsIGNvbnN0IHUzMiBsZW4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDI0OS1cdHNrYl9zaGluZm8oc2tiMSktXHUwMDNlZmxhZ3MgfD0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiB6Y19mbGFncztcbm5ldC9jb3JlL3NrYnVmZi5jOjQyNTA6XHRza2JfemVyb2NvcHlfY2xvbmUoc2tiMSwgc2tiLCAwKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXHRpZiAobGVuIFx1MDAzYyBwb3MpXHQvKiBTcGxpdCBsaW5lIGlzIGluc2lkZSBoZWFkZXIuICovXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDc4OD1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTEtXG5uZXQvY29yZS9za2J1ZmYuYzo1MDEyOlx0XHRpZiAoc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGZyYWdfc2tiLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTMtXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTAxNy1cdFx0XHRcdGlmIChza2Jfb3JwaGFuX2ZyYWdzKGxpc3Rfc2tiLCBHRlBfQVRPTUlDKSB8fFxubmV0L2NvcmUvc2tidWZmLmM6NTAxODpcdFx0XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobnNrYiwgbGlzdF9za2IsXG5uZXQvY29yZS9za2J1ZmYuYy01MDE5LVx0XHRcdFx0XHRcdCAgICAgICBHRlBfQVRPTUlDKSlcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NDk9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVx0XHR9IGVsc2Uge1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2Ny1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTMzOS1cbm5ldC9pcHY0L3RjcC5jOjEzNDA6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZyxcbm5ldC9pcHY0L3RjcC5jLTEzNDEtXHRcdFx0XHRcdFx0ICAgICAgIGJpbmRpbmcpO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xNDQ5PXN0YXRpYyBpbnQgX19pcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVx0XHR9IGVsc2Uge1xubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMzLVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDU9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVx0XHRkYXRhX2xlbiA9IG5mcW5sX2dldF9kYXRhX2xlbihlbnRza2IsIFJFQURfT05DRShxdWV1ZS1cdTAwM2Vjb3B5X3JhbmdlKSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjc3MDpcdFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc3MS1cdFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTUzLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XHRcdGlmIChza2JfemVyb2NvcHkoc2tiLCBlbnRza2IsIGRhdGFfbGVuLCBobGVuKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTQ1MT1zdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01MDAtXHRpZiAoZHAtXHUwMDNldXNlcl9mZWF0dXJlcyBcdTAwMjYgT1ZTX0RQX0ZfVU5BTElHTkVEKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTAxOlx0XHRobGVuID0gbWluKHNrYl96ZXJvY29weV9oZWFkbGVuKHNrYiksIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01MDItXHRlbHNlXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg3LVx0LyogT25seSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBoZWFkZXIsIHBhY2tldCBkYXRhIGlzIGFkZGVkXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1ODg6XHQgKiBpbiBza2JfemVyb2NvcHkoKSAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg5LVx0aWYgKCEobmxhID0gbmxhX3Jlc2VydmUodXNlcl9za2IsIE9WU19QQUNLRVRfQVRUUl9QQUNLRVQsIDApKSkge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5NC1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjU5NTpcdGVyciA9IHNrYl96ZXJvY29weSh1c2VyX3NrYiwgc2tiLCBza2JfbGVuLCBobGVuKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5Ni1cdGlmIChlcnIpXG4tLVxubmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbi0tXG5uZXQveGRwL3hzay5jLTEwMDgtXG5uZXQveGRwL3hzay5jOjEwMDk6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTEwMTAtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jPTEwODU9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy0xMDkyLVx0aWYgKGRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfVFhfU0tCX05PX0xJTkVBUikge1xubmV0L3hkcC94c2suYzoxMDkzOlx0XHRza2IgPSB4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHhzLCBkZXNjKTtcbm5ldC94ZHAveHNrLmMtMTA5NC1cdFx0aWYgKElTX0VSUihza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg4NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzLCBzcGVjaWZpY2FsbHkgYHNrYl96ZXJvY29weWAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHplcm8tY29weSBvcGVyYXRpb25zLCBhbmQgdGhhdCYjMzk7cyB1c2VkIGluIGJvdGggdGhlIE5ldGZpbHRlciBOZXRsaW5rIFF1ZXVlIGltcGxlbWVudGF0aW9uIGFuZCB3aXRoaW4gT3BlbiB2U3dpdGNoJiMzOTtzIGRhdGFwYXRoLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhIGNoYW5nZSB0byBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgd2hpY2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBUQ1Agc2VuZCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZS4KClRoZSBPcGVuIHZTd2l0Y2ggY2hhbmdlIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIGF0IGZpcnN0IGdsYW5jZS4gVGhleSYjMzk7cmUgZXhwbGljaXRseSBhZGRpbmcgYSBgIXNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBjaGVjayB0byBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbGlrZWx5IGFkZHJlc3NlcyBzb21lIGtpbmQgb2YgZnJhZ21lbnRhdGlvbiBpc3N1ZSBvciB6ZXJvLWNvcHkgcmVsaWFiaWxpdHkgcHJvYmxlbSB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCB1c2VyIHNwYWNlIHBhY2tldCBxdWV1aW5nIHBhdGguIExldCBtZSBndWVzcywgbWF5YmUgdGhlcmUmIzM5O3MgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiBmcmFnbWVudGVkIHNrYnMgYW5kIHplcm8tY29weSBvcGVyYXRpb25zLCBhbmQgdGhpcyBjaGVjayBpcyBtZWFudCB0byBwcm90ZWN0IGFnYWluc3Qgc29tZSBraW5kIG9mIGNvcnJ1cHRpb24gb3IgbWlzYmVoYXZpb3IuCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYENPTkZJR19PUEVOVlNXSVRDSGAgYW5kIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJJiMzOTttIGFscmVhZHkgc2VlaW5nIHNvbWUgc3BlY2lmaWMgcG9pbnRzIG9mIGNvbm5lY3Rpb24sIHdoaWNoIGluZGljYXRlcyB0byBtZSB0aGF0IGFueSBidWcgaGVyZSB3b3VsZCBpbXBhY3QgYm90aCBzeXN0ZW1zLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHdpbGwgZXhhbWluZSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGlzIGNoZWNrIGFuZCB3aGVyZSB0aGUgb3JpZ2luYWwgZmFpbHVyZSB3YXMgaWRlbnRpZmllZC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgcGF0Y2gmIzM5O3MgbG9naWMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfdXNlcnNwYWNlX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xMjc9c3RhdGljIGludCBxdWV1ZV9nc29fcGFja2V0cyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMC1cdFx0XHQgICAgIHVpbnQzMl90IGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMzE6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICosXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzItXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTMyOT1pbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM0NS1cdGlmICghc2tiX2lzX2dzbyhza2IpKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzQ2Olx0XHRlcnIgPSBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KGRwLCBza2IsIGtleSwgdXBjYWxsX2luZm8sIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDctXHRlbHNlXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzY2PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTYtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzozOTc6XHRcdGVyciA9IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbywgY3V0bGVuKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5OC1cdFx0aWYgKGVycilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NDE9c3RhdGljIHZvaWQgcGFkX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1MC1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjQ1MTpzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkwNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBQZXJmb3JtYW5jZSBpbiBPcGVuIHZTd2l0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gT3BlbiB2U3dpdGNoIHBlcmZvcm1hbmNlIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy4gRmlyc3QsIEkga25vdyB0aGF0IGBvdnNfZHBfdXBjYWxsYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHB1c2hpbmcgdGhpbmdzIGZyb20gdGhlIGRhdGFwYXRoIHVwIHRvIHVzZXJzcGFjZS4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGludGVyYWN0aW9uLiBUaGVuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFRDUCBzaWRlIG9mIHRoaW5ncywgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHdoZXJlIHRoZSBUQ1Agc2VuZCBvcGVyYXRpb25zIGtpY2sgb2ZmLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhpcyBpcyBhIGtleSBzcG90IHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gVENQIGRhdGEgdHJhbnNmZXIuCgpJIGFsc28gc2VlIHRoYXQgYHNrYl96ZXJvY29weWAgaXMgaW1wb3J0YW50OyBpdCBzaG93cyB1cCBpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBpbiBPcGVuIHZTd2l0Y2gmIzM5O3MgZGF0YXBhdGggY29kZSAoYGRhdGFwYXRoLmNgKS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYXMgemVyb2NvcHkgaXMgYWxsIGFib3V0IG9wdGltaXppbmcgZGF0YSB0cmFuc2ZlciBieSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcywgd2hpY2ggc2hvdWxkIGhhdmUgYSBwcmV0dHkgYmlnIHBlcmZvcm1hbmNlIGltcGFjdC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGluIHRoZSBrZXJuZWwmIzM5O3MgVENQIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoZSBwYWNrZXQgaXMgYWN0dWFsbHkgc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL3NubXAucnN0PTEzPXVuc2lnbmVkX2xvbmcgIExJTlVYX01JQl9ERUxBWUVEQUNLTE9DS0VEICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9kZWxhY2tfdGltZXJfaGFuZGxlcix0Y3BfZGVsYWNrX3RpbWVyXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvc25tcC5yc3Q6MTQ6dW5zaWduZWRfbG9uZyAgTElOVVhfTUlCX1RDUEFVVE9DT1JLSU5HICAgICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3B1c2gsdGNwX3NlbmRtc2dfbG9ja2VkXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvc25tcC5yc3QtMTUtdW5zaWduZWRfbG9uZyAgTElOVVhfTUlCX1RDUEZST01aRVJPV0lORE9XQURWICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3NlbGVjdF93aW5kb3csdGNwX3RyYW5zbWl0LXNrYlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmM9MzIzPXN0YXRpYyBpbnQgc2l3X3RjcF9zZW5kcGFnZXMoc3RydWN0IHNvY2tldCAqcywgc3RydWN0IHBhZ2UgKipwYWdlLCBpbnQgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmMtMzQ2LVx0XHRsb2NrX3NvY2soc2spO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfcXBfdHguYzozNDc6XHRcdHJ2ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2csIGJ5dGVzKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmMtMzQ4LVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTM2Nz1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjM2ODppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL25ldC90Y3AuaC0zNjktaW50IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgKmNvcGllZCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaD0yODk9VFJBQ0VfRVZFTlQodGNwX3JldHJhbnNtaXRfc3luYWNrLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oLTMzNC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oOjMzNTpUUkFDRV9FVkVOVCh0Y3Bfc2VuZG1zZ19sb2NrZWQsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaC0zMzYtXHRUUF9QUk9UTyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTY2NTY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmF3X3RwX251bGxfYXJncyByYXdfdHBfbnVsbF9hcmdzW10gPSB7XG4tLVxua2VybmVsL2JwZi9idGYuYy02NzM2LVx0eyBcJiMzNDt0Y3Bfc2VuZF9yZXNldFwmIzM0OywgMHgxMSB9LFxua2VybmVsL2JwZi9idGYuYzo2NzM3Olx0eyBcJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWRcJiMzNDssIDB4MTAwIH0sXG5rZXJuZWwvYnBmL2J0Zi5jLTY3MzgtXHQvKiB0ZWdyYV9hcGJfZG1hICovXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTEwNjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODUtXHQucmVhZF9za2JcdCAgID0gdGNwX3JlYWRfc2tiLFxubmV0L2lwdjQvYWZfaW5ldC5jOjEwODY6XHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4Ny1cdC5wZWVrX2xlblx0ICAgPSB0Y3BfcGVla19sZW4sXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExND1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxubmV0L2lwdjQvdGNwLmM6MTExNjppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTEyNDAtXG5uZXQvaXB2NC90Y3AuYzoxMjQxOlx0XHR0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2tiLCBzaXplX2dvYWwpO1xubmV0L2lwdjQvdGNwLmMtMTI0Mi1cbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDQ0LX1cbm5ldC9pcHY0L3RjcC5jOjE0NDU6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTE0NDYtXG5uZXQvaXB2NC90Y3AuYz0xNDQ3PWludCB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTQ1MS1cdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzoxNDUyOlx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNpemUpO1xubmV0L2lwdjQvdGNwLmMtMTQ1My1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTkxPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTEyMi1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbm5ldC9pcHY0L3RjcF9icGYuYzoxMjM6XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnaGRyLCBzaXplKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xMjQtXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjYwPWNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldDZfc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY4MS1cdC5zcGxpY2VfZW9mXHQgICA9IGluZXRfc3BsaWNlX2VvZixcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjgyOlx0LnNlbmRtc2dfbG9ja2VkICAgID0gdGNwX3NlbmRtc2dfbG9ja2VkLFxubmV0L2lwdjYvYWZfaW5ldDYuYy02ODMtXHQuc3BsaWNlX3JlYWRcdCAgID0gdGNwX3NwbGljZV9yZWFkLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYz0xNjg9aW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtMTk0LVxubmV0L3Rscy90bHNfbWFpbi5jOjE5NTpcdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2csIHNpemUpO1xubmV0L3Rscy90bHNfbWFpbi5jLTE5Ni1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTIwNj1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMjI1LVx0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFx1MDAyNmJ2ZWMsIDEsIHNnLVx1MDAzZWxlbmd0aCk7XG5uZXQveGZybS9lc3BpbnRjcC5jOjIyNjpcdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2doZHIsIHNnLVx1MDAzZWxlbmd0aCk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTIyNy1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jPTExNz1zdGF0aWMgYm9vbCBicGZfdGVzdF9kZWxheShzdHJ1Y3QgYnBmX3NvY2tfb3BzICpza29wcywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmMtMTg3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYzoxODg6U0VDKFwmIzM0O2ZlbnRyeS90Y3Bfc2VuZG1zZ19sb2NrZWRcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbmV0X3RpbWVzdGFtcGluZy5jOjE4OTppbnQgQlBGX1BST0codHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmMtMTkwLVx0ICAgICBzaXplX3Qgc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE2MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IC0gVENQIFNlbmQgUGF0aCoqCgpPa2F5LCBzbyBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyBhIGtleSBmdW5jdGlvbiwgbm8gZG91YnQgYWJvdXQgaXQuIFRoZSBwcm9wb3NlZCBjaGFuZ2VzIHdhcnJhbnQgc29tZSBzZXJpb3VzIGZ1enppbmcuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY3JpdGljYWwgc3ltYm9sczogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgc3RhdGljIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGZ1enppbmcsIGJ1dCBpdCBzdWdnZXN0cyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IGl0JiMzOTtzICp1c2VkKi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQgZnVuY3Rpb24gYG92c19kcF91cGNhbGxgIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgdG8gdGhhdCBzdGF0aWMgZnVuY3Rpb24sIGFuZCB0aHVzIHRoZSBrZXkgYXJlYSBvZiBzdHVkeS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBwYXRoIHVwY2FsbCBtZWNoYW5pc20gdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2UsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlIGlzIGxpa2VseSB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2RwX3VwY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTg1OD1zdGF0aWMgaW50IG91dHB1dF91c2Vyc3BhY2Uoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkxNC1cbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6OTE1Olx0cmV0dXJuIG92c19kcF91cGNhbGwoZHAsIHNrYiwga2V5LCBcdTAwMjZ1cGNhbGwsIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkxNi19XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3OC1cdFx0dXBjYWxsLm1ydSA9IE9WU19DQihza2IpLVx1MDAzZW1ydTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3OTpcdFx0ZXJyb3IgPSBvdnNfZHBfdXBjYWxsKGRwLCBza2IsIGtleSwgXHUwMDI2dXBjYWxsLCBVMzJfTUFYKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4MC1cdFx0c3dpdGNoIChlcnJvcikge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMyOC1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMyOTppbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzMwLVx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMzNi1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMzNzpcdGlmICh0cmFjZV9vdnNfZHBfdXBjYWxsX2VuYWJsZWQoKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMzODpcdFx0dHJhY2Vfb3ZzX2RwX3VwY2FsbChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMzOS1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaD0zMjE9dm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICopO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg6MzIyOmludCBvdnNfZHBfdXBjYWxsKHN0cnVjdCBkYXRhcGF0aCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIzLVx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBjb25zdCBzdHJ1Y3QgZHBfdXBjYWxsX2luZm8gKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaD0xMj1UUkFDRV9FVkVOVChvdnNfZG9fZXhlY3V0ZV9hY3Rpb24sXG4tLVxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtODEtXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaDo4MjpUUkFDRV9FVkVOVChvdnNfZHBfdXBjYWxsLFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiB0aGUgRGF0YSBQbGFuZSoqCgpPa2F5LCBzbyBJIHRoaW5rIGBvdnNfZHBfdXBjYWxsYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRpdmluZyBpbnRvIHRoaXMuIFRoYXQgc2VlbXMgdG8gYmUgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBkYXRhIHBsYW5lLiBMZXQmIzM5O3Mgc2VlIGhvdyB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgcGVyZm9ybWFuY2UgY291bGQgYmUgaW1wYWN0ZWQuIEkgc2hvdWxkIGNoZWNrIGBuZm5ldGxpbmtfcXVldWUuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggcGFja2V0IGRhdGE7IHNwZWNpZmljYWxseSwgd2hhdCBjYWxscyBhcmUgYmVpbmcgbWFkZSB0byBgc2tiX3plcm9jb3B5YC4gVGhhdCB3b3VsZCBiZSBhIHNtYXJ0IHdheSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc2OS1cdFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlY29weV9yYW5nZSkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XHRcdGhsZW4gPSBza2JfemVyb2NvcHlfaGVhZGxlbihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXHRcdGhsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGhsZW4sIGRhdGFfbGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTU0Olx0XHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1NS1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgWmVyby1Db3B5IE1lY2hhbmlzbSBpbiBOZXR3b3JrIFBhY2tldCBDb25zdHJ1Y3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZWAgYW5kIHRyYWNpbmcgaXRzIGV4ZWN1dGlvbi4gSXQgbG9va3MgbGlrZSB0aGUga2V5IG9wZXJhdGlvbiBoZXJlIGlzIHRoZSBjYWxsIHRvIGBza2JfemVyb2NvcHlgLiAgUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHRlbGwuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJiMzOTttIGJldHRpbmcgdGhpcyBmdW5jdGlvbiBpcyBsZXZlcmFnaW5nIHRoZSB6ZXJvLWNvcHkgY2FwYWJpbGl0eSBvZiB0aGUga2VybmVsJiMzOTtzIHNvY2tldCBidWZmZXIgKHNrYikgdG8gZWZmaWNpZW50bHkgY29uc3RydWN0IGFuZCBtYW5hZ2UgbmV0d29yayBwYWNrZXRzIGZvciB0aGUgTmV0ZmlsdGVyIHF1ZXVlLiBJbnN0ZWFkIG9mIGEgZnVsbCBtZW1vcnkgY29weSwgd2hpY2ggd291bGQgYmUgaW5jcmVkaWJseSBpbmVmZmljaWVudCwgZXNwZWNpYWxseSBmb3IgbGFyZ2VyIHBheWxvYWRzLCB0aGlzIGlzIHByb2JhYmx5IGFib3V0IHNoYXJpbmcgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZSBjb3VudHMuIEl0IHNob3VsZCBhbGxvdyBkYXRhIGZyb20gb3RoZXIgYnVmZmVycyBvciBtZW1vcnkgcmVnaW9ucyB0byBiZSBpbmNvcnBvcmF0ZWQgZGlyZWN0bHkgaW50byB0aGUgb3V0Z29pbmcgc2tiIHdpdGhvdXQgdW5uZWNlc3NhcnkgZGF0YSBkdXBsaWNhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYHNrYl96ZXJvY29weWAgaXRzZWxmIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgc3BlY2lmaWNhbGx5LCBob3cgaXQmIzM5O3MgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSByZWdpb25zIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGxvY2tpbmcgaXMgaW52b2x2ZWQgYW5kIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZWxlbWVudHMgb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSwgaG93IHRoZSBkYXRhIHNvdXJjZSBpcyBzcGVjaWZpZWQgYW5kIHJlZmVyZW5jZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDQ9c3RhdGljIHN0cnVjdCBza19idWZmICpcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzA1Om5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzA2LVx0XHRcdCAgIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzQ9X19uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05ODEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk4MjpcdG5za2IgPSBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShuZXQsIHF1ZXVlLCBlbnRyeSwgXHUwMDI2cGFja2V0X2lkX3B0cik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk4My1cdGlmIChuc2tiID09IE5VTEwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxOTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIHBhY2tldCBoYW5kbGluZzoKCioqRGl2aW5nIGludG8gdGhlIFBhY2tldCBRdWV1ZTogQSBUcmFjZSBUaHJvdWdoIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZmxvdyBvZiBwYWNrZXRzLCBhbmQgd2hlcmUgdGhleSB1bHRpbWF0ZWx5IGVuZCB1cC4gVGhlIGNyaXRpY2FsIGp1bmN0dXJlIHNlZW1zIHRvIGJlIGBfX25mcW5sX2VucXVldWVfcGFja2V0YC4gVGhpcyBmdW5jdGlvbiwgZnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGlzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIHBhY2tldHMgZGVzdGluZWQgZm9yIHRoZSBOZXRmaWx0ZXIgcXVldWUgZ2V0Li4uIHdlbGwsIGVucXVldWVkLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgc3RlcC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0LCB0aGUgYWN0IG9mIHB1dHRpbmcgdGhlIHBhY2tldCBpbnRvIHRoZSBxdWV1ZSB0byBiZSBwcm9jZXNzZWQsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIHN0ZXAgb2YgdGhlIHByb2Nlc3MuIEkgcmVhbGx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGl0cyByb2xlIGluIHRoZSBncmVhdGVyIGFyY2hpdGVjdHVyZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhlIGNhbGxpbmcgY29udGV4dCBpcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZnFubF9lbnF1ZXVlX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzM9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NzQ6X19uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk3NS1cdFx0XHRzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA3Nj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwNzc6X19uZnFubF9lbnF1ZXVlX3BhY2tldF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDc4LVx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg3LVx0XHRlbnRyeS1cdTAwM2Vza2IgPSBza2I7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwODg6XHRcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg5LVx0XHRpZiAocmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA5OC1cdFx0ZW50cnlfc2VnLVx1MDAzZXNrYiA9IHNrYjtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA5OTpcdFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeV9zZWcpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTAwLVx0XHRpZiAocmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTEwNz1uZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBpbnQgcXVldWVudW0pXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ1LVx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgKChxdWV1ZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZRQV9DRkdfRl9HU08pIFx1MDAyNlx1MDAyNiAhc2tiX2lzX2dzb19zY3RwKHNrYikpKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTQ2Olx0XHRyZXR1cm4gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNDctXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTc1LVx0XHRpZiAoZXJyID09IDApXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjExNzY6XHRcdFx0ZXJyID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldF9nc28obmV0LCBxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3Ny1cdFx0XHRcdFx0XHRcdHNlZ3MsIGVudHJ5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwOTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBGaWx0ZXIgUXVldWUqKgoKT2theSwgc28gSSYjMzk7bSBzdGFydGluZyBmcmVzaCBvbiB0aGlzLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZ2V0IG15IGJlYXJpbmdzLiBJIG5lZWQgYSBjbGVhciBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHdob2xlIG5ldHdvcmsgZmlsdGVyaW5nIHF1ZXVlIGlzIHdvcmtpbmcuIFJpZ2h0LCBzbyBJIHNlZSBpdDsgYG5mcW5sX2VucXVldWVfcGFja2V0YCBpcyB0aGUgZGVzaWduYXRlZCBlbnRyeSBwb2ludC4gVGhhdCYjMzk7cyB3aGVyZSBpdCBhbGwgYmVnaW5zLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwcm9jZXNzZXMgYW5kIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoLCBhbmQgd2hhdCB0aGUgY29udHJvbCBmbG93IGxvb2tzIGxpa2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZxbmxfZW5xdWV1ZV9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3Mz1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk3NDpfX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTc1LVx0XHRcdHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMDc2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA3NzpfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNzgtXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODctXHRcdGVudHJ5LVx1MDAzZXNrYiA9IHNrYjtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA4ODpcdFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODktXHRcdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDk4LVx0XHRlbnRyeV9zZWctXHUwMDNlc2tiID0gc2tiO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDk5Olx0XHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5X3NlZyk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDAtXHRcdGlmIChyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMTA2PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTEwNzpuZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBpbnQgcXVldWVudW0pXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE0NS1cdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GUUFfQ0ZHX0ZfR1NPKSBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc29fc2N0cChza2IpKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE0NjpcdFx0cmV0dXJuIF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3NS1cdFx0aWYgKGVyciA9PSAwKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTc2Olx0XHRcdGVyciA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRfZ3NvKG5ldCwgcXVldWUsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzctXHRcdFx0XHRcdFx0XHRzZWdzLCBlbnRyeSk7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfaGFuZGxlciBuZnFoID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODAxOlx0Lm91dGZuXHRcdD0gbmZxbmxfZW5xdWV1ZV9wYWNrZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MDItXHQubmZfaG9va19kcm9wXHQ9IG5mcW5sX25mX2hvb2tfZHJvcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBQbGFuZSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5mcW5sX2VucXVldWVfcGFja2V0YCBmdW5jdGlvbiDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBhY3RpbmcgYXMgYSBxdWV1ZSBoYW5kbGVyLCBzbyB0aGF0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIG1vdmVzIGFyb3VuZCwgYW5kIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgcG90ZW50aWFsbHkgaW52b2x2ZWQuCgpgc2tiX3plcm9jb3B5YCBpcyBleHBvcnRlZCwgc28gdGhhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHBvaW50IG9mIGludGVyZXN0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNpcmNsZSBiYWNrIHRvIHRoYXQgbGF0ZXIsIGFzIHRoYXQgc2VlbXMgcmVsZXZhbnQgZm9yIHplcm8tY29weSBtZWNoYW5pc21zLiBTaW1pbGFybHksIGJvdGggYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGBvdnNfZHBfdXBjYWxsYCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSBvZiB0aGVpciByb2xlcyBpbiBUQ1AgZGF0YSB0cmFuc2ZlciBhbmQgT3BlbiB2U3dpdGNoIHVwY2FsbHMsIHJlc3BlY3RpdmVseS4gVGhhdCBzdWdnZXN0cyBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGF0YSBwbGFuZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGZpbHRlcmluZyBhbmQgcXVldWluZy4KCkkgbmVlZCB0byBjb25maXJtIHNvbWUgYXNzdW1wdGlvbnMsIHNvLCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIHNlZWluZyBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGFuZCBgT1BFTlZTV0lUQ0hgLiBUaGUgcHJlc2VuY2Ugb2YgYm90aCBjbGVhcmx5IGZsYWdzIHRoYXQgdGhpcyBoYXMgdG8gZG8gd2l0aCBuZXRmaWx0ZXIgYW5kIE9wZW4gdlN3aXRjaCwgYXMgZXhwZWN0ZWQuCgpGaW5hbGx5LCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBpbiB0aGVyZS4gSXQmIzM5O3MgYSBrZXkgcGxhY2UgdG8gbG9vayBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBvciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLCBvciB0aGF0IHRoZSBpbml0aWFsIGNvbnRleHQgaXMgbWlzc2luZy4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBpbiBkcmF3aW5nIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgTkVURklMVEVSX05FVExJTktfUVVFVUUqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgdXN1YWxseSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWFyY2ggZm9yIHRoYXQgc3BlY2lmaWMgc3ltYm9sLiBIb3BlZnVsbHksIGl0JiMzOTtzIGRlZmluZWQgYW5kIHdlbGwtZG9jdW1lbnRlZCB0aGVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJvdW5kIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGRlZmluaXRpdmUgcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGRldGVybWluZSB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBhdmFpbGFiaWxpdHkgb3IgYmVoYXZpb3Igb2YgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyDigJMgd2hhdCB0aGluZ3MgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGJlY29tZXMgc2VsZWN0YWJsZSwgYW5kIHdoYXQgbWlnaHQgYmUgY29uZmlndXJlZCBhbG9uZ3NpZGUgaXQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgbmV0ZmlsdGVyIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XHRoZWxwXG4gIDUxOlx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNTI6XHRcdCAgZm9yIGV4dGVuZGVkIGFjY291bnRpbmcgdmlhIE5GTkVUTElOSy5cbiAgNTM6XHRcbiAgNTQ6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbiAgNTU6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA1NjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNTc6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1ODpcdFx0aGVscFxuICA1OTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDYwOlx0XHQgIGZvciBxdWV1ZWluZyBwYWNrZXRzIHZpYSBORk5FVExJTksuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xuICA2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNjQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA2NTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNjg6XHRcdCAgZm9yIGxvZ2dpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYwOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBOZXR3b3JrIEZpbHRlcmluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBtb2R1bGUgYW5kLCBhcyBJIHN1c3BlY3RlZCwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWxpYW50IG9uIHRoZSBicm9hZGVyIGBORVRGSUxURVJfQURWQU5DRURgIGZlYXR1cmUuIFRoaXMgaXNuJiMzOTt0IHN1cnByaXNpbmcsIGJ1dCBJIGFsd2F5cyB2ZXJpZnkgdGhlc2UgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSBhIGNsZWFuIGJ1aWxkIGFuZCBhdm9pZCB1bmV4cGVjdGVkIGNvbmZsaWN0cy4gTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYE9QRU5WU1dJVENIYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0JiMzOTtsbCBsaWtlbHkgZGV0YWlsIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGZvciBhbiBgT1BFTlZTV0lUQ0hgIGludGVncmF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTM0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYCwgd2hpY2gsIG9mIGNvdXJzZSwgcmVsaWVzIGhlYXZpbHkgb24gYElORVRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIFRDUCBmdW5jdGlvbiwgc28gbm8gb2JzY3VyZSBjb25maWd1cmF0aW9ucyBzaG91bGQgYmUgaW1wYWN0aW5nIGl0IGRpcmVjdGx5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEZ1bmN0aW9uYWxseSwgdGhlc2UgY2hhbmdlcyBzZWVtIHNvdW5kIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnQgc29tZSBmdXp6aW5nLgoKTXkgZm9jdXMgc2hvdWxkIGJlIHNoYXJwIG9uIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBvdnNfZHBfdXBjYWxsYCBmb3IgdnVsbmVyYWJpbGl0eS4KCkFuZCBqdXN0IHRvIGJlIGNvbXBsZXRlLCBJIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBhcmUgZW5hYmxlZC4KCk5vdywgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgYHNrYl96ZXJvY29weWAgdXNhZ2UuIEkgc2VlIGl0JiMzOTtzIHVzZWQgaW4gYm90aCBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCB3aXRoaW4gYG9wZW52c3dpdGNoL2RhdGFwYXRoLmNgLCB0aGF0IG1ha2VzIHNlbnNlLiBXYWl0IGEgbWludXRlLi4uIGl0JiMzOTtzIGFsc28gdXNlZCBkaXJlY3RseSBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGl0c2VsZi4gVGhpcyBtZWFucyBpdCYjMzk7cyBwcmV0dHkgY2VudHJhbCB0byB0aGUgU0tCIG1hbmFnZW1lbnQuIEh1aCwgaXMgaXQgZXhwb3J0ZWQgYW55d2hlcmUgZWxzZT8gWWVhaCwgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHVzZWQgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBpbiBgc2tiX2NvcHlfYW5kX2NzdW1fZGV2YD8gTm8sICpgc2tiX3plcm9jb3B5YCogaXMgZXhwb3J0ZWQuIExldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCBgc2tiX3plcm9jb3B5YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oPTQxMz1leHRlcm4gc3RydWN0IGRlbnRyeSAqeGVuX25ldGJhY2tfZGJnX3Jvb3Q7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE2OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE4OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSk7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTktXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNDktICogY291bnRlciBiZWNhdXNlIGNvcmUgZHJpdmVyIGNhbGxzIGludG8geGVudmlmX3plcm9jb3B5X2NhbGxiYWNrXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1MDogKiB3aGljaCBjYWxscyB4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlLlxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1Mjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTUzLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTgtXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy02MC17XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEwLVx0XHRcdHN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdDtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjExOlx0XHRcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgbnNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxMi1cdFx0XHRpZiAoeGVudmlmX2hhbmRsZV9mcmFnX2xpc3QocXVldWUsIHNrYikpIHtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNS1cdFx0XHRcdFx0XHQgICBcJiMzNDtOb3QgZW5vdWdoIG1lbW9yeSB0byBjb25zb2xpZGF0ZSBmcmFnX2xpc3QhXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2Olx0XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTctXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzMy1cdFx0XHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnKVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMzQ6XHRcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTI3Mi1cdFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2VkZXN0cnVjdG9yX2FyZykge1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzQtXHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfemVyb2NvcHlfc2VudCYjNDM7JiM0Mzs7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTEyODM9c3RhdGljIHZvaWQgeGVudmlmX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTQtXHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X2ZhaWwmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XHR4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHF1ZXVlKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3Njg9aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3MTpzdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVx0XHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzktXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjY5PXZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNzA6dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNzItXHRcdCBpbnQgbGVuLCBpbnQgaGxlbik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTgxMj1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfcmVhbGxvYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxubmV0L2NvcmUvc2tidWZmLmM6MTgxNDpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0xODE1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODM0PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cdTAwM2VlZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1pFUk9DT1BZIHx8XG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTg3Mi1cdFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTEtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTEyOmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTYxLVxubmV0L2NvcmUvc2tidWZmLmM6MTk2MjpzdGF0aWMgaW50IHNrYl96ZXJvY29weV9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKm9yaWcsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVx0XHRcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI0OS1cdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTA6XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTEtXHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzMC0gLyoqXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXG5uZXQvY29yZS9za2J1ZmYuYy0zODMyLSAqXHRAZnJvbTogc291cmNlIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzQtICpcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAmIzM5O3RvJiMzOTsgc2tiIHBhc3NlZFxubmV0L2NvcmUvc2tidWZmLmM6MzgzNTogKlx0aW50byBza2JfemVyb2NvcHkoKS5cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzYtICovXG5uZXQvY29yZS9za2J1ZmYuYz0zODM3PXVuc2lnbmVkIGludFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Mzkte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1NTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU2LVxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTg6ICpcdHNrYl96ZXJvY29weSAtIFplcm8gY29weSBza2IgdG8gc2tiXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Njc6ICpcdFRoZSBgaGxlbmAgYXMgY2FsY3VsYXRlZCBieSBza2JfemVyb2NvcHlfaGVhZGxlbigpIHNwZWNpZmllcyB0aGVcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3Nzpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODc4LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTIxLVx0fVxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTIzLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5NDMtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzk0NDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00MjQyPXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQyNDktXHRza2Jfc2hpbmZvKHNrYjEpLVx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgemNfZmxhZ3M7XG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XG5uZXQvY29yZS9za2J1ZmYuYy00MjUxLVx0aWYgKGxlbiBcdTAwM2MgcG9zKVx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3ODg9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxubmV0L2NvcmUvc2tidWZmLmM6NTAxMjpcdFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01MDEzLVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXHRcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTg6XHRcdFx0XHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTAxOS1cdFx0XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2NS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEyNjY6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTEzMzktXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYy0xMzQxLVx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxODMyOlx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc2OS1cdFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlY29weV9yYW5nZSkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XHRcdGhsZW4gPSBza2JfemVyb2NvcHlfaGVhZGxlbihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXHRcdGhsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGhsZW4sIGRhdGFfbGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTU0Olx0XHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk1NS1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTE9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVx0aWYgKGRwLVx1MDAzZXVzZXJfZmVhdHVyZXMgXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUwMTpcdFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAyLVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4Ny1cdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4Olx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OS1cdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTQtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTYtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9OTY0PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L3hkcC94c2suYy0xMDA4LVxubmV0L3hkcC94c2suYzoxMDA5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xMDEwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYz0xMDg1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTA5Mi1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTA5MzpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTEwOTQtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA4MAoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBza2JfemVyb2NvcHkgVXNhZ2UqKgoKT2theSwgc28gYHNrYl96ZXJvY29weWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5LCBzcGVjaWZpY2FsbHkgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCBhbmQgYG9wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBUaGF0IG1lYW5zIGBPUEVOVlNXSVRDSGAgYW5kIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYXJlIHNvbGlkIGNvbmZpZyBvcHRpb25zIHRvIGZvY3VzIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IGBza2JfemVyb2NvcHlgIGludGVyYWN0cyB3aXRoIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgb3ZzX2RwX3VwY2FsbGAgaW4gdGhlc2UgY29udGV4dHMuIFRob3NlIGFyZSBrZXkgc3ltYm9scyB0byBrZWVwIGluIG1pbmQuCgpKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBMZXQmIzM5O3Mgc2VlIGlmIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaGFzIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBBaGEsIGl0IHB1bGxzIGluIGBORVRGSUxURVJfQURWQU5DRURgLCB3aGljaCBpcyBhIGJvb2xlYW4sIGRlZmF1bHRpbmcgdG8gJiMzNDt5ZXMuJiMzNDsgTm8gc3VycHJpc2VzIHRoZXJlOyB0aGF0JiMzOTtzIGV4cGVjdGVkLgoKQWxyaWdodCwgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSByZWFkeSB0byBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O292c19kcF91cGNhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3plcm9jb3B5YCBhbmQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gYWRkIGNoZWNrcyBmb3IgYHNrYl9mcmFnc19yZWFkYWJsZWAuIEl0IGFsc28gbW9kaWZpZXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIG9wZW52c3dpdGNoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiBUaGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXMgdXNlZCBieSBvcGVudnN3aXRjaCBhbmQgbmZuZXRsaW5rX3F1ZXVlLCBzbyB3ZSBpbmNsdWRlIHRoZWlyIGNvbmZpZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtvdnNfZHBfdXBjYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl96ZXJvY29weWAgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIGFkZCBjaGVja3MgZm9yIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBJdCBhbHNvIG1vZGlmaWVzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBvcGVudnN3aXRjaC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBvcGVudnN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4gVGhlIGBza2JfemVyb2NvcHlgIGZ1bmN0aW9uIGlzIHVzZWQgYnkgb3BlbnZzd2l0Y2ggYW5kIG5mbmV0bGlua19xdWV1ZSwgc28gd2UgaW5jbHVkZSB0aGVpciBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXCYjMzQ7dW5yZWFkYWJsZVwmIzM0OyBza2IgZnJhZ21lbnRzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgbWVtb3J5IChlLmcuLCBUQ1AgZGV2bWVtKS4gSXQgZW5zdXJlcyB0aGF0IHVucmVhZGFibGUgZnJhZ21lbnRzIGFyZSBub3QgbWl4ZWQgd2l0aCByZWFkYWJsZSBvbmVzLCBjb3JyZWN0bHkgcHJvcGFnYXRlcyB0aGUgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB6ZXJvLWNvcHlpbmcgc2ticywgYW5kIHByZXZlbnRzIHVucmVhZGFibGUgc2ticyBmcm9tIGJlaW5nIHF1ZXVlZCB0byB1c2Vyc3BhY2Ugb3IgY29sbGFwc2VkIGluY29ycmVjdGx5IGluIFRDUC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciBzdGFjayB2YXJpYWJsZXMpIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzIHdoZW4gZGVhbGluZyB3aXRoIERNQS1tYXBwZWQgZGV2aWNlIG1lbW9yeSwgd2hpY2ggYXJlIG5vdCB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjBhN2ZhY2Y0ZDczNTEyNTk4ZGFmOWJlN2VkM2E2NGY5MjU3ZDIzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE5OjI4OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBiYTNkYmFjODBmYjQ5Li5kMjFhZjY4MTU2OTUwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMzg3MCw3ICYjNDM7Mzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTsKICAqCVJldHVybiB2YWx1ZToKICAqCTA6IGV2ZXJ5dGhpbmcgaXMgT0sKICAqCS1FTk9NRU06IGNvdWxkbiYjMzk7dCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5Ci0gKgktRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5CiYjNDM7ICoJLUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeSwgb3IgcmVhZGFibGUgaGVhZAomIzQzOyAqICAgICAgcGF5bG9hZCB3b3VsZCBiZSBtaXhlZCB3aXRoIHVucmVhZGFibGUgZnJhZ3MuCiAgKi8KIGludAogc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQpAQCAtMzkwNSwxMCAmIzQzOzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCQl9CiAJfQogCiYjNDM7CWlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pICZhbXA7JmFtcDsgaiAmZ3Q7IDAgJmFtcDsmYW1wOyBsZW4pIHsKJiM0MzsJCXB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tJmd0O2hlYWQpKTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAogCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewogCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CQlpZiAoaiAmZ3Q7IDApCiYjNDM7CQkJcHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS0mZ3Q7aGVhZCkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTsKQEAgLTM5MjgsNiAmIzQzOzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pCiAJfQogCXNrYl9zaGluZm8odG8pLSZndDtucl9mcmFncyA9IGo7CiAKJiM0MzsJaWYgKGkgJmd0OyAwICZhbXA7JmFtcDsgZnJvbS0mZ3Q7dW5yZWFkYWJsZSkKJiM0MzsJCXRvLSZndDt1bnJlYWRhYmxlID0gMTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmI0MjM3ZDBlOTk0ZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0xMjQwLDcgJiM0MzsxMjQwLDggQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAKIAkJdHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTsKIAotCQlpZiAoY29weSAmbHQ7PSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpKSB7CiYjNDM7CQlpZiAoY29weSAmbHQ7PSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpIHx8CiYjNDM7CQkgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7CiAJCQlib29sIGZpcnN0X3NrYjsKIAogbmV3X3NlZ21lbnQ6CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC00NjcsNiAmIzQzOzQ2Nyw5IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghZHBfaWZpbmRleCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJaWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwogCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFuc2tiKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgVW5yZWFkYWJsZSBTS0IgRnJhZ3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhczogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGUgY29tbW9uIHRocmVhZCBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGVzZSAmIzM0O3VucmVhZGFibGUmIzM0OyBTS0IgZnJhZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGFyZSByZWxhdGVkIHRvIGRldmljZSBtZW1vcnkg4oCTIFRDUCBkZXZtZW0gc3BlY2lmaWNhbGx5LCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O3ZlIHNlZW4gdGhpcyBraW5kIG9mIGNvbnN0cnVjdCB1c2VkIGJlZm9yZS4KCkluIGBza2JfemVyb2NvcHlgLCB0aGUgcGF0Y2ggYWRkcyBjaGVja3MgYXJvdW5kIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBUaGUgZmlyc3Qgb25lIGxvb2tzIHRvIG1lIGxpa2UgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgY29weSBpZiB0aGUgc291cmNlIFNLQiBoYXMgdW5yZWFkYWJsZSBmcmFncyBhbmQgc29tZXRoaW5nIGhhcyBhbHJlYWR5IGJlZW4gY29waWVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzdXNwZWN0IHRoaXMgaXMgdHJ5aW5nIHRvIGF2b2lkIGEgYHB1dF9wYWdlYCBvbiBhbiBpbnZhbGlkIHBhZ2UuIFRoZSBzZWNvbmQgb25lIHNlZW1zIHRvIHByb3BhZ2F0ZSB0aGUgYHVucmVhZGFibGVgIGZsYWcgdG8gdGhlIGRlc3RpbmF0aW9uIFNLQiBpZiB0aGUgc291cmNlIGhhZCBpdCwgc28gd2UgZG9uJiMzOTt0IGFjY2lkZW50YWxseSB0cnkgdG8gcmVhZCBpdCBsYXRlci4KCmB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIHRvIHNlZSBpZiB3ZSBjb3VsZCBjb2xsYXBzZSBTS0JzLCBidXQgbm93IGl0JiMzOTtzIGFkZGVkIGEgY2hlY2sgZm9yIHRoZSAqcmVhZGFiaWxpdHkqIG9mIGZyYWdzIGluIHJlbGF0aW9uIHRvIHRoZSBgYmluZGluZ2AgZmxhZy4gVGhpcyBzY3JlYW1zIERNQSBjb25zaWRlcmF0aW9ucy4gSSB0aGluayB0aGUgaW50ZW50aW9uIGlzIHRvIGVuc3VyZSB0aGUgc2tiIGNhbiBiZSBzYWZlbHkgd3JpdHRlbiwgYW5kIHRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiBmaXguIEl0JiMzOTtzIG1ha2luZyBzdXJlIHdlIGRvbiYjMzk7dCB0cnkgdG8gc2VuZCBkZXZpY2UgbWVtb3J5IGFzIGEgdXNlciBidWZmZXIgd2hlcmUgaXQgZG9lc24mIzM5O3QgYmVsb25nLgoKRmluYWxseSwgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGhhcyBhIHNpbXBsZSBjaGVjay4gSWYgdGhlIFNLQiBpc24mIzM5O3QgcmVhZGFibGUsIGl0JiMzOTtzIHJlamVjdGVkLiBUaGlzIGlzIHByb2JhYmx5IHRoZSBtb3N0IGNydWNpYWwgcGFydCBiZWNhdXNlLCBpZiB3ZSAqZGlkKiBxdWV1ZSBhbiB1bnJlYWRhYmxlIFNLQiB0byB1c2Vyc3BhY2UsIHdlJiMzOTtkIGJlIHNldHRpbmcgdXAgYSBjcmFzaCBvciBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyBpbmZvcm1hdGlvbiBsZWFrIHdoZW4gYSB1c2VyIHByb2Nlc3MgdHJpZWQgdG8gYWNjZXNzIGl0LiBOb3csIHRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgICpjb3VsZCogaGF2ZSBiZWVuIGNhbGxpbmcgYHNrYl9jb3B5X2JpdHNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCB3b3VsZCBoYXZlIHRyaWdnZXJlZCBhIGZhdWx0IGlmIHdlIHRyaWVkIHRvIGNvcHkgdGhvc2UgZGV2aWNlIG1lbW9yeSByZWdpb25zIGRpcmVjdGx5IHRvIHVzZXJzcGFjZS4gV2UgbmVlZCB0byBwcmV2ZW50IHRoaXMuCgpJIG5lZWQgdG8gY29uZmlybSB3aGF0IGBza2JfZnJhZ3NfcmVhZGFibGVgIGFjdHVhbGx5ICpkb2VzKi4gSSBiZXQgaXQmIzM5O3MgY2hlY2tpbmcgc29tZSBmbGFncyByZWxhdGVkIHRvIERNQSBtYXBwaW5ncyBvciBwYWdlIHRhYmxlIGVudHJpZXMuIExldCBtZSBydW4gYSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC4gVW5kZXJzdGFuZGluZyB0aGF0IGZ1bmN0aW9uIGlzIHRoZSBrZXkgdG8gY29uZmlybWluZyBteSBhc3N1bXB0aW9ucyBhYm91dCBkZXZpY2UgbWVtb3J5IGFuZCBETUEgc2FmZXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfZnJhZ3NfcmVhZGFibGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9NDcxPXN0YXRpYyBuZXRkZXZfdHhfdCBibnh0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy01NzUtXHRpZiAoZnJlZV9zaXplID09IGJwLVx1MDAzZXR4X3Jpbmdfc2l6ZSBcdTAwMjZcdTAwMjYgbGVuZ3RoIFx1MDAzYz0gYnAtXHUwMDNldHhfcHVzaF90aHJlc2ggXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzo1NzY6XHQgICAgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgXHUwMDI2XHUwMDI2ICFsZmxhZ3MpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTU3Ny1cdFx0c3RydWN0IHR4X3B1c2hfYnVmZmVyICp0eF9wdXNoX2J1ZiA9IHR4ci1cdTAwM2V0eF9wdXNoO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTg4ND1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODkwLS8qIFJldHVybiB0cnVlIGlmIGZyYWdzIGluIHRoaXMgc2tiIGFyZSByZWFkYWJsZSBieSB0aGUgaG9zdC4gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg5MTpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZyYWdzX3JlYWRhYmxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4OTIte1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTEyMzM9c3RhdGljIGlubGluZSBib29sIHRjcF9za2JfY2FuX2NvbGxhcHNlKGNvbnN0IHN0cnVjdCBza19idWZmICp0byxcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0xMjM5LVx0XHQgICAgICBza2JfcHVyZV96Y29weV9zYW1lKHRvLCBmcm9tKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbmV0L3RjcC5oOjEyNDA6XHRcdCAgICAgIHNrYl9mcmFnc19yZWFkYWJsZSh0bykgPT0gc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTEyNDEtfVxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9Mzg5PXN0YXRpYyBpbnQgX19za2JfZGF0YWdyYW1faXRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNDEwLVxubmV0L2NvcmUvZGF0YWdyYW0uYzo0MTE6XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L2NvcmUvZGF0YWdyYW0uYy00MTItXHRcdGdvdG8gc2hvcnRfY29weTtcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzNT1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy02MzktXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjY0MDpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTY0MS1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzE0LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MTU6XHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTcxNi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxubmV0L2NvcmUvZGV2LmM9MzU2OT1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy0zNTgxLVxubmV0L2NvcmUvZGV2LmM6MzU4MjpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcbm5ldC9jb3JlL2Rldi5jLTM1ODMtXHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTM5OTE9c3RhdGljIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3VucmVhZGFibGVfc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtMzk5Ni1cbm5ldC9jb3JlL2Rldi5jOjM5OTc6XHRpZiAobGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpIHx8XG5uZXQvY29yZS9kZXYuYy0zOTk4LVx0XHQgICBkZXYtXHUwMDNlbmV0bWVtX3R4ID09IE5FVE1FTV9UWF9OT19ETUEpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5OTc9aW50IHNrYl9jb3B5X3VidWZzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIwMDYtXG5uZXQvY29yZS9za2J1ZmYuYzoyMDA3Olx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTIwMDgtXHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIxODItXG5uZXQvY29yZS9za2J1ZmYuYzoyMTgzOlx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTIxODQtXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDI9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1MTItXG5uZXQvY29yZS9za2J1ZmYuYzoyNTEzOlx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MTQtXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI4MDg9c3RhdGljIGludCBwc2tiX3RyaW1fcmNzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yODExLVxubmV0L2NvcmUvc2tidWZmLmM6MjgxMjpcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMjgxMy1cdFx0c2tiLVx1MDAzZWNzdW0gPSBjc3VtX2Jsb2NrX3N1Yihza2ItXHUwMDNlY3N1bSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yODc1PXZvaWQgKl9fcHNrYl9wdWxsX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlbHRhKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI4ODItXG5uZXQvY29yZS9za2J1ZmYuYzoyODgzOlx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI4ODQtXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTMwMTk9aW50IHNrYl9jb3B5X2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgdm9pZCAqdG8sIGludCBsZW4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzAzOC1cbm5ldC9jb3JlL3NrYnVmZi5jOjMwMzk6XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L2NvcmUvc2tidWZmLmMtMzA0MC1cdFx0Z290byBmYXVsdDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zMjA1PXN0YXRpYyBib29sIF9fc2tiX3NwbGljZV9iaXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzIyNy1cdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6MzIyODpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9za2J1ZmYuYy0zMjI5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzQ0OD1pbnQgc2tiX3N0b3JlX2JpdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zNDY2LVxubmV0L2NvcmUvc2tidWZmLmM6MzQ2NzpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9za2J1ZmYuYy0zNDY4LVx0XHRnb3RvIGZhdWx0O1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM1Mjk9X193c3VtIHNrYl9jaGVja3N1bShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBfX3dzdW0gY3N1bSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zNTQ2LVxubmV0L2NvcmUvc2tidWZmLmM6MzU0NzpcdGlmIChXQVJOX09OX09OQ0UoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM1NDgtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM2MTE9X193c3VtIHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zNjMyLVxubmV0L2NvcmUvc2tidWZmLmM6MzYzMzpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvY29yZS9za2J1ZmYuYy0zNjM0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zNzAwPXUzMiBza2JfY3JjMzJjKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiBjcmMpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzcxNC1cbm5ldC9jb3JlL3NrYnVmZi5jOjM3MTU6XHRpZiAoV0FSTl9PTl9PTkNFKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkpXG5uZXQvY29yZS9za2J1ZmYuYy0zNzE2LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc3PXNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTA4LVxubmV0L2NvcmUvc2tidWZmLmM6MzkwOTpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFx1MDAyNlx1MDAyNiBqIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4pIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MTAtXHRcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXHUwMDNlaGVhZCkpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ0NTE9dW5zaWduZWQgaW50IHNrYl9zZXFfcmVhZCh1bnNpZ25lZCBpbnQgY29uc3VtZWQsIGNvbnN0IHU4ICoqZGF0YSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00NDcyLVxubmV0L2NvcmUvc2tidWZmLmM6NDQ3MzpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHN0LVx1MDAzZWN1cl9za2IpKVxubmV0L2NvcmUvc2tidWZmLmMtNDQ3NC1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjE4Mz1ib29sIHNrYl90cnlfY29hbGVzY2Uoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02MjAyLVxubmV0L2NvcmUvc2tidWZmLmM6NjIwMzpcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoZnJvbSkgIT0gc2tiX2ZyYWdzX3JlYWRhYmxlKHRvKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTYyMDQtXHRcdHJldHVybiBmYWxzZTtcbm5ldC9jb3JlL3NrYnVmZi5jLTYyMDUtXG5uZXQvY29yZS9za2J1ZmYuYzo2MjA2Olx0aWYgKGxlbiBcdTAwM2M9IHNrYl90YWlscm9vbSh0bykgXHUwMDI2XHUwMDI2IHNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSkge1xubmV0L2NvcmUvc2tidWZmLmMtNjIwNy1cdFx0aWYgKGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MDczPXZvaWQgc2tiX2NvbmRlbnNlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3Ni1cdFx0aWYgKHNrYi1cdTAwM2VkYXRhX2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWVuZCAtIHNrYi1cdTAwM2V0YWlsIHx8XG5uZXQvY29yZS9za2J1ZmYuYzo3MDc3Olx0XHQgICAgc2tiX2Nsb25lZChza2IpIHx8ICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNzgtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTI0My1cdFx0aWYgKGNvcHkgXHUwMDNjPSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpIHx8XG5uZXQvaXB2NC90Y3AuYzoxMjQ0Olx0XHQgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7XG5uZXQvaXB2NC90Y3AuYy0xMjQ1LVx0XHRcdGJvb2wgZmlyc3Rfc2tiO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTIxOTY9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMjI2OS1cbm5ldC9pcHY0L3RjcC5jOjIyNzA6XHRcdFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9pcHY0L3RjcC5jLTIyNzEtXHRcdFx0XHRicmVhaztcbi0tXG5uZXQvaXB2NC90Y3AuYz0yNTAwPXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTE1LVxubmV0L2lwdjQvdGNwLmM6MjUxNjpcdFx0aWYgKHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSB7XG5uZXQvaXB2NC90Y3AuYy0yNTE3LVx0XHRcdGVyciA9IC1FTk9ERVY7XG4tLVxubmV0L2lwdjQvdGNwLmMtMjU2Mi1cbm5ldC9pcHY0L3RjcC5jOjI1NjM6XHRcdFx0LyogIXNrYl9mcmFnc19yZWFkYWJsZSgpIHNob3VsZCBpbmRpY2F0ZSB0aGF0IEFMTCB0aGVcbm5ldC9pcHY0L3RjcC5jLTI1NjQtXHRcdFx0ICogZnJhZ3MgaW4gdGhpcyBza2IgYXJlIGRtYWJ1ZiBuZXRfaW92cy4gV2UmIzM5O3JlIGNoZWNraW5nXG4tLVxubmV0L2lwdjQvdGNwLmMtMjU2Ni1cdFx0XHQgKiBoZXJlLiBJZiB0aGUgdGNwIHN0YWNrIGlzIG5vdCBzZXR0aW5nXG5uZXQvaXB2NC90Y3AuYzoyNTY3Olx0XHRcdCAqIHNrYl9mcmFnc19yZWFkYWJsZSgpIGNvcnJlY3RseSwgd2Ugc3RpbGwgZG9uJiMzOTt0IHdhbnRcbm5ldC9pcHY0L3RjcC5jLTI1NjgtXHRcdFx0ICogdG8gY3Jhc2ggaGVyZS5cbi0tXG5uZXQvaXB2NC90Y3AuYz0yNjU2PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTI4MzYtXHRcdFx0aWYgKGxhc3RfY29waWVkX2RtYWJ1ZiAhPSAtMSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L3RjcC5jOjI4Mzc6XHRcdFx0ICAgIGxhc3RfY29waWVkX2RtYWJ1ZiAhPSAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvaXB2NC90Y3AuYy0yODM4LVx0XHRcdFx0YnJlYWs7XG5uZXQvaXB2NC90Y3AuYy0yODM5LVxubmV0L2lwdjQvdGNwLmM6Mjg0MDpcdFx0XHRpZiAoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcbm5ldC9pcHY0L3RjcC5jLTI4NDEtXHRcdFx0XHRlcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCBvZmZzZXQsIG1zZyxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yODcxLVxubmV0L2lwdjQvdGNwLmM6Mjg3MjpcdFx0bGFzdF9jb3BpZWRfZG1hYnVmID0gIXNrYl9mcmFnc19yZWFkYWJsZShza2IpO1xubmV0L2lwdjQvdGNwLmMtMjg3My1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01NzczPXRjcF9jb2xsYXBzZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHN0cnVjdCByYl9yb290ICpyb290LFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU3ODYtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Nzg3Olx0XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTc4OC1cdFx0XHRnb3RvIHNraXBfdGhpcztcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01ODA5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTgxMDpcdFx0aWYgKG4gXHUwMDI2XHUwMDI2IG4gIT0gdGFpbCBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKG4pIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgxMS1cdFx0ICAgIHRjcF9za2JfY2FuX2NvbGxhcHNlX3J4KHNrYiwgbikgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgyMi1cdCAgICAoVENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF9mbGFncyBcdTAwMjYgKFRDUEhEUl9TWU4gfCBUQ1BIRFJfRklOKSkgfHxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU4MjM6XHQgICAgIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgyNC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU4NjUtXHRcdFx0XHQgICAgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IChUQ1BIRFJfU1lOIHwgVENQSERSX0ZJTikpIHx8XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1ODY2Olx0XHRcdFx0ICAgICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU4NjctXHRcdFx0XHRcdGdvdG8gZW5kO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zNDkxPXN0YXRpYyBib29sIHRjcF9jYW5fY29sbGFwc2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNDk2LVx0XHRyZXR1cm4gZmFsc2U7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzQ5NzpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzQ5OC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTcwMT1zdGF0aWMgdW5zaWduZWQgaW50IG5mdWxubF9nZXRfY29weV9sZW4oY29uc3Qgc3RydWN0IG5mX2xvZ2luZm8gKmxpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTcwOS1cdFx0Y29weV9sZW4gPSBsaS1cdTAwM2V1LnVsb2cuY29weV9sZW47XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo3MTA6XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNzExLVx0XHRsZW4gPSBza2JfaGVhZGxlbihza2IpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NjkzPXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZxbmxfZ2V0X2RhdGFfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICplbnRza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02OTctXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjY5ODpcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGVudHNrYikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTY5OS1cdFx0ZGF0YV9sZW4gPSBza2JfaGVhZGxlbihlbnRza2IpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTQ1MT1zdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NjktXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NzA6XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNDcxLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIxMzM9c3RhdGljIGludCBwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTcwLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTcxOlx0c25hcGxlbiA9IHNrYl9mcmFnc19yZWFkYWJsZShza2IpID8gc2tiLVx1MDAzZWxlbiA6IHNrYl9oZWFkbGVuKHNrYik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNzItXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ2PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyOTAtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyOTE6XHRzbmFwbGVuID0gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgPyBza2ItXHUwMDNlbGVuIDogc2tiX2hlYWRsZW4oc2tiKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI5Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY2MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTWVtb3J5IFByb3RlY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhbGwgYWJvdXQgcHJldmVudGluZyB0aGUga2VybmVsIGZyb20gZG9pbmcgc29tZXRoaW5nIHN0dXBpZCB3aXRoIGRldmljZSBtZW1vcnkg4oCTIHNwZWNpZmljYWxseSwgbWVtb3J5IHJlZ2lvbnMgdGhhdCB0aGUgQ1BVIHNob3VsZG4mIzM5O3QgZGlyZWN0bHkgcmVhZC4gVGhlIGNvcmUgaXNzdWUgaXMgYWJvdXQgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBhbmQgZW5zdXJpbmcgdGhhdCBpZiBhIGZyYWdtZW50IHdpdGhpbiBhbiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaXNuJiMzOTt0IHJlYWRhYmxlLCB3ZSBkb24mIzM5O3QgdHJ5IHRvIHRyZWF0IGl0IGFzIGlmIGl0IGlzLiBJdCYjMzk7cyBhIG1hdHRlciBvZiBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuICYjMzQ7aG9zdC1hY2Nlc3NpYmxlJiMzNDsgbWVtb3J5IGFuZCBtZW1vcnkgcmVzaWRpbmcgaW4gdGhlIG5ldHdvcmsgZGV2aWNlLCB3aGljaCB0aGUgQ1BVIHR5cGljYWxseSBzaG91bGRuJiMzOTt0IHRvdWNoIGRpcmVjdGx5LgoKTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHdoZXRoZXIgdGhpcyB3YXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSWYgd2Ugd2VyZSB0byBxdWV1ZSBhbiB1bnJlYWRhYmxlIGBza2JgIHRvIHVzZXJzcGFjZSwgd2hhdCBjb3VsZCBoYXBwZW4/IFRoaXMgcGF0Y2ggYWltcyB0byBwcmV2ZW50IHRoZSBjb3B5aW5nIG9mIHVucmVhZGFibGUgZnJhZ21lbnRzLCByZXR1cm5pbmcgYW4gZXJyb3Igb3IgaGFsdGluZyB0aGUgb3BlcmF0aW9uIGVudGlyZWx5LiBJIHdhcyBpbml0aWFsbHkgd29ycmllZCBhYm91dCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gdGFyZ2V0IGEgYnVnIHJlbGF0ZWQgdG8gVENQIGRldm1lbSwgd2hpY2ggbWFrZXMgc2Vuc2UuIERldm1lbSAoZGV2aWNlIG1lbW9yeSkgaXNuJiMzOTt0IGxpa2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5ICh0aGluayB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcykuIEl0JiMzOTtzIGRhdGEgdGhhdCYjMzk7cyAqYWxyZWFkeSogaW4gYSBidWZmZXIsIGFuZCBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSBhY2Nlc3NlZCBieSBhIGRldmljZS4gSWYgdGhlIENQVSB0cmllcyB0byBkaXJlY3RseSBhY2Nlc3MgZGV2aWNlIG1lbW9yeSwgaXQmIzM5O3MgZWl0aGVyIGFuIGludmFsaWQgbWVtb3J5IGFjY2VzcyBvciBhIHBhZ2UgZmF1bHQsIGRlcGVuZGluZyBvbiBob3cgdGhhdCBtZW1vcnkgaXMgbWFwcGVkLiBLQVNBTiAqbWlnaHQqIGNhdGNoIHRoaXMgaWYgdGhlIG1lbW9yeSBpcyB2YWxpZCBidXQgbm90IG1lYW50IGZvciBDUFUgdXNlLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuCgpTbyB0aGUgYWRkZWQgY2hlY2tzIGluIGBza2JfemVyb2NvcHlgIHNlZW0gY3J1Y2lhbCwgcHJpbWFyaWx5IHRoZSBvbmUgdGhhdCByZXR1cm5zIGAtRUZBVUxUYCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIHVucmVhZGFibGUgZnJhZ21lbnQgYnV0IGFsc28gdGhlIHByb3BhZ2F0aW9uIG9mIHRoZSBgdW5yZWFkYWJsZWAgZmxhZy4gSXQmIzM5O3Mgdml0YWwgdGhhdCB0aGUgZGVzdGluYXRpb24gYHNrYmAgaXMgYWxzbyBtYXJrZWQgYXMgdW5yZWFkYWJsZSBpZiBpdCBpbmhlcml0cyBkZXZpY2UgbWVtb3J5LiBUaGUgbG9naWMgaGVyZSBpcyB0aGF0IGlmIHdlIGRvbiYjMzk7dCwgdGhlbiB3ZSBtaWdodCBlbmQgdXAgd2l0aCBjb2RlIHRoYXQgdGhpbmtzIHRoZSBkYXRhIGlzIHJlYWRhYmxlIGFuZCB0cmllcyB0byBhY2Nlc3MgaXQsIGxlYWRpbmcgdG8gYSBjcmFzaCBvciBhbiBpbmNvcnJlY3QgZGF0YSByZWFkLgoKQ3J1Y2lhbGx5LCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzICpub3QqIHRoZSB0b29sIGZvciB0aGlzLiBLTVNBTiBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpc24mIzM5O3QgdGhlIHByb2JsZW0gaGVyZS4gVGhpcyBwYXRjaCBwcmV2ZW50cyByZWFkcyBvZiB2YWxpZCBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLCBvciBqdXN0IGdvb2Qgb2xkLWZhc2hpb25lZCB0ZXN0aW5nLCBhcmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIGJ1Zy4gSXTigJlzIGEgbG9naWMgYnVnLCBhbiBhY2Nlc3MgdG8gbWVtb3J5IHRoYXQgaXQmIzM5O3Mgbm90IHN1cHBvc2VkIHRvLgoKTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBza2JfemVyb2NvcHlgLiBJbiB0aGUgY2FzZSB3aGVyZSBgbGVuICZndDsgc2tiX3RhaWxyb29tKHRvKWAsIHdlIHNlZSB0aGF0IGl0IGhhcyB0byBjb3B5IHRoZSBmcmFncy4gV2hlbiBhbiBgc2tiYCB3aXRoIHVucmVhZGFibGUgZnJhZ3MgaXMgdXNlZCBhcyBzb3VyY2UsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGFsc28gbWFya2VkIHVucmVhZGFibGUgdmlhIGB0by0mZ3Q7dW5yZWFkYWJsZSA9IDFgLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHJlYWQgZnJvbSB1bnJlYWRhYmxlIG1lbW9yeS4gU28gdGhlIGZsb3cgaXMsIGlmIHdlIGRldGVjdCB3ZSBhcmUgcmVjZWl2aW5nIHVucmVhZGFibGUgZnJhZ21lbnRzIGluIGBza2JfemVyb2NvcHlgIHdlIG1hcmsgdGhlIGB0b2AgYnVmZmVyIGFzIHVucmVhZGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VucmVhZGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9NzI4PWVudW0gc2tiX3RzdGFtcF90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTg0OS0gKlx0XHRDSEVDS1NVTV9VTk5FQ0VTU0FSWSAobWF4IDMpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg1MDogKlx0QHVucmVhZGFibGU6IGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IDEgb2YgdGhlIGZyYWdtZW50cyBpbiB0aGlzIHNrYiBpc1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo4NTE6ICpcdFx0dW5yZWFkYWJsZS5cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtODUyLSAqXHRAZHN0X3BlbmRpbmdfY29uZmlybTogbmVlZCB0byBjb25maXJtIG5laWdoYm91clxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9ODg2PXN0cnVjdCBza19idWZmIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEwMzItI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEwMzM6XHRfX3U4XHRcdFx0dW5yZWFkYWJsZToxO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDM0LVx0X191OFx0XHRcdHRjX2RlcHRoOjI7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xODkxPXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZnJhZ3NfcmVhZGFibGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTg5Mi17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4OTM6XHRyZXR1cm4gIXNrYi1cdTAwM2V1bnJlYWRhYmxlO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODk0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI2MTA9X19za2JfZmlsbF9uZXRtZW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaSwgbmV0bWVtX3JlZiBuZXRtZW0sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNjE3LVx0aWYgKG5ldG1lbV9pc19uZXRfaW92KG5ldG1lbSkpIHtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjYxODpcdFx0c2tiLVx1MDAzZXVucmVhZGFibGUgPSB0cnVlO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNjE5LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA1CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIGB1bnJlYWRhYmxlYCBiaXRmaWVsZCB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuIFJpZ2h0LCB0aGUgYHNrYi0mZ3Q7dW5yZWFkYWJsZWAgZmxhZyBzaWduaWZpZXMgdGhhdCB0aGUgc2tiIGlzIGhvbGRpbmcgZGV2aWNlIG1lbW9yeSwgc3BlY2lmaWNhbGx5IGBuZXRfaW92YCwgYW5kIHRoYXQgdGhlIENQVSBjYW4mIzM5O3QgZGlyZWN0bHkgcmVhZCBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBpc3N1ZXMgaW4gaG93IHRoZXNlIHVucmVhZGFibGUgc2ticyBhcmUgaGFuZGxlZC4KCkl0IGxvb2tzIGxpa2UgdGhlIGtleSBwcm9ibGVtcyBpdCYjMzk7cyBmaXhpbmcgYXJlOiBlbnN1cmluZyByZWFkYWJsZSBhbmQgdW5yZWFkYWJsZSBmcmFnbWVudHMgZG9uJiMzOTt0IGdldCBtaXhlZCwgY29ycmVjdGx5IHByb3BhZ2F0aW5nIHRoYXQgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB0aGUgc2tiIGlzIGJlaW5nIGNvcGllZCB3aXRoIHplcm8tY29weSBmZWF0dXJlcywgYW5kIHByZXZlbnRpbmcgdGhlc2UgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgc2VudCB1cCB0byB1c2Vyc3BhY2Ugd2hpY2ggd291bGQgbGlrZWx5IGNhdXNlIGFuIGltbWVkaWF0ZSBjcmFzaCBvciB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBUQ1AgY2hhbmdlcyBzb3VuZCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LgoKTm93LCBJIHdhcyBpbml0aWFsbHkgd29uZGVyaW5nIGlmIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgbWlnaHQgYmUgcmVsZXZhbnQgaGVyZSwgYnV0IG9uIGZ1cnRoZXIgcmVmbGVjdGlvbiwgaXQmIzM5O3Mgbm90LiBUaGlzIGlzbiYjMzk7dCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk7IGl0JiMzOTtzIGFib3V0IHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGRldmljZSBtZW1vcnkgYWNjZXNzZWQgdGhyb3VnaCBETUEgYW5kIGhvc3QgQ1BVIG1lbW9yeS4gS01TQU4mIzM5O3MgcHVycG9zZSBpcyB0byBmaW5kIGluc3RhbmNlcyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBiZWZvcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIHdoaWNoIGlzbiYjMzk7dCB0aGUgaXNzdWUgaGVyZS4gVGhlIHJpc2tzIGFkZHJlc3NlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIGxvZ2ljYWwgZXJyb3JzIGR1ZSB0byBoYW5kbGluZyBETUEtbWFwcGVkIGRldmljZSBtZW1vcnkuIFNvLCBLTVNBTiBpcyBjb21wbGV0ZWx5IG92ZXJraWxsIGZvciB0aGlzLiBLQVNBTiBhbmQgdGhvcm91Z2ggdGVzdGluZyB3aWxsIGJlIGVub3VnaCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZXJyb3JzLiBUaGlzIHBhdGNoIGlzIHNvbGlkIGluIGl0cyBmb2N1cywgYWRkcmVzc2luZyBhIHZlcnkgc3BlY2lmaWMgc2V0IG9mIHByb2JsZW1zIHJlbGF0ZWQgdG8gYHVucmVhZGFibGVgIHNrYnMgYW5kIGRldmljZSBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE5OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXCYjMzQ7dW5yZWFkYWJsZVwmIzM0OyBza2IgZnJhZ21lbnRzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgbWVtb3J5IChlLmcuLCBUQ1AgZGV2bWVtKS4gSXQgZW5zdXJlcyB0aGF0IHVucmVhZGFibGUgZnJhZ21lbnRzIGFyZSBub3QgbWl4ZWQgd2l0aCByZWFkYWJsZSBvbmVzLCBjb3JyZWN0bHkgcHJvcGFnYXRlcyB0aGUgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB6ZXJvLWNvcHlpbmcgc2ticywgYW5kIHByZXZlbnRzIHVucmVhZGFibGUgc2ticyBmcm9tIGJlaW5nIHF1ZXVlZCB0byB1c2Vyc3BhY2Ugb3IgY29sbGFwc2VkIGluY29ycmVjdGx5IGluIFRDUC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciBzdGFjayB2YXJpYWJsZXMpIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzIHdoZW4gZGVhbGluZyB3aXRoIERNQS1tYXBwZWQgZGV2aWNlIG1lbW9yeSwgd2hpY2ggYXJlIG5vdCB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXCYjMzQ7dW5yZWFkYWJsZVwmIzM0OyBza2IgZnJhZ21lbnRzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgbWVtb3J5IChlLmcuLCBUQ1AgZGV2bWVtKS4gSXQgZW5zdXJlcyB0aGF0IHVucmVhZGFibGUgZnJhZ21lbnRzIGFyZSBub3QgbWl4ZWQgd2l0aCByZWFkYWJsZSBvbmVzLCBjb3JyZWN0bHkgcHJvcGFnYXRlcyB0aGUgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB6ZXJvLWNvcHlpbmcgc2ticywgYW5kIHByZXZlbnRzIHVucmVhZGFibGUgc2ticyBmcm9tIGJlaW5nIHF1ZXVlZCB0byB1c2Vyc3BhY2Ugb3IgY29sbGFwc2VkIGluY29ycmVjdGx5IGluIFRDUC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciBzdGFjayB2YXJpYWJsZXMpIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzIHdoZW4gZGVhbGluZyB3aXRoIERNQS1tYXBwZWQgZGV2aWNlIG1lbW9yeSwgd2hpY2ggYXJlIG5vdCB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29udGV4dC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6MzEuOTg4NDQ4NDk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NDU2MzM3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJvdnNfZHBfdXBjYWxsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIFxcXCJ1bnJlYWRhYmxlXFxcIiBza2IgZnJhZ21lbnRzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgbWVtb3J5IChlLmcuLCBUQ1AgZGV2bWVtKS4gSXQgZW5zdXJlcyB0aGF0IHVucmVhZGFibGUgZnJhZ21lbnRzIGFyZSBub3QgbWl4ZWQgd2l0aCByZWFkYWJsZSBvbmVzLCBjb3JyZWN0bHkgcHJvcGFnYXRlcyB0aGUgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB6ZXJvLWNvcHlpbmcgc2ticywgYW5kIHByZXZlbnRzIHVucmVhZGFibGUgc2ticyBmcm9tIGJlaW5nIHF1ZXVlZCB0byB1c2Vyc3BhY2Ugb3IgY29sbGFwc2VkIGluY29ycmVjdGx5IGluIFRDUC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcsIG9yIHN0YWNrIHZhcmlhYmxlcykgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZSByaXNrcyBtaXRpZ2F0ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggRE1BLW1hcHBlZCBkZXZpY2UgbWVtb3J5LCB3aGljaCBhcmUgbm90IHRhcmdldHMgZm9yIEtNU0FOLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhpcyBjb250ZXh0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYHNrYl96ZXJvY29weWAgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIHRvIGFkZCBjaGVja3MgZm9yIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBJdCBhbHNvIG1vZGlmaWVzIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBvcGVudnN3aXRjaC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBvcGVudnN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4gVGhlIGBza2JfemVyb2NvcHlgIGZ1bmN0aW9uIGlzIHVzZWQgYnkgb3BlbnZzd2l0Y2ggYW5kIG5mbmV0bGlua19xdWV1ZSwgc28gd2UgaW5jbHVkZSB0aGVpciBjb25maWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyODozMS45ODg0NTU3OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDA4MjQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIwYTdmYWNmNGQ3MzUxMjU5OGRhZjliZTdlZDNhNjRmOTI1N2QyM2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTk6Mjg6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IGJhM2RiYWM4MGZiNDkuLmQyMWFmNjgxNTY5NTAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0zODcwLDcgKzM4NzAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XFxuICAqXFx0UmV0dXJuIHZhbHVlOlxcbiAgKlxcdDA6IGV2ZXJ5dGhpbmcgaXMgT0tcXG4gICpcXHQtRU5PTUVNOiBjb3VsZG4ndCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5XFxuLSAqXFx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeVxcbisgKlxcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnksIG9yIHJlYWRhYmxlIGhlYWRcXG4rICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cXG4gICovXFxuIGludFxcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxuQEAgLTM5MDUsMTAgKzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFxcdTAwMjZcXHUwMDI2IGogXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGxlbikge1xcbitcXHRcXHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLVxcdTAwM2VoZWFkKSk7XFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHR9XFxuK1xcbiBcXHRza2JfbGVuX2FkZCh0bywgbGVuICsgcGxlbik7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHtcXG4gXFx0XFx0c2tiX3R4X2Vycm9yKGZyb20pO1xcbitcXHRcXHRpZiAoaiBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXFx1MDAzZWhlYWQpKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcXG5AQCAtMzkyOCw2ICszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbiBcXHR9XFxuIFxcdHNrYl9zaGluZm8odG8pLVxcdTAwM2Vucl9mcmFncyA9IGo7XFxuIFxcbitcXHRpZiAoaSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgZnJvbS1cXHUwMDNldW5yZWFkYWJsZSlcXG4rXFx0XFx0dG8tXFx1MDAzZXVucmVhZGFibGUgPSAxO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmI0MjM3ZDBlOTk0ZDYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0xMjQwLDcgKzEyNDAsOCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFxuIFxcdFxcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XFxuIFxcbi1cXHRcXHRpZiAoY29weSBcXHUwMDNjPSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpKSB7XFxuK1xcdFxcdGlmIChjb3B5IFxcdTAwM2M9IDAgfHwgIXRjcF9za2JfY2FuX2NvbGxhcHNlX3RvKHNrYikgfHxcXG4rXFx0XFx0ICAgIHVubGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpICE9ICFiaW5kaW5nKSkge1xcbiBcXHRcXHRcXHRib29sIGZpcnN0X3NrYjtcXG4gXFxuIG5ld19zZWdtZW50OlxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggYWU2OWIyY2FiYWI5ZS4uNDgyODkzYTVmNjdkYyAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTQ2Nyw2ICs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKCFkcF9pZmluZGV4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuK1xcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4gXFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcXG4gXFx0XFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbiBcXHRcXHRpZiAoIW5za2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjMyLjM4OTI1MDExNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4ODk2NDMyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJvdnNfZHBfdXBjYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3plcm9jb3B5YCBhbmQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gYWRkIGNoZWNrcyBmb3IgYHNrYl9mcmFnc19yZWFkYWJsZWAuIEl0IGFsc28gbW9kaWZpZXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIG9wZW52c3dpdGNoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiBUaGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXMgdXNlZCBieSBvcGVudnN3aXRjaCBhbmQgbmZuZXRsaW5rX3F1ZXVlLCBzbyB3ZSBpbmNsdWRlIHRoZWlyIGNvbmZpZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIwYTdmYWNmNGQ3MzUxMjU5OGRhZjliZTdlZDNhNjRmOTI1N2QyM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxOToyODozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLmQyMWFmNjgxNTY5NTAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0zODcwLDcgKzM4NzAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG4gICpcdFJldHVybiB2YWx1ZTpcbiAgKlx0MDogZXZlcnl0aGluZyBpcyBPS1xuICAqXHQtRU5PTUVNOiBjb3VsZG4ndCBvcnBoYW4gZnJhZ3Mgb2YgQGZyb20gZHVlIHRvIGxhY2sgb2YgbWVtb3J5XG4tICpcdC1FRkFVTFQ6IHNrYl9jb3B5X2JpdHMoKSBmb3VuZCBzb21lIHByb2JsZW0gd2l0aCBza2IgZ2VvbWV0cnlcbisgKlx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeSwgb3IgcmVhZGFibGUgaGVhZFxuKyAqICAgICAgcGF5bG9hZCB3b3VsZCBiZSBtaXhlZCB3aXRoIHVucmVhZGFibGUgZnJhZ3MuXG4gICovXG4gaW50XG4gc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuQEAgLTM5MDUsMTAgKzM5MDYsMTcgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0XHR9XG4gXHR9XG4gXG4rXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSBcdTAwMjZcdTAwMjYgaiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGVuKSB7XG4rXHRcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXHUwMDNlaGVhZCkpO1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdH1cbitcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuIFx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4rXHRcdGlmIChqIFx1MDAzZSAwKVxuK1x0XHRcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXHUwMDNlaGVhZCkpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5AQCAtMzkyOCw2ICszOTM2LDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0fVxuIFx0c2tiX3NoaW5mbyh0byktXHUwMDNlbnJfZnJhZ3MgPSBqO1xuIFxuK1x0aWYgKGkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGZyb20tXHUwMDNldW5yZWFkYWJsZSlcbitcdFx0dG8tXHUwMDNldW5yZWFkYWJsZSA9IDE7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCA0NTU0NDFmMWI2OTQ5Li5iNDIzN2QwZTk5NGQ2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTI0MCw3ICsxMjQwLDggQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXG4gXHRcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XG4gXG4tXHRcdGlmIChjb3B5IFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSkge1xuK1x0XHRpZiAoY29weSBcdTAwM2M9IDAgfHwgIXRjcF9za2JfY2FuX2NvbGxhcHNlX3RvKHNrYikgfHxcbitcdFx0ICAgIHVubGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpICE9ICFiaW5kaW5nKSkge1xuIFx0XHRcdGJvb2wgZmlyc3Rfc2tiO1xuIFxuIG5ld19zZWdtZW50OlxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLjQ4Mjg5M2E1ZjY3ZGMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC00NjcsNiArNDY3LDkgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWRwX2lmaW5kZXgpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4gXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xuIFx0XHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghbnNrYilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjMyLjM4OTI2MTE0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDY2NDI2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgY3JpdGljYWwgYXJlYXM6IGBuZXQvY29yZS9za2J1ZmYuY2AsIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggcGFja2V0IGJ1ZmZlcmluZyBhbmQgemVyby1jb3B5IG1lY2hhbmlzbXMsIHdoaWNoIGlzIGFsd2F5cyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhZGRpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gYHNrYl9mcmFnc19yZWFkYWJsZSgpYCBhbmQgdGhlIGBmcm9tLVx1MDAzZXVucmVhZGFibGVgIGZsYWcgd2l0aGluIGBza2JfemVyb2NvcHkoKWAuIFRoYXQncyBzbWFydDsgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgZnJhZ21lbnQgcmVhZGFiaWxpdHkgY29ycmVjdGx5IGJlZm9yZSBhdHRlbXB0aW5nIHplcm8tY29weSBvcGVyYXRpb25zLiBUaGVyZSdzIGFsc28gYSBjb25kaXRpb25hbCBjaGVjayBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHRoYXQgc2VlbXMgdG8gYmUgdmVyaWZ5aW5nIHRoZSBzdGF0ZSBvZiBmcmFnbWVudCByZWFkYWJpbGl0eSBhZ2FpbnN0IGEgYGJpbmRpbmdgIHZhcmlhYmxlLiBBbmQgZmluYWxseSwgaW4gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoKWAgd2l0aGluIE9wZW4gdlN3aXRjaCwgdGhlcmUgaXMgYSBjaGVjayBlbnN1cmluZyB0aGF0IGZyYWdtZW50cyBhcmUgKm5vdCogcmVhZGFibGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZDogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGVzZSBhcmUgYWxsIGNvcmUgbmV0d29ya2luZyBlbGVtZW50cywgc28gYW55IGNoYW5nZXMgbmVlZCB0byBiZSB0aG9yb3VnaGx5IHZldHRlZC4gYHNrYl96ZXJvY29weWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHNpbmNlIGl0J3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBsaWtlbHkgdXNlZCBpbiBtdWx0aXBsZSBwbGFjZXMgd2l0aGluIHRoZSBrZXJuZWwgb3IgZXZlbiBieSBleHRlcm5hbCBtb2R1bGVzLiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcywgb2YgY291cnNlLCB0aGUgaGVhcnQgb2YgVENQIHNlbmRpbmcuIEFuZCB0aGVuIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KClgIGlzIHNwZWNpZmljIHRvIE9wZW4gdlN3aXRjaCwgd2hpY2ggSSB3YW50IHRvIHZlcmlmeSBpZiBhbnkgc3BlY2lmaWMgT3BlbiB2U3dpdGNoIGNvbmZpZ3VyYXRpb24gaXMgbmVjZXNzYXJ5LlxuXG5OZXh0LCBJJ2xsIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYHNrYl96ZXJvY29weWAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGl0cyB1c2FnZSB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBvZiB0aGlzIHBhdGNoIGJlZm9yZSBJIGNhbiBnaXZlIGEgc29saWQgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjM3LjYzNTkwNzI0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE0MzAzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaD00MTM9ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnhlbl9uZXRiYWNrX2RiZ19yb290O1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxNjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxODp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTQ5LSAqIGNvdW50ZXIgYmVjYXVzZSBjb3JlIGRyaXZlciBjYWxscyBpbnRvIHhlbnZpZl96ZXJvY29weV9jYWxsYmFja1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUwOiAqIHdoaWNoIGNhbGxzIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUuXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmM6NTI6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01OC1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNjAte1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTAtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdfbGlzdDtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTIxMTpcXHRcXHRcXHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIG5za2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEyLVxcdFxcdFxcdGlmICh4ZW52aWZfaGFuZGxlX2ZyYWdfbGlzdChxdWV1ZSwgc2tiKSkge1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbnNvbGlkYXRlIGZyYWdfbGlzdCFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNy1cXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjMzLVxcdFxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjM0OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjcyLVxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKSB7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjc0LVxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9zZW50Kys7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTI4Mz1zdGF0aWMgdm9pZCB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE0LVxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9mYWlsKys7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XFx0eGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShxdWV1ZSk7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzY4PWludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzE6c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI2OT12b2lkIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MDp1bnNpZ25lZCBpbnQgc2tiX3plcm9jb3B5X2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjcyLVxcdFxcdCBpbnQgbGVuLCBpbnQgaGxlbik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODEyPUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV9yZWFsbG9jKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4MTQ6c3RhdGljIGJvb2wgc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxvLCB1MTYgbGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTgzND1zdGF0aWMgdm9pZCBfX21zZ196ZXJvY29weV9jYWxsYmFjayhzdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjICp1YXJnKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cXHRpZiAoIXRhaWwgfHwgU0tCX0VYVF9FUlIodGFpbCktXFx1MDAzZWVlLmVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fWkVST0NPUFkgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlxcdCAgICAhc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQodGFpbCwgbG8sIGxlbikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODcyLVxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTk2MS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxOTYyOnN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNDktXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjUwOlxcdFxcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjUxLVxcdFxcdFxcdGtmcmVlX3NrYihuKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXFx0c2tiX3plcm9jb3B5X2hlYWRsZW4gLSBDYWxjdWxhdGUgaGVhZHJvb20gbmVlZGVkIGZvciBza2JfemVyb2NvcHkoKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcXHRAZnJvbTogc291cmNlIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlxcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAndG8nIHNrYiBwYXNzZWRcXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXFx0aW50byBza2JfemVyb2NvcHkoKS5cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mzc9dW5zaWduZWQgaW50XFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG5uZXQvY29yZS9za2J1ZmYuYy0zODM5LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTU6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTYtXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODU4OiAqXFx0c2tiX3plcm9jb3B5IC0gWmVybyBjb3B5IHNrYiB0byBza2JcXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXFx0QHRvOiBkZXN0aW5hdGlvbiBidWZmZXJcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcXG5uZXQvY29yZS9za2J1ZmYuYzozODY3OiAqXFx0VGhlIGBobGVuYCBhcyBjYWxjdWxhdGVkIGJ5IHNrYl96ZXJvY29weV9oZWFkbGVuKCkgc3BlY2lmaWVzIHRoZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcXHRoZWFkcm9vbSBpbiB0aGUgYHRvYCBidWZmZXIuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzc6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkyMS1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjMtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTQzLX1cXG5uZXQvY29yZS9za2J1ZmYuYzozOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQyNDI9dm9pZCBza2Jfc3BsaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjEsIGNvbnN0IHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00MjQ5LVxcdHNrYl9zaGluZm8oc2tiMSktXFx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB6Y19mbGFncztcXG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlxcdHNrYl96ZXJvY29weV9jbG9uZShza2IxLCBza2IsIDApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXFx0aWYgKGxlbiBcXHUwMDNjIHBvcylcXHQvKiBTcGxpdCBsaW5lIGlzIGluc2lkZSBoZWFkZXIuICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzg4PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTI6XFx0XFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTAxMy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXFx0XFx0XFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3MobGlzdF9za2IsIEdGUF9BVE9NSUMpIHx8XFxubmV0L2NvcmUvc2tidWZmLmM6NTAxODpcXHRcXHRcXHRcXHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOS1cXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVxcdFxcdGRhdGFfbGVuID0gbmZxbmxfZ2V0X2RhdGFfbGVuKGVudHNrYiwgUkVBRF9PTkNFKHF1ZXVlLVxcdTAwM2Vjb3B5X3JhbmdlKSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XFx0XFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXFx0XFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVxcdGlmIChkcC1cXHUwMDNldXNlcl9mZWF0dXJlcyBcXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1MDE6XFx0XFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUwMi1cXHRlbHNlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01ODctXFx0LyogT25seSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBoZWFkZXIsIHBhY2tldCBkYXRhIGlzIGFkZGVkXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4OlxcdCAqIGluIHNrYl96ZXJvY29weSgpICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg5LVxcdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5NC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XFx0ZXJyID0gc2tiX3plcm9jb3B5KHVzZXJfc2tiLCBza2IsIHNrYl9sZW4sIGhsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5Ni1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAwOC1cXG5uZXQveGRwL3hzay5jOjEwMDk6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMDEwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTA4NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTA5Mi1cXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG5uZXQveGRwL3hzay5jOjEwOTM6XFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XFxubmV0L3hkcC94c2suYy0xMDk0LVxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyODozOS40NTAyMTgyOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDAxMzQxMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcywgc3BlY2lmaWNhbGx5IGBza2JfemVyb2NvcHlgLCB3aGljaCBpcyBjcnVjaWFsIGZvciB6ZXJvLWNvcHkgb3BlcmF0aW9ucywgYW5kIHRoYXQncyB1c2VkIGluIGJvdGggdGhlIE5ldGZpbHRlciBOZXRsaW5rIFF1ZXVlIGltcGxlbWVudGF0aW9uIGFuZCB3aXRoaW4gT3BlbiB2U3dpdGNoJ3MgZGF0YXBhdGguIEl0J3MgYWxzbyBtYWtpbmcgYSBjaGFuZ2UgdG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAsIHdoaWNoIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggVENQIHNlbmQgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBgbmV0L2lwdjQvdGNwLmNgIGZpbGUuXG5cblRoZSBPcGVuIHZTd2l0Y2ggY2hhbmdlIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIGF0IGZpcnN0IGdsYW5jZS4gVGhleSdyZSBleHBsaWNpdGx5IGFkZGluZyBhIGAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgIGNoZWNrIHRvIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBsaWtlbHkgYWRkcmVzc2VzIHNvbWUga2luZCBvZiBmcmFnbWVudGF0aW9uIGlzc3VlIG9yIHplcm8tY29weSByZWxpYWJpbGl0eSBwcm9ibGVtIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIHVzZXIgc3BhY2UgcGFja2V0IHF1ZXVpbmcgcGF0aC4gTGV0IG1lIGd1ZXNzLCBtYXliZSB0aGVyZSdzIGFuIGludGVyYWN0aW9uIGJldHdlZW4gZnJhZ21lbnRlZCBza2JzIGFuZCB6ZXJvLWNvcHkgb3BlcmF0aW9ucywgYW5kIHRoaXMgY2hlY2sgaXMgbWVhbnQgdG8gcHJvdGVjdCBhZ2FpbnN0IHNvbWUga2luZCBvZiBjb3JydXB0aW9uIG9yIG1pc2JlaGF2aW9yLlxuXG5Ob3csIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcywgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBMZXQncyBzZWUuLi4gd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfT1BFTlZTV0lUQ0hgIGFuZCBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSdtIGFscmVhZHkgc2VlaW5nIHNvbWUgc3BlY2lmaWMgcG9pbnRzIG9mIGNvbm5lY3Rpb24sIHdoaWNoIGluZGljYXRlcyB0byBtZSB0aGF0IGFueSBidWcgaGVyZSB3b3VsZCBpbXBhY3QgYm90aCBzeXN0ZW1zLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgd2lsbCBleGFtaW5lIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoaXMgY2hlY2sgYW5kIHdoZXJlIHRoZSBvcmlnaW5hbCBmYWlsdXJlIHdhcyBpZGVudGlmaWVkLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCdzIGxvZ2ljIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODg0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjQ0LjQ1MTU2MjYzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM3MDQwNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMC1cXHRcXHRcXHQgICAgIHVpbnQzMl90IGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEzMi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzI5PWludCBvdnNfZHBfdXBjYWxsKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDUtXFx0aWYgKCFza2JfaXNfZ3NvKHNrYikpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzQ2OlxcdFxcdGVyciA9IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbywgY3V0bGVuKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDctXFx0ZWxzZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzY2PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzozOTc6XFx0XFx0ZXJyID0gcXVldWVfdXNlcnNwYWNlX3BhY2tldChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM5OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDQxPXN0YXRpYyB2b2lkIHBhZF9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1MC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NTE6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNDUyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI4OjQ2LjI4ODYwODUzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDg3NDQ2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgUGVyZm9ybWFuY2UgaW4gT3BlbiB2U3dpdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBPcGVuIHZTd2l0Y2ggcGVyZm9ybWFuY2UgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LiBGaXJzdCwgSSBrbm93IHRoYXQgYG92c19kcF91cGNhbGxgIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgcHVzaGluZyB0aGluZ3MgZnJvbSB0aGUgZGF0YXBhdGggdXAgdG8gdXNlcnNwYWNlLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBpbnRlcmFjdGlvbi4gVGhlbiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIFRDUCBzaWRlIG9mIHRoaW5ncywgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHdoZXJlIHRoZSBUQ1Agc2VuZCBvcGVyYXRpb25zIGtpY2sgb2ZmLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGlzIGlzIGEga2V5IHNwb3QgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiBUQ1AgZGF0YSB0cmFuc2Zlci5cblxuSSBhbHNvIHNlZSB0aGF0IGBza2JfemVyb2NvcHlgIGlzIGltcG9ydGFudDsgaXQgc2hvd3MgdXAgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCBhbmQgaW4gT3BlbiB2U3dpdGNoJ3MgZGF0YXBhdGggY29kZSAoYGRhdGFwYXRoLmNgKS4gVGhhdCdzIGludGVyZXN0aW5nLCBhcyB6ZXJvY29weSBpcyBhbGwgYWJvdXQgb3B0aW1pemluZyBkYXRhIHRyYW5zZmVyIGJ5IGF2b2lkaW5nIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzLCB3aGljaCBzaG91bGQgaGF2ZSBhIHByZXR0eSBiaWcgcGVyZm9ybWFuY2UgaW1wYWN0LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aGUga2VybmVsJ3MgVENQIGltcGxlbWVudGF0aW9uLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gTGV0J3Mgc2VlIGhvdyB0aGUgcGFja2V0IGlzIGFjdHVhbGx5IHNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MDYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6NTAuMzk3MzU1MjQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODgyMzE5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3NlbmRtc2dfbG9ja2VkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9zbm1wLnJzdD0xMz11bnNpZ25lZF9sb25nICBMSU5VWF9NSUJfREVMQVlFREFDS0xPQ0tFRCAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIsdGNwX2RlbGFja190aW1lclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9zbm1wLnJzdDoxNDp1bnNpZ25lZF9sb25nICBMSU5VWF9NSUJfVENQQVVUT0NPUktJTkcgICAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfcHVzaCx0Y3Bfc2VuZG1zZ19sb2NrZWRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvc25tcC5yc3QtMTUtdW5zaWduZWRfbG9uZyAgTElOVVhfTUlCX1RDUEZST01aRVJPV0lORE9XQURWICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3NlbGVjdF93aW5kb3csdGNwX3RyYW5zbWl0LXNrYlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfcXBfdHguYz0zMjM9c3RhdGljIGludCBzaXdfdGNwX3NlbmRwYWdlcyhzdHJ1Y3Qgc29ja2V0ICpzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsIGludCBvZmZzZXQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd19xcF90eC5jLTM0Ni1cXHRcXHRsb2NrX3NvY2soc2spO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3FwX3R4LmM6MzQ3OlxcdFxcdHJ2ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnLCBieXRlcyk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfcXBfdHguYy0zNDgtXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTM2Nz1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL25ldC90Y3AuaDozNjg6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTM2OS1pbnQgdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCAqY29waWVkLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGNwLmg9Mjg5PVRSQUNFX0VWRU5UKHRjcF9yZXRyYW5zbWl0X3N5bmFjayxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oLTMzNC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90Y3AuaDozMzU6VFJBQ0VfRVZFTlQodGNwX3NlbmRtc2dfbG9ja2VkLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RjcC5oLTMzNi1cXHRUUF9QUk9UTyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NjY1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yYXdfdHBfbnVsbF9hcmdzIHJhd190cF9udWxsX2FyZ3NbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNjczNi1cXHR7IFxcXCJ0Y3Bfc2VuZF9yZXNldFxcXCIsIDB4MTEgfSxcXG5rZXJuZWwvYnBmL2J0Zi5jOjY3Mzc6XFx0eyBcXFwidGNwX3NlbmRtc2dfbG9ja2VkXFxcIiwgMHgxMDAgfSxcXG5rZXJuZWwvYnBmL2J0Zi5jLTY3MzgtXFx0LyogdGVncmFfYXBiX2RtYSAqL1xcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTEwNjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4NS1cXHQucmVhZF9za2JcXHQgICA9IHRjcF9yZWFkX3NrYixcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTA4NjpcXHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODctXFx0LnBlZWtfbGVuXFx0ICAgPSB0Y3BfcGVla19sZW4sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE0PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxcbm5ldC9pcHY0L3RjcC5jOjExMTY6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwLmMtMTExNy17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMjQwLVxcbm5ldC9pcHY0L3RjcC5jOjEyNDE6XFx0XFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcXG5uZXQvaXB2NC90Y3AuYy0xMjQyLVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQ0NC19XFxubmV0L2lwdjQvdGNwLmM6MTQ0NTpFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NDYtXFxubmV0L2lwdjQvdGNwLmM9MTQ0Nz1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQ1MS1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3RjcC5jOjE0NTI6XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNpemUpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NTMtXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz05MT1zdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTEyMi1cXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjEyMzpcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNpemUpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xMjQtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYz02NjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0Nl9zdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02ODEtXFx0LnNwbGljZV9lb2ZcXHQgICA9IGluZXRfc3BsaWNlX2VvZixcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY4MjpcXHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02ODMtXFx0LnNwbGljZV9yZWFkXFx0ICAgPSB0Y3Bfc3BsaWNlX3JlYWQsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9MTY4PWludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMTk0LVxcbm5ldC90bHMvdGxzX21haW4uYzoxOTU6XFx0XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnLCBzaXplKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTk2LVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz0yMDY9c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjI1LVxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFxcdTAwMjZidmVjLCAxLCBzZy1cXHUwMDNlbGVuZ3RoKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jOjIyNjpcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNnLVxcdTAwM2VsZW5ndGgpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMjI3LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYz0xMTc9c3RhdGljIGJvb2wgYnBmX3Rlc3RfZGVsYXkoc3RydWN0IGJwZl9zb2NrX29wcyAqc2tvcHMsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmMtMTg3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9uZXRfdGltZXN0YW1waW5nLmM6MTg4OlNFQyhcXFwiZmVudHJ5L3RjcF9zZW5kbXNnX2xvY2tlZFxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYzoxODk6aW50IEJQRl9QUk9HKHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL25ldF90aW1lc3RhbXBpbmcuYy0xOTAtXFx0ICAgICBzaXplX3Qgc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6NTIuMDg1NTkzMTY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NTQ1NzQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IC0gVENQIFNlbmQgUGF0aCoqXG5cbk9rYXksIHNvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIGEga2V5IGZ1bmN0aW9uLCBubyBkb3VidCBhYm91dCBpdC4gVGhlIHByb3Bvc2VkIGNoYW5nZXMgd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzOiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEhvd2V2ZXIsIHdhaXQgYSBtaW51dGUsIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpcyBzdGF0aWMgd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFRoYXQncyBub3QgaWRlYWwgZm9yIGRpcmVjdCBmdXp6aW5nLCBidXQgaXQgc3VnZ2VzdHMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGhvdyBpdCdzICp1c2VkKi4gTGV0J3Mgc2VlLi4uIHRoZSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiBgb3ZzX2RwX3VwY2FsbGAgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCB0byB0aGF0IHN0YXRpYyBmdW5jdGlvbiwgYW5kIHRodXMgdGhlIGtleSBhcmVhIG9mIHN0dWR5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgcGF0aCB1cGNhbGwgbWVjaGFuaXNtIHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlIGlzIGxpa2VseSB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6NTUuNzUxMDUzODQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU0OTc0NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19kcF91cGNhbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYz04NTg9c3RhdGljIGludCBvdXRwdXRfdXNlcnNwYWNlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTkxNC1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjkxNTpcXHRyZXR1cm4gb3ZzX2RwX3VwY2FsbChkcCwgc2tiLCBrZXksIFxcdTAwMjZ1cGNhbGwsIGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy05MTYtfVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjc4LVxcdFxcdHVwY2FsbC5tcnUgPSBPVlNfQ0Ioc2tiKS1cXHUwMDNlbXJ1O1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3OTpcXHRcXHRlcnJvciA9IG92c19kcF91cGNhbGwoZHAsIHNrYiwga2V5LCBcXHUwMDI2dXBjYWxsLCBVMzJfTUFYKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODAtXFx0XFx0c3dpdGNoIChlcnJvcikge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzI4LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMyOTppbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTMzMC1cXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzM2LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjMzNzpcXHRpZiAodHJhY2Vfb3ZzX2RwX3VwY2FsbF9lbmFibGVkKCkpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MzM4OlxcdFxcdHRyYWNlX292c19kcF91cGNhbGwoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbyk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzM5LVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg9MzIxPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaDozMjI6aW50IG92c19kcF91cGNhbGwoc3RydWN0IGRhdGFwYXRoICosIHN0cnVjdCBza19idWZmICosXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgtMzIzLVxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIGNvbnN0IHN0cnVjdCBkcF91cGNhbGxfaW5mbyAqLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmg9MTI9VFJBQ0VfRVZFTlQob3ZzX2RvX2V4ZWN1dGVfYWN0aW9uLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtODEtXFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmg6ODI6VFJBQ0VfRVZFTlQob3ZzX2RwX3VwY2FsbCxcXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaC04My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjg6NTcuMzA2MDM2NjgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzAyNzY0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gdGhlIERhdGEgUGxhbmUqKlxuXG5Pa2F5LCBzbyBJIHRoaW5rIGBvdnNfZHBfdXBjYWxsYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRpdmluZyBpbnRvIHRoaXMuIFRoYXQgc2VlbXMgdG8gYmUgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBkYXRhIHBsYW5lLiBMZXQncyBzZWUgaG93IHplcm8tY29weSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGFuZCBwb3RlbnRpYWxseSB3aGVyZSBwZXJmb3JtYW5jZSBjb3VsZCBiZSBpbXBhY3RlZC4gSSBzaG91bGQgY2hlY2sgYG5mbmV0bGlua19xdWV1ZS5jYCB0byBzZWUgaG93IGl0J3MgZGVhbGluZyB3aXRoIHBhY2tldCBkYXRhOyBzcGVjaWZpY2FsbHksIHdoYXQgY2FsbHMgYXJlIGJlaW5nIG1hZGUgdG8gYHNrYl96ZXJvY29weWAuIFRoYXQgd291bGQgYmUgYSBzbWFydCB3YXkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTowMi41MzYzMTUxMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzU0OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVxcdFxcdGRhdGFfbGVuID0gbmZxbmxfZ2V0X2RhdGFfbGVuKGVudHNrYiwgUkVBRF9PTkNFKHF1ZXVlLVxcdTAwM2Vjb3B5X3JhbmdlKSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XFx0XFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXFx0XFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTowMi41ODA2NzYzODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MjI1MTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFplcm8tQ29weSBNZWNoYW5pc20gaW4gTmV0d29yayBQYWNrZXQgQ29uc3RydWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYCBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgb3BlcmF0aW9uIGhlcmUgaXMgdGhlIGNhbGwgdG8gYHNrYl96ZXJvY29weWAuICBSaWdodCwgdGhhdCdzIHRoZSB0ZWxsLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSdtIGJldHRpbmcgdGhpcyBmdW5jdGlvbiBpcyBsZXZlcmFnaW5nIHRoZSB6ZXJvLWNvcHkgY2FwYWJpbGl0eSBvZiB0aGUga2VybmVsJ3Mgc29ja2V0IGJ1ZmZlciAoc2tiKSB0byBlZmZpY2llbnRseSBjb25zdHJ1Y3QgYW5kIG1hbmFnZSBuZXR3b3JrIHBhY2tldHMgZm9yIHRoZSBOZXRmaWx0ZXIgcXVldWUuIEluc3RlYWQgb2YgYSBmdWxsIG1lbW9yeSBjb3B5LCB3aGljaCB3b3VsZCBiZSBpbmNyZWRpYmx5IGluZWZmaWNpZW50LCBlc3BlY2lhbGx5IGZvciBsYXJnZXIgcGF5bG9hZHMsIHRoaXMgaXMgcHJvYmFibHkgYWJvdXQgc2hhcmluZyBwb2ludGVycyBhbmQgcmVmZXJlbmNlIGNvdW50cy4gSXQgc2hvdWxkIGFsbG93IGRhdGEgZnJvbSBvdGhlciBidWZmZXJzIG9yIG1lbW9yeSByZWdpb25zIHRvIGJlIGluY29ycG9yYXRlZCBkaXJlY3RseSBpbnRvIHRoZSBvdXRnb2luZyBza2Igd2l0aG91dCB1bm5lY2Vzc2FyeSBkYXRhIGR1cGxpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBza2JfemVyb2NvcHlgIGl0c2VsZiB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIHNwZWNpZmljYWxseSwgaG93IGl0J3MgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSByZWdpb25zIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgbG9ja2luZyBpcyBpbnZvbHZlZCBhbmQgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBlbGVtZW50cyBvZiB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lLCBob3cgdGhlIGRhdGEgc291cmNlIGlzIHNwZWNpZmllZCBhbmQgcmVmZXJlbmNlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjA5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MDYuMTMyOTMwMzUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ4OTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3MDU6bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzA2LVxcdFxcdFxcdCAgIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTk3ND1fX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTgxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTgyOlxcdG5za2IgPSBuZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShuZXQsIHF1ZXVlLCBlbnRyeSwgXFx1MDAyNnBhY2tldF9pZF9wdHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTgzLVxcdGlmIChuc2tiID09IE5VTEwpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MDYuMTc3NDI0NjA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDEzNTQ3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG5ldHdvcmsgcGFja2V0IGhhbmRsaW5nOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgUXVldWU6IEEgVHJhY2UgVGhyb3VnaCBgbmZxbmxfZW5xdWV1ZV9wYWNrZXRgKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIHBhY2tldHMsIGFuZCB3aGVyZSB0aGV5IHVsdGltYXRlbHkgZW5kIHVwLiBUaGUgY3JpdGljYWwganVuY3R1cmUgc2VlbXMgdG8gYmUgYF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXRgLiBUaGlzIGZ1bmN0aW9uLCBmcm9tIHdoYXQgSSd2ZSBzZWVuLCBpcyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBwYWNrZXRzIGRlc3RpbmVkIGZvciB0aGUgTmV0ZmlsdGVyIHF1ZXVlIGdldC4uLiB3ZWxsLCBlbnF1ZXVlZC4gSXQncyB0aGUgY3JpdGljYWwgc3RlcC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQsIHRoZSBhY3Qgb2YgcHV0dGluZyB0aGUgcGFja2V0IGludG8gdGhlIHF1ZXVlIHRvIGJlIHByb2Nlc3NlZCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgc3RlcCBvZiB0aGUgcHJvY2Vzcy4gSSByZWFsbHkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiwgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGUgY2FsbGluZyBjb250ZXh0IGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjA5LjIxODc4OTg3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTUyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZnFubF9lbnF1ZXVlX3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9OTczPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk3NDpfX25mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk3NS1cXHRcXHRcXHRzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMDc2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwNzc6X19uZnFubF9lbnF1ZXVlX3BhY2tldF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA3OC1cXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg3LVxcdFxcdGVudHJ5LVxcdTAwM2Vza2IgPSBza2I7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDg4OlxcdFxcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnkpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA4OS1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDk4LVxcdFxcdGVudHJ5X3NlZy1cXHUwMDNlc2tiID0gc2tiO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA5OTpcXHRcXHRyZXQgPSBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5X3NlZyk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTAwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTExMDc9bmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSwgdW5zaWduZWQgaW50IHF1ZXVlbnVtKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ1LVxcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZRQV9DRkdfRl9HU08pIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvX3NjdHAoc2tiKSkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTQ2OlxcdFxcdHJldHVybiBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNDctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzUtXFx0XFx0aWYgKGVyciA9PSAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE3NjpcXHRcXHRcXHRlcnIgPSBfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhuZXQsIHF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzZWdzLCBlbnRyeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjA5LjI2Mzg4OTU2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk2NTMyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBGaWx0ZXIgUXVldWUqKlxuXG5Pa2F5LCBzbyBJJ20gc3RhcnRpbmcgZnJlc2ggb24gdGhpcywgYW5kIHRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgZ2V0IG15IGJlYXJpbmdzLiBJIG5lZWQgYSBjbGVhciBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHdob2xlIG5ldHdvcmsgZmlsdGVyaW5nIHF1ZXVlIGlzIHdvcmtpbmcuIFJpZ2h0LCBzbyBJIHNlZSBpdDsgYG5mcW5sX2VucXVldWVfcGFja2V0YCBpcyB0aGUgZGVzaWduYXRlZCBlbnRyeSBwb2ludC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByb2Nlc3NlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCwgYW5kIHdoYXQgdGhlIGNvbnRyb2wgZmxvdyBsb29rcyBsaWtlLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA5OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjEyLjE2MDQyNTEzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MTcxMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfZW5xdWV1ZV9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz05NzM9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTc0Ol9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTc1LVxcdFxcdFxcdHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEwNzY9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA3NzpfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDc4LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwODctXFx0XFx0ZW50cnktXFx1MDAzZXNrYiA9IHNrYjtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwODg6XFx0XFx0cmV0ID0gX19uZnFubF9lbnF1ZXVlX3BhY2tldChuZXQsIHF1ZXVlLCBlbnRyeSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDg5LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwOTgtXFx0XFx0ZW50cnlfc2VnLVxcdTAwM2Vza2IgPSBza2I7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMDk5OlxcdFxcdHJldCA9IF9fbmZxbmxfZW5xdWV1ZV9wYWNrZXQobmV0LCBxdWV1ZSwgZW50cnlfc2VnKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTEwNj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTA3Om5mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGludCBxdWV1ZW51bSlcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExMDgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMTQ1LVxcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICgocXVldWUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZRQV9DRkdfRl9HU08pIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvX3NjdHAoc2tiKSkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMTQ2OlxcdFxcdHJldHVybiBfX25mcW5sX2VucXVldWVfcGFja2V0KG5ldCwgcXVldWUsIGVudHJ5KTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNDctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTExNzUtXFx0XFx0aWYgKGVyciA9PSAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTE3NjpcXHRcXHRcXHRlcnIgPSBfX25mcW5sX2VucXVldWVfcGFja2V0X2dzbyhuZXQsIHF1ZXVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzZWdzLCBlbnRyeSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE4MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9oYW5kbGVyIG5mcWggPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODAxOlxcdC5vdXRmblxcdFxcdD0gbmZxbmxfZW5xdWV1ZV9wYWNrZXQsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODAyLVxcdC5uZl9ob29rX2Ryb3BcXHQ9IG5mcW5sX25mX2hvb2tfZHJvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MTIuMjA4MDQ2NzA3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyODMwNDcxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBQbGFuZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBuZnFubF9lbnF1ZXVlX3BhY2tldGAgZnVuY3Rpb24g4oCTIGl0J3MgZGVmaW5pdGVseSBhY3RpbmcgYXMgYSBxdWV1ZSBoYW5kbGVyLCBzbyB0aGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBtb3ZlcyBhcm91bmQsIGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHBvdGVudGlhbGx5IGludm9sdmVkLlxuXG5gc2tiX3plcm9jb3B5YCBpcyBleHBvcnRlZCwgc28gdGhhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIHBvaW50IG9mIGludGVyZXN0LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2lyY2xlIGJhY2sgdG8gdGhhdCBsYXRlciwgYXMgdGhhdCBzZWVtcyByZWxldmFudCBmb3IgemVyby1jb3B5IG1lY2hhbmlzbXMuIFNpbWlsYXJseSwgYm90aCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBhbmQgYG92c19kcF91cGNhbGxgIGFyZSBleHBvcnRlZCwgd2hpY2ggYXJlIGltcG9ydGFudCBiZWNhdXNlIG9mIHRoZWlyIHJvbGVzIGluIFRDUCBkYXRhIHRyYW5zZmVyIGFuZCBPcGVuIHZTd2l0Y2ggdXBjYWxscywgcmVzcGVjdGl2ZWx5LiBUaGF0IHN1Z2dlc3RzIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBkYXRhIHBsYW5lLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZmlsdGVyaW5nIGFuZCBxdWV1aW5nLlxuXG5JIG5lZWQgdG8gY29uZmlybSBzb21lIGFzc3VtcHRpb25zLCBzbywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gc2VlaW5nIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBPUEVOVlNXSVRDSGAuIFRoZSBwcmVzZW5jZSBvZiBib3RoIGNsZWFybHkgZmxhZ3MgdGhhdCB0aGlzIGhhcyB0byBkbyB3aXRoIG5ldGZpbHRlciBhbmQgT3BlbiB2U3dpdGNoLCBhcyBleHBlY3RlZC5cblxuRmluYWxseSwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIGluIHRoZXJlLiBJdCdzIGEga2V5IHBsYWNlIHRvIGxvb2sgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cywgb3IgdGhhdCB0aGUgaW5pdGlhbCBjb250ZXh0IGlzIG1pc3NpbmcuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgaW4gZHJhd2luZyB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTExOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOToxOS40OTEwOTYxMDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzA0OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoXFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MTkuNTM2ODA1MDQxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTkxMzY4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBORVRGSUxURVJfTkVUTElOS19RVUVVRSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgdXN1YWxseSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHNlYXJjaCBmb3IgdGhhdCBzcGVjaWZpYyBzeW1ib2wuIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkIGFuZCB3ZWxsLWRvY3VtZW50ZWQgdGhlcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjIyLjUzNTk0NTcyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4ODQyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjI5OjIyLjU4MDgzNjg3M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEwMjM5NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIHdoYXQgb3RoZXIgb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMg4oCTIHdoYXQgdGhpbmdzIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBiZWNvbWVzIHNlbGVjdGFibGUsIGFuZCB3aGF0IG1pZ2h0IGJlIGNvbmZpZ3VyZWQgYWxvbmdzaWRlIGl0LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIG5ldGZpbHRlciBlY29zeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MjUuNDkxMDc4NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNTI6XFx0XFx0ICBmb3IgZXh0ZW5kZWQgYWNjb3VudGluZyB2aWEgTkZORVRMSU5LLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG4gIDU1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA1NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgNTc6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICA1ODpcXHRcXHRoZWxwXFxuICA1OTpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcXG4gIDYwOlxcdFxcdCAgZm9yIHF1ZXVlaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbiAgNjM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNjQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA2NTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDY2OlxcdFxcdGhlbHBcXG4gIDY3OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjg6XFx0XFx0ICBmb3IgbG9nZ2luZyBwYWNrZXRzIHZpYSBORk5FVExJTksuXFxuICA2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MjUuNDkxMTc1MjY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjM1OTc2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE5ldHdvcmsgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBtb2R1bGUgYW5kLCBhcyBJIHN1c3BlY3RlZCwgaXQgbG9va3MgbGlrZSBpdCdzIHJlbGlhbnQgb24gdGhlIGJyb2FkZXIgYE5FVEZJTFRFUl9BRFZBTkNFRGAgZmVhdHVyZS4gVGhpcyBpc24ndCBzdXJwcmlzaW5nLCBidXQgSSBhbHdheXMgdmVyaWZ5IHRoZXNlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgYSBjbGVhbiBidWlsZCBhbmQgYXZvaWQgdW5leHBlY3RlZCBjb25mbGljdHMuIE5vdywgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYE9QRU5WU1dJVENIYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgSSdsbCBkaXZlIGludG8gdGhlIGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdsbCBsaWtlbHkgZGV0YWlsIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGZvciBhbiBgT1BFTlZTV0lUQ0hgIGludGVncmF0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYwOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MjkuMTE0Nzc1MzcxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOToyOS4xMTQ4NDQ3MjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2OTA4NDI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgT3BlbiB2U3dpdGNoIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYCwgd2hpY2gsIG9mIGNvdXJzZSwgcmVsaWVzIGhlYXZpbHkgb24gYElORVRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCdzIGEgZnVuZGFtZW50YWwgVENQIGZ1bmN0aW9uLCBzbyBubyBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBpbXBhY3RpbmcgaXQgZGlyZWN0bHkuIFRoZSBwYXRjaCB0b3VjaGVzIGBza2JfemVyb2NvcHlgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4gRnVuY3Rpb25hbGx5LCB0aGVzZSBjaGFuZ2VzIHNlZW0gc291bmQgYW5kIGRlZmluaXRlbHkgd2FycmFudCBzb21lIGZ1enppbmcuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBzaGFycCBvbiBgc2tiX3plcm9jb3B5YCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgb3ZzX2RwX3VwY2FsbGAgZm9yIHZ1bG5lcmFiaWxpdHkuXG5cbkFuZCBqdXN0IHRvIGJlIGNvbXBsZXRlLCBJIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgYE9QRU5WU1dJVENIYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBhcmUgZW5hYmxlZC5cblxuTm93LCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBgc2tiX3plcm9jb3B5YCB1c2FnZS4gSSBzZWUgaXQncyB1c2VkIGluIGJvdGggYG5mbmV0bGlua19xdWV1ZS5jYCBhbmQgd2l0aGluIGBvcGVudnN3aXRjaC9kYXRhcGF0aC5jYCwgdGhhdCBtYWtlcyBzZW5zZS4gV2FpdCBhIG1pbnV0ZS4uLiBpdCdzIGFsc28gdXNlZCBkaXJlY3RseSBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGl0c2VsZi4gVGhpcyBtZWFucyBpdCdzIHByZXR0eSBjZW50cmFsIHRvIHRoZSBTS0IgbWFuYWdlbWVudC4gSHVoLCBpcyBpdCBleHBvcnRlZCBhbnl3aGVyZSBlbHNlPyBZZWFoLCBpdCdzIGV4cG9ydGVkIGFuZCB1c2VkIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgaW4gYHNrYl9jb3B5X2FuZF9jc3VtX2RldmA/IE5vLCAqYHNrYl96ZXJvY29weWAqIGlzIGV4cG9ydGVkLiBMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgYHNrYl96ZXJvY29weWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTM0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6MzQuMjgzOTMyNDYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYxMzAyMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaD00MTM9ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnhlbl9uZXRiYWNrX2RiZ19yb290O1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxNjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oOjQxODp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTQ5LSAqIGNvdW50ZXIgYmVjYXVzZSBjb3JlIGRyaXZlciBjYWxscyBpbnRvIHhlbnZpZl96ZXJvY29weV9jYWxsYmFja1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjUwOiAqIHdoaWNoIGNhbGxzIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUuXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmM6NTI6dm9pZCB4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUsXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01OC1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNjAte1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTAtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdfbGlzdDtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTIxMTpcXHRcXHRcXHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIG5za2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEyLVxcdFxcdFxcdGlmICh4ZW52aWZfaGFuZGxlX2ZyYWdfbGlzdChxdWV1ZSwgc2tiKSkge1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbnNvbGlkYXRlIGZyYWdfbGlzdCFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNy1cXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjMzLVxcdFxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjM0OlxcdFxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjcyLVxcdFxcdGlmIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnKSB7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjc0LVxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9zZW50Kys7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTI4Mz1zdGF0aWMgdm9pZCB4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE0LVxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF96ZXJvY29weV9mYWlsKys7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XFx0eGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShxdWV1ZSk7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzY4PWludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzE6c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI2OT12b2lkIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MDp1bnNpZ25lZCBpbnQgc2tiX3plcm9jb3B5X2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3MTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjcyLVxcdFxcdCBpbnQgbGVuLCBpbnQgaGxlbik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODEyPUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV9yZWFsbG9jKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODEzLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4MTQ6c3RhdGljIGJvb2wgc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxvLCB1MTYgbGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTUte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTgzND1zdGF0aWMgdm9pZCBfX21zZ196ZXJvY29weV9jYWxsYmFjayhzdHJ1Y3QgdWJ1Zl9pbmZvX21zZ3pjICp1YXJnKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTg3MC1cXHRpZiAoIXRhaWwgfHwgU0tCX0VYVF9FUlIodGFpbCktXFx1MDAzZWVlLmVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fWkVST0NPUFkgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoxODcxOlxcdCAgICAhc2tiX3plcm9jb3B5X25vdGlmeV9leHRlbmQodGFpbCwgbG8sIGxlbikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0xODcyLVxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTA9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTI6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkxMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDktfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTk2MD1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTk2MS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxOTYyOnN0YXRpYyBpbnQgc2tiX3plcm9jb3B5X2Nsb25lKHN0cnVjdCBza19idWZmICpuc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyxcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTYzLVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNDktXFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzoyMjUwOlxcdFxcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjUxLVxcdFxcdFxcdGtmcmVlX3NrYihuKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mjg9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODMwLSAvKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODMxOiAqXFx0c2tiX3plcm9jb3B5X2hlYWRsZW4gLSBDYWxjdWxhdGUgaGVhZHJvb20gbmVlZGVkIGZvciBza2JfemVyb2NvcHkoKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzItICpcXHRAZnJvbTogc291cmNlIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNC0gKlxcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAndG8nIHNrYiBwYXNzZWRcXG5uZXQvY29yZS9za2J1ZmYuYzozODM1OiAqXFx0aW50byBza2JfemVyb2NvcHkoKS5cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Mzc9dW5zaWduZWQgaW50XFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG5uZXQvY29yZS9za2J1ZmYuYy0zODM5LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTQtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NTU6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2hlYWRsZW4pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTYtXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzozODU4OiAqXFx0c2tiX3plcm9jb3B5IC0gWmVybyBjb3B5IHNrYiB0byBza2JcXG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LSAqXFx0QHRvOiBkZXN0aW5hdGlvbiBidWZmZXJcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjYtICpcXG5uZXQvY29yZS9za2J1ZmYuYzozODY3OiAqXFx0VGhlIGBobGVuYCBhcyBjYWxjdWxhdGVkIGJ5IHNrYl96ZXJvY29weV9oZWFkbGVuKCkgc3BlY2lmaWVzIHRoZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjgtICpcXHRoZWFkcm9vbSBpbiB0aGUgYHRvYCBidWZmZXIuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc2PWludFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzc6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4Nzgte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkyMS1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6MzkyMjpcXHRza2JfemVyb2NvcHlfY2xvbmUodG8sIGZyb20sIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MjMtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTQzLX1cXG5uZXQvY29yZS9za2J1ZmYuYzozOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMzk0NS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQyNDI9dm9pZCBza2Jfc3BsaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjEsIGNvbnN0IHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00MjQ5LVxcdHNrYl9zaGluZm8oc2tiMSktXFx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB6Y19mbGFncztcXG5uZXQvY29yZS9za2J1ZmYuYzo0MjUwOlxcdHNrYl96ZXJvY29weV9jbG9uZShza2IxLCBza2IsIDApO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXFx0aWYgKGxlbiBcXHUwMDNjIHBvcylcXHQvKiBTcGxpdCBsaW5lIGlzIGluc2lkZSBoZWFkZXIuICovXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzg4PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MDExLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMTI6XFx0XFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtNTAxMy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTctXFx0XFx0XFx0XFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3MobGlzdF9za2IsIEdGUF9BVE9NSUMpIHx8XFxubmV0L2NvcmUvc2tidWZmLmM6NTAxODpcXHRcXHRcXHRcXHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOS1cXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzY5LVxcdFxcdGRhdGFfbGVuID0gbmZxbmxfZ2V0X2RhdGFfbGVuKGVudHNrYiwgUkVBRF9PTkNFKHF1ZXVlLVxcdTAwM2Vjb3B5X3JhbmdlKSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3NzA6XFx0XFx0aGxlbiA9IHNrYl96ZXJvY29weV9oZWFkbGVuKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzEtXFx0XFx0aGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgaGxlbiwgZGF0YV9sZW4pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NTMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NTQ6XFx0XFx0aWYgKHNrYl96ZXJvY29weShza2IsIGVudHNrYiwgZGF0YV9sZW4sIGhsZW4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTU1LVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDUxPXN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAwLVxcdGlmIChkcC1cXHUwMDNldXNlcl9mZWF0dXJlcyBcXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1MDE6XFx0XFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTUwMi1cXHRlbHNlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01ODctXFx0LyogT25seSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBoZWFkZXIsIHBhY2tldCBkYXRhIGlzIGFkZGVkXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg4OlxcdCAqIGluIHNrYl96ZXJvY29weSgpICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTg5LVxcdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5NC1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTU6XFx0ZXJyID0gc2tiX3plcm9jb3B5KHVzZXJfc2tiLCBza2IsIHNrYl9sZW4sIGhsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5Ni1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAwOC1cXG5uZXQveGRwL3hzay5jOjEwMDk6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMDEwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTA4NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTA5Mi1cXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG5uZXQveGRwL3hzay5jOjEwOTM6XFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XFxubmV0L3hkcC94c2suYy0xMDk0LVxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTozNS45NDUyNDExNDhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MzA2NDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHNrYl96ZXJvY29weSBVc2FnZSoqXG5cbk9rYXksIHNvIGBza2JfemVyb2NvcHlgIGlzIGRlZmluaXRlbHkgaW4gcGxheSwgc3BlY2lmaWNhbGx5IGluIGBuZm5ldGxpbmtfcXVldWUuY2AgYW5kIGBvcGVudnN3aXRjaC9kYXRhcGF0aC5jYC4gVGhhdCBtZWFucyBgT1BFTlZTV0lUQ0hgIGFuZCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGFyZSBzb2xpZCBjb25maWcgb3B0aW9ucyB0byBmb2N1cyBvbi4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IGBza2JfemVyb2NvcHlgIGludGVyYWN0cyB3aXRoIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgb3ZzX2RwX3VwY2FsbGAgaW4gdGhlc2UgY29udGV4dHMuIFRob3NlIGFyZSBrZXkgc3ltYm9scyB0byBrZWVwIGluIG1pbmQuXG5cbkp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2s6IExldCdzIHNlZSBpZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGhhcyBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWhhLCBpdCBwdWxscyBpbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggaXMgYSBib29sZWFuLCBkZWZhdWx0aW5nIHRvIFwieWVzLlwiIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhhdCdzIGV4cGVjdGVkLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ20gY29uZmlkZW50IGluIG15IHVuZGVyc3RhbmRpbmcuIEknbSByZWFkeSB0byBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA4MCwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6NDEuMjA4MzA3MzI4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczNzA3OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJvdnNfZHBfdXBjYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBgc2tiX3plcm9jb3B5YCBhbmQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgdG8gYWRkIGNoZWNrcyBmb3IgYHNrYl9mcmFnc19yZWFkYWJsZWAuIEl0IGFsc28gbW9kaWZpZXMgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIG9wZW52c3dpdGNoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiBUaGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXMgdXNlZCBieSBvcGVudnN3aXRjaCBhbmQgbmZuZXRsaW5rX3F1ZXVlLCBzbyB3ZSBpbmNsdWRlIHRoZWlyIGNvbmZpZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgICBcIm92c19kcF91cGNhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIGBza2JfemVyb2NvcHlgIGFuZCBgdGNwX3NlbmRtc2dfbG9ja2VkYCB0byBhZGQgY2hlY2tzIGZvciBgc2tiX2ZyYWdzX3JlYWRhYmxlYC4gSXQgYWxzbyBtb2RpZmllcyBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaW4gb3BlbnZzd2l0Y2guIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgb3BlbnZzd2l0Y2ggY29kZSBwYXRocywgd2hpY2ggYXJlIHdvcnRoIGZ1enppbmcuIFRoZSBgc2tiX3plcm9jb3B5YCBmdW5jdGlvbiBpcyB1c2VkIGJ5IG9wZW52c3dpdGNoIGFuZCBuZm5ldGxpbmtfcXVldWUsIHNvIHdlIGluY2x1ZGUgdGhlaXIgY29uZmlncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6NDEuMjg1NzEwNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxNTkwNjEzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTo0MS4yODYyNzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzUxNTg0OTIzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXFxcInVucmVhZGFibGVcXFwiIHNrYiBmcmFnbWVudHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIGRldmljZSBtZW1vcnkgKGUuZy4sIFRDUCBkZXZtZW0pLiBJdCBlbnN1cmVzIHRoYXQgdW5yZWFkYWJsZSBmcmFnbWVudHMgYXJlIG5vdCBtaXhlZCB3aXRoIHJlYWRhYmxlIG9uZXMsIGNvcnJlY3RseSBwcm9wYWdhdGVzIHRoZSBgdW5yZWFkYWJsZWAgZmxhZyB3aGVuIHplcm8tY29weWluZyBza2JzLCBhbmQgcHJldmVudHMgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgcXVldWVkIHRvIHVzZXJzcGFjZSBvciBjb2xsYXBzZWQgaW5jb3JyZWN0bHkgaW4gVENQLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3Igc3RhY2sgdmFyaWFibGVzKSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlIHJpc2tzIG1pdGlnYXRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBETUEtbWFwcGVkIGRldmljZSBtZW1vcnksIHdoaWNoIGFyZSBub3QgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvbnRleHQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjBhN2ZhY2Y0ZDczNTEyNTk4ZGFmOWJlN2VkM2E2NGY5MjU3ZDIzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDE5OjI4OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYmEzZGJhYzgwZmI0OS4uZDIxYWY2ODE1Njk1MCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTM4NzAsNyArMzg3MCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9oZWFkbGVuKTtcbiAgKlx0UmV0dXJuIHZhbHVlOlxuICAqXHQwOiBldmVyeXRoaW5nIGlzIE9LXG4gICpcdC1FTk9NRU06IGNvdWxkbid0IG9ycGhhbiBmcmFncyBvZiBAZnJvbSBkdWUgdG8gbGFjayBvZiBtZW1vcnlcbi0gKlx0LUVGQVVMVDogc2tiX2NvcHlfYml0cygpIGZvdW5kIHNvbWUgcHJvYmxlbSB3aXRoIHNrYiBnZW9tZXRyeVxuKyAqXHQtRUZBVUxUOiBza2JfY29weV9iaXRzKCkgZm91bmQgc29tZSBwcm9ibGVtIHdpdGggc2tiIGdlb21ldHJ5LCBvciByZWFkYWJsZSBoZWFkXG4rICogICAgICBwYXlsb2FkIHdvdWxkIGJlIG1peGVkIHdpdGggdW5yZWFkYWJsZSBmcmFncy5cbiAgKi9cbiBpbnRcbiBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5AQCAtMzkwNSwxMCArMzkwNiwxNyBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pIFx1MDAyNlx1MDAyNiBqIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4pIHtcbitcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4gXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbitcdFx0aWYgKGogXHUwMDNlIDApXG4rXHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbkBAIC0zOTI4LDYgKzM5MzYsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXHR9XG4gXHRza2Jfc2hpbmZvKHRvKS1cdTAwM2Vucl9mcmFncyA9IGo7XG4gXG4rXHRpZiAoaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgZnJvbS1cdTAwM2V1bnJlYWRhYmxlKVxuK1x0XHR0by1cdTAwM2V1bnJlYWRhYmxlID0gMTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLmI0MjM3ZDBlOTk0ZDYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0xMjQwLDcgKzEyNDAsOCBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcbiBcdFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcbiBcbi1cdFx0aWYgKGNvcHkgXHUwMDNjPSAwIHx8ICF0Y3Bfc2tiX2Nhbl9jb2xsYXBzZV90byhza2IpKSB7XG4rXHRcdGlmIChjb3B5IFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSB8fFxuK1x0XHQgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7XG4gXHRcdFx0Ym9vbCBmaXJzdF9za2I7XG4gXG4gbmV3X3NlZ21lbnQ6XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuaW5kZXggYWU2OWIyY2FiYWI5ZS4uNDgyODkzYTVmNjdkYyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuQEAgLTQ2Nyw2ICs0NjcsOSBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghZHBfaWZpbmRleClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4rXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbiBcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4gXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuc2tiKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6NDEuMjg2Mjc3MDJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk2Mjk2OTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgVW5yZWFkYWJsZSBTS0IgRnJhZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhczogYHNrYl96ZXJvY29weWAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBUaGUgY29tbW9uIHRocmVhZCBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGVzZSBcInVucmVhZGFibGVcIiBTS0IgZnJhZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGFyZSByZWxhdGVkIHRvIGRldmljZSBtZW1vcnkg4oCTIFRDUCBkZXZtZW0gc3BlY2lmaWNhbGx5LCBhcyB0aGF0J3Mgd2hlcmUgSSd2ZSBzZWVuIHRoaXMga2luZCBvZiBjb25zdHJ1Y3QgdXNlZCBiZWZvcmUuXG5cbkluIGBza2JfemVyb2NvcHlgLCB0aGUgcGF0Y2ggYWRkcyBjaGVja3MgYXJvdW5kIGBza2JfZnJhZ3NfcmVhZGFibGVgLiBUaGUgZmlyc3Qgb25lIGxvb2tzIHRvIG1lIGxpa2UgaXQncyBwcmV2ZW50aW5nIHRoZSBjb3B5IGlmIHRoZSBzb3VyY2UgU0tCIGhhcyB1bnJlYWRhYmxlIGZyYWdzIGFuZCBzb21ldGhpbmcgaGFzIGFscmVhZHkgYmVlbiBjb3BpZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHN1c3BlY3QgdGhpcyBpcyB0cnlpbmcgdG8gYXZvaWQgYSBgcHV0X3BhZ2VgIG9uIGFuIGludmFsaWQgcGFnZS4gVGhlIHNlY29uZCBvbmUgc2VlbXMgdG8gcHJvcGFnYXRlIHRoZSBgdW5yZWFkYWJsZWAgZmxhZyB0byB0aGUgZGVzdGluYXRpb24gU0tCIGlmIHRoZSBzb3VyY2UgaGFkIGl0LCBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgdHJ5IHRvIHJlYWQgaXQgbGF0ZXIuXG5cbmB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIHRvIHNlZSBpZiB3ZSBjb3VsZCBjb2xsYXBzZSBTS0JzLCBidXQgbm93IGl0J3MgYWRkZWQgYSBjaGVjayBmb3IgdGhlICpyZWFkYWJpbGl0eSogb2YgZnJhZ3MgaW4gcmVsYXRpb24gdG8gdGhlIGBiaW5kaW5nYCBmbGFnLiBUaGlzIHNjcmVhbXMgRE1BIGNvbnNpZGVyYXRpb25zLiBJIHRoaW5rIHRoZSBpbnRlbnRpb24gaXMgdG8gZW5zdXJlIHRoZSBza2IgY2FuIGJlIHNhZmVseSB3cml0dGVuLCBhbmQgdGhpcyBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uIGZpeC4gSXQncyBtYWtpbmcgc3VyZSB3ZSBkb24ndCB0cnkgdG8gc2VuZCBkZXZpY2UgbWVtb3J5IGFzIGEgdXNlciBidWZmZXIgd2hlcmUgaXQgZG9lc24ndCBiZWxvbmcuXG5cbkZpbmFsbHksIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBoYXMgYSBzaW1wbGUgY2hlY2suIElmIHRoZSBTS0IgaXNuJ3QgcmVhZGFibGUsIGl0J3MgcmVqZWN0ZWQuIFRoaXMgaXMgcHJvYmFibHkgdGhlIG1vc3QgY3J1Y2lhbCBwYXJ0IGJlY2F1c2UsIGlmIHdlICpkaWQqIHF1ZXVlIGFuIHVucmVhZGFibGUgU0tCIHRvIHVzZXJzcGFjZSwgd2UnZCBiZSBzZXR0aW5nIHVwIGEgY3Jhc2ggb3IgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgaW5mb3JtYXRpb24gbGVhayB3aGVuIGEgdXNlciBwcm9jZXNzIHRyaWVkIHRvIGFjY2VzcyBpdC4gTm93LCB0aGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCAqY291bGQqIGhhdmUgYmVlbiBjYWxsaW5nIGBza2JfY29weV9iaXRzYCBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggd291bGQgaGF2ZSB0cmlnZ2VyZWQgYSBmYXVsdCBpZiB3ZSB0cmllZCB0byBjb3B5IHRob3NlIGRldmljZSBtZW1vcnkgcmVnaW9ucyBkaXJlY3RseSB0byB1c2Vyc3BhY2UuIFdlIG5lZWQgdG8gcHJldmVudCB0aGlzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGF0IGBza2JfZnJhZ3NfcmVhZGFibGVgIGFjdHVhbGx5ICpkb2VzKi4gSSBiZXQgaXQncyBjaGVja2luZyBzb21lIGZsYWdzIHJlbGF0ZWQgdG8gRE1BIG1hcHBpbmdzIG9yIHBhZ2UgdGFibGUgZW50cmllcy4gTGV0IG1lIHJ1biBhIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24gaXMgdGhlIGtleSB0byBjb25maXJtaW5nIG15IGFzc3VtcHRpb25zIGFib3V0IGRldmljZSBtZW1vcnkgYW5kIERNQSBzYWZldHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOToyOTo0OS4yNDkyNTA1NDhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDI1MTU2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2ZyYWdzX3JlYWRhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTQ3MT1zdGF0aWMgbmV0ZGV2X3R4X3QgYm54dF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy01NzUtXFx0aWYgKGZyZWVfc2l6ZSA9PSBicC1cXHUwMDNldHhfcmluZ19zaXplIFxcdTAwMjZcXHUwMDI2IGxlbmd0aCBcXHUwMDNjPSBicC1cXHUwMDNldHhfcHVzaF90aHJlc2ggXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzo1NzY6XFx0ICAgIHNrYl9mcmFnc19yZWFkYWJsZShza2IpIFxcdTAwMjZcXHUwMDI2ICFsZmxhZ3MpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy01NzctXFx0XFx0c3RydWN0IHR4X3B1c2hfYnVmZmVyICp0eF9wdXNoX2J1ZiA9IHR4ci1cXHUwMDNldHhfcHVzaDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTg4ND1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE4OTAtLyogUmV0dXJuIHRydWUgaWYgZnJhZ3MgaW4gdGhpcyBza2IgYXJlIHJlYWRhYmxlIGJ5IHRoZSBob3N0LiAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTg5MTpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZyYWdzX3JlYWRhYmxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODkyLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTEyMzM9c3RhdGljIGlubGluZSBib29sIHRjcF9za2JfY2FuX2NvbGxhcHNlKGNvbnN0IHN0cnVjdCBza19idWZmICp0byxcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTEyMzktXFx0XFx0ICAgICAgc2tiX3B1cmVfemNvcHlfc2FtZSh0bywgZnJvbSkgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL25ldC90Y3AuaDoxMjQwOlxcdFxcdCAgICAgIHNrYl9mcmFnc19yZWFkYWJsZSh0bykgPT0gc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0xMjQxLX1cXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9Mzg5PXN0YXRpYyBpbnQgX19za2JfZGF0YWdyYW1faXRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy00MTAtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo0MTE6XFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTQxMi1cXHRcXHRnb3RvIHNob3J0X2NvcHk7XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTYzNT1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTYzOS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjY0MDpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNjQxLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MTQtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MTU6XFx0aWYgKGkgXFx1MDAyNlxcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MTYtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0zNTY5PWludCBza2JfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMzU4MS1cXG5uZXQvY29yZS9kZXYuYzozNTgyOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcXG5uZXQvY29yZS9kZXYuYy0zNTgzLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Mzk5MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfdW5yZWFkYWJsZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM5OTYtXFxubmV0L2NvcmUvZGV2LmM6Mzk5NzpcXHRpZiAobGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpIHx8XFxubmV0L2NvcmUvZGV2LmMtMzk5OC1cXHRcXHQgICBkZXYtXFx1MDAzZW5ldG1lbV90eCA9PSBORVRNRU1fVFhfTk9fRE1BKSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5OTc9aW50IHNrYl9jb3B5X3VidWZzKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjAwNi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMDA3OlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2NvcmUvc2tidWZmLmMtMjAwOC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjE4Mi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMTgzOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2NvcmUvc2tidWZmLmMtMjE4NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDI9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjUxMi1cXG5uZXQvY29yZS9za2J1ZmYuYzoyNTEzOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2NvcmUvc2tidWZmLmMtMjUxNC1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4MDg9c3RhdGljIGludCBwc2tiX3RyaW1fcmNzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI4MTEtXFxubmV0L2NvcmUvc2tidWZmLmM6MjgxMjpcXHRpZiAoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0yODEzLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IGNzdW1fYmxvY2tfc3ViKHNrYi1cXHUwMDNlY3N1bSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI4NzU9dm9pZCAqX19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yODgyLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjI4ODM6XFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0yODg0LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzAxOT1pbnQgc2tiX2NvcHlfYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCB2b2lkICp0bywgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMwMzgtXFxubmV0L2NvcmUvc2tidWZmLmM6MzAzOTpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMwNDAtXFx0XFx0Z290byBmYXVsdDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTMyMDU9c3RhdGljIGJvb2wgX19za2Jfc3BsaWNlX2JpdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMyMjctXFx0ICovXFxubmV0L2NvcmUvc2tidWZmLmM6MzIyODpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMyMjktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzQ0OD1pbnQgc2tiX3N0b3JlX2JpdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM0NjYtXFxubmV0L2NvcmUvc2tidWZmLmM6MzQ2NzpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM0NjgtXFx0XFx0Z290byBmYXVsdDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM1Mjk9X193c3VtIHNrYl9jaGVja3N1bShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBfX3dzdW0gY3N1bSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM1NDYtXFxubmV0L2NvcmUvc2tidWZmLmM6MzU0NzpcXHRpZiAoV0FSTl9PTl9PTkNFKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkpXFxubmV0L2NvcmUvc2tidWZmLmMtMzU0OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM2MTE9X193c3VtIHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM2MzItXFxubmV0L2NvcmUvc2tidWZmLmM6MzYzMzpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM2MzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zNzAwPXUzMiBza2JfY3JjMzJjKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiBjcmMpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zNzE0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM3MTU6XFx0aWYgKFdBUk5fT05fT05DRSghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM3MTYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODc3PXNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MDgtXFxubmV0L2NvcmUvc2tidWZmLmM6MzkwOTpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSBcXHUwMDI2XFx1MDAyNiBqIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsZW4pIHtcXG5uZXQvY29yZS9za2J1ZmYuYy0zOTEwLVxcdFxcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXFx1MDAzZWhlYWQpKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQ0NTE9dW5zaWduZWQgaW50IHNrYl9zZXFfcmVhZCh1bnNpZ25lZCBpbnQgY29uc3VtZWQsIGNvbnN0IHU4ICoqZGF0YSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ0NzItXFxubmV0L2NvcmUvc2tidWZmLmM6NDQ3MzpcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShzdC1cXHUwMDNlY3VyX3NrYikpXFxubmV0L2NvcmUvc2tidWZmLmMtNDQ3NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTYxODM9Ym9vbCBza2JfdHJ5X2NvYWxlc2NlKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02MjAyLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjYyMDM6XFx0aWYgKHNrYl9mcmFnc19yZWFkYWJsZShmcm9tKSAhPSBza2JfZnJhZ3NfcmVhZGFibGUodG8pKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTYyMDQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTYyMDUtXFxubmV0L2NvcmUvc2tidWZmLmM6NjIwNjpcXHRpZiAobGVuIFxcdTAwM2M9IHNrYl90YWlscm9vbSh0bykgXFx1MDAyNlxcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKGZyb20pKSB7XFxubmV0L2NvcmUvc2tidWZmLmMtNjIwNy1cXHRcXHRpZiAobGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzA3Mz12b2lkIHNrYl9jb25kZW5zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA3Ni1cXHRcXHRpZiAoc2tiLVxcdTAwM2VkYXRhX2xlbiBcXHUwMDNlIHNrYi1cXHUwMDNlZW5kIC0gc2tiLVxcdTAwM2V0YWlsIHx8XFxubmV0L2NvcmUvc2tidWZmLmM6NzA3NzpcXHRcXHQgICAgc2tiX2Nsb25lZChza2IpIHx8ICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvY29yZS9za2J1ZmYuYy03MDc4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMjQzLVxcdFxcdGlmIChjb3B5IFxcdTAwM2M9IDAgfHwgIXRjcF9za2JfY2FuX2NvbGxhcHNlX3RvKHNrYikgfHxcXG5uZXQvaXB2NC90Y3AuYzoxMjQ0OlxcdFxcdCAgICB1bmxpa2VseShza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSAhPSAhYmluZGluZykpIHtcXG5uZXQvaXB2NC90Y3AuYy0xMjQ1LVxcdFxcdFxcdGJvb2wgZmlyc3Rfc2tiO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE5Nj1zdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIyNjktXFxubmV0L2lwdjQvdGNwLmM6MjI3MDpcXHRcXHRcXHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9pcHY0L3RjcC5jLTIyNzEtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yNTAwPXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI1MTUtXFxubmV0L2lwdjQvdGNwLmM6MjUxNjpcXHRcXHRpZiAoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpIHtcXG5uZXQvaXB2NC90Y3AuYy0yNTE3LVxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTYyLVxcbm5ldC9pcHY0L3RjcC5jOjI1NjM6XFx0XFx0XFx0LyogIXNrYl9mcmFnc19yZWFkYWJsZSgpIHNob3VsZCBpbmRpY2F0ZSB0aGF0IEFMTCB0aGVcXG5uZXQvaXB2NC90Y3AuYy0yNTY0LVxcdFxcdFxcdCAqIGZyYWdzIGluIHRoaXMgc2tiIGFyZSBkbWFidWYgbmV0X2lvdnMuIFdlJ3JlIGNoZWNraW5nXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTY2LVxcdFxcdFxcdCAqIGhlcmUuIElmIHRoZSB0Y3Agc3RhY2sgaXMgbm90IHNldHRpbmdcXG5uZXQvaXB2NC90Y3AuYzoyNTY3OlxcdFxcdFxcdCAqIHNrYl9mcmFnc19yZWFkYWJsZSgpIGNvcnJlY3RseSwgd2Ugc3RpbGwgZG9uJ3Qgd2FudFxcbm5ldC9pcHY0L3RjcC5jLTI1NjgtXFx0XFx0XFx0ICogdG8gY3Jhc2ggaGVyZS5cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI2NTY9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yODM2LVxcdFxcdFxcdGlmIChsYXN0X2NvcGllZF9kbWFidWYgIT0gLTEgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3AuYzoyODM3OlxcdFxcdFxcdCAgICBsYXN0X2NvcGllZF9kbWFidWYgIT0gIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxcbm5ldC9pcHY0L3RjcC5jLTI4MzgtXFx0XFx0XFx0XFx0YnJlYWs7XFxubmV0L2lwdjQvdGNwLmMtMjgzOS1cXG5uZXQvaXB2NC90Y3AuYzoyODQwOlxcdFxcdFxcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkge1xcbm5ldC9pcHY0L3RjcC5jLTI4NDEtXFx0XFx0XFx0XFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fbXNnKHNrYiwgb2Zmc2V0LCBtc2csXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yODcxLVxcbm5ldC9pcHY0L3RjcC5jOjI4NzI6XFx0XFx0bGFzdF9jb3BpZWRfZG1hYnVmID0gIXNrYl9mcmFnc19yZWFkYWJsZShza2IpO1xcbm5ldC9pcHY0L3RjcC5jLTI4NzMtXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01NzczPXRjcF9jb2xsYXBzZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHN0cnVjdCByYl9yb290ICpyb290LFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTc4Ni1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Nzg3OlxcdFxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTc4OC1cXHRcXHRcXHRnb3RvIHNraXBfdGhpcztcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU4MDktXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTgxMDpcXHRcXHRpZiAobiBcXHUwMDI2XFx1MDAyNiBuICE9IHRhaWwgXFx1MDAyNlxcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKG4pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgxMS1cXHRcXHQgICAgdGNwX3NrYl9jYW5fY29sbGFwc2Vfcngoc2tiLCBuKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgyMi1cXHQgICAgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjYgKFRDUEhEUl9TWU4gfCBUQ1BIRFJfRklOKSkgfHxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1ODIzOlxcdCAgICAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTgyNC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01ODY1LVxcdFxcdFxcdFxcdCAgICAoVENQX1NLQl9DQihza2IpLVxcdTAwM2V0Y3BfZmxhZ3MgXFx1MDAyNiAoVENQSERSX1NZTiB8IFRDUEhEUl9GSU4pKSB8fFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU4NjY6XFx0XFx0XFx0XFx0ICAgICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01ODY3LVxcdFxcdFxcdFxcdFxcdGdvdG8gZW5kO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM0OTE9c3RhdGljIGJvb2wgdGNwX2Nhbl9jb2xsYXBzZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzQ5Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM0OTc6XFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzQ5OC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz03MDE9c3RhdGljIHVuc2lnbmVkIGludCBuZnVsbmxfZ2V0X2NvcHlfbGVuKGNvbnN0IHN0cnVjdCBuZl9sb2dpbmZvICpsaSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTcwOS1cXHRcXHRjb3B5X2xlbiA9IGxpLVxcdTAwM2V1LnVsb2cuY29weV9sZW47XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NzEwOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNzExLVxcdFxcdGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTY5Mz1zdGF0aWMgdW5zaWduZWQgaW50IG5mcW5sX2dldF9kYXRhX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZW50c2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02OTctXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo2OTg6XFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoZW50c2tiKSlcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTY5OS1cXHRcXHRkYXRhX2xlbiA9IHNrYl9oZWFkbGVuKGVudHNrYik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTE9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NjktXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NDcwOlxcdGlmICghc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNDcxLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTMzPXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTcwLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjE3MTpcXHRzbmFwbGVuID0gc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgPyBza2ItXFx1MDAzZWxlbiA6IHNrYl9oZWFkbGVuKHNrYik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMTcyLVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ2PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI5MC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyOTE6XFx0c25hcGxlbiA9IHNrYl9mcmFnc19yZWFkYWJsZShza2IpID8gc2tiLVxcdTAwM2VsZW4gOiBza2JfaGVhZGxlbihza2IpO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjI5Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTk6Mjk6NTEuMDkxNzc3MTI2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzAzNDYxODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGV2aWNlIE1lbW9yeSBQcm90ZWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYWxsIGFib3V0IHByZXZlbnRpbmcgdGhlIGtlcm5lbCBmcm9tIGRvaW5nIHNvbWV0aGluZyBzdHVwaWQgd2l0aCBkZXZpY2UgbWVtb3J5IOKAkyBzcGVjaWZpY2FsbHksIG1lbW9yeSByZWdpb25zIHRoYXQgdGhlIENQVSBzaG91bGRuJ3QgZGlyZWN0bHkgcmVhZC4gVGhlIGNvcmUgaXNzdWUgaXMgYWJvdXQgYHNrYl9mcmFnc19yZWFkYWJsZShza2IpYCBhbmQgZW5zdXJpbmcgdGhhdCBpZiBhIGZyYWdtZW50IHdpdGhpbiBhbiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaXNuJ3QgcmVhZGFibGUsIHdlIGRvbid0IHRyeSB0byB0cmVhdCBpdCBhcyBpZiBpdCBpcy4gSXQncyBhIG1hdHRlciBvZiBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIFwiaG9zdC1hY2Nlc3NpYmxlXCIgbWVtb3J5IGFuZCBtZW1vcnkgcmVzaWRpbmcgaW4gdGhlIG5ldHdvcmsgZGV2aWNlLCB3aGljaCB0aGUgQ1BVIHR5cGljYWxseSBzaG91bGRuJ3QgdG91Y2ggZGlyZWN0bHkuXG5cbk15IGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB3aGV0aGVyIHRoaXMgd2FzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIElmIHdlIHdlcmUgdG8gcXVldWUgYW4gdW5yZWFkYWJsZSBgc2tiYCB0byB1c2Vyc3BhY2UsIHdoYXQgY291bGQgaGFwcGVuPyBUaGlzIHBhdGNoIGFpbXMgdG8gcHJldmVudCB0aGUgY29weWluZyBvZiB1bnJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGFuIGVycm9yIG9yIGhhbHRpbmcgdGhlIG9wZXJhdGlvbiBlbnRpcmVseS4gSSB3YXMgaW5pdGlhbGx5IHdvcnJpZWQgYWJvdXQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gdGFyZ2V0IGEgYnVnIHJlbGF0ZWQgdG8gVENQIGRldm1lbSwgd2hpY2ggbWFrZXMgc2Vuc2UuIERldm1lbSAoZGV2aWNlIG1lbW9yeSkgaXNuJ3QgbGlrZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHRoaW5rIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzKS4gSXQncyBkYXRhIHRoYXQncyAqYWxyZWFkeSogaW4gYSBidWZmZXIsIGFuZCBpdCdzIGludGVuZGVkIHRvIGJlIGFjY2Vzc2VkIGJ5IGEgZGV2aWNlLiBJZiB0aGUgQ1BVIHRyaWVzIHRvIGRpcmVjdGx5IGFjY2VzcyBkZXZpY2UgbWVtb3J5LCBpdCdzIGVpdGhlciBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgb3IgYSBwYWdlIGZhdWx0LCBkZXBlbmRpbmcgb24gaG93IHRoYXQgbWVtb3J5IGlzIG1hcHBlZC4gS0FTQU4gKm1pZ2h0KiBjYXRjaCB0aGlzIGlmIHRoZSBtZW1vcnkgaXMgdmFsaWQgYnV0IG5vdCBtZWFudCBmb3IgQ1BVIHVzZSwgYnV0IGl0J3Mgbm90IHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuXG5cblNvIHRoZSBhZGRlZCBjaGVja3MgaW4gYHNrYl96ZXJvY29weWAgc2VlbSBjcnVjaWFsLCBwcmltYXJpbHkgdGhlIG9uZSB0aGF0IHJldHVybnMgYC1FRkFVTFRgIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB1bnJlYWRhYmxlIGZyYWdtZW50IGJ1dCBhbHNvIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgYHVucmVhZGFibGVgIGZsYWcuIEl0J3Mgdml0YWwgdGhhdCB0aGUgZGVzdGluYXRpb24gYHNrYmAgaXMgYWxzbyBtYXJrZWQgYXMgdW5yZWFkYWJsZSBpZiBpdCBpbmhlcml0cyBkZXZpY2UgbWVtb3J5LiBUaGUgbG9naWMgaGVyZSBpcyB0aGF0IGlmIHdlIGRvbid0LCB0aGVuIHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGNvZGUgdGhhdCB0aGlua3MgdGhlIGRhdGEgaXMgcmVhZGFibGUgYW5kIHRyaWVzIHRvIGFjY2VzcyBpdCwgbGVhZGluZyB0byBhIGNyYXNoIG9yIGFuIGluY29ycmVjdCBkYXRhIHJlYWQuXG5cbkNydWNpYWxseSwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqbm90KiB0aGUgdG9vbCBmb3IgdGhpcy4gS01TQU4gZGVhbHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXNuJ3QgdGhlIHByb2JsZW0gaGVyZS4gVGhpcyBwYXRjaCBwcmV2ZW50cyByZWFkcyBvZiB2YWxpZCBkZXZpY2UgbWVtb3J5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLCBvciBqdXN0IGdvb2Qgb2xkLWZhc2hpb25lZCB0ZXN0aW5nLCBhcmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIGJ1Zy4gSXTigJlzIGEgbG9naWMgYnVnLCBhbiBhY2Nlc3MgdG8gbWVtb3J5IHRoYXQgaXQncyBub3Qgc3VwcG9zZWQgdG8uXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBza2JfemVyb2NvcHlgLiBJbiB0aGUgY2FzZSB3aGVyZSBgbGVuIFx1MDAzZSBza2JfdGFpbHJvb20odG8pYCwgd2Ugc2VlIHRoYXQgaXQgaGFzIHRvIGNvcHkgdGhlIGZyYWdzLiBXaGVuIGFuIGBza2JgIHdpdGggdW5yZWFkYWJsZSBmcmFncyBpcyB1c2VkIGFzIHNvdXJjZSwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYWxzbyBtYXJrZWQgdW5yZWFkYWJsZSB2aWEgYHRvLVx1MDAzZXVucmVhZGFibGUgPSAxYCwgcHJldmVudGluZyBhIHBvdGVudGlhbCByZWFkIGZyb20gdW5yZWFkYWJsZSBtZW1vcnkuIFNvIHRoZSBmbG93IGlzLCBpZiB3ZSBkZXRlY3Qgd2UgYXJlIHJlY2VpdmluZyB1bnJlYWRhYmxlIGZyYWdtZW50cyBpbiBgc2tiX3plcm9jb3B5YCB3ZSBtYXJrIHRoZSBgdG9gIGJ1ZmZlciBhcyB1bnJlYWRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjYzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOTozMDowOC4zOTUyNDQwMjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODQyMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVucmVhZGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTcyOD1lbnVtIHNrYl90c3RhbXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTg0OS0gKlxcdFxcdENIRUNLU1VNX1VOTkVDRVNTQVJZIChtYXggMylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg1MDogKlxcdEB1bnJlYWRhYmxlOiBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCAxIG9mIHRoZSBmcmFnbWVudHMgaW4gdGhpcyBza2IgaXNcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg1MTogKlxcdFxcdHVucmVhZGFibGUuXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC04NTItICpcXHRAZHN0X3BlbmRpbmdfY29uZmlybTogbmVlZCB0byBjb25maXJtIG5laWdoYm91clxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDMyLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTAzMzpcXHRfX3U4XFx0XFx0XFx0dW5yZWFkYWJsZToxO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTAzNC1cXHRfX3U4XFx0XFx0XFx0dGNfZGVwdGg6MjtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTg5MT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2ZyYWdzX3JlYWRhYmxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODkyLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE4OTM6XFx0cmV0dXJuICFza2ItXFx1MDAzZXVucmVhZGFibGU7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xODk0LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjYxMD1fX3NrYl9maWxsX25ldG1lbV9kZXNjKHN0cnVjdCBza19idWZmICpza2IsIGludCBpLCBuZXRtZW1fcmVmIG5ldG1lbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjYxNy1cXHRpZiAobmV0bWVtX2lzX25ldF9pb3YobmV0bWVtKSkge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MjYxODpcXHRcXHRza2ItXFx1MDAzZXVucmVhZGFibGUgPSB0cnVlO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjYxOS1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE5OjMwOjA4LjQ0ODA5OTIxNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk2NjQzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCdzIGRlYWxpbmcgd2l0aCB0aGUgYHVucmVhZGFibGVgIGJpdGZpZWxkIHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gUmlnaHQsIHRoZSBgc2tiLVx1MDAzZXVucmVhZGFibGVgIGZsYWcgc2lnbmlmaWVzIHRoYXQgdGhlIHNrYiBpcyBob2xkaW5nIGRldmljZSBtZW1vcnksIHNwZWNpZmljYWxseSBgbmV0X2lvdmAsIGFuZCB0aGF0IHRoZSBDUFUgY2FuJ3QgZGlyZWN0bHkgcmVhZCBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBpc3N1ZXMgaW4gaG93IHRoZXNlIHVucmVhZGFibGUgc2ticyBhcmUgaGFuZGxlZC5cblxuSXQgbG9va3MgbGlrZSB0aGUga2V5IHByb2JsZW1zIGl0J3MgZml4aW5nIGFyZTogZW5zdXJpbmcgcmVhZGFibGUgYW5kIHVucmVhZGFibGUgZnJhZ21lbnRzIGRvbid0IGdldCBtaXhlZCwgY29ycmVjdGx5IHByb3BhZ2F0aW5nIHRoYXQgYHVucmVhZGFibGVgIGZsYWcgd2hlbiB0aGUgc2tiIGlzIGJlaW5nIGNvcGllZCB3aXRoIHplcm8tY29weSBmZWF0dXJlcywgYW5kIHByZXZlbnRpbmcgdGhlc2UgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgc2VudCB1cCB0byB1c2Vyc3BhY2Ugd2hpY2ggd291bGQgbGlrZWx5IGNhdXNlIGFuIGltbWVkaWF0ZSBjcmFzaCBvciB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBUQ1AgY2hhbmdlcyBzb3VuZCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LlxuXG5Ob3csIEkgd2FzIGluaXRpYWxseSB3b25kZXJpbmcgaWYgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBtaWdodCBiZSByZWxldmFudCBoZXJlLCBidXQgb24gZnVydGhlciByZWZsZWN0aW9uLCBpdCdzIG5vdC4gVGhpcyBpc24ndCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk7IGl0J3MgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZGV2aWNlIG1lbW9yeSBhY2Nlc3NlZCB0aHJvdWdoIERNQSBhbmQgaG9zdCBDUFUgbWVtb3J5LiBLTVNBTidzIHB1cnBvc2UgaXMgdG8gZmluZCBpbnN0YW5jZXMgd2hlcmUgbWVtb3J5IGlzIHVzZWQgYmVmb3JlIGJlaW5nIHByb3Blcmx5IGluaXRpYWxpemVkLCB3aGljaCBpc24ndCB0aGUgaXNzdWUgaGVyZS4gVGhlIHJpc2tzIGFkZHJlc3NlZCBieSB0aGlzIHBhdGNoIGludm9sdmUgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIGxvZ2ljYWwgZXJyb3JzIGR1ZSB0byBoYW5kbGluZyBETUEtbWFwcGVkIGRldmljZSBtZW1vcnkuIFNvLCBLTVNBTiBpcyBjb21wbGV0ZWx5IG92ZXJraWxsIGZvciB0aGlzLiBLQVNBTiBhbmQgdGhvcm91Z2ggdGVzdGluZyB3aWxsIGJlIGVub3VnaCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZXJyb3JzLiBUaGlzIHBhdGNoIGlzIHNvbGlkIGluIGl0cyBmb2N1cywgYWRkcmVzc2luZyBhIHZlcnkgc3BlY2lmaWMgc2V0IG9mIHByb2JsZW1zIHJlbGF0ZWQgdG8gYHVucmVhZGFibGVgIHNrYnMgYW5kIGRldmljZSBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjA1LCJPdXRwdXRUb2tlbnMiOjE5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxOTozMDoxNi40NDQ3NDUwNDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgXFxcInVucmVhZGFibGVcXFwiIHNrYiBmcmFnbWVudHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIGRldmljZSBtZW1vcnkgKGUuZy4sIFRDUCBkZXZtZW0pLiBJdCBlbnN1cmVzIHRoYXQgdW5yZWFkYWJsZSBmcmFnbWVudHMgYXJlIG5vdCBtaXhlZCB3aXRoIHJlYWRhYmxlIG9uZXMsIGNvcnJlY3RseSBwcm9wYWdhdGVzIHRoZSBgdW5yZWFkYWJsZWAgZmxhZyB3aGVuIHplcm8tY29weWluZyBza2JzLCBhbmQgcHJldmVudHMgdW5yZWFkYWJsZSBza2JzIGZyb20gYmVpbmcgcXVldWVkIHRvIHVzZXJzcGFjZSBvciBjb2xsYXBzZWQgaW5jb3JyZWN0bHkgaW4gVENQLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3Igc3RhY2sgdmFyaWFibGVzKSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlIHJpc2tzIG1pdGlnYXRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBETUEtbWFwcGVkIGRldmljZSBtZW1vcnksIHdoaWNoIGFyZSBub3QgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGlzIGNvbnRleHQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBcXFwidW5yZWFkYWJsZVxcXCIgc2tiIGZyYWdtZW50cywgd2hpY2ggYXJlIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggZGV2aWNlIG1lbW9yeSAoZS5nLiwgVENQIGRldm1lbSkuIEl0IGVuc3VyZXMgdGhhdCB1bnJlYWRhYmxlIGZyYWdtZW50cyBhcmUgbm90IG1peGVkIHdpdGggcmVhZGFibGUgb25lcywgY29ycmVjdGx5IHByb3BhZ2F0ZXMgdGhlIGB1bnJlYWRhYmxlYCBmbGFnIHdoZW4gemVyby1jb3B5aW5nIHNrYnMsIGFuZCBwcmV2ZW50cyB1bnJlYWRhYmxlIHNrYnMgZnJvbSBiZWluZyBxdWV1ZWQgdG8gdXNlcnNwYWNlIG9yIGNvbGxhcHNlZCBpbmNvcnJlY3RseSBpbiBUQ1AuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciBzdGFjayB2YXJpYWJsZXMpIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgcmlza3MgbWl0aWdhdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzIHdoZW4gZGVhbGluZyB3aXRoIERNQS1tYXBwZWQgZGV2aWNlIG1lbW9yeSwgd2hpY2ggYXJlIG5vdCB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGluIHRoaXMgY29udGV4dC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow995sp[1] Phase: Succeeded StartedAt: 2026-08-14 19:30:27 +0000 UTC FinishedAt: 2026-08-14 19:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 19:30:27 +0000 UTC FinishedAt: 2026-08-14 19:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2] Phase: Succeeded StartedAt: 2026-08-14 19:30:27 +0000 UTC FinishedAt: 2026-08-14 23:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 19:30:27 +0000 UTC FinishedAt: 2026-08-14 23:14:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 19:30:27 +0000 UTC FinishedAt: 2026-08-14 19:30:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 19:30:27 +0000 UTC FinishedAt: 2026-08-14 19:30:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow995sp/series-workflow995sp-convert-artifact-2188909780/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 19:30:37 +0000 UTC FinishedAt: 2026-08-14 19:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 19:30:37 +0000 UTC FinishedAt: 2026-08-14 19:47:44 +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:*e89987d8-139f-45b2-a937-52fad1b1836b,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-workflow995sp/series-workflow995sp-convert-artifact-2188909780/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": "c1e44af3-b2e8-45e1-a244-49d9d3da3170", "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-workflow995sp/series-workflow995sp-build-action-46159954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 19:30:37 +0000 UTC FinishedAt: 2026-08-14 19:47:34 +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:*e89987d8-139f-45b2-a937-52fad1b1836b,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-workflow995sp/series-workflow995sp-convert-artifact-2188909780/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": "c1e44af3-b2e8-45e1-a244-49d9d3da3170", "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-workflow995sp/series-workflow995sp-build-action-46159954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 19:47:44 +0000 UTC FinishedAt: 2026-08-14 19:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 19:47:44 +0000 UTC FinishedAt: 2026-08-14 19:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 19:47:44 +0000 UTC FinishedAt: 2026-08-14 19:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 19:47:44 +0000 UTC FinishedAt: 2026-08-14 19:47:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow995sp/series-workflow995sp-convert-artifact-3687466131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 19:47:54 +0000 UTC FinishedAt: 2026-08-14 19:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 19:47:54 +0000 UTC FinishedAt: 2026-08-14 19:50:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1e44af3-b2e8-45e1-a244-49d9d3da3170,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-workflow995sp/series-workflow995sp-build-action-46159954/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-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 19:50:17 +0000 UTC FinishedAt: 2026-08-14 19:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 19:50:17 +0000 UTC FinishedAt: 2026-08-14 19:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 19:50:17 +0000 UTC FinishedAt: 2026-08-14 20:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 19:50:17 +0000 UTC FinishedAt: 2026-08-14 20:08:03 +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:*e89987d8-139f-45b2-a937-52fad1b1836b,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-workflow995sp/series-workflow995sp-convert-artifact-3687466131/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": "42af5213-b960-404e-9897-b8538fe5df30", "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-workflow995sp/series-workflow995sp-build-action-3047758535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 19:50:17 +0000 UTC FinishedAt: 2026-08-14 20:07:53 +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:*e89987d8-139f-45b2-a937-52fad1b1836b,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-workflow995sp/series-workflow995sp-convert-artifact-3687466131/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": "42af5213-b960-404e-9897-b8538fe5df30", "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-workflow995sp/series-workflow995sp-build-action-3047758535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 20:08:03 +0000 UTC FinishedAt: 2026-08-14 20:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 20:08:03 +0000 UTC FinishedAt: 2026-08-14 20:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 20:08:03 +0000 UTC FinishedAt: 2026-08-14 20:10:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 20:08:03 +0000 UTC FinishedAt: 2026-08-14 20:10:20 +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:*42af5213-b960-404e-9897-b8538fe5df30,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-workflow995sp/series-workflow995sp-build-action-3047758535/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-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 20:10:30 +0000 UTC FinishedAt: 2026-08-14 23:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 20:10:30 +0000 UTC FinishedAt: 2026-08-14 23:14:58 +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":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"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:*c1e44af3-b2e8-45e1-a244-49d9d3da3170,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42af5213-b960-404e-9897-b8538fe5df30,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-workflow995sp/series-workflow995sp-build-action-46159954/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-workflow995sp/series-workflow995sp-build-action-3047758535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 20:10:30 +0000 UTC FinishedAt: 2026-08-14 20:10:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 20:10:30 +0000 UTC FinishedAt: 2026-08-14 20:10:35 +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":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"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-workflow995sp/series-workflow995sp-convert-artifact-4234668300/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 20:10:30 +0000 UTC FinishedAt: 2026-08-14 20:10:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 20:10:30 +0000 UTC FinishedAt: 2026-08-14 20:10:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 20:10:30 +0000 UTC FinishedAt: 2026-08-14 20:10:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 20:10:40 +0000 UTC FinishedAt: 2026-08-14 23:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow995sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_zerocopy","tcp_sendmsg_locked","ovs_dp_upcall"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_NETLINK_QUEUE"],"series_id":"d5e59ec5-2307-45e4-abb9-cf60108d9d02","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 20:10:40 +0000 UTC FinishedAt: 2026-08-14 23:14:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1e44af3-b2e8-45e1-a244-49d9d3da3170,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42af5213-b960-404e-9897-b8538fe5df30,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-workflow995sp/series-workflow995sp-build-action-46159954/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-workflow995sp/series-workflow995sp-build-action-3047758535/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-workflow995sp/series-workflow995sp-convert-artifact-4234668300/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,}