Name: series-workflow4njtf Phase: Succeeded StartedAt: 2026-08-18 17:58:51 +0000 UTC FinishedAt: 2026-08-18 22:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[0] Phase: Succeeded StartedAt: 2026-08-18 17:58:51 +0000 UTC FinishedAt: 2026-08-18 18:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 17:58:51 +0000 UTC FinishedAt: 2026-08-18 18:27:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c71bf113dfdf426bdaf106636f573ef87b6613a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c71bf113dfdf426bdaf106636f573ef87b6613a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "7e316e17-e50f-4fce-8d66-c805b7784e37" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xdp_convert_zc_to_xdp_frame" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWA6XG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFx1MDAzZSBQQUdFX1NJWkVgIGluc3RlYWQgb2YgYFx1MDAzZSBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCkgdGhhdCBhbGxvd2VkIHBhY2tldCBkYXRhIHRvIG92ZXJsYXAgd2l0aCB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0IHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlLiBUaGlzIGNhdXNlcyBwYWNrZXQgZGF0YSB0byBiZSBvdmVyd3JpdHRlbiBieSBgc2tiX3NoYXJlZF9pbmZvYCBpbml0aWFsaXphdGlvbiwgb3IgYHNrYl9zaGFyZWRfaW5mb2AgdG8gYmUgY29ycnVwdGVkIGJ5IHBhY2tldCBtb2RpZmljYXRpb25zLlxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVx1MDAzZWhlYWRyb29tID0gMGAgaW5zdGVhZCBvZiBgbWV0YXNpemVgKSB0aGF0IGNhdXNlZCBgYnVpbGRfc2tiX2Fyb3VuZGAgdG8gbWlzY2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLiBUaGlzIHNoaWZ0ZWQgdGhlIGxvZ2ljYWwgZW5kIG9mIHRoZSBidWZmZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgcGFnZSwgY2F1c2luZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCB0byB3cml0ZSBgc2tiX3NoYXJlZF9pbmZvYCBvdXQtb2YtYm91bmRzIG9mIHRoZSBhbGxvY2F0ZWQgcGFnZS5cblxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXG5cblN0YW5kYXJkIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFnZSwgYXMgd2VsbCBhcyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBhIGNvcnJ1cHRlZCBgc2tiX3NoYXJlZF9pbmZvYCAoZS5nLiwgY29ycnVwdGVkIGBucl9mcmFnc2AgbGVhZGluZyB0byBPT0IgcmVhZHMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLCBhcyBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFhEUCBsb2dpYyBmb3IgY29udmVydGluZyB6ZXJvLWNvcHkgWERQIGJ1ZmZlcnMgdG8gWERQIGZyYW1lcyAoYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWApLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX1hEUCBhbmQgWERQX1RYL1hEUF9SRURJUkVDVCBhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzVhM2RiMWFhZWIxNzA0NmE3OTliNjA1YWY3MjNjZThjZjk4YTA1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE4OjE5OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3hkcC5jIGIvbmV0L2NvcmUveGRwLmNcbmluZGV4IDk4OTBhMzA1ODRiYTcuLjRiYjk3NzkwYjE4OTEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS94ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUveGRwLmNcbkBAIC01ODUsNyAmIzQzOzU4NSw3IEBAIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcdFx0ICAgeGRwLVx1MDAzZWRhdGEgLSB4ZHAtXHUwMDNlZGF0YV9tZXRhO1xuIFx0dG90c2l6ZSA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhICYjNDM7IG1ldGFzaXplO1xuIFxuLVx0aWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSBcdTAwM2UgUEFHRV9TSVpFKVxuJiM0MztcdGlmIChzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cGFnZSA9IGRldl9hbGxvY19wYWdlKCk7XG5AQCAtNjAyLDcgJiM0Mzs2MDIsNyBAQCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gXG4gXHR4ZHBmLVx1MDAzZWRhdGEgPSBhZGRyICYjNDM7IG1ldGFzaXplO1xuIFx0eGRwZi1cdTAwM2VsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7XG4tXHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gMDtcbiYjNDM7XHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XG4gXHR4ZHBmLVx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XG4gXHR4ZHBmLVx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xuIFx0eGRwZi1cdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBYRFAgbG9naWMgZm9yIGNvbnZlcnRpbmcgemVyby1jb3B5IFhEUCBidWZmZXJzIHRvIFhEUCBmcmFtZXMgKGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgYW5kIFhEUF9UWC9YRFBfUkVESVJFQ1QgYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc1YTNkYjFhYWViMTcwNDZhNzk5YjYwNWFmNzIzY2U4Y2Y5OGEwNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxODoxOTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3hkcC5jIGIvbmV0L2NvcmUveGRwLmMKaW5kZXggOTg5MGEzMDU4NGJhNy4uNGJiOTc3OTBiMTg5MSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUveGRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUveGRwLmMKQEAgLTU4NSw3ICYjNDM7NTg1LDcgQEAgc3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCQkgICB4ZHAtJmd0O2RhdGEgLSB4ZHAtJmd0O2RhdGFfbWV0YTsKIAl0b3RzaXplID0geGRwLSZndDtkYXRhX2VuZCAtIHhkcC0mZ3Q7ZGF0YSAmIzQzOyBtZXRhc2l6ZTsKIAotCWlmIChzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgJmd0OyBQQUdFX1NJWkUpCiYjNDM7CWlmIChzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgJmd0OyBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpKQogCQlyZXR1cm4gTlVMTDsKIAogCXBhZ2UgPSBkZXZfYWxsb2NfcGFnZSgpOwpAQCAtNjAyLDcgJiM0Mzs2MDIsNyBAQCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApCiAKIAl4ZHBmLSZndDtkYXRhID0gYWRkciAmIzQzOyBtZXRhc2l6ZTsKIAl4ZHBmLSZndDtsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7Ci0JeGRwZi0mZ3Q7aGVhZHJvb20gPSAwOwomIzQzOwl4ZHBmLSZndDtoZWFkcm9vbSA9IG1ldGFzaXplOwogCXhkcGYtJmd0O21ldGFzaXplID0gbWV0YXNpemU7CiAJeGRwZi0mZ3Q7ZnJhbWVfc3ogPSBQQUdFX1NJWkU7CiAJeGRwZi0mZ3Q7bWVtX3R5cGUgPSBNRU1fVFlQRV9QQUdFX09SREVSMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIENvcmUgWERQIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9jb3JlL3hkcC5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGZ1bmN0aW9uLiBJJiMzOTttIHNlZWluZyB0d28ga2V5IGNoYW5nZXMuIEZpcnN0LCB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byBob3cgdGhlIHNpemUgY2hlY2sgaXMgcGVyZm9ybWVkLCByZXBsYWNpbmcgYFBBR0VfU0laRWAgd2l0aCBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuIFRoaXMgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhY2NvdW50aW5nIGZvciB0aGUgU0tCIG92ZXJoZWFkIG5vdywgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IGFsbG9jYXRpb24uIEl0JiMzOTtzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgd2hlbiBjcmVhdGluZyBYRFAgZnJhbWVzLiBTZWNvbmQsIGB4ZHBmLSZndDtoZWFkcm9vbWAgaXMgYmVpbmcgc2V0IHRvIGBtZXRhc2l6ZWAgaW5zdGVhZCBvZiAwLiBUaGF0JiMzOTtzIGEgc2hpZnQgaW4gaG93IHRoZSBoZWFkcm9vbSBpcyBtYW5hZ2VkOyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIG1heSBoYXZlIGJlZW4gYSBkZWZhdWx0IHplcm8gaGVhZHJvb20uCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aG9zZSB3ZXJlIGFwcHJvcHJpYXRlLCBhbmQgd2hhdCB0cmlnZ2VyZWQgdGhlIGNoYW5nZS4gSSBuZWVkIHRvIGRpdmUgaW50byBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBpdHNlbGYsIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGF0IGNvbnRleHQuIFRoaXMgaXMgY29yZSBYRFAgbG9naWMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGVmZmVjdHMgdGhlIHBhY2tldCBoYW5kbGluZyBmbG93LiBJcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBPciBtYXliZSBpdCYjMzk7cyBlbmFibGluZyBzb21lIG5ldyBmZWF0dXJlPyBJJiMzOTtsbCBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHBvc3NpYmx5IHRoZSBtYWlsaW5nIGxpc3QgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZXMuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9NTc0PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9hdHRhY2htZW50X3NldHVwKTtcbm5ldC9jb3JlL3hkcC5jLTU3NS1cbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQvY29yZS94ZHAuYy01Nzcte1xuLS1cbm5ldC9jb3JlL3hkcC5jLTYxMi19XG5uZXQvY29yZS94ZHAuYzo2MTM6RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKTtcbm5ldC9jb3JlL3hkcC5jLTYxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZnVuY3Rpb24gYmV0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IGFuZCB3aGVyZSBpdCYjMzk7cyBhY3R1YWxseSBiZWluZyAqdXNlZCouIFNpbXBseSByZWFkaW5nIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGdpdmVzIG1lIGNsdWVzLCBidXQgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgaXMgZ29pbmcgdG8gcHJvdmlkZSB0aGUgcmVhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aG9zZSBjYWxscyEgTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGltcG9ydGluZyB0aGF0IGd1eSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jPTYyPW1seDVlX3htaXRfeGRwX2J1ZmYoc3RydWN0IG1seDVlX3hkcHNxICpzcSwgc3RydWN0IG1seDVlX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMtODktXHRcdCAqIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIHRoZSB4ZHBfYnVmZiBzaG91bGRuJiMzOTt0IGJlIHJlY3ljbGVkLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jOjkwOlx0XHQgKiBhcyBpdCB3YXMgYWxyZWFkeSBkb25lIGluIHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy05MS1cdFx0ICovXG4tLVxuaW5jbHVkZS9uZXQveGRwLmg9Mzc4PXN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21femMoc3RydWN0IHhkcF9idWZmICp4ZHApO1xuaW5jbHVkZS9uZXQveGRwLmg6Mzc5OnN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCk7XG5pbmNsdWRlL25ldC94ZHAuaC0zODAtc3RydWN0IHNrX2J1ZmYgKl9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXG4tLVxuaW5jbHVkZS9uZXQveGRwLmg9NDMwPXN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuaW5jbHVkZS9uZXQveGRwLmgtNDM0LVx0aWYgKHhkcC1cdTAwM2VyeHEtXHUwMDNlbWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTClcbmluY2x1ZGUvbmV0L3hkcC5oOjQzNTpcdFx0cmV0dXJuIHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSh4ZHApO1xuaW5jbHVkZS9uZXQveGRwLmgtNDM2LVxuLS1cbm5ldC9jb3JlL3hkcC5jPTU3ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYXR0YWNobWVudF9zZXR1cCk7XG5uZXQvY29yZS94ZHAuYy01NzUtXG5uZXQvY29yZS94ZHAuYzo1NzY6c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L2NvcmUveGRwLmMtNTc3LXtcbi0tXG5uZXQvY29yZS94ZHAuYy02MTItfVxubmV0L2NvcmUveGRwLmM6NjEzOkVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XG5uZXQvY29yZS94ZHAuYy02MTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZWAqKgoKT2theSwgc28gSSBzZWUgdGhpcyBmdW5jdGlvbiwgYHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWVgLCBpcyBkZWZpbmVkIGFzIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBoZWF2aWx5IG9wdGltaXplZCBhbmQgc3BlY2lmaWMgdG8gYSBjZXJ0YWluIGNvbnRleHQgd2l0aGluIHRoZSBYRFAgZnJhbWV3b3JrLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGluIGBpbmNsdWRlL25ldC94ZHAuaGAgdGVsbHMgbWUgaXQmIzM5O3MgYSBjb3JlIFhEUCB1dGlsaXR5LiBUaGUgaW1wb3J0YW50IHRoaW5nIG5vdyBpcyB0byB1bmRlcnN0YW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIEJlaW5nIGBzdGF0aWMgaW5saW5lYCBtZWFucyBpdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGlzIGZpbGUsIG9yIGEgZmlsZSBpbmNsdWRlZCBieSB0aGUgY3VycmVudCBmaWxlLCBzbyB0aGVyZSBzaG91bGQgYmUgYSBsaW1pdGVkIG51bWJlciBvZiBwbGFjZXMgdG8gbG9vaywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vZW5hL2VuYV94ZHAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBlbmFfeGRwX2V4ZWN1dGUoc3RydWN0IGVuYV9yaW5nICpyeF9yaW5nLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vZW5hL2VuYV94ZHAuaC05NS1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL2VuYS9lbmFfeGRwLmg6OTY6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vZW5hL2VuYV94ZHAuaC05Ny1cdFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYz0zODY9c3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYy0zOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmM6MzkzOlx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYy0zOTQtXHRpZiAodW5saWtlbHkoIXhkcGYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYz00MDU9c3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jLTQ0Mi1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jOjQ0MzpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYy00NDQtXHRcdGlmICh1bmxpa2VseSgheGRwZikpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTczMD1zdGF0aWMgYm9vbCB0c25lcF94ZHBfeG1pdF9iYWNrKHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy03MzQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjczNTpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtNzM2LVx0Ym9vbCB4bWl0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM9MjIxMj1zdGF0aWMgaW50IGRwYWFfYTA1MDM4NV93YV94ZHBmKHN0cnVjdCBkcGFhX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yMjc1LVx0LyogQ3JlYXRlIGFuIFhEUCBmcmFtZSBhcm91bmQgdGhlIG5ldyBidWZmZXIgaW4gYSBzaW1pbGFyIGZhc2hpb25cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM6MjI3NjpcdCAqIHRvIHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jLTIyNzctXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jPTI1OTE9c3RhdGljIHUzMiBkcGFhX3J1bl94ZHAoc3RydWN0IGRwYWFfcHJpdiAqcHJpdiwgc3RydWN0IHFtX2ZkICpmZCwgdm9pZCAqdmFkZHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNjQzLVx0XHR4ZHAuZnJhbWVfc3ogPSBEUEFBX0JQX1JBV19TSVpFO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYzoyNjQ0Olx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcdTAwMjZ4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNjQ1LVx0XHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jPTE0MT1zdGF0aWMgdm9pZCAqZnVuX3J1bl94ZHAoc3RydWN0IGZ1bmV0aF9yeHEgKnEsIHNrYl9mcmFnX3QgKmZyYWdzLCB2b2lkICpidWZfdmEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jLTE2Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguYzoxNjg6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFx1MDAyNnhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX3J4LmMtMTY5LVx0XHRpZiAoIXhkcGYgfHwgIWZ1bl94ZHBfdHgoeGRwX3EsIHhkcGYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTYwNT1zdGF0aWMgaW50IGd2ZV94ZHBfdHhfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo2MTM6XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjE0LVx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmM9MjI0Nz1pbnQgaTQwZV94bWl0X3hkcF90eF9yaW5nKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMtMjI0OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jOjIyNDk6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYy0yMjUwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jPTI5NTY9aW50IGlnYl94ZHBfeG1pdF9iYWNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHhkcF9idWZmICp4ZHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYy0yOTU3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jOjI5NTg6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9tYWluLmMtMjk1OS1cdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmM9MjQ5MT1zdGF0aWMgaW50IGlnY194ZHBfeG1pdF9iYWNrKHN0cnVjdCBpZ2NfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHhkcF9idWZmICp4ZHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYy0yNDkyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jOjI0OTM6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMtMjQ5NC1cdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jPTI0MDA9c3RhdGljIGludCBpeGdiZV9ydW5feGRwKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0yNDIxLVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM6MjQyMjpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0yNDIzLVx0XHRpZiAodW5saWtlbHkoIXhkcGYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jPTk3PXN0YXRpYyBpbnQgaXhnYmVfcnVuX3hkcF96YyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYy0xMjQtXHRjYXNlIFhEUF9UWDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jOjEyNTpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTEyNi1cdFx0aWYgKHVubGlrZWx5KCF4ZHBmKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jPTIxNzQ9bXZuZXRhX3hkcF94bWl0X2JhY2soc3RydWN0IG12bmV0YV9wb3J0ICpwcCwgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy0yMTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYzoyMTgzOlx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtMjE4NC1cdGlmICh1bmxpa2VseSgheGRwZikpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM9MzczMT1tdnBwMl94ZHBfeG1pdF9iYWNrKHN0cnVjdCBtdnBwMl9wb3J0ICpwb3J0LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy0zNzM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM6MzczODpcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy0zNzM5LVx0aWYgKHVubGlrZWx5KCF4ZHBmKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmM9MTQ4OD1zdGF0aWMgYm9vbCBvdHgyX3hkcF9yY3ZfcGt0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYy0xNTM1LVx0XHRjcS1cdTAwM2Vwb29sX3B0cnMmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jOjE1MzY6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFx1MDAyNnhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtMTUzNy1cdFx0cmV0dXJuIG90eDJfeGRwX3NxX2FwcGVuZF9wa3QocGZ2ZiwgeGRwZixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtMTU1OS1cdFx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jOjE1NjA6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFx1MDAyNnhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtMTU2MS1cdFx0eGRwX3JldHVybl9mcmFtZSh4ZHBmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTIxMzc9c3RhdGljIHUzMiBtdGtfeGRwX3J1bihzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgbXRrX3J4X3JpbmcgKnJpbmcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0yMTY1LVx0Y2FzZSBYRFBfVFg6IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MjE2NjpcdFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMjE2Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM9NjI9bWx4NWVfeG1pdF94ZHBfYnVmZihzdHJ1Y3QgbWx4NWVfeGRwc3EgKnNxLCBzdHJ1Y3QgbWx4NWVfcnEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy03MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYzo3MjpcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMtNzMtXHRpZiAodW5saWtlbHkoIXhkcGYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy0xMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM6MTI2Olx0LyogRHJpdmVyIGFzc3VtZXMgdGhhdCB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lIHJldHVybnMgYW4geGRwX2ZyYW1lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMtMTI3LVx0ICogdGhhdCBwb2ludHMgdG8gdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBhcyB0aGUgb3JpZ2luYWwgeGRwX2J1ZmYuIEl0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jPTQ3MD1zdGF0aWMgYm9vbCBpb25pY19ydW5feGRwKHN0cnVjdCBpb25pY19yeF9zdGF0cyAqc3RhdHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jLTU0Ny1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jOjU0ODpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoXHUwMDI2eGRwX2J1Zik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY190eHJ4LmMtNTQ5LVx0XHRpZiAoIXhkcGYpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvcnguYz0yNDk9c3RhdGljIGJvb2wgZWZ4X2RvX3hkcChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3J4LmMtMzA5LVx0XHQvKiBCdWZmZXIgb3duZXJzaGlwIHBhc3NlcyB0byB0eCBvbiBzdWNjZXNzLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3J4LmM6MzEwOlx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcdTAwMjZ4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3J4LmMtMzExLVx0XHRlcnIgPSBlZnhfeGRwX3R4X2J1ZmZlcnMoZWZ4LCAxLCBcdTAwMjZ4ZHBmLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvcnguYz0yNTE9c3RhdGljIGJvb2wgZWZ4X2RvX3hkcChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmMtMzExLVx0XHQvKiBCdWZmZXIgb3duZXJzaGlwIHBhc3NlcyB0byB0eCBvbiBzdWNjZXNzLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmM6MzEyOlx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcdTAwMjZ4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmMtMzEzLVx0XHRlcnIgPSBlZnhfc2llbmFfeGRwX3R4X2J1ZmZlcnMoZWZ4LCAxLCBcdTAwMjZ4ZHBmLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM9ODgyPXN0YXRpYyB1MzIgbmV0c2VjX3hkcF94bWl0X2JhY2soc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtODg0LVx0c3RydWN0IG5ldHNlY19kZXNjX3JpbmcgKnR4X3JpbmcgPSBcdTAwMjZwcml2LVx1MDAzZWRlc2NfcmluZ1tORVRTRUNfUklOR19UWF07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6ODg1Olx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy04ODYtXHR1MzIgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NTI1Nz1zdGF0aWMgaW50IHN0bW1hY194ZHBfeG1pdF9iYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTUyNjAtXHRib29sIHpjID0gISEoeGRwLVx1MDAzZXJ4cS1cdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NTI2MTpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTUyNjItXHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNTI4MS1cdH0gZWxzZSBpZiAocmVzID09IFNUTU1BQ19YRFBfQ09OU1VNRUQgXHUwMDI2XHUwMDI2IHpjKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjUyODI6XHRcdC8qIHhkcCBoYXMgYmVlbiBmcmVlZCBieSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKCksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTUyODMtXHRcdCAqIG5vIG5lZWQgdG8gY2FsbCB4c2tfYnVmZl9mcmVlKCkgYWdhaW4sIHNvIHJldHVyblxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmM9MTE2OD1zdGF0aWMgaW50IGFtNjVfY3Bzd19ydW5feGRwKHN0cnVjdCBhbTY1X2Nwc3dfcnhfZmxvdyAqZmxvdyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTExOTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jOjEyMDA6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTEyMDEtXHRcdGlmICh1bmxpa2VseSgheGRwZikpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYz0xMzM2PWludCBjcHN3X3J1bl94ZHAoc3RydWN0IGNwc3dfcHJpdiAqcHJpdiwgaW50IGNoLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYy0xMzU4LVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYzoxMzU5Olx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19wcml2LmMtMTM2MC1cdFx0aWYgKHVubGlrZWx5KCF4ZHBmKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYz03Nzk9c3RhdGljIHUzMiBlbWFjX3J1bl94ZHAoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyICpsZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmMtNzk2LVx0XHQvKiBTZW5kIHBhY2tldCB0byBUWCByaW5nIGZvciBpbW1lZGlhdGUgdHJhbnNtaXNzaW9uICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYzo3OTc6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYy03OTgtXHRcdGlmICh1bmxpa2VseSgheGRwZikpIHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMjUzPXN0YXRpYyBpbnQgdHVuX3hkcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNTQte1xuZHJpdmVycy9uZXQvdHVuLmM6MTI1NTpcdHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvdHVuLmMtMTI1Ni1cdGludCBueG1pdDtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9NjIyPXN0YXRpYyBpbnQgdmV0aF94ZHBfdHgoc3RydWN0IHZldGhfcnEgKnJxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjI0LXtcbmRyaXZlcnMvbmV0L3ZldGguYzo2MjU6XHRzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L3ZldGguYy02MjYtXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTE2ODU9c3RhdGljIGludCB2aXJ0bmV0X3hkcF9oYW5kbGVyKHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0xNzAyLVx0XHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzLVx1MDAzZXhkcF90eCk7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6MTcwMzpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0xNzA0LVx0XHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XG4tLVxuZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX3hkcC5jPTI2MT12bXhuZXQzX3J1bl94ZHAoc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfeGRwLmMtMjg1LVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfeGRwLmM6Mjg2Olx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX3hkcC5jLTI4Ny1cdFx0aWYgKHVubGlrZWx5KCF4ZHBmIHx8XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmM9OTY3PXN0YXRpYyB1MzIgeGVubmV0X3J1bl94ZHAoc3RydWN0IG5ldGZyb250X3F1ZXVlICpxdWV1ZSwgc3RydWN0IHBhZ2UgKnBkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jLTk4My1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmM6OTg0Olx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMtOTg1LVx0XHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XG4tLVxuaW5jbHVkZS9uZXQveGRwLmg9NDI5PXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbmV0L3hkcC5oOjQzMDpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuaW5jbHVkZS9uZXQveGRwLmgtNDMxLXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NTE5PWludCB4ZHBfZG9fcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDUyNy1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1Mjg6XHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfZnJhbWUocmksIGRldiwgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApLFxubmV0L2NvcmUvZmlsdGVyLmMtNDUyOS1cdFx0XHRcdCAgICAgICB4ZHBfcHJvZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRFAgWmVyby1Db3B5IEZyYW1lIENvbnZlcnNpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc3BlY2lmaWMgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCBmaXggaW4gdGhlIFhEUCB6ZXJvLWNvcHkgcGF0aC4gSXQmIzM5O3MgdHJpZ2dlcmVkIHdoZW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZ2V0cyBjYWxsZWQsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBtZW1vcnkgdHlwZSBpcyBYU0sgYnVmZiBwb29sIGFuZCB3ZSYjMzk7cmUgdXNpbmcgemVyby1jb3B5IEFGX1hEUCwgbGlrZWx5IHZpYSBYRFBfVFggb3IgWERQX1JFRElSRUNUIGFjdGlvbnMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGZpeGluZyB0aGUgYHhkcGYtJmd0O2hlYWRyb29tYCBhc3NpZ25tZW50IOKAkyBpdCB3YXMgd3JvbmdseSBzZXQgdG8gemVybyBhbmQgbmVlZHMgdG8gYmUgc2V0IHRvIGBtZXRhc2l6ZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgc2l6ZSBjaGVjayB0byB1dGlsaXplIGBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYC4KCkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgaXMgYSBjaGFuZ2UgcmlnaHQgaW4gdGhlIFhEUCBjb3JlLiBTbyB0aGlzIGZpeCBjb3VsZCBiZSBpbXBvcnRhbnQsIGV2ZW4gbW9yZSBzbyBiZWNhdXNlIFhEUCBpcyB3aWRlbHkgdXNlZCBpbiB2aXJ0dWFsaXplZCBzZXR1cHMg4oCTIHZldGgsIHR1biwgdmlydGlvX25ldCBhcmUgYWxsIHJlbGV2YW50IHRhcmdldHMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gdGhlIGNvbnZlcnNpb24gZnJvbSB6ZXJvLWNvcHkgYnVmZmVycyB0byBYRFAgZnJhbWVzIGlzIGEgcHJldHR5IGxvdy1sZXZlbCBwb2ludCwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0aGF0IGl0JiMzOTtzIGNvcnJlY3QuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgaW4gYG5ldC9jb3JlL3hkcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9NTc0PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9hdHRhY2htZW50X3NldHVwKTtcbm5ldC9jb3JlL3hkcC5jLTU3NS1cbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQvY29yZS94ZHAuYy01Nzcte1xuLS1cbm5ldC9jb3JlL3hkcC5jLTYxMi19XG5uZXQvY29yZS94ZHAuYzo2MTM6RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKTtcbm5ldC9jb3JlL3hkcC5jLTYxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4KCioqSW52ZXN0aWdhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgb3Igbm90IGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmb3IgZnV6emluZy4gR29vZCwgaXQgaXMgZXhwb3J0ZWQuIE5vdywgc2luY2UgdGhlcmUmIzM5O3MgYSBwYXRjaCB0aGF0IHRhcmdldHMgdGhpcyBmdW5jdGlvbiwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UsIHNvIEkmIzM5O2xsIHNjYW4gYG5ldC9jb3JlL3hkcC5jYCB0byBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBvciBjYWxsIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLiBVbmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS94ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTc2Olx0c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIDU3NzpcdHtcbiA1Nzg6XHRcdHVuc2lnbmVkIGludCBtZXRhc2l6ZSwgdG90c2l6ZTtcbiA1Nzk6XHRcdHZvaWQgKmFkZHIsICpkYXRhX3RvX2NvcHk7XG4gNTgwOlx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmO1xuIDU4MTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gNTgyOlx0XG4gNTgzOlx0XHQvKiBDbG9uZSBpbnRvIGEgTUVNX1RZUEVfUEFHRV9PUkRFUjAgeGRwX2ZyYW1lLiAqL1xuIDU4NDpcdFx0bWV0YXNpemUgPSB4ZHBfZGF0YV9tZXRhX3Vuc3VwcG9ydGVkKHhkcCkgPyAwIDpcbiA1ODU6XHRcdFx0ICAgeGRwLVx1MDAzZWRhdGEgLSB4ZHAtXHUwMDNlZGF0YV9tZXRhO1xuIDU4NjpcdFx0dG90c2l6ZSA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhICYjNDM7IG1ldGFzaXplO1xuIDU4NzpcdFxuIDU4ODpcdFx0aWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcbiA1ODk6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTkwOlx0XG4gNTkxOlx0XHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcbiA1OTI6XHRcdGlmICghcGFnZSlcbiA1OTM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTk0Olx0XG4gNTk1Olx0XHRhZGRyID0gcGFnZV90b192aXJ0KHBhZ2UpO1xuIDU5NjpcdFx0eGRwZiA9IGFkZHI7XG4gNTk3Olx0XHRtZW1zZXQoeGRwZiwgMCwgc2l6ZW9mKCp4ZHBmKSk7XG4gNTk4Olx0XG4gNTk5Olx0XHRhZGRyICYjNDM7PSBzaXplb2YoKnhkcGYpO1xuIDYwMDpcdFx0ZGF0YV90b19jb3B5ID0gbWV0YXNpemUgPyB4ZHAtXHUwMDNlZGF0YV9tZXRhIDogeGRwLVx1MDAzZWRhdGE7XG4gNjAxOlx0XHRtZW1jcHkoYWRkciwgZGF0YV90b19jb3B5LCB0b3RzaXplKTtcbiA2MDI6XHRcbiA2MDM6XHRcdHhkcGYtXHUwMDNlZGF0YSA9IGFkZHIgJiM0MzsgbWV0YXNpemU7XG4gNjA0Olx0XHR4ZHBmLVx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZTtcbiA2MDU6XHRcdHhkcGYtXHUwMDNlaGVhZHJvb20gPSBtZXRhc2l6ZTtcbiA2MDY6XHRcdHhkcGYtXHUwMDNlbWV0YXNpemUgPSBtZXRhc2l6ZTtcbiA2MDc6XHRcdHhkcGYtXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XG4gNjA4Olx0XHR4ZHBmLVx1MDAzZW1lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9PUkRFUjA7XG4gNjA5Olx0XG4gNjEwOlx0XHR4c2tfYnVmZl9mcmVlKHhkcCk7XG4gNjExOlx0XHRyZXR1cm4geGRwZjtcbiA2MTI6XHR9XG4gNjEzOlx0RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKTtcbiA2MTQ6XHRcbiA2MTU6XHQvKiBVc2VkIGJ5IFhEUF9XQVJOIG1hY3JvLCB0byBhdm9pZCBpbmxpbmluZyBXQVJOKCkgaW4gZmFzdC1wYXRoICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBYRFAgc3RhY2suIEFuZCwgeWVhaCwgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgcmVhbGx5IHN0YW5kcyBvdXQgYXMgYSBwcmltZSB0YXJnZXQuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBYRFAgZnJhbWV3b3JrLCBzbyBidWdzIGhlcmUgY291bGQgaGF2ZSBwcmV0dHkgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLgoKTXkgZm9jdXMgcmlnaHQgbm93IGlzIGRlZmluaXRlbHkgb24gdGhhdCBzcGVjaWZpYyBzeW1ib2wuIEkgd2FudCB0byBidWlsZCBhIGZ1enppbmcgc2V0dXAgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBpdC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyByZWxhdGVkIHRvIHplcm8tY29weSB3aXRoIEFGX1hEUCwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYEJQRl9TWVNDQUxMYCBhbmQsIGNydWNpYWxseSwgYFhEUF9TT0NLRVRTYCB0byBhbGxvdyBmdXp6aW5nIG9mIHRoZSB6ZXJvLWNvcHkgcGF0aC4gSSBzaG91bGQgcHJvYmFibHkganVzdCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB0byBjb25maXJtIHRoYXQgYFhEUF9TT0NLRVRTYCBpcyBpbmRlZWQgZW5hYmxlZCB3aGVuIEkgZXhwZWN0IGl0IHRvIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWERQX1NPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYFhEUF9TT0NLRVRTYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGxhbmRzY2FwZSBzdXJyb3VuZGluZyBgWERQX1NPQ0tFVFNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGhhcyBhbnkgY3J1Y2lhbCBkZXBlbmRlbmNpZXMg4oCTIGVpdGhlciBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgb3IgbWF5YmUgZXZlbiB1c2Vyc3BhY2UgbGlicmFyaWVzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB3aGF0IGl0IGVuYWJsZXMgYW5kIGFueSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb3IgY2F2ZWF0cyBhc3NvY2lhdGVkIHdpdGggaXRzIHVzZS4gV2hhdCBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBoaWRkZW4gZ290Y2hhcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIGRlcGxveWluZyBzb21ldGhpbmcgdGhhdCB1c2VzIGl0IGluIHByb2R1Y3Rpb24/IExldCYjMzk7cyB0cmFjZSBpdCBiYWNrIGFuZCBleHBvc2UgdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBYRFBfU09DS0VUU1xuICAgMzpcdFx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXG4gICA4Olx0XHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xuICAxMzpcdFx0ZGVmYXVsdCBuXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDE2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTc3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYRFBfU09DS0VUUyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYFhEUF9TT0NLRVRTYCBoZXJlLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCBoaW5nZXMgb24gYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyByZWxhdGlvbnNoaXAsIGFuZCBJIHdvbmRlciB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGxpbmtlZCB0byB0aGlzIGZlYXR1cmUuIExldCBtZSBzdGFydCBieSBsb29raW5nIGFyb3VuZC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXNpZGUgaW4gYG5ldC9jb3JlL3hkcC5jYC4gTm93LCBhIGtleSBxdWVzdGlvbiBwb3BzIHVwOiBpcyB0aGUgY29kZSB3aXRoaW4gYG5ldC9jb3JlL3hkcC5jYCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgdW5jb25kaXRpb25hbGx5LCBvciBpcyB0aGVyZSBhIGNvbmRpdGlvbmFsIGNvbXBpbGUgb3B0aW9uIGF0IHBsYXkgaGVyZT8gSSBuZWVkIHRvIGtub3cgdGhlIGJ1aWxkIGJlaGF2aW9yIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG4tLVxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTU6XHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE2LVx0XHRcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gZ3NvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTkKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgWERQIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYHhkcC5vYCBpcyBiZWluZyBjb21waWxlZCByZWdhcmRsZXNzIOKAkyBnb29kIHRvIGtub3csIHRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSByZWFsIG1lYXQgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAuIE5vdywgSSByZWNhbGwgdGhhdCBmdW5jdGlvbiBiZWluZyB1c2VkIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgeGRwLSZndDtyeHEtJmd0O21lbS50eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0xgLCB3aGljaCByaW5ncyBhbGFybSBiZWxscyBmb3IgQUZfWERQIHplcm8tY29weSBzY2VuYXJpb3MuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggemVyby1jb3B5LCBlbmFibGluZyBgWERQX1NPQ0tFVFNgIGZvciB0aGlzIGNvbmZpZyBtYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgb2YgY291cnNlLCBnaXZlbiB0aGF0IGl0IG1lbnRpb25zIFhEUCBwcm9ncmFtcywgd2Ugd2lsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFzIGEgY29uZmlndXJhdGlvbi4KCkxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIOKAkyBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTm9wZSwgaXQgbG9va3MgbGlrZSBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBpcyB0aGUgKm9ubHkqIHN5bWJvbCB0aGF0IHdlIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlIHBhdGNoIHNlZW1zIGhpZ2hseSBmb2N1c2VkLgoKVWx0aW1hdGVseSwgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY29yZSBYRFAgbG9naWMgdGhhdCBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIG9mIHplcm8tY29weSBYRFAgYnVmZmVycyBpbnRvIHN0YW5kYXJkIFhEUCBmcmFtZXMgd2l0aGluIHRoZSBrZXJuZWwuIFdlIGtub3cgdGhpcyBpcyByZWxldmFudCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBBRl9YRFAsIGluY2x1ZGluZyBYRFBfVFggYW5kIFhEUF9SRURJUkVDVCBhY3Rpb25zLCBtYWtpbmcgaXQgYSBjcml0aWNhbCBwb2ludCB0byBwcm9iZS4gR2l2ZW4gaXRzIGNlbnRyYWwgcm9sZSBpbiB6ZXJvLWNvcHkgWERQIHByb2Nlc3NpbmcgYW5kIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcgYW5kIHRoYXQgdGhlIHN5bWJvbCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBpcyBteSBwcmltYXJ5IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgWERQIGxvZ2ljIGZvciBjb252ZXJ0aW5nIHplcm8tY29weSBYRFAgYnVmZmVycyB0byBYRFAgZnJhbWVzIChgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCkuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIGFuZCBYRFBfVFgvWERQX1JFRElSRUNUIGFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFhEUCBsb2dpYyBmb3IgY29udmVydGluZyB6ZXJvLWNvcHkgWERQIGJ1ZmZlcnMgdG8gWERQIGZyYW1lcyAoYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWApLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX1hEUCBhbmQgWERQX1RYL1hEUF9SRURJUkVDVCBhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGluIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgOlxuMS4gQW4gaW5jb3JyZWN0IHNpemUgY2hlY2sgKGBcdTAwM2UgUEFHRV9TSVpFYCBpbnN0ZWFkIG9mIGBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWApIHRoYXQgYWxsb3dlZCBwYWNrZXQgZGF0YSB0byBvdmVybGFwIHdpdGggdGhlIGBza2Jfc2hhcmVkX2luZm9gIHN0cnVjdCBwbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGFnZS4gVGhpcyBjYXVzZXMgcGFja2V0IGRhdGEgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgYHNrYl9zaGFyZWRfaW5mb2AgaW5pdGlhbGl6YXRpb24sIG9yIGBza2Jfc2hhcmVkX2luZm9gIHRvIGJlIGNvcnJ1cHRlZCBieSBwYWNrZXQgbW9kaWZpY2F0aW9ucy5cbjIuIEFuIGluY29ycmVjdCBgaGVhZHJvb21gIGNhbGN1bGF0aW9uIChgeGRwZi1cdTAwM2VoZWFkcm9vbSA9IDBgIGluc3RlYWQgb2YgYG1ldGFzaXplYCkgdGhhdCBjYXVzZWQgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIG1pc2NhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVGhpcyBzaGlmdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgYnVmZmVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgdG8gd3JpdGUgYHNrYl9zaGFyZWRfaW5mb2Agb3V0LW9mLWJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXG5cbkJvdGggaXNzdWVzIGFyZSBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIG92ZXJsYXBwaW5nIGRhdGEpLiBUaGV5IGRvIG5vdCBpbnZvbHZlIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhY2tldCBkYXRhIGNvcGllZCBpbnRvIHRoZSBwYWdlIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgYW55IGhlYWRyb29tIG9yIHRhaWxyb29tIHVzZWQgYnkgdGhlIG5ldHdvcmsgc3RhY2sgaXMgZWl0aGVyIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgc3RhY2sgKGUuZy4sIGBicGZfc2tiX2dyb3dfcmNzdW1gIHplcm9lcyBuZXcgdGFpbHJvb20pLlxuXG5TdGFuZGFyZCBLQVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcyB3cml0ZSBvZiBgc2tiX3NoYXJlZF9pbmZvYCBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhZ2UsIGFzIHdlbGwgYXMgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgYHNrYl9zaGFyZWRfaW5mb2AgKGUuZy4sIGNvcnJ1cHRlZCBgbnJfZnJhZ3NgIGxlYWRpbmcgdG8gT09CIHJlYWRzKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZCwgYXMgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGVzZSBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NWEzZGIxYWFlYjE3MDQ2YTc5OWI2MDVhZjcyM2NlOGNmOThhMDU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTg6MTk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS94ZHAuYyBiL25ldC9jb3JlL3hkcC5jCmluZGV4IDk4OTBhMzA1ODRiYTcuLjRiYjk3NzkwYjE4OTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3hkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3hkcC5jCkBAIC01ODUsNyAmIzQzOzU4NSw3IEBAIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkKIAkJICAgeGRwLSZndDtkYXRhIC0geGRwLSZndDtkYXRhX21ldGE7CiAJdG90c2l6ZSA9IHhkcC0mZ3Q7ZGF0YV9lbmQgLSB4ZHAtJmd0O2RhdGEgJiM0MzsgbWV0YXNpemU7CiAKLQlpZiAoc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplICZndDsgUEFHRV9TSVpFKQomIzQzOwlpZiAoc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplICZndDsgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTsKQEAgLTYwMiw3ICYjNDM7NjAyLDcgQEAgc3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCiAJeGRwZi0mZ3Q7ZGF0YSA9IGFkZHIgJiM0MzsgbWV0YXNpemU7CiAJeGRwZi0mZ3Q7bGVuID0gdG90c2l6ZSAtIG1ldGFzaXplOwotCXhkcGYtJmd0O2hlYWRyb29tID0gMDsKJiM0MzsJeGRwZi0mZ3Q7aGVhZHJvb20gPSBtZXRhc2l6ZTsKIAl4ZHBmLSZndDttZXRhc2l6ZSA9IG1ldGFzaXplOwogCXhkcGYtJmd0O2ZyYW1lX3N6ID0gUEFHRV9TSVpFOwogCXhkcGYtJmd0O21lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9PUkRFUjA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGVyZm9ybWFuY2UgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIHdpdGhpbiBgbmV0L2NvcmUveGRwLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhleSYjMzk7dmUgdXBkYXRlZCBhIHNpemUgY2hlY2ssIHNwZWNpZmljYWxseSBhbHRlcmluZyBgaWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSAmZ3Q7IFBBR0VfU0laRSlgIHRvIGBpZiAoc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplICZndDsgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlgLiAgVGhhdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBhY2NvdW50aW5nIGZvciBzb21lIGFkZGl0aW9uYWwgb3ZlcmhlYWQgaW4gdGhlIGNhbGN1bGF0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIFNLQiwgYnV0IGxldCYjMzk7cyBzZWUgd2h5LiAgVGhleSBhbHNvIG1hZGUgYSBjaGFuZ2UgdG8gYHhkcGYtJmd0O2hlYWRyb29tYCwgc2V0dGluZyBpdCB0byBgbWV0YXNpemVgIGluc3RlYWQgb2YgMC4KCk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBkaWcgaW50byB0aGUgY29udGV4dC4gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeSBvZiB3aGF0IGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgICphY3R1YWxseSogZG9lcy4gUmlnaHQsIGl0JiMzOTtzIGFib3V0IGhhbmRsaW5nIHplcm8tY29weSBidWZmZXJzIGFuZCB0cmFuc2xhdGluZyB0aGVtIGludG8gWERQIGZyYW1lcywgYWxsb2NhdGluZyBhIHBhZ2UsIGNvcHlpbmcgZGF0YSwgYW5kIGNvbnN0cnVjdGluZyB0aGUgZnJhbWUuCgpOb3csIHRoYXQgYGhlYWRyb29tYCBjaGFuZ2UgcmVhbGx5IHByaWNrZWQgbXkgZWFycy4gVGhleSYjMzk7cmUgY2hhbmdpbmcgaXQgZnJvbSAwIHRvIGBtZXRhc2l6ZWAuICBUaGF04oCZcyB3aGVyZSBJIGdldCBjb25jZXJuZWQuICBDb3VsZCB0aGlzIGludHJvZHVjZSBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IElmIGBoZWFkcm9vbWAgaXMgdXNlZCB0byBpbmRleCBiYWNrd2FyZHMgZnJvbSB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgKmJlZm9yZSogdGhlIGFjdHVhbCBkYXRhIHNlY3Rpb24gYHhkcGYtJmd0O2RhdGFgLCB0aGVuIHNldHRpbmcgaXQgdG8gYSBub24temVybyB2YWx1ZSBsaWtlIGBtZXRhc2l6ZWAgY291bGQgZWFzaWx5IGxlYWQgdG8gcmVhZGluZyBkYXRhIHRoYXQgaGFzbiYjMzk7dCBiZWVuIGluaXRpYWxpemVkIHlldC4gV2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYGhlYWRyb29tYCB1c2FnZSwgYW5kIHNlZSBob3cgdGhpcyB2YWx1ZSBpcyBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9NTc0PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9hdHRhY2htZW50X3NldHVwKTtcbm5ldC9jb3JlL3hkcC5jLTU3NS1cbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQvY29yZS94ZHAuYy01Nzcte1xuLS1cbm5ldC9jb3JlL3hkcC5jLTYxMi19XG5uZXQvY29yZS94ZHAuYzo2MTM6RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKTtcbm5ldC9jb3JlL3hkcC5jLTYxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYW5kIHByb2Nlc3MgdGhpcy4gSSYjMzk7dmUgc2VlbiBhIGZldyBvZiB0aGVzZSwgc28gSSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byB6ZXJvLWNvcHkgKFpDKSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB0cmFuc2Zvcm1lZCB0byBmaXQgd2l0aGluIGFuIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpIGNvbnRleHQuIE15IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIHR5cGUgb2Ygb3BlcmF0aW9uIGlzIHVzdWFsbHkgcmVsYXRlZCB0byBlZmZpY2llbmN5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgaXMgaGFuZGxlZCwgd2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkIChsaWtlIHBvdGVudGlhbGx5IGB6Y19mcmFtZWAgYW5kIGB4ZHBfZnJhbWVgKSwgYW5kIHRoZSBjcml0aWNhbCBvcGVyYXRpb25zIGJlaW5nIHBlcmZvcm1lZC4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcGllcyBvciByZS1hbGxvY2F0aW9ucyB3aGljaCB3b3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gSXMgdGhlcmUgYW4gZWZmaWNpZW50IG1lY2hhbmlzbSBmb3IgcGFzc2luZyBkYXRhIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZSBvciBpcyBpdCB0YWtpbmcgcGxhY2UgaW4ga2VybmVsIHNwYWNlIHdpdGggdGhlIHRyYW5zZm9ybWF0aW9uPyBBcmUgdGhleSBlbnN1cmluZyBkYXRhIGludGVncml0eSB3aGlsZSBiZWluZyB6ZXJvLWNvcHksIGFzIHRoaXMgaXMgYW4gYXJlYSB0aGF0IG11c3QgYmUgYWRkcmVzc2VkIGZvciBhbnkgbGV2ZWwgb2YgcHJvZHVjdGlvbiB1c2FnZS4gRmluYWxseSwgbGV0JiMzOTtzIHNlZSBob3cgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3NjpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiA1Nzc6XHR7XG4gNTc4Olx0XHR1bnNpZ25lZCBpbnQgbWV0YXNpemUsIHRvdHNpemU7XG4gNTc5Olx0XHR2b2lkICphZGRyLCAqZGF0YV90b19jb3B5O1xuIDU4MDpcdFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZjtcbiA1ODE6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIDU4MjpcdFxuIDU4MzpcdFx0LyogQ2xvbmUgaW50byBhIE1FTV9UWVBFX1BBR0VfT1JERVIwIHhkcF9mcmFtZS4gKi9cbiA1ODQ6XHRcdG1ldGFzaXplID0geGRwX2RhdGFfbWV0YV91bnN1cHBvcnRlZCh4ZHApID8gMCA6XG4gNTg1Olx0XHRcdCAgIHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbiA1ODY6XHRcdHRvdHNpemUgPSB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSAmIzQzOyBtZXRhc2l6ZTtcbiA1ODc6XHRcbiA1ODg6XHRcdGlmIChzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpXG4gNTg5Olx0XHRcdHJldHVybiBOVUxMO1xuIDU5MDpcdFxuIDU5MTpcdFx0cGFnZSA9IGRldl9hbGxvY19wYWdlKCk7XG4gNTkyOlx0XHRpZiAoIXBhZ2UpXG4gNTkzOlx0XHRcdHJldHVybiBOVUxMO1xuIDU5NDpcdFxuIDU5NTpcdFx0YWRkciA9IHBhZ2VfdG9fdmlydChwYWdlKTtcbiA1OTY6XHRcdHhkcGYgPSBhZGRyO1xuIDU5NzpcdFx0bWVtc2V0KHhkcGYsIDAsIHNpemVvZigqeGRwZikpO1xuIDU5ODpcdFxuIDU5OTpcdFx0YWRkciAmIzQzOz0gc2l6ZW9mKCp4ZHBmKTtcbiA2MDA6XHRcdGRhdGFfdG9fY29weSA9IG1ldGFzaXplID8geGRwLVx1MDAzZWRhdGFfbWV0YSA6IHhkcC1cdTAwM2VkYXRhO1xuIDYwMTpcdFx0bWVtY3B5KGFkZHIsIGRhdGFfdG9fY29weSwgdG90c2l6ZSk7XG4gNjAyOlx0XG4gNjAzOlx0XHR4ZHBmLVx1MDAzZWRhdGEgPSBhZGRyICYjNDM7IG1ldGFzaXplO1xuIDYwNDpcdFx0eGRwZi1cdTAwM2VsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7XG4gNjA1Olx0XHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XG4gNjA2Olx0XHR4ZHBmLVx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XG4gNjA3Olx0XHR4ZHBmLVx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xuIDYwODpcdFx0eGRwZi1cdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xuIDYwOTpcdFxuIDYxMDpcdFx0eHNrX2J1ZmZfZnJlZSh4ZHApO1xuIDYxMTpcdFx0cmV0dXJuIHhkcGY7XG4gNjEyOlx0fVxuIDYxMzpcdEVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XG4gNjE0Olx0XG4gNjE1Olx0LyogVXNlZCBieSBYRFBfV0FSTiBtYWNybywgdG8gYXZvaWQgaW5saW5pbmcgV0FSTigpIGluIGZhc3QtcGF0aCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTQzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFN0cnVjdHVyZSBQb3B1bGF0aW9uKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkmIzM5O20gYWxsb2NhdGluZyBhIG5ldyBwYWdlLCB3aGljaCBJJiMzOTttIGNhbGxpbmcgYHhkcGZgIGJlY2F1c2UgaXQmIzM5O3MgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZS4gVGhhdCYjMzk7cyBnb29kLCBzdGFuZGFyZCBwcmFjdGljZS4gSSB6ZXJvIG91dCB0aGUgZW50aXJlIHBhZ2Ug4oCTIGEgY2xlYW4gc2xhdGUuIFRoZW4sIEkmIzM5O20gY29weWluZyBkYXRhIGludG8gdGhpcyBhbGxvY2F0ZWQgbWVtb3J5LiBUaGUgY29weSBpcyBhIGJpdCBjb252b2x1dGVkLiBJJiMzOTttIHRha2luZyBgdG90c2l6ZWAgYnl0ZXMgZnJvbSBzb21ld2hlcmUgYW5kIG1vdmluZyB0aGVtIHRvIGFuIGFkZHJlc3MuIGB0b3RzaXplYCBpcyBgeGRwLSZndDtkYXRhX2VuZCAtIHhkcC0mZ3Q7ZGF0YSAmIzQzOyBtZXRhc2l6ZWAsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgYWJvdXQgbW92aW5nIGJvdGggbWV0YWRhdGEgYW5kIHBhY2tldCBkYXRhLiBUaGUgc291cmNlIG9mIHRoZSBjb3B5IGlzIGVpdGhlciBgeGRwLSZndDtkYXRhX21ldGFgIChpZiBgbWV0YXNpemVgIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvKSBvciBgeGRwLSZndDtkYXRhYCwgYXMgeW91IHdvdWxkIGV4cGVjdC4gU28sIEkgYW0gY29weWluZyB0aGUgbWV0YWRhdGEsIGFuZCB0aGVuIHRoZSBwYWNrZXQgZGF0YS4KClRoZSBhZGRyZXNzIHdoZXJlIEkgYW0gKmNvcHlpbmcqIGlzIGBhZGRyICYjNDM7IHNpemVvZigqeGRwZilgLCBzbyBpdCBzdGFydHMgKmFmdGVyKiB0aGUgYHhkcGZgIHN0cnVjdHVyZSBpdHNlbGYuIGB4ZHBmLSZndDtkYXRhYCBpcyB0aGVuIHNldCB0byB0aGUgbG9jYXRpb24gaW4gdGhlIHBhZ2UgYWZ0ZXIgdGhlIG1ldGFkYXRhLCBpLmUuLCBgYWRkciAmIzQzOyBtZXRhc2l6ZWAuIFRoZSBsZW5ndGggb2YgdGhlIHBhY2tldCAoYHhkcGYtJmd0O2xlbmApIGlzIHRoZW4gc2V0IHRvIHRoZSB0b3RhbCBzaXplIG1pbnVzIHRoZSBtZXRhZGF0YSBzaXplLiBTZWVtcyBsb2dpY2FsLCBzbyBmYXIuCgpOb3cgY29tZXMgdGhlIGludGVyZXN0aW5nIHBhcnQ6IGB4ZHBmLSZndDtoZWFkcm9vbWAuIFRoaXMgaXMgd2hlcmUgSSBoYXZlIHRvIHRoaW5rIG1vcmUgY2FyZWZ1bGx5LiBJdCYjMzk7cyBiZWluZyBzZXQgdG8gYG1ldGFzaXplYC4gVGhhdCYjMzk7c+KApiB1bmV4cGVjdGVkLiBgaGVhZHJvb21gIHVzdWFsbHkgcmVmZXJzIHRvIHRoZSBzcGFjZSBhdmFpbGFibGUgKmJlZm9yZSogdGhlIHBhY2tldCBkYXRhIHRvIHByZXBlbmQgaGVhZGVycy4gVXN1YWxseSwgeW91IHdvdWxkIHdhbnQgdGhpcyBzcGFjZSB0byBpbmNyZWFzZS4gSG93ZXZlciwgdGhpcyBkZWZpbml0aW9uIG9mIGBoZWFkcm9vbWAgbWVhbnMgdGhhdCBgeGRwZi0mZ3Q7ZGF0YSAtIGhlYWRyb29tYCBwb2ludHMgdG8gYGFkZHJgLCB3aGljaCBpbmRlZWQgY29udGFpbnMgdGhlIGNvcGllZCBtZXRhZGF0YS4gVGhlIGxvZ2ljIGNoZWNrcyBvdXQgLSB5b3Ugd291bGQgYWNjZXNzIHRoZSBtZXRhZGF0YSBieSBzdGFydGluZyBgaGVhZHJvb21gIGJ5dGVzIGJhY2suCgpCdXQgbm93IEkgc2VlIHRoZSBwcm9ibGVtLiBJZiBgaGVhZHJvb21gIGlzIGVxdWFsIHRvIGBtZXRhc2l6ZWAgYW5kIEkgdHJ5IHRvIHByZXBlbmQgYSBoZWFkZXIsIEkgd2lsbCAqb3ZlcndyaXRlKiB0aGUgbWV0YWRhdGEuIFRoYXTigJlzIGRlZmluaXRlbHkgbm90IGlkZWFsLiBUaGlzIG1lYW5zIHRoYXQgaWYgYGhlYWRyb29tYCBpcyBzZXQgdG8gYSBub24temVybyB2YWx1ZSwgeW91IGNhbuKAmXQgcHJlcGVuZCBhbnl0aGluZyB3aXRob3V0IGNvcnJ1cHRpbmcgdGhlIGV4aXN0aW5nIG1ldGFkYXRhLgoKU28sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgdGhpcyBtZWFuIGBoZWFkcm9vbWAgc2hvdWxkIGJlIHplcm8sIGVmZmVjdGl2ZWx5IGRpc2FsbG93aW5nIGhlYWRlciBwcmVwZW5kcz8gT3IsIGFtIEkgbWlzdW5kZXJzdGFuZGluZyB3aGF0IGBoZWFkcm9vbWAgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQ/CgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBXYWl0LCBsZXQmIzM5O3MgZ2V0IHRoaXMgcmlnaHQ6IGB4ZHBmLSZndDtoZWFkcm9vbWAgaXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgYHhkcGZgIHN0cnVjdCBhbmQgdGhlIGJlZ2lubmluZyBvZiBgeGRwZi0mZ3Q7ZGF0YWAuIFJpZ2h0PyBPa2F5LCB0aGF0JiMzOTtzIHdoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSAqdXNlcyogYHhkcGYtJmd0O2hlYWRyb29tYCB0byBiZSBzdXJlLiBJdCB3aWxsIG1ha2UgbW9yZSBzZW5zZSB0byBjaGVjayB0aGF0IGJlZm9yZSBJIG1ha2UgYW55IGp1ZGdlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hlYWRyb29tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9NTc2PXN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5uZXQvY29yZS94ZHAuYy02MDQtXHR4ZHBmLVx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZTtcbm5ldC9jb3JlL3hkcC5jOjYwNTpcdHhkcGYtXHUwMDNlaGVhZHJvb20gPSBtZXRhc2l6ZTtcbm5ldC9jb3JlL3hkcC5jLTYwNi1cdHhkcGYtXHUwMDNlbWV0YXNpemUgPSBtZXRhc2l6ZTtcbi0tXG5uZXQvY29yZS94ZHAuYz03OTQ9c3RydWN0IHNrX2J1ZmYgKl9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXG4tLVxubmV0L2NvcmUveGRwLmMtNzk4LVx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fZnJhbWUoeGRwZik7XG5uZXQvY29yZS94ZHAuYzo3OTk6XHR1bnNpZ25lZCBpbnQgaGVhZHJvb20sIGZyYW1lX3NpemU7XG5uZXQvY29yZS94ZHAuYy04MDAtXHR2b2lkICpoYXJkX3N0YXJ0O1xuLS1cbm5ldC9jb3JlL3hkcC5jLTgwNi1cbm5ldC9jb3JlL3hkcC5jOjgwNzpcdC8qIFBhcnQgb2YgaGVhZHJvb20gd2FzIHJlc2VydmVkIHRvIHhkcGYgKi9cbm5ldC9jb3JlL3hkcC5jOjgwODpcdGhlYWRyb29tID0gc2l6ZW9mKCp4ZHBmKSAmIzQzOyB4ZHBmLVx1MDAzZWhlYWRyb29tO1xubmV0L2NvcmUveGRwLmMtODA5LVxuLS1cbm5ldC9jb3JlL3hkcC5jLTgxNC1cbm5ldC9jb3JlL3hkcC5jOjgxNTpcdGhhcmRfc3RhcnQgPSB4ZHBmLVx1MDAzZWRhdGEgLSBoZWFkcm9vbTtcbm5ldC9jb3JlL3hkcC5jLTgxNi1cdHNrYiA9IGJ1aWxkX3NrYl9hcm91bmQoc2tiLCBoYXJkX3N0YXJ0LCBmcmFtZV9zaXplKTtcbi0tXG5uZXQvY29yZS94ZHAuYy04MTktXG5uZXQvY29yZS94ZHAuYzo4MjA6XHRza2JfcmVzZXJ2ZShza2IsIGhlYWRyb29tKTtcbm5ldC9jb3JlL3hkcC5jLTgyMS1cdF9fc2tiX3B1dChza2IsIHhkcGYtXHUwMDNlbGVuKTtcbi0tXG5uZXQvY29yZS94ZHAuYz04NjQ9c3RydWN0IHhkcF9mcmFtZSAqeGRwZl9jbG9uZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKVxubmV0L2NvcmUveGRwLmMtODY1LXtcbm5ldC9jb3JlL3hkcC5jOjg2NjpcdHVuc2lnbmVkIGludCBoZWFkcm9vbSwgdG90YWxzaXplO1xubmV0L2NvcmUveGRwLmMtODY3LVx0c3RydWN0IHhkcF9mcmFtZSAqbnhkcGY7XG4tLVxubmV0L2NvcmUveGRwLmMtODcwLVxubmV0L2NvcmUveGRwLmM6ODcxOlx0aGVhZHJvb20gPSB4ZHBmLVx1MDAzZWhlYWRyb29tICYjNDM7IHNpemVvZigqeGRwZik7XG5uZXQvY29yZS94ZHAuYzo4NzI6XHR0b3RhbHNpemUgPSBoZWFkcm9vbSAmIzQzOyB4ZHBmLVx1MDAzZWxlbjtcbm5ldC9jb3JlL3hkcC5jLTg3My1cbi0tXG5uZXQvY29yZS94ZHAuYy04ODMtXHRueGRwZiA9IGFkZHI7XG5uZXQvY29yZS94ZHAuYzo4ODQ6XHRueGRwZi1cdTAwM2VkYXRhID0gYWRkciAmIzQzOyBoZWFkcm9vbTtcbm5ldC9jb3JlL3hkcC5jLTg4NS1cdG54ZHBmLVx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuZGVyc3RhbmRpbmcgWERQIEZyYW1lIEhlYWRyb29tKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBYRFAgZnJhbWUgc3RydWN0dXJlIGFuZCB0cnlpbmcgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWVtb3J5IGxheW91dCwgc3BlY2lmaWNhbGx5IHRoZSBgaGVhZHJvb21gLiAgSSBzZWUgaG93IGluIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLCBgaGVhZHJvb21gIGlzbiYjMzk7dCBxdWl0ZSBhcyBzdHJhaWdodGZvcndhcmQgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSXQmIzM5O3MgdGhlIHNwYWNlIGJldHdlZW4gYHhkcGZgIGFuZCBgeGRwZi0mZ3Q7ZGF0YWAuCgpJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGUgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZnVuY3Rpb24uIGBhZGRyYCBpcyBjYWxjdWxhdGVkIGFzIGBwYWdlX3RvX3ZpcnQocGFnZSkgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAsIHdoZXJlIHRoZSBwYWdlIGlzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGUgYHhkcGZgIHN0cnVjdHVyZSBpcyBwbGFjZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZSwgc28gYGFkZHJgIHBvaW50cyBqdXN0IGFmdGVyIGl0LiBUaGVuLCB0aGUgYHhkcGYtJmd0O2RhdGFgIHBvaW50ZXIgaXMgc2V0IHRvIGBhZGRyICYjNDM7IG1ldGFzaXplYCwgd2hpY2ggaXMgd2hlcmUgdGhlIHBhY2tldCBkYXRhIGJlZ2lucywgcG90ZW50aWFsbHkgb2Zmc2V0IGJ5IG1ldGFkYXRhLiBGaW5hbGx5LCBgeGRwZi0mZ3Q7aGVhZHJvb21gIGlzIHNldCB0byBgbWV0YXNpemVgLgoKTm93LCB0aGUgY29ubmVjdGlvbiBpcyBtYWRlIGluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAuIEkgc2VlIHRoZSBjYWxjdWxhdGlvbjogYGhlYWRyb29tID0gc2l6ZW9mKCp4ZHBmKSAmIzQzOyB4ZHBmLSZndDtoZWFkcm9vbWAuICBTaW5jZSBgeGRwZi0mZ3Q7aGVhZHJvb21gICppcyogYG1ldGFzaXplYCwgdGhlIHRvdGFsIGBoZWFkcm9vbWAgaXMgYHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemVgLiBUaGUgYGhhcmRfc3RhcnRgIGlzIGNhbGN1bGF0ZWQgYXMgYHhkcGYtJmd0O2RhdGEgLSBoZWFkcm9vbWAuIEkgY2FuIG5vdyBzdWIgaW4gdGhlIGRlZmluaXRpb24gb2YgdGhvc2UgdGVybXMgdG8geWllbGQgYGhhcmRfc3RhcnQgPSBwYWdlX3RvX3ZpcnQocGFnZSlgLiBTbyBgaGFyZF9zdGFydGAgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZS4KCkJ1dCwgaWYgSSBoYWQgYHhkcGYtJmd0O2hlYWRyb29tYCBhcyAwLCB0aGVuIHRoZSBjYWxjdWxhdGlvbiBvZiBgaGVhZHJvb21gIHdvdWxkIGNoYW5nZSB0byBgc2l6ZW9mKCp4ZHBmKWAuICBgaGFyZF9zdGFydGAgd291bGQgYmUgYHBhZ2VfdG9fdmlydChwYWdlKSAmIzQzOyBtZXRhc2l6ZWAuCgpOb3csIHRoZSByZWFsIGlzc3VlIGJlY29tZXMgYXBwYXJlbnQuIGBidWlsZF9za2JfYXJvdW5kYCB1c2VzIGBoYXJkX3N0YXJ0YCBhbmQgdGhlIGBmcmFtZV9zaXplYC4gQW5kIGBmcmFtZV9zaXplYCBpcyBiYXNlZCBvbiBgeGRwZi0mZ3Q7ZnJhbWVfc3pgLiBJZiBJIHNldCBgaGFyZF9zdGFydGAgYXQgYHBhZ2VfdG9fdmlydChwYWdlKSAmIzQzOyBtZXRhc2l6ZWAsIGFuZCBhc3N1bWUgdGhlIGZyYW1lIHRha2VzIHVwIHRoZSBlbnRpcmUgcGFnZSwgdGhlbiBJJiMzOTttIHdyaXRpbmcgZGF0YSBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhZ2UhICBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgbm8tbm8uIFNvIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBgaGVhZHJvb21gICptdXN0KiBiZSBzZXQgY29ycmVjdGx5IHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgWERQIGZyYW1lIG1ldGFkYXRhLiAgVGhhdCBtYWtlcyBzZW5zZTsgYGhlYWRyb29tYCBpcyBzcGVjaWZpY2FsbHkgdG8gKmF2b2lkKiBvdmVyZmxvd2luZyB0aGUgcGFnZSBib3VuZGFyeS4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3hkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTQ6XHRzdHJ1Y3Qgc2tfYnVmZiAqX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcbiA3OTU6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA3OTY6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA3OTc6XHR7XG4gNzk4Olx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9mcmFtZSh4ZHBmKTtcbiA3OTk6XHRcdHVuc2lnbmVkIGludCBoZWFkcm9vbSwgZnJhbWVfc2l6ZTtcbiA4MDA6XHRcdHZvaWQgKmhhcmRfc3RhcnQ7XG4gODAxOlx0XHR1OCBucl9mcmFncztcbiA4MDI6XHRcbiA4MDM6XHRcdC8qIHhkcCBmcmFncyBmcmFtZSAqL1xuIDgwNDpcdFx0aWYgKHVubGlrZWx5KHhkcF9mcmFtZV9oYXNfZnJhZ3MoeGRwZikpKVxuIDgwNTpcdFx0XHRucl9mcmFncyA9IHNpbmZvLVx1MDAzZW5yX2ZyYWdzO1xuIDgwNjpcdFxuIDgwNzpcdFx0LyogUGFydCBvZiBoZWFkcm9vbSB3YXMgcmVzZXJ2ZWQgdG8geGRwZiAqL1xuIDgwODpcdFx0aGVhZHJvb20gPSBzaXplb2YoKnhkcGYpICYjNDM7IHhkcGYtXHUwMDNlaGVhZHJvb207XG4gODA5Olx0XG4gODEwOlx0XHQvKiBNZW1vcnkgc2l6ZSBiYWNraW5nIHhkcF9mcmFtZSBkYXRhIGFscmVhZHkgaGF2ZSByZXNlcnZlZFxuIDgxMTpcdFx0ICogcm9vbSBmb3IgYnVpbGRfc2tiIHRvIHBsYWNlIHNrYl9zaGFyZWRfaW5mbyBpbiB0YWlscm9vbS5cbiA4MTI6XHRcdCAqL1xuIDgxMzpcdFx0ZnJhbWVfc2l6ZSA9IHhkcGYtXHUwMDNlZnJhbWVfc3o7XG4gODE0Olx0XG4gODE1Olx0XHRoYXJkX3N0YXJ0ID0geGRwZi1cdTAwM2VkYXRhIC0gaGVhZHJvb207XG4gODE2Olx0XHRza2IgPSBidWlsZF9za2JfYXJvdW5kKHNrYiwgaGFyZF9zdGFydCwgZnJhbWVfc2l6ZSk7XG4gODE3Olx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gODE4Olx0XHRcdHJldHVybiBOVUxMO1xuIDgxOTpcdFxuIDgyMDpcdFx0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XG4gODIxOlx0XHRfX3NrYl9wdXQoc2tiLCB4ZHBmLVx1MDAzZWxlbik7XG4gODIyOlx0XHRpZiAoeGRwZi1cdTAwM2VtZXRhc2l6ZSlcbiA4MjM6XHRcdFx0c2tiX21ldGFkYXRhX3NldChza2IsIHhkcGYtXHUwMDNlbWV0YXNpemUpO1xuIDgyNDpcdFxuIDgyNTpcdFx0aWYgKHVubGlrZWx5KHhkcF9mcmFtZV9oYXNfZnJhZ3MoeGRwZikpKVxuIDgyNjpcdFx0XHR4ZHBfdXBkYXRlX3NrYl9mcmFnc19pbmZvKHNrYiwgbnJfZnJhZ3MsIHNpbmZvLVx1MDAzZXhkcF9mcmFnc19zaXplLFxuIDgyNzpcdFx0XHRcdFx0XHQgIG5yX2ZyYWdzICogeGRwZi1cdTAwM2VmcmFtZV9zeixcbiA4Mjg6XHRcdFx0XHRcdFx0ICB4ZHBfZnJhbWVfZ2V0X3NrYl9mbGFncyh4ZHBmKSk7XG4gODI5Olx0XG4gODMwOlx0XHQvKiBFc3NlbnRpYWwgU0tCIGluZm86IHByb3RvY29sIGFuZCBza2ItXHUwMDNlZGV2ICovXG4gODMxOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XG4gODMyOlx0XG4gODMzOlx0XHQvKiBPcHRpb25hbCBTS0IgaW5mbywgY3VycmVudGx5IG1pc3Npbmc6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFhEUCBGcmFtZSBIYW5kbGluZyBhbmQgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGxpZXMgd2l0aGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgWERQIGZyYW1lcyBhbmQsIHNwZWNpZmljYWxseSwgaG93IGl0IGNvbnN0cnVjdHMgU0tCcyAoU29ja2V0IEJ1ZmZlcikgZnJvbSB6ZXJvLWNvcHkgWERQIGZyYW1lcywgYW5kIGhvdyB0aGF0IHJlbGF0ZXMgdG8gdGhlIGxheW91dCBvZiBkYXRhIHdpdGhpbiB0aGUgYWxsb2NhdGVkIHBhZ2VzLgoKVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgbG9naWMgaW4gYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBoaW5nZXMgb24gY2FsY3VsYXRpbmcgYSBzdGFydGluZyBhZGRyZXNzIChgaGFyZF9zdGFydGApIGZvciB0aGUgU0tCJiMzOTtzIGRhdGEgYnVmZmVyLiBUaGUgY3JpdGljYWwgdmFyaWFibGVzIGluY2x1ZGUgYHhkcGYtJmd0O2hlYWRyb29tYCwgYHhkcGYtJmd0O2RhdGFgLCBhbmQgdGhlIGFsbG9jYXRlZCBgcGFnZWAuIElmIGB4ZHBmLSZndDtoZWFkcm9vbWAgaXMgemVybywgYXMgaXMgc2V0LCBgaGFyZF9zdGFydGAgaXMgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSBhbmQgcG9pbnRzIHRvIGFuIGFkZHJlc3MgKmJlZm9yZSogdGhlIHN0YXJ0IG9mIHRoZSBkYXRhIHdpdGhpbiB0aGUgcGFnZSwgYmVjYXVzZSBgeGRwZi0mZ3Q7ZGF0YWAgaXNuJiMzOTt0IHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB3aGVyZSB0aGUgY29waWVkIHBhY2tldCBkYXRhIGlzLCBpdCYjMzk7cyBhZnRlciB0aGUgaGVhZGVyIGFuZCB0aGUgYG1ldGFzaXplYC4KClRoaXMgbGVhZHMgdG8gYSBtaXNhbGlnbm1lbnQgd2hlbiBgYnVpbGRfc2tiX2Fyb3VuZGAgYXR0ZW1wdHMgdG8gY29uc3RydWN0IHRoZSBTS0IuIFdpdGggYGhhcmRfc3RhcnRgIHBvaW50aW5nIHRvIGEgbG9jYXRpb24gc2hpZnRlZCBieSBgbWV0YXNpemVgIGJ5dGVzIGZyb20gdGhlIGFjdHVhbCBkYXRhIHN0YXJ0LCB0aGUgU0tCJiMzOTtzIGFzc3VtZWQgbWVtb3J5IHJhbmdlIGV4dGVuZHMgYmV5b25kIHRoZSBhbGxvY2F0ZWQgcGFnZS4gVGhpcyBtaXNhbGlnbm1lbnQgdGhlbiBtZWFucyB0aGF0IGBidWlsZF9za2JfYXJvdW5kYCB0cmllcyB0byBwbGFjZSB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhpcyBvdXQtb2YtYm91bmRzIHJlZ2lvbi4gVGhlIGBza2Jfc2hhcmVkX2luZm9gIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSBTS0IsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2tldCBmcmFnbWVudHMgYW5kIG90aGVyIG1ldGFkYXRhLiBCZWNhdXNlIG9mIHRoaXMgbWlzYWxpZ25tZW50IGluIGNhbGN1bGF0aW5nIGBoYXJkX3N0YXJ0YCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBpdCBjb3VsZCBiZSB3cml0aW5nIG91dC1vZi1ib3VuZHMgb2YgdGhlIHBhZ2UsIHdoaWNoIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHNpbmNlIGl0JiMzOTtzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlIHRvIHRoZSBzaXplIGNoZWNrOgpgYGBjCi0JaWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSAmZ3Q7IFBBR0VfU0laRSkKJiM0MzsJaWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSAmZ3Q7IFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpCmBgYAppcyBkZXNpZ25lZCB0byBhZGRyZXNzIGFuIGltcG9ydGFudCBwb2ludC4gYFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgIG1ha2VzIHN1cmUgdGhhdCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIGBza2Jfc2hhcmVkX2luZm9gIHdpdGhpbiB0aGUgYWxsb2NhdGVkIHBhZ2UuIFRoZSBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciB3aXRoIGBtZW1jcHkoYWRkciwgZGF0YV90b19jb3B5LCB0b3RzaXplKWAuIFRoZW4gdGhlIGBidWlsZF9za2JfYXJvdW5kYCB3aWxsIG92ZXJ3cml0ZSB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSB3aXRoIGBza2Jfc2hhcmVkX2luZm9gIGlmIHRoZSBjaGVjayBpc24mIzM5O3QgZG9uZSB0byBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgc2tiIG1ldGFkYXRhLCB0aGVyZWZvcmUsIHRoaXMgY29ycnVwdGlvbiB3aWxsIGNvcnJ1cHQgdGhlIHBhY2tldCYjMzk7cyBkYXRhIHdpdGggc2tiIG1ldGFkYXRhLiBJdCBpcyBhIGNvcnJ1cHRpb24gb2YgdGhlIGRhdGEsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFzIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBpcyBpbml0aWFsaXplZC4KCkluIHN1bW1hcnksIHRoZSBjcnV4IG9mIHRoZSB2dWxuZXJhYmlsaXR5IGFwcGVhcnMgdG8gYmUgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBkdWUgdG8gYSBjYWxjdWxhdGlvbiBlcnJvciBpbiBgaGFyZF9zdGFydGAgYW5kIGFuIGluc3VmZmljaWVudCBzaXplIGNoZWNrIGluIHRoZSBidWZmZXIgYWxsb2NhdGlvbi4gVGhlIGVycm9yIHJlc3VsdHMgZnJvbSB0aGUgaW5pdGlhbCB3cm9uZyBhc3N1bXB0aW9uIGFib3V0IHRoZSBkYXRhIGxvY2F0aW9uIHdpdGhpbiB0aGUgcGFnZSBhbmQgaG93IHRoZSBidWZmZXIgaXMgdGhlbiBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwmIzM5O3MgU0tCIGNvbnN0cnVjdGlvbiBwcm9jZXNzLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBhbGxvY2F0aW5nIGVub3VnaCBzcGFjZSBmb3IgYHNrYl9zaGFyZWRfaW5mb2AuIEtBU0FOIHdpbGwgbGlrZWx5IGNhdGNoIHRoZXNlIGlzc3VlcyBiZWNhdXNlIHRoZXkgYXJlIGVpdGhlciBvdXQtb2YtYm91bmRzIHdyaXRlcyB0byB0aGUgcGFnZSBvciBkYXRhIGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX3NrYl9hcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0zMTY9c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTMzNy0gKiBUaGUgaGVhZHMgYXJlIGJlaW5nIHplcm9lZCB3aXRoIGVpdGhlciBtZW1zZXQoKSBvciAlX19HRlBfWkVSTywgc28gdGhleSBhcmVcbm5ldC9jb3JlL3NrYnVmZi5jOjMzODogKiByZWFkeSBmb3IgeyxfX31idWlsZF9za2JfYXJvdW5kKCkgYW5kIGRvbiYjMzk7dCBoYXZlIGFueSBkYXRhIGJ1ZmZlcnMgYXR0YWNoZWQuXG5uZXQvY29yZS9za2J1ZmYuYy0zMzktICogTXVzdCBiZSBjYWxsZWQgKm9ubHkqIGZyb20gdGhlIEJIIGNvbnRleHQuXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDUzPUVYUE9SVF9TWU1CT0woc2xhYl9idWlsZF9za2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ1NS0vKiBDYWxsZXIgbXVzdCBwcm92aWRlIFNLQiB0aGF0IGlzIG1lbXNldCBjbGVhcmVkICovXG5uZXQvY29yZS9za2J1ZmYuYzo0NTY6c3RhdGljIHZvaWQgX19idWlsZF9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXG5uZXQvY29yZS9za2J1ZmYuYy00NTctXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDkwPXN0cnVjdCBza19idWZmICpfX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5OS1cdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6NTAwOlx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01MTg9RVhQT1JUX1NZTUJPTChidWlsZF9za2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUyMC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjUyMTogKiBidWlsZF9za2JfYXJvdW5kIC0gYnVpbGQgYSBuZXR3b3JrIGJ1ZmZlciBhcm91bmQgcHJvdmlkZWQgc2tiXG5uZXQvY29yZS9za2J1ZmYuYy01MjItICogQHNrYjogc2tfYnVmZiBwcm92aWRlIGJ5IGNhbGxlciwgbXVzdCBiZSBtZW1zZXQgY2xlYXJlZFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUyNS0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjUyNjpzdHJ1Y3Qgc2tfYnVmZiAqYnVpbGRfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTI3LVx0XHRcdFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTMxLVxubmV0L2NvcmUvc2tidWZmLmM6NTMyOlx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTUzMy1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MzktfVxubmV0L2NvcmUvc2tidWZmLmM6NTQwOkVYUE9SVF9TWU1CT0woYnVpbGRfc2tiX2Fyb3VuZCk7XG5uZXQvY29yZS9za2J1ZmYuYy01NDEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTU2MC1cdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6NTYxOlx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTU2Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYF9fYnVpbGRfc2tiX2Fyb3VuZGAsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUm9sZSBvZiBgX19idWlsZF9za2JfYXJvdW5kYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgemVyb2VzIGluIG9uIGBfX2J1aWxkX3NrYl9hcm91bmRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIGFzIGEgc2Vhc29uZWQgcHJhY3RpdGlvbmVyLCBJIGtub3cgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gYnVpbGRpbmcgU29ja2V0IEJ1ZmZlciAoU0tCKSBzdHJ1Y3R1cmVzIGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aGVuIGhhbmRsaW5nIHByZS1leGlzdGluZyBkYXRhIGJ1ZmZlcnMuIFRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlIGFsbG9jYXRpb247IHRoaXMgaXMgYWJvdXQgbWV0aWN1bG91c2x5IGNyYWZ0aW5nIGFuIFNLQiBhcm91bmQgbWVtb3J5IHRoYXQgKmFscmVhZHkgZXhpc3RzKi4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMg4oCTIGVmZmljaWVuY3kgaW4gc2l0dWF0aW9ucyB3aGVyZSB3ZSBoYXZlIGEgZGF0YSBwYWNrZXQgYW5kIHdhbnQgdG8gcXVpY2tseSB3cmFwIGl0IGluIHRoZSBTS0IgYWJzdHJhY3Rpb24sIGVsaW1pbmF0aW5nIHVubmVjZXNzYXJ5IGNvcHlpbmcuIEJ1dCBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwaXRmYWxscy4gV2hhdCBhcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucz8gSG93IGRvZXMgaXQgaGFuZGxlIGZyYWdtZW50YXRpb24/IERvZXMgaXQgaW50cm9kdWNlIGFueSBjb21wbGV4aXRpZXMgYXJvdW5kIGJ1ZmZlciBvd25lcnNoaXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQ/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgbWVtb3J5IGFsaWdubWVudCBpc3N1ZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGFueSBsaW1pdGF0aW9ucyByZWdhcmRpbmcgd2hlcmUgdGhlIGV4aXN0aW5nIG1lbW9yeSBjb21lcyBmcm9tLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uIHVzZSBjYXNlcy4gSXMgdGhpcyBwcmltYXJpbHkgdXNlZCBpbiBzaXR1YXRpb25zIGxpa2UgemVyby1jb3B5IG5ldHdvcmtpbmcsIG9mZmxvYWQgc2NlbmFyaW9zLCBvciB3aGVuIGRlYWxpbmcgd2l0aCBwYWNrZXRzIHByZS1yZWNlaXZlZCBmcm9tIGhhcmR3YXJlPyBJJiMzOTttIHBpY3R1cmluZyBzcGVjaWZpYyBjb2RlIHBhdGhzIGluIG15IGhlYWQg4oCTIHBlcmhhcHMgaW50ZXJhY3Rpb24gd2l0aCBETUEgZW5naW5lcywgb3IgdGhlIHdheSB0aGUgc3RhY2sgaGFuZGxlcyBjZXJ0YWluIGhlYWRlciBtYW5pcHVsYXRpb25zIGFyb3VuZCB0aGVzZSAmIzM5O3dyYXBwZWQmIzM5OyBTS0JzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBudWFuY2VzIG9mIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBTS0ItcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgc2tiX3B1dGAgYW5kIGBza2JfcHVsbGAuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIG1lbW9yeSBiYXJyaWVycyBpbnZvbHZlZD8gV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlLCBpZiBhbnk/IEFuZCBob3cgd2VsbCBkb2VzIGl0IGhhbmRsZSBlcnJvciBjb25kaXRpb25zPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHVzdWFsbHkgYSBzcGVjaWZpYyBlcnJvciBmbG93IEkgbmVlZCB0byByZW1lbWJlci4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGhvdyBncmFjZWZ1bGx5IGl0IGhhbmRsZXMgZWRnZSBjYXNlcy4KCkluIGVzc2VuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgaXRzIGNvbnN0cmFpbnRzLCBhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0JiMzOTtzIG9wdGltaXplZCB0byBzaGluZSwgYWxsIHRvIGVuc3VyZSBJJiMzOTttIHVzaW5nIGl0IHNhZmVseSBhbmQgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1NjpcdHN0YXRpYyB2b2lkIF9fYnVpbGRfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhLFxuIDQ1NzpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuIDQ1ODpcdHtcbiA0NTk6XHRcdHVuc2lnbmVkIGludCBzaXplID0gZnJhZ19zaXplO1xuIDQ2MDpcdFxuIDQ2MTpcdFx0LyogZnJhZ19zaXplID09IDAgaXMgY29uc2lkZXJlZCBkZXByZWNhdGVkIG5vdy4gQ2FsbGVyc1xuIDQ2MjpcdFx0ICogdXNpbmcgc2xhYiBidWZmZXIgc2hvdWxkIHVzZSBzbGFiX2J1aWxkX3NrYigpIGluc3RlYWQuXG4gNDYzOlx0XHQgKi9cbiA0NjQ6XHRcdGlmIChXQVJOX09OQ0Uoc2l6ZSA9PSAwLCBcJiMzNDtVc2Ugc2xhYl9idWlsZF9za2IoKSBpbnN0ZWFkXCYjMzQ7KSlcbiA0NjU6XHRcdFx0ZGF0YSA9IF9fc2xhYl9idWlsZF9za2IoZGF0YSwgXHUwMDI2c2l6ZSk7XG4gNDY2Olx0XG4gNDY3Olx0XHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcbiA0Njg6XHR9XG4gNDY5Olx0XG4gNDcwOlx0LyoqXG4gNDcxOlx0ICogX19idWlsZF9za2IgLSBidWlsZCBhIG5ldHdvcmsgYnVmZmVyXG4gNDcyOlx0ICogQGRhdGE6IGRhdGEgYnVmZmVyIHByb3ZpZGVkIGJ5IGNhbGxlclxuIDQ3MzpcdCAqIEBmcmFnX3NpemU6IHNpemUgb2YgZGF0YSAobXVzdCBub3QgYmUgMClcbiA0NzQ6XHQgKlxuIDQ3NTpcdCAqIEFsbG9jYXRlIGEgbmV3IFx1MDAyNnNrX2J1ZmYuIENhbGxlciBwcm92aWRlcyBzcGFjZSBob2xkaW5nIGhlYWQgYW5kXG4gNDc2Olx0ICogc2tiX3NoYXJlZF9pbmZvLiBAZGF0YSBtdXN0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGUgcGFnZVxuIDQ3NzpcdCAqIGFsbG9jYXRvciBvciB2bWFsbG9jKCkuIChBIEBmcmFnX3NpemUgb2YgMCB0byBpbmRpY2F0ZSBhIGttYWxsb2MoKVxuIDQ3ODpcdCAqIGFsbG9jYXRpb24gaXMgZGVwcmVjYXRlZCwgYW5kIGNhbGxlcnMgc2hvdWxkIHVzZSBzbGFiX2J1aWxkX3NrYigpXG4gNDc5Olx0ICogaW5zdGVhZC4pXG4gNDgwOlx0ICogVGhlIHJldHVybiBpcyB0aGUgbmV3IHNrYiBidWZmZXIuXG4gNDgxOlx0ICogT24gYSBmYWlsdXJlIHRoZSByZXR1cm4gaXMgJU5VTEwsIGFuZCBAZGF0YSBpcyBub3QgZnJlZWQuXG4gNDgyOlx0ICogTm90ZXMgOlxuIDQ4MzpcdCAqICBCZWZvcmUgSU8sIGRyaXZlciBhbGxvY2F0ZXMgb25seSBkYXRhIGJ1ZmZlciB3aGVyZSBOSUMgcHV0IGluY29taW5nIGZyYW1lXG4gNDg0Olx0ICogIERyaXZlciBzaG91bGQgYWRkIHJvb20gYXQgaGVhZCAoTkVUX1NLQl9QQUQpIGFuZFxuIDQ4NTpcdCAqICBNVVNUIGFkZCByb29tIGF0IHRhaWwgKFNLQl9EQVRBX0FMSUdOKHNrYl9zaGFyZWRfaW5mbykpXG4gNDg2Olx0ICogIEFmdGVyIElPLCBkcml2ZXIgY2FsbHMgYnVpbGRfc2tiKCksIHRvIGFsbG9jYXRlIHNrX2J1ZmYgYW5kIHBvcHVsYXRlIGl0XG4gNDg3Olx0ICogIGJlZm9yZSBnaXZpbmcgcGFja2V0IHRvIHN0YWNrLlxuIDQ4ODpcdCAqICBSWCByaW5ncyBvbmx5IGNvbnRhaW5zIGRhdGEgYnVmZmVycywgbm90IGZ1bGwgc2ticy5cbiA0ODk6XHQgKi9cbiA0OTA6XHRzdHJ1Y3Qgc2tfYnVmZiAqX19idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbiA0OTE6XHR7XG4gNDkyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDQ5MzpcdFxuIDQ5NDpcdFx0c2tiID0ga21lbV9jYWNoZV9hbGxvYyhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsXG4gNDk1Olx0XHRcdFx0ICAgICAgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHN0YXJ0cyB3aXRoIGEgZGlyZWN0IGNoZWNrIG9mIHRoZSBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgb2YgY29uY2VybiBvciBkZWJ1Z2dpbmcsIGFuZCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGluIHRoZSBrZXJuZWwgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLCBhbnkgcG90ZW50aWFsIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIHdpdGhpbiBpdCwgb3IgYW55IGludGVyYWN0aW9ucyBpdCBoYXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBmb2N1c2VkIHNlYXJjaCBpcyB1c3VhbGx5IGRyaXZlbiBieSBhIHBhcnRpY3VsYXIgcHJvYmxlbSBhdCBoYW5kOyBhIGJ1ZyByZXBvcnQsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IgYW4gb2RkIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19maW5hbGl6ZV9za2JfYXJvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9Mzg4PUVYUE9SVF9TWU1CT0xfR1BMKG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4OS1cbm5ldC9jb3JlL3NrYnVmZi5jOjM5MDpzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXG5uZXQvY29yZS9za2J1ZmYuYy0zOTEtXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDQ4LVx0ZGF0YSA9IF9fc2xhYl9idWlsZF9za2IoZGF0YSwgXHUwMDI2c2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYzo0NDk6XHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ1MC1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00NTY9c3RhdGljIHZvaWQgX19idWlsZF9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDY2LVxubmV0L2NvcmUvc2tidWZmLmM6NDY3Olx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYy00NjgtfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcyMS1cdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzIyOlx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYy03MjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNvZGUgZm9yIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiYjMzk7cyBwcm9iYWJseSBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBkZWFsaW5nIHdpdGggU29ja2V0IEJ1ZmZlciAoU0tCKSBtYW5hZ2VtZW50LCBsaWtlbHkgYXQgYSBjcnVjaWFsIHBvaW50LiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQgc291bmRzIGxpa2UgaXQmIzM5O3MgYSBjbGVhbnVwIG9yIGZpbmFsaXphdGlvbiByb3V0aW5lIHRoYXQgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFyb3VuZCwgb3IgaW4gdGhlIHZpY2luaXR5IG9mLCB0aGUgU0tCLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGEgdmVyeSB0YXJnZXRlZCBvcGVyYXRpb24gLSBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24sIGJ1dCBzb21lIHNwZWNpZmljIGhvdXNla2VlcGluZyB0aGF0JiMzOTtzIHJlcXVpcmVkIGF0IGEgcGFydGljdWxhciBzdGFnZS4gTXkgZXhwZXJ0aXNlIGtpY2tzIGluIGhlcmUsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhpbmdzIGxpa2U6IG1lbW9yeSByZWNsYWltLCByZWZlcmVuY2UgY291bnRpbmcgYWRqdXN0bWVudHMsIHBvdGVudGlhbGx5IGZyZWVpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIFNLQiBhbmQgaXRzIGRhdGEsIG9yIG1heWJlIHNvbWUgY2hlY2tzdW0gb3IgaGVhZGVyIGZpbmFsaXphdGlvbi4gVGhlICYjMzQ7YXJvdW5kJiMzNDsgcGFydCBpcyBrZXkuIFdoYXQgZXZlbnQgb3Igb3BlcmF0aW9uIGlzIGl0ICphcm91bmQqPyBJcyBpdCBiZWZvcmUgdGhlIFNLQiBpcyBoYW5kZWQgb2ZmIHRvIGEgaGFyZHdhcmUgaW50ZXJmYWNlPyBBZnRlciBhIHBhY2tldCBpcyB0cmFuc21pdHRlZD8gQmVmb3JlIGl0JiMzOTtzIGVucXVldWVkIHNvbWV3aGVyZT8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGNyaXRpY2FsLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBhcmd1bWVudHMgaXQgdGFrZXMgYW5kIHNlZSB3aGF0IGRhdGEgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IGRlYWxzIHdpdGggdGhlIFNLQiBzdHJ1Y3R1cmUgaXRzZWxmLCB0aGUgcGFja2V0IGRhdGEgYnVmZmVyLCBvciBzb21lIHJlbGF0ZWQgbWV0YWRhdGEuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHRzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXG4gMzkxOlx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiAzOTI6XHR7XG4gMzkzOlx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gMzk0Olx0XG4gMzk1Olx0XHRzaXplIC09IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSk7XG4gMzk2Olx0XG4gMzk3Olx0XHQvKiBBc3N1bWVzIGNhbGxlciBtZW1zZXQgY2xlYXJlZCBTS0IgKi9cbiAzOTg6XHRcdHNrYi1cdTAwM2V0cnVlc2l6ZSA9IFNLQl9UUlVFU0laRShzaXplKTtcbiAzOTk6XHRcdHJlZmNvdW50X3NldChcdTAwMjZza2ItXHUwMDNldXNlcnMsIDEpO1xuIDQwMDpcdFx0c2tiLVx1MDAzZWhlYWQgPSBkYXRhO1xuIDQwMTpcdFx0c2tiLVx1MDAzZWRhdGEgPSBkYXRhO1xuIDQwMjpcdFx0c2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihza2IpO1xuIDQwMzpcdFx0c2tiX3NldF9lbmRfb2Zmc2V0KHNrYiwgc2l6ZSk7XG4gNDA0Olx0XHRza2ItXHUwMDNlbWFjX2hlYWRlciA9ICh0eXBlb2Yoc2tiLVx1MDAzZW1hY19oZWFkZXIpKX4wVTtcbiA0MDU6XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuIDQwNjpcdFx0c2tiLVx1MDAzZWFsbG9jX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4gNDA3Olx0XHQvKiBtYWtlIHN1cmUgd2UgaW5pdGlhbGl6ZSBzaGluZm8gc2VxdWVudGlhbGx5ICovXG4gNDA4Olx0XHRzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7XG4gNDA5Olx0XHRtZW1zZXQoc2hpbmZvLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBkYXRhcmVmKSk7XG4gNDEwOlx0XHRhdG9taWNfc2V0KFx1MDAyNnNoaW5mby1cdTAwM2VkYXRhcmVmLCAxKTtcbiA0MTE6XHRcbiA0MTI6XHRcdHNrYl9zZXRfa2Nvdl9oYW5kbGUoc2tiLCBrY292X2NvbW1vbl9oYW5kbGUoKSk7XG4gNDEzOlx0fVxuIDQxNDpcdFxuIDQxNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCAqX19zbGFiX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgKnNpemUpXG4gNDE2Olx0e1xuIDQxNzpcdFx0dm9pZCAqcmVzaXplZDtcbiA0MTg6XHRcbiA0MTk6XHRcdC8qIE11c3QgZmluZCB0aGUgYWxsb2NhdGlvbiBzaXplIChhbmQgZ3JvdyBpdCB0byBtYXRjaCkuICovXG4gNDIwOlx0XHQqc2l6ZSA9IGtzaXplKGRhdGEpO1xuIDQyMTpcdFx0Lyoga3JlYWxsb2MoKSB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBcJiMzNDtkYXRhXCYjMzQ7IHdoZW5cbiA0MjI6XHRcdCAqIFwmIzM0O2tzaXplKGRhdGEpXCYjMzQ7IGlzIHJlcXVlc3RlZDogaXQgaXMgdGhlIGV4aXN0aW5nIHVwcGVyXG4gNDIzOlx0XHQgKiBib3VuZHMuIEFzIGEgcmVzdWx0LCBHRlBfQVRPTUlDIHdpbGwgYmUgaWdub3JlZC4gTm90ZVxuIDQyNDpcdFx0ICogdGhhdCB0aGlzIFwmIzM0O25ld1wmIzM0OyBwb2ludGVyIG5lZWRzIHRvIGJlIHBhc3NlZCBiYWNrIHRvIHRoZVxuIDQyNTpcdFx0ICogY2FsbGVyIGZvciB1c2Ugc28gdGhlIF9fYWxsb2Nfc2l6ZSBoaW50aW5nIHdpbGwgYmVcbiA0MjY6XHRcdCAqIHRyYWNrZWQgY29ycmVjdGx5LlxuIDQyNzpcdFx0ICovXG4gNDI4Olx0XHRyZXNpemVkID0ga3JlYWxsb2MoZGF0YSwgKnNpemUsIEdGUF9BVE9NSUMpO1xuIDQyOTpcdFx0V0FSTl9PTl9PTkNFKHJlc2l6ZWQgIT0gZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWERQIEZyYW1lIHRvIFNLQiBDb252ZXJzaW9uOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBYRFAgZnJhbWUgY29udmVyc2lvbiB0byBTS0IsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgemVyb2VzIGFuZCBzZXRzIGBkYXRhcmVmYCB3aXRoaW4gdGhlIGBzaGluZm9gIHN0cnVjdHVyZS4gSW5pdGlhbGx5LCBpdCBzZWVtZWQgbGlrZSBpZiB0aGUgY29tYmluZWQgc2l6ZSBvZiB0aGUgWERQIGZyYW1lIGhlYWRlciBhbmQgdG90YWwgZGF0YSAoYHRvdHNpemVgKSBleGNlZWRlZCBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAsIHRoZSBgc2hpbmZvYCB3b3VsZCBvdmVybGFwIHdpdGggcGFja2V0IGRhdGEuIEJ1dCB3YWl0LCBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBpcyBjYWxsZWQgKmFmdGVyKiBhIGBtZW1jcHlgIGluIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLiBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbmQgcmV0dXJucyBgeGRwX2ZyYW1lYC4gVGhlbiwgbGF0ZXIgYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBjYWxscyBgYnVpbGRfc2tiX2Fyb3VuZGAgdGhhdCBjYWxscyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC4gVGhpcyBtZWFucyB0aGF0IGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHdpbGwgb3ZlcndyaXRlIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBkYXRhIHdpdGggemVyb2VzLiBUaGlzIGltcGxpZXMgZGF0YSB0cnVuY2F0aW9uL2NvcnJ1cHRpb24sIGJ1dCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFzIGl04oCZcyBhbGwgemVyb2VkLgoKSG93ZXZlciwgaWYgdGhlIGRhdGEgKndhcyogc3VwcG9zZWQgdG8gaGF2ZSBzb21ldGhpbmcgaW4gaXQsIHRoaXMgemVyb2luZyBpcyBkYXRhIGNvcnJ1cHRpb24uIEkgdGhlbiBjb25zaWRlcmVkIHdoYXQgaGFwcGVucyBpZiB0aGUgYHNoaW5mb2Agb3ZlcmxhcHMgYW5kIHRoZSBwYWNrZXQgZGF0YSBnZXRzIG1vZGlmaWVkICphZnRlciogYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAuIEluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgdGhlcmUmIzM5O3Mgbm8gc3VjaCBtb2RpZmljYXRpb24uIElmIGl0JiMzOTtzIHNlbnQgdG8gdXNlcnNwYWNlLCB1c2Vyc3BhY2Ugd2lsbCBnZXQgemVyb2VzIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBkYXRhLiBOb3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaywganVzdCB6ZXJvZXMsIHdoaWNoIGlzIHN0aWxsIGEgcHJvYmxlbS4gV2hhdCBpZiB0aGUga2VybmVsIHJlYWRzIHRoZSB6ZXJvZXM/IFRoYXQmIzM5O3Mgd2hhdCBgc2hpbmZvYCBpcyBzdXBwb3NlZCB0byBjb250YWluIGFueXdheSwgdGhlIHplcm9lcyBhbmQgYGRhdGFyZWY9MWAuCgpOb3csIGlmIGEgQlBGIHByb2dyYW0gbW9kaWZpZXMgcGFja2V0IGRhdGEgYWZ0ZXIgYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCwgdGhpcyBjb3VsZCBiZWNvbWUgdmVyeSBpbnRlcmVzdGluZy4gTW9kaWZ5aW5nIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBkYXRhIHdvdWxkIG92ZXJ3cml0ZSBgc2hpbmZvYCEgVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gc2NlbmFyaW8uIFRoaW5rIG9mIHRoZSBwZXJzcGVjdGl2ZSBvZiBwYWNrZXQgZGF0YTogSXQgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBvciB0eXBlIGNvbmZ1c2lvbi4gS0FTQU4gY2FuIGNhdGNoIHRoaXMgaWYgaXQgcmVzdWx0cyBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGBucl9mcmFnc2AgZmllbGQgY291bGQgYmUgc2V0IHRvIGEgbGFyZ2UgbnVtYmVyIHdoaWNoIGNvdWxkIGxlYWQgdG8gT09CIHJlYWRzIHdoZW4gZnJlZWluZyB0aGUgc2tiLiBTcGVjaWZpY2FsbHksIHdoZW4gdGhlIHNrYiBpcyBmcmVlZCBhbmQgYHNrYl9yZWxlYXNlX2RhdGFgIGxvb3BzIG92ZXIgYG5yX2ZyYWdzYCBjYWxsaW5nIGBza2JfZnJhZ191bnJlZmAsIHRoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvZiB0aGUgYGZyYWdzYCBhcnJheS4gVGhpcyBpcyBhIEtBU0FOIGJ1Zy4KClRoZW4gSSBjb25zaWRlcmVkIHRoZSBgaGVhZHJvb21gIGlzc3VlLiBCZWZvcmUgdGhlIHBhdGNoLCBgeGRwZi0mZ3Q7aGVhZHJvb21gIHdhcyB6ZXJvLiBTbyBgaGFyZF9zdGFydGAgd2FzIGF0IGBwYWdlICYjNDM7IG1ldGFzaXplYC4gVGhlIGBmcmFtZV9zaXplYCBpcyBgUEFHRV9TSVpFYC4gVGhlcmVmb3JlLCBgc2hpbmZvYCB3b3VsZCBiZSBwbGFjZWQgYXQgYHBhZ2UgJiM0MzsgbWV0YXNpemUgJiM0MzsgUEFHRV9TSVpFIC0gU0tCX0RBVEFfQUxJR04oLi4uKWAuIElmIGBtZXRhc2l6ZWAgaXMgbGFyZ2UgZW5vdWdoLCBgc2hpbmZvYCBlbmRzIHVwICpvdXRzaWRlKiB0aGUgYWxsb2NhdGVkIHBhZ2UuIElmIGBtZXRhc2l6ZSAmZ3Q7IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSlgLCB0aGVuIGl0JiMzOTtzIGEgZ3VhcmFudGVlZCBPT0Igd3JpdGUgd2hlbiBgbWVtc2V0KHNoaW5mbywgMCwgLi4uKWAgaXMgY2FsbGVkLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoYXQuCgpDaGVja2luZyBmb3IgdW5pbml0aWFsaXplZCByZWFkcywgSSByZS1yZWFkIHRoZSBwYXRjaC4gVGhlIGNoYW5nZSBmcm9tIGBzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgJmd0OyBQQUdFX1NJWkVgIHRvIGBzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgJmd0OyBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCBmaXhlcyB0aGUgb3ZlcmxhcHBpbmcgcHJvYmxlbSwgYXMgYHRvdHNpemVgIGNvdWxkIGNhdXNlIHRoZSBvdmVybGFwLiBUaGUgY2hhbmdlIGZyb20gYHhkcGYtJmd0O2hlYWRyb29tID0gMGAgdG8gYHhkcGYtJmd0O2hlYWRyb29tID0gbWV0YXNpemVgIGFsc28gZml4ZXMgdGhlIE9PQiB3cml0ZS4gVGhpcyBjaGFuZ2Ugc2hpZnRlZCBgaGFyZF9zdGFydGAgYnkgYG1ldGFzaXplYCwgbGVhZGluZyB0byB0aGUgYHNoaW5mb2AgYmVpbmcgcGxhY2VkIG91dCBvZiBib3VuZHMuCgpOb3csIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzPyBXaGVuIGB4ZHBmLSZndDtoZWFkcm9vbSA9IDBgLCB0aGUgYHNrYi0mZ3Q7ZGF0YWAgcG9pbnRlciBpcyBzZXQgdG8gYHBhZ2UgJiM0MzsgbWV0YXNpemUgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAuIFRoZSBwYWNrZXQgZGF0YSB3YXMgY29waWVkIHRvIGBwYWdlICYjNDM7IHNpemVvZigqeGRwZilgLiBTbywgYHNrYi0mZ3Q7ZGF0YWAgd291bGQgYmUgYWZ0ZXIgdGhlIHN0YXJ0IG9mIHRoZSBkYXRhLiBBbmQgdGhlIHNrYiYjMzk7cyBsZW5ndGggaXMgYHhkcGYtJmd0O2xlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZWAuIFNvIHRoZSBlbmQgb2YgYHNrYi0mZ3Q7ZGF0YWAgaXMgd2hlcmUgdGhlIHBhY2tldCBkYXRhIGVuZHMgYXMgd2VsbC4KClRoZSBtZXRhZGF0YSBpcyBjb3BpZWQgdG8gYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAsIGFuZCBgc2tiLSZndDtkYXRhYCBwb2ludHMgdG8gYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKSAmIzQzOyBtZXRhc2l6ZWAuIFdoZXJlIHRoZSByZWFsIHBhY2tldCBkYXRhIHN0YXJ0cyEgYHNrYl9tZXRhZGF0YV9zZXQoc2tiLCB4ZHBmLSZndDttZXRhc2l6ZSlgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX21ldGFkYXRhX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD00NTg1PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfbWV0YWRhdGFfZGlmZmVycyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2EsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NTk3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0NTk4OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfbWV0YWRhdGFfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHU4IG1ldGFfbGVuKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NTk5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQ2MDM9c3RhdGljIGlubGluZSB2b2lkIHNrYl9tZXRhZGF0YV9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjA0LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDYwNTpcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCAwKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDYwNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBza2JfbWV0YWRhdGFfc2V0YCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHNrYl9tZXRhZGF0YV9zZXQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBza2JfbWV0YWRhdGFfc2V0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHByb2JhYmx5IGRlYWxzIHdpdGggYXR0YWNoaW5nIHNvbWUgc29ydCBvZiBjcnVjaWFsLCBjb250ZXh0LXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGEgc29ja2V0IGJ1ZmZlciAoU0tCKS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQmIzM5O3MgZGVzaWduZWQgdG8gYWRkIG1ldGFkYXRhIHRoYXQgaGVscHMgd2l0aCBwYWNrZXQgcHJvY2Vzc2luZywgbWF5YmUgZm9yIFFvUywgc2VjdXJpdHkgcG9saWNpZXMsIG9yIGZsb3cgY2xhc3NpZmljYXRpb24uIEl0JiMzOTtzIGxpa2VseSBvcGVyYXRpbmcgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdGFjaywgc28gcGVyZm9ybWFuY2UgaXMgKmNyaXRpY2FsKi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyDigJMgYXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBJcyB0aGlzIHRocmVhZC1zYWZlPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBTS0IgZGF0YSBzdHJ1Y3R1cmUsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGF0b21pYyBvcGVyYXRpb25zLCByZWFkLWNvcHktdXBkYXRlIG1lY2hhbmlzbXMsIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgbWV0YWRhdGEgZ2V0cyB1dGlsaXplZCBsYXRlciBvbiBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gKndoZXJlKiBpdCBpcyBhY2Nlc3NlZCBpbiB0aGUgc3RhY2ssIGFuZCBieSAqd2hhdCogY29tcG9uZW50cy4gSXMgdGhpcyBhIGNvbW1vbiBwcmFjdGljZSBmb3IgbW9zdCBuZXR3b3JrIHN0YWNrIG9wZXJhdGlvbnMsIG9yIGEgZnVuY3Rpb24gSSBzaG91bGQgaGF2ZSBzZWVuIGJlZm9yZT8gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgZmxleGlibGUgdGhpcyBmdW5jdGlvbiBpcywgaW4gdGVybXMgb2Ygd2hhdCBraW5kIG9mIG1ldGFkYXRhIGl0IGNhbiBoYW5kbGUuIElzIGl0IGEgZ2VuZXJpYyBrZXktdmFsdWUgc3RvcmUsIG9yIGFyZSB0aGVyZSBzcGVjaWZpYyBtZXRhZGF0YSB0eXBlcyBwcmVkZWZpbmVkPyBJcyB0aGUgc2l6ZSBmaXhlZCwgb3IgZHluYW1pYz8gRmluYWxseSwgYW55IGFzc29jaWF0ZWQgZXJyb3IgY2hlY2tpbmcgb3IgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LiBJIHdvbmRlciB3aGF0IGhhcHBlbnMgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsPyBPciBpZiB0aGUgb3BlcmF0aW9uIGlzIHNvbWVob3cgaWxsZWdhbD8gSSYjMzk7bGwgbG9vayBmb3IgYW55IG9mIHRob3NlIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ1OTg6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX21ldGFkYXRhX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBtZXRhX2xlbilcbjQ1OTk6XHR7XG40NjAwOlx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlbWV0YV9sZW4gPSBtZXRhX2xlbjtcbjQ2MDE6XHR9XG40NjAyOlx0XG40NjAzOlx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9tZXRhZGF0YV9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNDYwNDpcdHtcbjQ2MDU6XHRcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCAwKTtcbjQ2MDY6XHR9XG40NjA3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWERQIE1ldGFkYXRhIFBsYWNlbWVudCBpbiBTS0JzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgWERQIG1ldGFkYXRhIGdldHMgaGFuZGxlZCB3aGVuIHdlJiMzOTtyZSBidWlsZGluZyBTS0JzIGZyb20gWERQIGZyYW1lcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBhY3Rpb24gaXMgc2V0dGluZyBgc2tiX3NoaW5mbyhza2IpLSZndDttZXRhX2xlbiA9IG1ldGFfbGVuYC4gIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGhvdyBkbyB3ZSAqYWNjZXNzKiB0aGlzIG1ldGFkYXRhPyAgVHlwaWNhbGx5LCB3ZSB1c2UgYHNrYl9tZXRhZGF0YV9lbmQoc2tiKWAgb3IgY2FsY3VsYXRlIGl0IHVzaW5nIGBza2JfbWFjX2hlYWRlcihza2IpIC0gbWV0YV9sZW5gLgoKUmlnaHQsIFhEUCBtZXRhZGF0YSBsaXZlcyAqYmVmb3JlKiBgc2tiLSZndDtkYXRhYC4gIFNvLCBpdCYjMzk7cyBsb2NhdGVkIHNvbWV3aGVyZSBiZXR3ZWVuIGBza2ItJmd0O2RhdGEgLSBtZXRhX2xlbmAgYW5kIGBza2ItJmd0O2RhdGFgLiBTaW5jZSBgc2tiLSZndDtkYXRhYCBwb2ludHMgdG8gYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKSAmIzQzOyBtZXRhc2l6ZWAsIHRoZW4gYHNrYi0mZ3Q7ZGF0YSAtIG1ldGFzaXplYCBlcXVhbHMgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAuICBUaGF0JiMzOTtzIGV4YWN0bHkgd2hlcmUgdGhlIG1ldGFkYXRhIHdhcyBvcmlnaW5hbGx5IGNvcGllZCwgaW1wbHlpbmcgdGhhdCB0aGUgbWV0YWRhdGEgaXMgdmFsaWQgYW5kIGluaXRpYWxpemVkLCBncmVhdCEKCk5vdywgdGhlIHBhdGNoLi4uIElmIGB4ZHBmLSZndDtoZWFkcm9vbWAgd2FzIHplcm8sIHRoZW4gdGhlIGBoZWFkcm9vbWAgaW4gYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBpcyBgc2l6ZW9mKCp4ZHBmKWAuICBgc2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSlgIGFkdmFuY2VzIGBza2ItJmd0O2RhdGFgIGJ5IGBzaXplb2YoKnhkcGYpYC4gQW5kIHNpbmNlIGBza2ItJmd0O2hlYWRgICh3aGljaCBpcyBgaGFyZF9zdGFydGApIGlzIGBwYWdlICYjNDM7IG1ldGFzaXplYCwgdGhlbiBgc2tiLSZndDtkYXRhYCBiZWNvbWVzIGBwYWdlICYjNDM7IG1ldGFzaXplICYjNDM7IHNpemVvZigqeGRwZilgLiBUaGlzIGlzIGNvcnJlY3QuCgpCdXQsIGlmIGBoYXJkX3N0YXJ0YCBpcyBgcGFnZSAmIzQzOyBtZXRhc2l6ZWAsIHRoZW4gYHNrYi0mZ3Q7aGVhZGAgKmlzKiBgcGFnZSAmIzQzOyBtZXRhc2l6ZWAuIElmIGFueW9uZSB0cmllcyB0byBhY2Nlc3MgdGhlIG1ldGFkYXRhLCB0aGV5JiMzOTtsbCBiZSBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YSAtIG1ldGFzaXplYC4gQnV0LCBgc2tiLSZndDtkYXRhIC0gbWV0YXNpemVgIGVxdWFscyBgcGFnZSAmIzQzOyBtZXRhc2l6ZSAmIzQzOyBzaXplb2YoKnhkcGYpIC0gbWV0YXNpemVgLCB3aGljaCBzaW1wbGlmaWVzIHRvIGBwYWdlICYjNDM7IHNpemVvZigqeGRwZilgLgoKV2FpdCwgYHNrYi0mZ3Q7aGVhZGAgaXMgYHBhZ2UgJiM0MzsgbWV0YXNpemVgLiBTbywgaXMgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAgKmJlZm9yZSogYHNrYi0mZ3Q7aGVhZGA/IElmIGBtZXRhc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIGBzaXplb2YoKnhkcGYpYCwgdGhlbiB5ZXMsIGl0ICppcyogYmVmb3JlIGBza2ItJmd0O2hlYWRgLiBBY2Nlc3NpbmcgbWVtb3J5ICpiZWZvcmUqIGBza2ItJmd0O2hlYWRgIGlzIGEgZGVmaW5pdGUgb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlISBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLgoKTGV0JiMzOTtzIHNlZSBpZiBgbWV0YXNpemVgIGNhbiBiZSBncmVhdGVyLiBUaGUgc2l6ZSBvZiBgc3RydWN0IHhkcF9mcmFtZWAgaXMgMzIgb3IgNDggYnl0ZXMuIE1ldGFkYXRhIGNhbiBiZSB1cCB0byAzMiBieXRlcy4gU28sIGBtZXRhc2l6ZWAgaXMgdXN1YWxseSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHNpemVvZigqeGRwZilgLiBFdmVuIGlmIGl0JiMzOTtzIG5vdCwgYHNrYi0mZ3Q7ZGF0YSAtIG1ldGFzaXplYCBzdGlsbCBlcXVhbHMgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAuICBJZiBgc2tiLSZndDtoZWFkYCBpcyBgcGFnZSAmIzQzOyAzMmAgd2hlbiBgbWV0YXNpemVgIGlzIDMyLCBhbmQgYHNpemVvZigqeGRwZilgIGlzIDMyLCB0aGVuIGBza2ItJmd0O2hlYWRgIGlzIGF0IGBwYWdlICYjNDM7IDMyYCBhbmQgYHNrYi0mZ3Q7ZGF0YWAgaXMgYXQgYHBhZ2UgJiM0MzsgNjRgLiBUaHVzLCBgc2tiLSZndDtkYXRhIC0gbWV0YXNpemVgIGJlY29tZXMgYHBhZ2UgJiM0MzsgMzJgLCB3aGljaCBlcXVhbHMgYHNrYi0mZ3Q7aGVhZGAsIGFuZCBpdCYjMzk7cyBub3QgYmVmb3JlIGBza2ItJmd0O2hlYWRgLgoKQnV0IHdoYXQgaWYgYG1ldGFzaXplYCBpcyB6ZXJvPyBUaGVuIGBza2ItJmd0O2hlYWRgIGlzIGp1c3QgYHBhZ2VgLiBJZiBgeGRwZi0mZ3Q7aGVhZHJvb21gIGlzIHNldCB0byBgbWV0YXNpemVgIChpbiB0aGUgcGF0Y2hlZCB2ZXJzaW9uKSwgdGhlbiBgaGVhZHJvb21gIGVxdWFscyBgc2l6ZW9mKCp4ZHBmKSAmIzQzOyBtZXRhc2l6ZWAuIFRoZW4sIGBoYXJkX3N0YXJ0YCBlcXVhbHMgYHhkcGYtJmd0O2RhdGEgLSBoZWFkcm9vbWAgd2hpY2ggaXMgYChwYWdlICYjNDM7IHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemUpIC0gKHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemUpYCB3aGljaCBpcyBqdXN0IGBwYWdlYC4gU28sIGBza2ItJmd0O2hlYWRgIGVxdWFscyBgcGFnZWAuIGBza2JfcmVzZXJ2ZShza2IsIGhlYWRyb29tKWAgYWR2YW5jZXMgYHNrYi0mZ3Q7ZGF0YWAgYnkgYHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemVgLiBTbywgYHNrYi0mZ3Q7ZGF0YWAgaXMgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKSAmIzQzOyBtZXRhc2l6ZWAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgoKQnV0IG5vdywgYHNrYi0mZ3Q7aGVhZGAgaXMgYHBhZ2VgIGFuZCBub3QgYHBhZ2UgJiM0MzsgbWV0YXNpemVgLiAgU28sIHRoZSBzcGFjZSBiZXR3ZWVuIGBza2ItJmd0O2hlYWRgIGFuZCBgc2tiLSZndDtkYXRhYCBpcyBub3cgYHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemVgLiBUaGlzIHNwYWNlICpjb250YWlucyogdGhlIGB4ZHBmYCBzdHJ1Y3QgKGF0IGBwYWdlYCkgYW5kIHRoZSBtZXRhZGF0YSAoYXQgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWApISBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgc3BhY2UgYmV0d2VlbiBgc2tiLSZndDtoZWFkYCBhbmQgYHNrYi0mZ3Q7ZGF0YWAgd2FzIG9ubHkgYHNpemVvZigqeGQKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3hkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3hkcC5jPTc5Mj1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYnVpbGRfc2tiX2Zyb21femMpO1xubmV0L2NvcmUveGRwLmMtNzkzLVxubmV0L2NvcmUveGRwLmM6Nzk0OnN0cnVjdCBza19idWZmICpfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxubmV0L2NvcmUveGRwLmMtNzk1LVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3hkcC5jLTg0Ni19XG5uZXQvY29yZS94ZHAuYzo4NDc6RVhQT1JUX1NZTUJPTF9HUEwoX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUpO1xubmV0L2NvcmUveGRwLmMtODQ4LVxubmV0L2NvcmUveGRwLmM9ODQ5PXN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcbi0tXG5uZXQvY29yZS94ZHAuYy04NTktXG5uZXQvY29yZS94ZHAuYzo4NjA6XHRyZXR1cm4gX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoeGRwZiwgc2tiLCBkZXYpO1xubmV0L2NvcmUveGRwLmMtODYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBraWNrcyBpbnRvIGdlYXI6IHRoaXMgZnVuY3Rpb24gaXMgKmNyaXRpY2FsKi4gSXQmIzM5O3Mgd2hlcmUgdGhlIHJhdyBYRFAgZGF0YSwgdGhlIEV0aGVybmV0IGZyYW1lIHRoYXQgd2UmIzM5O3ZlIHJlY2VpdmVkLCBnZXRzIHRyYW5zZm9ybWVkIGludG8gYSBgc2tfYnVmZmAgLS0gdGhlIHN0YW5kYXJkIG5ldHdvcmsgYnVmZmVyIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2sgdW5kZXJzdGFuZHMuIFRoaXMgaXMgdGhlIGNob2tlcG9pbnQsIHRoZSBicmlkZ2UgYmV0d2VlbiB0aGUgaGlnaC1wZXJmb3JtYW5jZSBYRFAgd29ybGQgYW5kIHRoZSBicm9hZGVyIGtlcm5lbCBuZXR3b3JraW5nIGVjb3N5c3RlbS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IHBhY2tldCBhY2Nlc3MsIGxpa2VseSBieXBhc3NpbmcgbWFueSBvZiB0aGUgdXN1YWwgTmV0ZmlsdGVyIGhvb2tzIGFuZCBkcml2ZXIgcHJlLXByb2Nlc3Npbmcgc3RlcHMuIFRoaXMgZ2l2ZXMgdXMgbWFzc2l2ZSBwZXJmb3JtYW5jZSBnYWlucywgYnV0IGl0ICphbHNvKiBtZWFucyB3ZSBuZWVkIHRvIGJlIGluY3JlZGlibHkgY2FyZWZ1bC4gQW55IGVycm9ycyBpbiB0aGlzIGZ1bmN0aW9uIGNhbiBjb3JydXB0IG1lbW9yeSwgY3Jhc2ggdGhlIHN5c3RlbSwgb3Igb3BlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHNldmVyYWwga2V5IGFyZWFzOgoKKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGlzIHRoZSBgc2tiYCBhbGxvY2F0ZWQ/IFdoYXQgcG9vbHMgYXJlIHVzZWQ/IEFyZSB3ZSBlZmZpY2llbnRseSByZS11c2luZyBidWZmZXJzPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb3IgZXhjZXNzaXZlIG1lbW9yeSBjb3B5aW5nPyBJIGhvcGUgdGhlIGFsbG9jYXRpb24gc2NoZW1lIGlzIGVmZmljaWVudCwgcGVyaGFwcyB1c2luZyBhIGRlZGljYXRlZCBYRFAtc3BlY2lmaWMgYnVmZmVyIGFsbG9jYXRvciB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgdGhlIGdlbmVyYWwtcHVycG9zZSBrZXJuZWwgYWxsb2NhdG9ycy4KKiAgICoqSGVhZGVyIENvbnN0cnVjdGlvbjoqKiBXZSYjMzk7cmUgZ29pbmcgdG8gYmUgYWRkaW5nIHRoZSBMMiwgTDMgYW5kIHBlcmhhcHMgTDQgaGVhZGVycy4gQXJlIHRoZXJlIGFueSBhc3N1bXB0aW9ucyBiZWluZyBtYWRlIGFib3V0IHRoZSBmcmFtZSBmb3JtYXQ/IEFyZSB0aGV5IGhhbmRsaW5nIFZMQU4gdGFncywgVlhMQU4sIG9yIG90aGVyIGVuY2Fwc3VsYXRpb24gcHJvcGVybHk/IEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBhY3Qgb2YgcG90ZW50aWFsIGhhcmR3YXJlIG9mZmxvYWQgbWVjaGFuaXNtcy4gQW55IGluY29ycmVjdCBoZWFkZXIgbWFuaXB1bGF0aW9uIGhlcmUgY2FuIHdyZWFrIGhhdm9jIG9uIHBhY2tldCBwcm9jZXNzaW5nIGRvd25zdHJlYW0uCiogICAqKkNoZWNrc3VtIENhbGN1bGF0aW9uOioqIEhvdyBpcyB0aGUgY2hlY2tzdW0gaGFuZGxpbmcgaW1wbGVtZW50ZWQ/IEFyZSB3ZSBtYWtpbmcgdXNlIG9mIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQgY2FwYWJpbGl0aWVzIG9mIHRoZSBOSUM/IE9yIGlzIHRoZSBjaGVja3N1bSBiZWluZyBjYWxjdWxhdGVkIGluIHNvZnR3YXJlPyBJZiBpdCYjMzk7cyBzb2Z0d2FyZSwgcGVyZm9ybWFuY2UgYmVjb21lcyBhIGh1Z2UgY29uY2Vybi4gQW55IG1pc3Rha2VzIGluIGNoZWNrc3VtIGNhbGN1bGF0aW9uIHdpbGwgbGVhZCB0byBkcm9wcGVkIHBhY2tldHMuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGVyZSYjMzk7cyBhIHByb2JsZW0sIGxpa2UgYW4gb3V0LW9mLW1lbW9yeSBjb25kaXRpb24gb3IgYW4gaW52YWxpZCBmcmFtZT8gSXMgdGhlcmUgcm9idXN0IGVycm9yIGNoZWNraW5nPyBBcmUgd2UgY29ycmVjdGx5IGhhbmRsaW5nIGRpZmZlcmVudCBlcnJvciBjYXNlcz8gQSBjb3JlIGR1bXAgaXMgdGhlIGxhc3QgdGhpbmcgd2Ugd2FudC4KKiAgICoqSW50ZWdyYXRpb24gd2l0aCB0aGUgQ29yZSBTdGFjazoqKiBIb3cgY2xlYW5seSBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZCBvZmYgdGhlIGBza2JgIHRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrPyBJcyBpdCBlZmZpY2llbnQsIG9yIGFyZSB0aGVyZSB1bm5lY2Vzc2FyeSBjb3BpZXMgb3IgY29udGV4dCBzd2l0Y2hlcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZWZmaWNpZW5jaWVzIGluIHRoZSB0cmFuc2l0aW9uIGZyb20gWERQIHRvIHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIHBhdGguCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhpcyBpcyBhIHJvYnVzdCBhbmQgZWZmaWNpZW50IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgWERQLXRvLVNLQiBjb252ZXJzaW9uIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IGhvbGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uICp0aG9yb3VnaGx5KiB0byBldmFsdWF0ZSB0aGUgb3ZlcmFsbCBYRFAgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0OTpcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcbiA4NTA6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gODUxOlx0e1xuIDg1MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA4NTM6XHRcbiA4NTQ6XHRcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2MobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLCBHRlBfQVRPTUlDKTtcbiA4NTU6XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA4NTY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODU3Olx0XG4gODU4Olx0XHRtZW1zZXQoc2tiLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkpO1xuIDg1OTpcdFxuIDg2MDpcdFx0cmV0dXJuIF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIHNrYiwgZGV2KTtcbiA4NjE6XHR9XG4gODYyOlx0RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKTtcbiA4NjM6XHRcbiA4NjQ6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmX2Nsb25lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpXG4gODY1Olx0e1xuIDg2NjpcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tLCB0b3RhbHNpemU7XG4gODY3Olx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICpueGRwZjtcbiA4Njg6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBYRFAgU0tCIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgWERQIGZyYW1lcyBnZXQgdHJhbnNmb3JtZWQgaW50byBTS0JzLCBhbmQgSSYjMzk7dmUgaGl0IGEgaGVhZC1zY3JhdGNoZXIuIFNwZWNpZmljYWxseSwgaG93IGRvZXMgdGhlIHN5c3RlbSBrbm93IHRvIGZyZWUgdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0ZWQgZm9yIHRoZSBYRFAgZnJhbWUgb25jZSB0aGUgU0tCIGlzIGRvbmUgd2l0aCBpdD8KCkkgc3RhcnRlZCB3aXRoIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAuIEl0IHVzZXMgYGJ1aWxkX3NrYl9hcm91bmRgLCB3aGljaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBzZXR0aW5nIGBza2ItJmd0O2hlYWRgIHRvIGBoYXJkX3N0YXJ0YC4gQnV0IHdhaXQgYSBzZWNvbmQsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBzZXQgYW55IGtpbmQgb2YgZmxhZyBsaWtlIGBza2ItJmd0O2hlYWRfZnJhZ2AsIHdoaWNoIHdvdWxkIHVzdWFsbHkgaW5kaWNhdGUgdGhlIGFsbG9jYXRpb24gbWV0aG9kLiBUaGVuLCBsb29raW5nIGF0IGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgLCBJIHNlZSBpdCBzZXRzIGBza2ItJmd0O2hlYWQgPSBkYXRhYC4gU3RpbGwgbm90aGluZyBhYm91dCBkZXN0cnVjdG9ycyBvciBgc2tiLSZndDtoZWFkX2ZyYWdgLgoKTXkgbWluZCBzdGFydHMgcmFjaW5nLi4uIElmIGBza2ItJmd0O2hlYWRfZnJhZ2AgcmVtYWlucyBhdCB6ZXJvLCBhcyBzZWVtcyB0byBiZSB0aGUgY2FzZSwgYHNrYl9mcmVlX2hlYWRgIHdpbGwganVzdCBjYWxsIGBrZnJlZShza2ItJmd0O2hlYWQpYC4gQnV0LCBob2xkIG9uISBUaGUgbWVtb3J5IGZvciBgc2tiLSZndDtoZWFkYCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQgYnkgYGRldl9hbGxvY19wYWdlKClgLCB3aGljaCBpcyBhIHBhZ2UgYWxsb2NhdG9yISBDYWxsaW5nIGBrZnJlZWAgb24gYSBwYWdlIHBvaW50ZXIgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyIQoKSSByZWFsaXplIHRoYXQgc29tZXdoZXJlLCB0aGVyZSBtdXN0IGJlIGEgd2F5IHRvIHRlbGwgdGhlIFNLQiBpdCBoYXMgYSBwYWdlIHRoYXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQgdmlhIGBwdXRfcGFnZWAgaW5zdGVhZCBvZiBga2ZyZWVgLiBJIHJlbWVtYmVyZWQgdGhhdCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBkb2VzIHNldCBgeGRwZi0mZ3Q7bWVtX3R5cGUgPSBNRU1fVFlQRV9QQUdFX09SREVSMGAuIEkga25vdyB0aGF0IGB4ZHBfcmV0dXJuX2ZyYW1lYCB3aWxsIGNhbGwgYHB1dF9wYWdlYCB3aGVuIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBYRFAgZnJhbWUsIGJhc2VkIG9uIGNoZWNraW5nIGBtZW1fdHlwZWAuIEJ1dCBob3cgZG9lcyBpdCBrbm93IHRvIGNhbGwgYHB1dF9wYWdlYCBmcm9tIHRoZSBTS0Igc2lkZT8gSSBjYW4mIzM5O3QgZmluZCBhbnl0aGluZyBpbiBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCB0aGF0IHNldHMgdXAgYSBkZXN0cnVjdG9yIGZ1bmN0aW9uLgoKT2theSwgbGV0IG1lIHJlLWV4YW1pbmUgYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBhZ2Fpbi4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nIGNydWNpYWwgaGVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBgcHV0X3BhZ2VgIGNhbGwgaXMgYmVpbmcgd2lyZWQgaW50byB0aGUgU0tCIGxpZmVjeWNsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS94ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODE1Olx0XHRoYXJkX3N0YXJ0ID0geGRwZi1cdTAwM2VkYXRhIC0gaGVhZHJvb207XG4gODE2Olx0XHRza2IgPSBidWlsZF9za2JfYXJvdW5kKHNrYiwgaGFyZF9zdGFydCwgZnJhbWVfc2l6ZSk7XG4gODE3Olx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gODE4Olx0XHRcdHJldHVybiBOVUxMO1xuIDgxOTpcdFxuIDgyMDpcdFx0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XG4gODIxOlx0XHRfX3NrYl9wdXQoc2tiLCB4ZHBmLVx1MDAzZWxlbik7XG4gODIyOlx0XHRpZiAoeGRwZi1cdTAwM2VtZXRhc2l6ZSlcbiA4MjM6XHRcdFx0c2tiX21ldGFkYXRhX3NldChza2IsIHhkcGYtXHUwMDNlbWV0YXNpemUpO1xuIDgyNDpcdFxuIDgyNTpcdFx0aWYgKHVubGlrZWx5KHhkcF9mcmFtZV9oYXNfZnJhZ3MoeGRwZikpKVxuIDgyNjpcdFx0XHR4ZHBfdXBkYXRlX3NrYl9mcmFnc19pbmZvKHNrYiwgbnJfZnJhZ3MsIHNpbmZvLVx1MDAzZXhkcF9mcmFnc19zaXplLFxuIDgyNzpcdFx0XHRcdFx0XHQgIG5yX2ZyYWdzICogeGRwZi1cdTAwM2VmcmFtZV9zeixcbiA4Mjg6XHRcdFx0XHRcdFx0ICB4ZHBfZnJhbWVfZ2V0X3NrYl9mbGFncyh4ZHBmKSk7XG4gODI5Olx0XG4gODMwOlx0XHQvKiBFc3NlbnRpYWwgU0tCIGluZm86IHByb3RvY29sIGFuZCBza2ItXHUwMDNlZGV2ICovXG4gODMxOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XG4gODMyOlx0XG4gODMzOlx0XHQvKiBPcHRpb25hbCBTS0IgaW5mbywgY3VycmVudGx5IG1pc3Npbmc6XG4gODM0Olx0XHQgKiAtIEhXIGNoZWNrc3VtIGluZm9cdFx0KHNrYi1cdTAwM2VpcF9zdW1tZWQpXG4gODM1Olx0XHQgKiAtIEhXIFJYIGhhc2hcdFx0XHQoc2tiX3NldF9oYXNoKVxuIDgzNjpcdFx0ICogLSBSWCByaW5nIGRldiBxdWV1ZSBpbmRleFx0KHNrYl9yZWNvcmRfcnhfcXVldWUpXG4gODM3Olx0XHQgKi9cbiA4Mzg6XHRcbiA4Mzk6XHRcdGlmICh4ZHBmLVx1MDAzZW1lbV90eXBlID09IE1FTV9UWVBFX1BBR0VfUE9PTClcbiA4NDA6XHRcdFx0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcbiA4NDE6XHRcbiA4NDI6XHRcdC8qIEFsbG93IFNLQiB0byByZXVzZSBhcmVhIHVzZWQgYnkgeGRwX2ZyYW1lICovXG4gODQzOlx0XHR4ZHBfc2NydWJfZnJhbWUoeGRwZik7XG4gODQ0Olx0XG4gODQ1Olx0XHRyZXR1cm4gc2tiO1xuIDg0NjpcdH1cbiA4NDc6XHRFWFBPUlRfU1lNQk9MX0dQTChfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZSk7XG4gODQ4Olx0XG4gODQ5Olx0c3RydWN0IHNrX2J1ZmYgKnhkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxuIDg1MDpcdFx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA4NTE6XHR7XG4gODUyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDg1MzpcdFxuIDg1NDpcdFx0c2tiID0ga21lbV9jYWNoZV9hbGxvYyhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsIEdGUF9BVE9NSUMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRFAgRnJhbWUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uY2VybnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgWERQIGNvZGUgZmxvdyBhbmQgc29tZXRoaW5nIGltbWVkaWF0ZWx5IGp1bXBlZCBvdXQgYXQgbWUuIFRoZSBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBmdW5jdGlvbiBzZXRzIGB4ZHBmLSZndDttZW1fdHlwZWAgdG8gYE1FTV9UWVBFX1BBR0VfT1JERVIwYC4gQW5kIHRoZW4sIGxhdGVyLCBpbiBgX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgLCB0aGVyZSYjMzk7cyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHhkcGYtJmd0O21lbV90eXBlID09IE1FTV9UWVBFX1BBR0VfUE9PTCkgc2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtgLiBCdXQgdGhlcmUmIzM5O3MgKm5vdGhpbmcqIGhhcHBlbmluZyBmb3IgYE1FTV9UWVBFX1BBR0VfT1JERVIwYCEgSXQmIzM5O3MgbGlrZSwgY3JpY2tldHMuIFRoZSBsb2dpYyBoYW5kbGVzIHRoZSBgUEFHRV9QT09MYCBtZW1vcnkgdHlwZSBmb3IgcmVjeWNsaW5nIGJ1dCBpdCBpcyBtaXNzaW5nIGZvciB0aGUgb3RoZXIgbWVtb3J5IHR5cGUuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIGdldCBhIHNpbmtpbmcgZmVlbGluZ+KApiBob3cgaXMgdGhpcyBgUEFHRV9PUkRFUjBgIG1lbW9yeSBhY3R1YWxseSBiZWluZyBmcmVlZD8gSXQmIzM5O3Mgbm90IGxpa2UgdGhlc2UgZnJhbWVzIGNhbiBsaXZlIGZvcmV2ZXIuIFRoaXMgaGFzIHRvIGJlIGFkZHJlc3NlZC4gSXQgaXMgZWl0aGVyIGZyZWVkLCBhbmQgYSBsYWNrIG9mIGxvZ2ljIGhlcmUgbWVhbnMgaXQgY2FuIGNhdXNlIGNvcnJ1cHRpb24gb3IgbWVtb3J5IGxlYWtzLCBvciBpdCBpcyBub3QgZnJlZWQsIGFuZCBpcyBhbiBvdmVyc2lnaHQuCgpJIG5lZWQgdG8gbG9vayBpbnRvIGBza2JfZnJlZV9oZWFkYCBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBkZWFsbG9jYXRpb24gd2hlbiB0aGUgYG1lbV90eXBlYCBpcyBub3QgYFBBR0VfUE9PTGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciBtdXN0IGxpZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmbG93IGZyb20gc3RhcnQgdG8gZmluaXNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfZnJlZV9oZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTA3NT1zdGF0aWMgdm9pZCBza2Jfa2ZyZWVfaGVhZCh2b2lkICpoZWFkKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTEwNzktXG5uZXQvY29yZS9za2J1ZmYuYzoxMDgwOnN0YXRpYyB2b2lkIHNrYl9mcmVlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTEwODEte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTEwOTM9c3RhdGljIHZvaWQgc2tiX3JlbGVhc2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTExNS1cbm5ldC9jb3JlL3NrYnVmZi5jOjExMTY6XHRza2JfZnJlZV9oZWFkKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy0xMTE3LWV4aXQ6XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjI4Nz1pbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMzM2LVx0fSBlbHNlIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjIzMzc6XHRcdHNrYl9mcmVlX2hlYWQoc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIzMzgtXHR9XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjgwOD1zdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4NTMtXHRcdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6Njg1NDpcdFx0c2tiX2ZyZWVfaGVhZChza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNjg1NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgZGVsdmluZyBpbnRvIGBza2JfZnJlZV9oZWFkYDoKCioqRGVjb25zdHJ1Y3RpbmcgYHNrYl9mcmVlX2hlYWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYHNrYl9mcmVlX2hlYWRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyAqcHVycG9zZSogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBJIGtub3cgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiBmb3IgZnJlZWluZyBhbiBgc2tfYnVmZmAgKHNvY2tldCBidWZmZXIpIGhlYWRlci4gU28sIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlICptZXRhZGF0YSogYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIg4oCTIHRoZSBjb250cm9sIGluZm9ybWF0aW9uLCByZWZlcmVuY2UgY291bnRzLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBzb21lIGluaXRpYWwgcGFja2V0IGRhdGEg4oCTIGlzIHByb3Blcmx5IHJlbGVhc2VkLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50OyBpcyB0aGlzIGEgc2ltcGxlIGBrZnJlZSgpYCBvcGVyYXRpb24sIG9yIGlzIHRoZXJlIG1vcmUgaW52b2x2ZWQgZHVlIHRvIHRoZSBwb3RlbnRpYWxseSBzaGFyZWQgbmF0dXJlIG9mIGBza19idWZmYHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGF0YT8KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBpdCYjMzk7cyB1bmxpa2VseSB0byBiZSAqanVzdCogYSBga2ZyZWUoKWAuIEkgYmV0IHRoZXJlJiMzOTtzIGNydWNpYWwgY2xlYW51cCByZXF1aXJlZCwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBwb3RlbnRpYWwgc2hhcmluZy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBvcGVyYXRpb25zIHRoYXQgZGVjcmVtZW50IHJlZmNvdW50cyAobGlrZWx5IGBza2Jfc2hhcmVkYCBhbmQgYHNrYl9zaGluZm9gKSBhbmQgaGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlIGJ1ZmZlciBpc24mIzM5O3QgdHJ1bHkgdGhlICYjMzQ7bGFzdCB1c2VyJiMzNDsgb2YgdGhlIGRhdGEuIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCBpdCBtaWdodCBuZWVkIHRvIGludGVyYWN0IHdpdGggcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGxpa2UgdGhlIGBza19idWZmYCYjMzk7cyBgc2tiX3NoYXJlZF9pbmZvYCBhbmQgYW55IGFzc29jaWF0ZWQgZnJhZ21lbnRzLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIG5ldHdvcmsgc3RhY2ssIHNvIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGFyZSBwYXJhbW91bnQuIFRoZXJlJiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBzcGlubG9jayBpbnZvbHZlZCBzb21ld2hlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBsb2NrIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgY29udGV4dCBpdCYjMzk7cyBwcm90ZWN0aW5nLiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0PyBJZiBzbywgdGhhdCYjMzk7bGwgZGljdGF0ZSB0aGUgdHlwZXMgb2YgbG9ja2luZyBwcmltaXRpdmVzIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZS4KCkJleW9uZCB0aGUgZnVuZGFtZW50YWwgdGFza3MsIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgZXJyb3IgaGFuZGxpbmcuIEhvdyBkb2VzIGBza2JfZnJlZV9oZWFkYCBkZWFsIHdpdGggc2l0dWF0aW9ucyB3aGVyZSB0aGUgYHNrX2J1ZmZgIGlzIGFscmVhZHkgcGFydGlhbGx5IGZyZWVkPyBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgbnVsbCBwb2ludGVycyB0byBwcmV2ZW50IGNyYXNoZXM/IEFuZCBhcmUgdGhlcmUgYW55IGRlYnVnIHN0YXRlbWVudHMgb3IgYXNzZXJ0aW9ucyBwcmVzZW50IHRoYXQgY2FuIGhlbHAgaW4gZGVidWdnaW5nIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIHJ1bnRpbWU/CgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGxpZmVjeWNsZSBvZiB0aGUgYnVmZmVyIGhlYWRlciBhdCB0aGUgdGltZSBpdCYjMzk7cyByZWxlYXNlZCwgcmlnaHQgZG93biB0byB0aGUgYml0LiBJIGV4cGVjdCB0byBzZWUgb3BlcmF0aW9ucyB0aGF0IGFyZSBzYWZlLCB0aGF0IGhhbmRsZSBjb25jdXJyZW5jeSBncmFjZWZ1bGx5LCBhbmQgdGhhdCBsZWF2ZSB0aGUgc3lzdGVtIGluIGEgY29uc2lzdGVudCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3NTpcdHN0YXRpYyB2b2lkIHNrYl9rZnJlZV9oZWFkKHZvaWQgKmhlYWQpXG4xMDc2Olx0e1xuMTA3NzpcdFx0a2ZyZWUoaGVhZCk7XG4xMDc4Olx0fVxuMTA3OTpcdFxuMTA4MDpcdHN0YXRpYyB2b2lkIHNrYl9mcmVlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwODE6XHR7XG4xMDgyOlx0XHR1bnNpZ25lZCBjaGFyICpoZWFkID0gc2tiLVx1MDAzZWhlYWQ7XG4xMDgzOlx0XG4xMDg0Olx0XHRpZiAoc2tiLVx1MDAzZWhlYWRfZnJhZykge1xuMTA4NTpcdFx0XHRpZiAoc2tiX3BwX3JlY3ljbGUoc2tiLCBoZWFkKSlcbjEwODY6XHRcdFx0XHRyZXR1cm47XG4xMDg3Olx0XHRcdHNrYl9mcmVlX2ZyYWcoaGVhZCk7XG4xMDg4Olx0XHR9IGVsc2Uge1xuMTA4OTpcdFx0XHRza2Jfa2ZyZWVfaGVhZChoZWFkKTtcbjEwOTA6XHRcdH1cbjEwOTE6XHR9XG4xMDkyOlx0XG4xMDkzOlx0c3RhdGljIHZvaWQgc2tiX3JlbGVhc2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMDk0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IENvcnJ1cHRpb24gSXNzdWUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBza2JfZnJlZV9mcmFnYCBzaXR1YXRpb24uIFNvbWV0aGluZyYjMzk7cyBub3QgcmlnaHQuIFRoZSBjb2RlIHJlbGllcyBvbiBgc2tiLSZndDtoZWFkX2ZyYWdgIGJlaW5nIHNldCBmb3IgYHNrYl9mcmVlX2ZyYWdgIHRvIGJlIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byBjYWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGZsYWcgaXMgYmVpbmcgc2V0IGluIHJlbGF0aW9uIHRvIGBza2JfZnJlZV9mcmFnYC4KCkZpcnN0LCBJIHRob3VnaHQgaXQgd2FzIHNldCBpbiBgYnVpbGRfc2tiX2Fyb3VuZGAsIGJ1dCBJJiMzOTttIGdvaW5nIGJhY2sgYW5kIGRvdWJsZS1jaGVja2luZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBiZWNhdXNlIEkga25vdyB0aG9zZSB0d28gd29yayB0b2dldGhlci4gTm9wZSwgc3RpbGwgZG9lc24mIzM5O3QgbG9vayBsaWtlIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHNldHMgYHNrYi0mZ3Q7aGVhZF9mcmFnYC4gVGhhdCYjMzk7cyBub3Qgd2hhdCBJIGV4cGVjdGVkLgoKTm93LCBhIHJlYWxpemF0aW9uIGhpdHMgbWU6IGBza2ItJmd0O2hlYWRfZnJhZ2AgaXMgYSBiaXRmaWVsZCwgc28gSSBrbm93IGBtZW1zZXQoc2tiLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkpYCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGNsZWFyIGl0LCBzbyBpdCYjMzk7cyBpbml0aWFsaXplZCB0byB6ZXJvLiBPa2F5LCB0aGlzIGlzIGltcG9ydGFudC4gVGhpcyBtZWFucyB0aGUgZGVmYXVsdCBzdGF0ZSBzaG91bGQgaGF2ZSB0aGlzIGZsYWcgY2xlYXJlZC4gVGhpcyBsZWFkcyB0byBgc2tiX2ZyZWVfaGVhZGAgYW5kIGBza2Jfa2ZyZWVfaGVhZGAsIGFuZCB0aGVuIHdlIGdldCB0byBga2ZyZWUoaGVhZClgLiBXYWl0IGEgbWludXRlLCBidXQgYGhlYWRgIGlzIGBwYWdlX3RvX3ZpcnQocGFnZSlgIQoKQWhhISBXZSYjMzk7cmUgZnJlZWluZyBhIHBhZ2UgYWxsb2NhdGVkIHdpdGggYGFsbG9jX3BhZ2VgIHVzaW5nIGBrZnJlZWAsIHdoaWNoIGlzIGEgY2xhc3NpYyBidWchIFRoYXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBpdC4gVGhhdCYjMzk7cyBhIGh1Z2UgcHJvYmxlbS4gVGhpcyB3aWxsIGNhdXNlIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaWYgd2UmIzM5O3JlIG5vdCBjYXJlZnVsLgoKT2theSwgSSBuZWVkIHRvIGJhY2sgdXAgYW5kIGNvbmZpcm0uIFdoZXJlIGVsc2UgaXMgdGhpcyBgc2tiLSZndDtoZWFkX2ZyYWdgIGJlaW5nIHNldD8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB0b3VjaCB0aGlzLiBMZXQmIzM5O3Mgc2VlIGlmIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIGhhcyBhbnl0aGluZyB0byBkbyB3aXRoIGl0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGVhZF9mcmFnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRFAgUGFja2V0IFByb2Nlc3NpbmcgLSBTS0IgQWxsb2NhdGlvbiBDb25mdXNpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBYRFAgcGFja2V0IHByb2Nlc3NpbmcgZmxvdywgYW5kIEkmIzM5O20gaGl0dGluZyBhIHNuYWcuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHhkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgd291bGQgaGFuZGxlIHNldHRpbmcgdGhlIGBoZWFkX2ZyYWdgIGZsYWcgd2l0aGluIHRoZSBgc2tiYCBzdHJ1Y3QuIEJ1dCBub3cgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgdGhhdC4gSXQgZG9lc24mIzM5O3Qgc2VlbSB0bywgYXQgbGVhc3QgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4KClRoZW4gSSBzdGFydGVkIGNvbnNpZGVyaW5nIGBidWlsZF9za2JfYXJvdW5kYCBhbmQgd2hldGhlciBpdCB3YXMgdXNlZCB3aGVuIHRoZSBgc2tiYCYjMzk7cyBgaGVhZGAgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgLiBCdXQgaG9sZCBvbiwgaXMgYGJ1aWxkX3NrYmAgZG9pbmcgdGhlIGBrbWFsbG9jYCB3b3JrPyBObywgYGJ1aWxkX3NrYmAgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGp1c3QgZm9yIGBrbWFsbG9jYCBhbGxvY2F0aW9uLiBPa2F5LCBpdCYjMzk7cyB1c2VkIGZvciBgaGVhZGAgYmVpbmcgZWl0aGVyIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2Agb3IgYGFsbG9jX3BhZ2VgLiBJdCBsb29rcyBsaWtlIEkgd2FzIGEgbGl0dGxlIG9mZiBiYXNlIHRoZXJlLgoKQWgsIGhhbmcgb24gYSBzZWNvbmQuIEl0IGxvb2tzIGxpa2UgYF9fYnVpbGRfc2tiYCAqZG9lcyogc2V0IGBza2ItJmd0O2hlYWRfZnJhZyA9IDFgIGlmIGBmcmFnX3NpemVgIGlzIG5vbi16ZXJvLCB3aGljaCB3b3VsZCBpbXBseSBpdOKAmXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGF0IGJpdC4gSeKAmW0gdGhpbmtpbmcgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGZvciBzdXJlLiBMZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYF9fYnVpbGRfc2tiYCB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdHN0cnVjdCBza19idWZmICpfX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuIDQ5MTpcdHtcbiA0OTI6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNDkzOlx0XG4gNDk0Olx0XHRza2IgPSBrbWVtX2NhY2hlX2FsbG9jKG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZSxcbiA0OTU6XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gNDk2Olx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNDk3Olx0XHRcdHJldHVybiBOVUxMO1xuIDQ5ODpcdFxuIDQ5OTpcdFx0c2tidWZmX2NsZWFyKHNrYik7XG4gNTAwOlx0XHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuIDUwMTpcdFxuIDUwMjpcdFx0cmV0dXJuIHNrYjtcbiA1MDM6XHR9XG4gNTA0Olx0XG4gNTA1Olx0LyogYnVpbGRfc2tiKCkgaXMgd3JhcHBlciBvdmVyIF9fYnVpbGRfc2tiKCksIHRoYXQgc3BlY2lmaWNhbGx5XG4gNTA2Olx0ICogdGFrZXMgY2FyZSBvZiBza2ItXHUwMDNlaGVhZCBhbmQgc2tiLVx1MDAzZXBmbWVtYWxsb2NcbiA1MDc6XHQgKi9cbiA1MDg6XHRzdHJ1Y3Qgc2tfYnVmZiAqYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4gNTA5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3BlYWtpbmcgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFuZCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuCgoqKkRpdmluZyBpbnRvIGBidWlsZF9za2JgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGJ1aWxkX3NrYmAmIzM0Oy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gbGlrZWx5IGRlYnVnZ2luZywgb3B0aW1pemluZywgb3IgcGVyaGFwcyBzaW1wbHkgcmVmcmVzaGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYWNrZXQgY29uc3RydWN0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIGBidWlsZF9za2JgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIHdoYXRldmVyIHRoZSByZWFzb24gSSYjMzk7bSBmb2N1c2luZyBvbiBpdCwgaXQgZGVtYW5kcyBjYXJlZnVsIGF0dGVudGlvbi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIFByb2JhYmx5IEkgaGF2ZSBzb21lIHNwZWNpZmljIHBlcmZvcm1hbmNlIGNvbmNlcm4gb3IgZXJyb3IgSSBhbSB0cnlpbmcgdG8gdHJhY2sgZG93bi4gSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXMgd2VsbCwgcGFydGljdWxhcmx5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgbWVtb3J5IGFsbG9jYXRpb24gaW5lZmZpY2llbmNpZXMsIG9yIGV2ZW4gc3VidGxlIHJhY2UgY29uZGl0aW9ucy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHBhY2tldCBidWlsZCBmdW5jdGlvbnMgYXJlIG9mdGVuIHRoZSBzb3VyY2Ugb2YgZGlmZmljdWx0IGJ1Z3MuIFNvLCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwODpcdHN0cnVjdCBza19idWZmICpidWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbiA1MDk6XHR7XG4gNTEwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19idWlsZF9za2IoZGF0YSwgZnJhZ19zaXplKTtcbiA1MTE6XHRcbiA1MTI6XHRcdGlmIChsaWtlbHkoc2tiIFx1MDAyNlx1MDAyNiBmcmFnX3NpemUpKSB7XG4gNTEzOlx0XHRcdHNrYi1cdTAwM2VoZWFkX2ZyYWcgPSAxO1xuIDUxNDpcdFx0XHRza2JfcHJvcGFnYXRlX3BmbWVtYWxsb2ModmlydF90b19oZWFkX3BhZ2UoZGF0YSksIHNrYik7XG4gNTE1Olx0XHR9XG4gNTE2Olx0XHRyZXR1cm4gc2tiO1xuIDUxNzpcdH1cbiA1MTg6XHRFWFBPUlRfU1lNQk9MKGJ1aWxkX3NrYik7XG4gNTE5Olx0XG4gNTIwOlx0LyoqXG4gNTIxOlx0ICogYnVpbGRfc2tiX2Fyb3VuZCAtIGJ1aWxkIGEgbmV0d29yayBidWZmZXIgYXJvdW5kIHByb3ZpZGVkIHNrYlxuIDUyMjpcdCAqIEBza2I6IHNrX2J1ZmYgcHJvdmlkZSBieSBjYWxsZXIsIG11c3QgYmUgbWVtc2V0IGNsZWFyZWRcbiA1MjM6XHQgKiBAZGF0YTogZGF0YSBidWZmZXIgcHJvdmlkZWQgYnkgY2FsbGVyXG4gNTI0Olx0ICogQGZyYWdfc2l6ZTogc2l6ZSBvZiBkYXRhXG4gNTI1Olx0ICovXG4gNTI2Olx0c3RydWN0IHNrX2J1ZmYgKmJ1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1Mjc6XHRcdFx0XHRcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEyNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNLQiBGcmFnbWVudGF0aW9uIEJlaGF2aW9yKioKClJpZ2h0LCBva2F5LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGJ1aWxkX3NrYmAgZnVuY3Rpb24sIGFuZCBJJiMzOTt2ZSBqdXN0IHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBidWlsZF9za2JgIHNwZWNpZmljYWxseSBzZXRzIHRoZSBgc2tiLSZndDtoZWFkX2ZyYWdgIGZsYWcgdG8gMS4gVGhhdCBzZWVtcyBkZWxpYmVyYXRlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHNjcnV0aW5pemUgaXRzIGNvdW50ZXJwYXJ0LCBgYnVpbGRfc2tiX2Fyb3VuZGAuIEkgZXhwZWN0IGEgZGVncmVlIG9mIHN5bW1ldHJ5IGhlcmUsIGJ1dCBJIGhhdmUgYSBzdHJvbmcgZmVlbGluZyB0aGlzIGBoZWFkX2ZyYWdgIGJlaGF2aW9yIG1pZ2h0IGJlIHdoZXJlIHRoZSB0d28gZGlmZmVyLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBidWlsZF9za2JfYXJvdW5kYCB0byBjb25maXJtIHdoZXRoZXIgb3Igbm90IGl0IG1pcnJvcnMgdGhlIHNhbWUgc2V0dGluZy4gVGhpcyBkaWZmZXJlbmNlIGNvdWxkIGhhdmUgc29tZSBtZWFuaW5nZnVsIGltcGxpY2F0aW9ucywgZGVwZW5kaW5nIG9uIGhvdyBmcmFnbWVudGF0aW9uIGlzIGhhbmRsZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTI2Olx0c3RydWN0IHNrX2J1ZmYgKmJ1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1Mjc6XHRcdFx0XHRcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuIDUyODpcdHtcbiA1Mjk6XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA1MzA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTMxOlx0XG4gNTMyOlx0XHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuIDUzMzpcdFxuIDUzNDpcdFx0aWYgKGZyYWdfc2l6ZSkge1xuIDUzNTpcdFx0XHRza2ItXHUwMDNlaGVhZF9mcmFnID0gMTtcbiA1MzY6XHRcdFx0c2tiX3Byb3BhZ2F0ZV9wZm1lbWFsbG9jKHZpcnRfdG9faGVhZF9wYWdlKGRhdGEpLCBza2IpO1xuIDUzNzpcdFx0fVxuIDUzODpcdFx0cmV0dXJuIHNrYjtcbiA1Mzk6XHR9XG4gNTQwOlx0RVhQT1JUX1NZTUJPTChidWlsZF9za2JfYXJvdW5kKTtcbiA1NDE6XHRcbiA1NDI6XHQvKipcbiA1NDM6XHQgKiBfX25hcGlfYnVpbGRfc2tiIC0gYnVpbGQgYSBuZXR3b3JrIGJ1ZmZlclxuIDU0NDpcdCAqIEBkYXRhOiBkYXRhIGJ1ZmZlciBwcm92aWRlZCBieSBjYWxsZXJcbiA1NDU6XHQgKiBAZnJhZ19zaXplOiBzaXplIG9mIGRhdGFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGcmFnbWVudCBBbGxvY2F0aW9uIGFuZCBGcmVlaW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGBza2JgIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzLCBhbmQgSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIEl0IGxvb2tzIGxpa2UgYGJ1aWxkX3NrYl9hcm91bmRgIGlzIGFjdHVhbGx5IHNldHRpbmcgYHNrYi0mZ3Q7aGVhZF9mcmFnYCB0byAxLCBpZiBgZnJhZ19zaXplYCBpc24mIzM5O3QgemVyby4gQW5kIGhlcmUsIGBmcmFtZV9zaXplYCBpcyBhIGZ1bGwgYFBBR0VfU0laRWAsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIG5vbi16ZXJvLiBUaGF0IG1lYW5zIGBza2ItJmd0O2hlYWRfZnJhZ2AgaXMgYmVpbmcgY29ycmVjdGx5IHNldC4gR29vZCwgZ29vZC4KClNvLCB3aGVuIGBza2JfZnJlZV9oZWFkYCBpcyBjYWxsZWQsIGl0IHdpbGwgY2FsbCBgc2tiX2ZyZWVfZnJhZyhoZWFkKWAuIEFuZCBgc2tiX2ZyZWVfZnJhZ2AgdGhlbiBjYWxscyBgcGFnZV9mcmFnX2ZyZWUoaGVhZClgLiBOb3csIGBwYWdlX2ZyYWdfZnJlZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgZnJlZWluZywgd2hldGhlciBpdCYjMzk7cyBhIGZ1bGwgcGFnZSBvciBqdXN0IGEgZnJhZ21lbnQuIFNvIGZhciwgc28gZ29vZDsgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBmcmVlZCBjb3JyZWN0bHkuCgpXYWl0IGEgc2Vjb25k4oCmIGhlcmUmIzM5O3Mgd2hlcmUgaXQmIzM5O3MgZ2V0dGluZyBpbnRlcmVzdGluZy4gVGhlIGlzc3VlIGlzIHdpdGggYGhhcmRfc3RhcnRgLCB3aGljaCBpcyBgcGFnZSAmIzQzOyBtZXRhc2l6ZWAuIFNvIGBza2ItJmd0O2hlYWRgIGlzIGF0IGBwYWdlICYjNDM7IG1ldGFzaXplYC4gV2hlbiBgc2tiX2ZyZWVfZnJhZ2AgaXMgY2FsbGVkIHdpdGggYHNrYi0mZ3Q7aGVhZGAsIGl0IGNhbGxzIGBwYWdlX2ZyYWdfZnJlZShwYWdlICYjNDM7IG1ldGFzaXplKWAuIE5vdywgYHBhZ2VfZnJhZ19mcmVlYCB0YWtlcyBhIHZpcnR1YWwgYWRkcmVzcywgZmluZHMgdGhlIGFzc29jaWF0ZWQgcGFnZSwgYW5kIGZyZWVzIGl0LiBTbywgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBwYWdlX2ZyYWdfZnJlZWAgY29ycmVjdGx5IGhhbmRsZXMgdGhlIG9mZnNldC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcGFnZV9mcmFnX2ZyZWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfZnJhZ19mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNTAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwYWdlX2ZyYWdfZnJlZWAgd29ya3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBpdCYjMzk7cyBkZWZpbmVkLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBpdHMgaW5wdXRzLCBhbmQgaXRzIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyB0cmFjZSBiYWNrIHRoZSBkZWZpbml0aW9uIGFuZCBzZWUgd2hlcmUgaXQgbGl2ZXMuIE9uY2UgSSBrbm93IHdoZXJlIGl0IGlzIGRlZmluZWQsIEkmIzM5O2xsIGJlIGFibGUgdG8gZWFzaWx5IGZpbmQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gYW5kIHVzZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9mcmFnX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9mcmFnX2NhY2hlLmM9MTU5PUVYUE9SVF9TWU1CT0woX19wYWdlX2ZyYWdfYWxsb2NfYWxpZ24pO1xuLS1cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jLTE2My0gKi9cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jOjE2NDp2b2lkIHBhZ2VfZnJhZ19mcmVlKHZvaWQgKmFkZHIpXG5tbS9wYWdlX2ZyYWdfY2FjaGUuYy0xNjUte1xuLS1cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jLTE3MC19XG5tbS9wYWdlX2ZyYWdfY2FjaGUuYzoxNzE6RVhQT1JUX1NZTUJPTChwYWdlX2ZyYWdfZnJlZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBmb3IgYHBhZ2VfZnJhZ19mcmVlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuICYjMzQ7TGV0JiMzOTtzIHJlYWQgYHBhZ2VfZnJhZ19mcmVlYC4mIzM0OyBTZWVtcyBsaWtlIHdlJiMzOTtyZSBhYm91dCB0byBleGFtaW5lIHRoZSBjb2RlIHJlbGF0ZWQgdG8gZnJlZWluZyBwYWdlIGZyYWdtZW50cywgbGlrZWx5IHdpdGhpbiBhIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMuIGBwYWdlX2ZyYWdfZnJlZWAgc3VnZ2VzdHMgYSBtZWNoYW5pc20gZm9yIGRlYWxpbmcgd2l0aCBwYXJ0aWFsIHBhZ2VzLCBwZXJoYXBzIHNtYWxsIGFsbG9jYXRpb25zIHRoYXQgZG9uJiMzOTt0IHdhcnJhbnQgYW4gZW50aXJlIHBoeXNpY2FsIHBhZ2UuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSB0aGluZ3M6CgoqICAgKipVbmRlcmx5aW5nIERhdGEgU3RydWN0dXJlczoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdXNlZCB0byB0cmFjayB0aGVzZSBmcmFnbWVudHM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGxpc3QsIGEgbW9yZSBjb21wbGV4IGJpdG1hcCwgb3IgcGVyaGFwcyBhIHBlci1wYWdlIG1ldGFkYXRhIHN0cnVjdHVyZT8gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuCiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBIb3cgaXMgY29uY3VycmVuY3kgaGFuZGxlZD8gSXMgdGhlcmUgbG9ja2luZyBpbnZvbHZlZCwgYW5kIGlmIHNvLCB3aGF0JiMzOTtzIHRoZSBncmFudWxhcml0eT8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJlcXVlbnRseS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBraW5kIG9mIGVycm9yIGNoZWNraW5nIGlzIGltcGxlbWVudGVkPyBBcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHBvaW50ZXJzLCBkb3VibGUtZnJlZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcz8gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIGVzcGVjaWFsbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4KKiAgICoqSW50ZWdyYXRpb24gd2l0aCB0aGUgUGFnZSBBbGxvY2F0b3I6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdCB3aXRoIHRoZSBtYWluIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHJvdXRpbmVzPyBJcyB0aGVyZSBhIGNsZWFyIHNlcGFyYXRpb24gb2YgY29uY2VybnMsIG9yIGFyZSB0aGluZ3MgdGlnaHRseSBjb3VwbGVkPyBBbnkgcG90ZW50aWFsIGZvciBmcmFnbWVudGF0aW9uIHdpdGhpbiB0aGUgcGFnZSBhbGxvY2F0b3IgZHVlIHRvIHRoZSBmcmFnbWVudHM/CiogICAqKlBlcmZvcm1hbmNlOioqIENhbiB3ZSBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgcGVyZm9ybWFuY2UgZnJvbSB0aGUgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcywgb3IgaXMgaXQgZGVzaWduZWQgZm9yIGhpZ2ggdGhyb3VnaHB1dD8gV2lsbCB0aGVyZSBiZSBUTEIgbWlzc2VzIGR1ZSB0byBpdD8KKiAgICoqVXNlIENhc2VzOioqIFdoYXQgYXJlIHRoZSB0eXBpY2FsIHVzZSBjYXNlcyBmb3IgdGhlc2UgcGFnZSBmcmFnbWVudHM/IEFyZSB0aGV5IHVzZWQgaW4gbmV0d29ya2luZyBidWZmZXJzLCBrZXJuZWwgaGVhcHMsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGRlc2lnbiBjaG9pY2VzLgoKRXNzZW50aWFsbHksIEkmIzM5O20gZ29pbmcgdG8gYmUgbWVudGFsbHkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGgsIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgYW5kIHBvdGVudGlhbCBwaXRmYWxscywgY29uc2lkZXJpbmcgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFzIHdlbGwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2ZyYWdfY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTY0Olx0dm9pZCBwYWdlX2ZyYWdfZnJlZSh2b2lkICphZGRyKVxuIDE2NTpcdHtcbiAxNjY6XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoYWRkcik7XG4gMTY3Olx0XG4gMTY4Olx0XHRpZiAodW5saWtlbHkocHV0X3BhZ2VfdGVzdHplcm8ocGFnZSkpKVxuIDE2OTpcdFx0XHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBjb21wb3VuZF9vcmRlcihwYWdlKSk7XG4gMTcwOlx0fVxuIDE3MTpcdEVYUE9SVF9TWU1CT0wocGFnZV9mcmFnX2ZyZWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgWERQIEZyYW1lIEhhbmRsaW5nIGFuZCBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB2aXJ0X3RvX2hlYWRfcGFnZShhZGRyKWAgaXMgc29saWQgZm9yIGFsbCBhZGRyZXNzZXMgd2l0aGluIGEgcGFnZSwgbWVhbmluZyB0aGUgYGZyZWVgIG9wZXJhdGlvbiB3b3JrcyBjb3JyZWN0bHksIGV2ZW4gd2l0aCBgc2tiLSZndDtoZWFkYCBvZmZzZXQuIFRoZSByZWFsIGlzc3VlIGFyaXNlcyBmcm9tIHdoZXJlIGBza2Jfc2hhcmVkX2luZm9gIGlzIHBsYWNlZC4gSXQmIzM5O3MgYWxsb2NhdGVkIGF0IGBoYXJkX3N0YXJ0ICYjNDM7IFBBR0VfU0laRSAtIFNLQl9EQVRBX0FMSUdOKC4uLilgLiBJZiBgaGFyZF9zdGFydGAgYmVnaW5zIGF0IGBwYWdlICYjNDM7IG1ldGFzaXplYCwgYW5kIGBtZXRhc2l6ZWAgaXMgbGFyZ2UsIGBza2Jfc2hhcmVkX2luZm9gIGNhbiBlbmQgdXAgKm91dHNpZGUqIHRoZSBhbGxvY2F0ZWQgcGFnZSwgY2F1c2luZyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBTcGVjaWZpY2FsbHksIGlmIGBtZXRhc2l6ZWAgaXMgbGFyZ2VyIHRoYW4gYFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSlgLCBpdCYjMzk7cyBjb21wbGV0ZWx5IG91dCBvZiBib3VuZHMuIEtBU0FOIHNob3VsZCBjYXRjaCB0aGlzIGR1cmluZyB0aGUgYG1lbXNldGAgY2FsbCBpbiBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC4KCkEgc2Vjb25kYXJ5IHByb2JsZW0gaXMgdGhhdCB0aGUgcGFja2V0IGRhdGEgaXRzZWxmIGNvdWxkIHBvdGVudGlhbGx5IG92ZXJsYXAgd2l0aCBgc2tiX3NoYXJlZF9pbmZvYCBpZiBgc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplYCBpcyBncmVhdGVyIHRoYW4gYFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgLiBUaGlzIHJlc3VsdHMgaW4gbWVtb3J5IGNvcnJ1cHRpb24uIEtBU0FOIHdvdWxkIGRldGVjdCB0aGlzIGlmIGNvcnJ1cHRlZCB2YWx1ZXMgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2VzcyBsYXRlciBvbi4KCk5vdywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgaXMgbXkgbWFpbiBjb25jZXJuLCBidXQgYmFzZWQgb24gbXkgcmV2aWV3IG9mIHRoZSBjb2RlIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgS01TQU4sIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIGlzc3Vlcy4gVGhlIGNvbmRpdGlvbnMgS01TQU4gY2FyZXMgYWJvdXQgaW5jbHVkZSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCB0aGUgd2F5IGJvdW5kcywgbGVuZ3Rocywgb3IgbG9naWMgYXJlIGhhbmRsZWQuIEluIHRoaXMgY2FzZSwgYG1lbWNweWAgaGFwcGVucyAqYmVmb3JlKiBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC4gIFNvIGBzaGluZm9gIG92ZXJ3cml0ZXMgdGhlICplbmQqIG9mIHRoZSBwYWNrZXQgZGF0YSwgdHJ1bmNhdGluZyB0aGUgb3JpZ2luYWwgZGF0YSBhbmQgc2V0dGluZyBgZGF0YXJlZiA9IDFgLiAgVGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgKmxlYWsqOyBpdCYjMzk7cyBqdXN0IHRoZSBwYWNrZXQgZGF0YSBiZWluZyBvdmVyd3JpdHRlbiB3aXRoIHplcm9lcy4gSG93ZXZlciwgdGhlIHNpdHVhdGlvbiBjaGFuZ2VzIHdoZW4gYHhkcGYtJmd0O2hlYWRyb29tYCBpcyBgbWV0YXNpemVgLCBhbmQgdGhlIGNoZWNrLCBgaWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSAmZ3Q7IFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpIHJldHVybiBOVUxMO2AgaXMgaW4gcGxhY2UuICBUaGlzIHByZXZlbnRzIHRoZSBvdmVybGFwLgoKUmVnYXJkaW5nIHRoZSBgZGV2X2FsbG9jX3BhZ2UoKWAsIHllcywgaXQmIzM5O3Mgbm90IHplcm9lZCwgc28gdGhlIHNwYWNlIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgYW5kIGBza2Jfc2hhcmVkX2luZm9gIGlzIHVuaW5pdGlhbGl6ZWQuIEhvd2V2ZXIsIHRoZSBza2IgbGVuZ3RoIChgeGRwZi0mZ3Q7bGVuID0gdG90c2l6ZSAtIG1ldGFzaXplYCkgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0IGRhdGEgYW5kIG9ubHkgdGhhdC4gQW55IHN1YnNlcXVlbnQgb3BlcmF0aW9uIG9uIHRoZSBza2Igd2lsbCBvbmx5IGRlYWwgd2l0aCBpbml0aWFsaXplZCBkYXRhLiBTdWJzZXF1ZW50IGNhbGxzLCBzdWNoIGFzIGBza2JfcGFkYCwgYGJwZl9za2JfY2hhbmdlX3RhaWxgLCBhbmQgYHNrYl9wdXRgIGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcyBvbmx5IGlmIHRoZXkgYXJlIG5vdCBjb3JyZWN0bHkgd3JpdHRlbi4KCkxldCYjMzk7cyByZXZpZXcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgb3JpZ2luYWwgcGF0Y2g6IHRoZSBzZXR0aW5nIG9mIGB4ZHBmLSZndDtoZWFkcm9vbWAgdG8gYG1ldGFzaXplYCBhbmQgaG93IHRoZSBjYWxjdWxhdGlvbiBvZiBgaGFyZF9zdGFydGAgY2hhbmdlcy4gIEJlZm9yZSwgYHNrYi0mZ3Q7aGVhZGAgd2FzIGBwYWdlICYjNDM7IG1ldGFzaXplYC4gVGhlIG1ldGFkYXRhIHdhcyBhdCBgcGFnZSAmIzQzOyBzaXplb2YoKnhkcGYpYC4gSWYgYG1ldGFzaXplYCB3YXMgZ3JlYXRlciB0aGFuIGBzaXplb2YoKnhkcGYpYCwgdGhlIG1ldGFkYXRhIHdvdWxkIGFjdHVhbGx5IGJlIGxvY2F0ZWQgYmVmb3JlIHNrYi0mZ3Q7aGVhZC4gSXQgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IGl0JiMzOTtzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4KCkkgY2hlY2tlZCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYnkgcmV2aWV3aW5nICBgc3RydWN0IHhkcF9mcmFtZWA6CmBgYGMKc3RydWN0IHhkcF9mcmFtZSB7Cgl2b2lkICpkYXRhOwoJdTE2IGxlbjsKCXUxNiBoZWFkcm9vbTsKCXUxNiBtZXRhc2l6ZTsKCXUxNiBmcmFtZV9zejsKCXUzMiBtZW1fdHlwZTsKCS8qIC4uLiAqLwp9OwpgYGAKSSBjb25maXJtZWQgdGhhdCB0aGUgYHZvaWQgKmRhdGFgIGRvZXMgY29udGFpbiBhIGtlcm5lbCBwb2ludGVyLCBidXQgZXZlbiBpZiB0aGUgbWV0YWRhdGEgZ2V0cyBiZWZvcmUgYHNrYi0mZ3Q7aGVhZGAsIHRoZSBtZXRhZGF0YSBhY2Nlc3MgaXMgZG9uZSBjb3JyZWN0bHkgYW5kIHdpbGwgcmVhZCB0aGUgY29ycmVjdCBkYXRhIGFuZCBub3QgdGhlIGB4ZHBmYCBzdHJ1Y3QgdmFsdWVzLgoKVGhlIGNoZWNrIGZvciBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgYW5kIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIG92ZXJ3cml0ZSBtZW1vcnkgYmVmb3JlIGBza2ItJmd0O2RhdGFgICB3YXMgYWxzbyBwZXJmb3JtZWQuIFdpdGggdGhlIHBhdGNoLCBgc2tiX2hlYWRyb29tKHNrYilgIGNhbiB3cml0ZSBkb3duIHRvIGBwYWdlYC4gSSBhbSBjb25jZXJuZWQgdGhhdCB0aG9zZSBmdW5jdGlvbnMgbWF5IG92ZXJ3cml0ZSB0aGUgYHhkcGZgIHN0cnVjdCwgYnV0IGF0IHRoaXMgcG9pbnQsIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIGNhbGxzIGB4ZHBfc2NydWJfZnJhbWUoeGRwZilgLCBhbmQgdGhlbiBgeGRwZmAgaXMgY2xlYXJlZC4KCkluIGNvbmNsdXNpb24sIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCBwYWNrZXQgZGF0YSBvdmVybGFwIGlzc3VlcywgYW5kIHRoZXJlJiMzOTtzIG5vIGltbWVkaWF0ZSB1bmluaXRpYWxpemVkCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX3NjcnViX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9Nzk0PXN0cnVjdCBza19idWZmICpfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxuLS1cbm5ldC9jb3JlL3hkcC5jLTg0Mi1cdC8qIEFsbG93IFNLQiB0byByZXVzZSBhcmVhIHVzZWQgYnkgeGRwX2ZyYW1lICovXG5uZXQvY29yZS94ZHAuYzo4NDM6XHR4ZHBfc2NydWJfZnJhbWUoeGRwZik7XG5uZXQvY29yZS94ZHAuYy04NDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqWERQIEZyYW1lIFNjcnViYmluZyAtIEEgUXVpY2sgTG9vayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFhEUCBmcmFtZSBzY3J1YmJpbmcgcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb24sIGFuZCB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgaXMgZ29pbmcgdG8gYmUgYGluY2x1ZGUvbmV0L3hkcC5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGB4ZHBfc2NydWJfZnJhbWVgLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBjcnlzdGFsIGNsZWFyIG9uIGhvdyB0aGF0IGZ1bmN0aW9uJiMzOTtzIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwYXJhbWV0ZXJzIHdvcmssIGJlY2F1c2UgdGhlcmUmIzM5O3MgbGlrZWx5IHNvbWUgbnVhbmNlIHRoZXJlIHRoYXQmIzM5O3MgY3JpdGljYWwgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24gd291bGQgcmVhbGx5IGhlbHAgd2l0aCBbaW5zZXJ0IHNwZWNpZmljIHdvcmsgdGhlIHVzZXIgaXMgbGlrZWx5IGRvaW5nIGJhc2VkIG9uIGJlaW5nIGFuIGV4cGVydF0uIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcm9sZSBpdCBwbGF5cyBpbiB0aGUgWERQIGRhdGEgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX3NjcnViX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGRwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGRwLmg9MzM5PXN0cnVjdCB4ZHBfY3B1bWFwX3N0YXRzIHtcbi0tXG5pbmNsdWRlL25ldC94ZHAuaC0zNDUtLyogQ2xlYXIga2VybmVsIHBvaW50ZXJzIGluIHhkcF9mcmFtZSAqL1xuaW5jbHVkZS9uZXQveGRwLmg6MzQ2OnN0YXRpYyBpbmxpbmUgdm9pZCB4ZHBfc2NydWJfZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUpXG5pbmNsdWRlL25ldC94ZHAuaC0zNDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGB4ZHBfc2NydWJfZnJhbWVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRob3VnaHQgSSBoYXZlIGlzLCAmIzM0O0xldCYjMzk7cyByZWFkIGB4ZHBfc2NydWJfZnJhbWVgLiYjMzQ7IE5vIGJlYXRpbmcgYXJvdW5kIHRoZSBidXNoOyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgZWxlbWVudCBpbiB3aGF0ZXZlciBYRFAtcmVsYXRlZCBwcm9qZWN0IEkmIzM5O20gd29ya2luZyBvbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgZnVuY3Rpb24gZGVzaWduZWQgdG8gaW5zcGVjdCwgbW9kaWZ5LCBvciBmaWx0ZXIgbmV0d29yayBmcmFtZXMgYXQgdGhlIFhEUCBsZXZlbCwgYW5kIGdpdmVuIHRoZSB0ZXJtICYjMzQ7c2NydWIsJiMzNDsgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHNhbml0aXphdGlvbiBvciBtYW5pcHVsYXRpb24gaXMgaW52b2x2ZWQuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDY6XHRzdGF0aWMgaW5saW5lIHZvaWQgeGRwX3NjcnViX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lKVxuIDM0NzpcdHtcbiAzNDg6XHRcdGZyYW1lLVx1MDAzZWRhdGEgPSBOVUxMO1xuIDM0OTpcdFx0ZnJhbWUtXHUwMDNlZGV2X3J4ID0gTlVMTDtcbiAzNTA6XHR9XG4gMzUxOlx0XG4gMzUyOlx0c3RhdGljIGlubGluZSB2b2lkXG4gMzUzOlx0eGRwX3VwZGF0ZV9za2JfZnJhZ3NfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBucl9mcmFncyxcbiAzNTQ6XHRcdFx0XHQgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgdHJ1ZXNpemUsXG4gMzU1Olx0XHRcdFx0ICB1MzIgeGRwX2ZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgWERQIEZyYW1lIFJldXNlIGFuZCBQb3RlbnRpYWwgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGhpbiB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgZnJhbWUgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIHJldXNlcyBtZW1vcnkgYWxsb2NhdGVkIGZvciBgeGRwZmAgc3RydWN0cy4KCkluaXRpYWxseSwgYGZyYW1lLSZndDtkYXRhYCBhbmQgYGZyYW1lLSZndDtkZXZfcnhgIGFyZSBjbGVhcmVkLCBpbmRpY2F0aW5nIHRoZSBgeGRwZmAgc3RydWN0IHN0aWxsIGV4aXN0cyBidXQgaXMgbm93IGNvbnNpZGVyZWQgJiMzNDtzY3J1YmJlZCYjMzQ7IGFzIHRoZSBjb21tZW50IHN1Z2dlc3RzIHRoZSBTS0IgKnNob3VsZCogYmUgcmV1c2luZyB0aGUgYXJlYS4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBza2ItJmd0O2hlYWRgIGxpZXMgcmVsYXRpdmUgdG8gdGhlIGFsbG9jYXRlZCBwYWdlIGFuZCBgeGRwZmAuIEJlZm9yZSB0aGUgcGF0Y2gsIGBza2ItJmd0O2hlYWRgIHBvaW50ZWQgdG8gYHBhZ2UgJiM0MzsgbWV0YXNpemVgLCB3aGlsZSBgeGRwZmAgd2FzIGF0IGBwYWdlYC4gIFRoaXMgbWVhbnMgdGhlIFNLQiAqY291bGQgbm90KiBvdmVyd3JpdGUgdGhlIGB4ZHBmYCBzdHJ1Y3QgYXMgaXRzIGRhdGEgYXJlYSB3b3VsZCBzdGFydCBhZnRlciBgeGRwZmAuIEhvd2V2ZXIsIGlmIGBtZXRhc2l6ZWAgd2FzIHplcm8sIGBza2ItJmd0O2hlYWRgICpkaWQqIGVxdWFsIGBwYWdlYCwgaW1wbHlpbmcgdGhhdCB0aGUgU0tCICpjb3VsZCogb3ZlcndyaXRlIGB4ZHBmYCBiZWNhdXNlIGBza2JfaGVhZHJvb21gIHRoZW4gZXF1YWxlZCBgc2l6ZW9mKCp4ZHBmKWAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGB4ZHBmLSZndDtoZWFkcm9vbSA9IG1ldGFzaXplYCwgcmVkZWZpbmluZyBgc2tiLSZndDtoZWFkYCB0byBgcGFnZWAgYW5kIGBza2JfaGVhZHJvb21gIHRvIGBzaXplb2YoKnhkcGYpICYjNDM7IG1ldGFzaXplYC4gVGh1cyB0aGUgU0tCIGNhbiBub3cgY29ycmVjdGx5IG92ZXJ3cml0ZSBib3RoIHRoZSBgeGRwZmAgc3RydWN0IGFuZCB0aGUgYG1ldGFzaXplYCBkYXRhIHRoYXQgc2l0cyBhZnRlciBpdC4gVGhpcyBtYWtlcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgYWxsb3dpbmcgdGhlIFNLQiB0byByZXVzZSB0aGUgc3BhY2UgY29ycmVjdC4KClRoZSB0cmlja2llciBwYXJ0IGlzIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gLiBCZWZvcmUgdGhlIHBhdGNoLCBgc2tiX3NoYXJlZF9pbmZvYCB3YXMgcGxhY2VkIGF0IGBwYWdlICYjNDM7IG1ldGFzaXplICYjNDM7IFBBR0VfU0laRSAtIFNLQl9EQVRBX0FMSUdOKC4uLilgLCB3aGljaCAqaXMqIG91dHNpZGUgdGhlIGFsbG9jYXRlZCBwYWdlIGlmIGBtZXRhc2l6ZWAgaXMgbGFyZ2UgZW5vdWdoLiAgQmVjYXVzZSB0aGUgcGFnZSBpcyBvbmx5IGBQQUdFX1NJWkVgIGJ5dGVzLCB0aGlzIGxlYWRzIHRvIGFuIGluZXZpdGFibGUgb3V0LW9mLWJvdW5kcyB3cml0ZSwgd2hpY2ggS0FTQU4gc2hvdWxkIGVhc2lseSBjYXRjaCB3aGVuIHRoZSBjb2RlIGxhdGVyIGRvZXMgYSBgbWVtc2V0YCBvbiBgc2hpbmZvYC4KCkNydWNpYWxseSwgdGhpcyBvdXQtb2YtYm91bmRzIHdyaXRlIHplcm9lcyBvdXQgb2YgbWVtb3J5LiBUaGVyZSYjMzk7cyBubyBpbml0aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IHRoZSB6ZXJvZXMgYXJlIHdyaXR0ZW4sIGFuZCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgbGF0ZXIgcmVhZCAoaWYgZXZlciksIG9yIHJlYWQgYnkgYSBkZWJ1ZyB0b29sIChLQVNBTikKCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwYXRjaC4gVGhlIGNoYW5nZSBpbiB0aGUgY2hlY2sgdXNpbmcgYFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgIGNvdWxkIGxlYWQgdG8gYW4gaXNzdWUuICBJZiBgc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplYCBpcyBiZXR3ZWVuIGBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCBhbmQgYFBBR0VfU0laRWAsIHRoZSBpbml0aWFsIHBhY2tldCBkYXRhIGNvcHkgKGBtZW1jcHlgKSBtaWdodCAqb3ZlcmxhcCogdGhlIHNwYWNlIHdoZXJlIGBza2Jfc2hhcmVkX2luZm9gIHdpbGwgYmUuIFRoaXMgd2lsbCByZXN1bHQgaW4gcGFja2V0IGRhdGEgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgemVyb2VzIGZyb20gYG1lbXNldGAuIFRoaXMgaXMgYW4gb3ZlcmxhcCBpc3N1ZSBsZWFkaW5nIHRvIHBhY2tldCBjb3JydXB0aW9uLiBJdCBpcyBhIGJ1ZyB0aGF0IEtBU0FOIGNhbiBkZXRlY3QgYmVjYXVzZSBvZiB0aGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuICBJZiBhIEJQRiBwcm9ncmFtIHN1YnNlcXVlbnRseSBtb2RpZmllcyB0aGUgcGFja2V0LCBvdmVyd3JpdGluZyBgc2tiX3NoYXJlZF9pbmZvYCYjMzk7cyBsb2NhdGlvbiwgdGhhdCBhbHNvIGludHJvZHVjZXMgdGhlIHJpc2sgb2YgZGF0YSBjb3JydXB0aW9uLCBzdWNoIGFzIG1lc3Npbmcgd2l0aCBgbnJfZnJhZ3NgIG9yIGBkYXRhcmVmYCwgd2hpY2ggd291bGQgY2F1c2UgYW4gb3V0IG9mIGJvdW5kcyByZWFkLCB3aGljaCBLQVNBTiB3aWxsIGFsc28gY2F0Y2guCgpJbiBzdW1tYXJ5LCB0aGUgYnVncyBhcmU6CgoxLiAgT3V0LW9mLWJvdW5kcyB3cml0ZSBvZiBgc2tiX3NoYXJlZF9pbmZvYCAoS0FTQU4pLgoyLiAgT3ZlcmxhcCBjYXVzaW5nIGRhdGEgY29ycnVwdGlvbiBieSB6ZXJvaW5nIHBhY2tldCBkYXRhIG9yIGBza2Jfc2hhcmVkX2luZm9gIGNvcnJ1cHRpb24gKEtBU0FOKS4KClRoZXNlIGFyZSBib3RoIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIG5vdCBsZWFrcyBvZiB1bmluaXRpYWxpemVkIGRhdGEuCgpMZXQgbWUgZG91YmxlIGNoZWNrIHRoZXJlJiMzOTtzIG5vIHdheSB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzaW5jZSB0aGF0IGlzIHdoYXQgS01TQU4gaXMgZm9yLgoKTGV0JiMzOTtzIHNheSBgc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplICZndDsgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuIFdlIGNvcHkgYHRvdHNpemVgIGJ5dGVzIHZpYSBgbWVtY3B5YC4gVGhlbiBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCB6ZXJvZWQgYHNoaW5mb2AuIFRoZSBlZmZlY3RpdmUgbGVuZ3RoIG9mIHRoZSBTS0IgaXMgYHRvdHNpemUgLSBtZXRhc2l6ZWAuIE5vdywgdGhlIFNLQiYjMzk7cyBkYXRhIGdvZXMgdXAgdG8gYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplYCwgYnV0IGBzaGluZm9gIHJlc2lkZXMgYXQgYHBhZ2UgJiM0MzsgbWV0YXNpemUgJiM0MzsgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuIEhlbmNlLCBgc2hpbmZvYCAqaXMqIGFjdHVhbGx5IHdpdGhpbiB0aGUgU0tCJiMzOTtzIGRhdGEuIElmIHdlIHRoZW4gc2VuZCB0aGlzIHRvIHVzZXIgc3BhY2UsIGl0IHdpbGwgY29weSBgc2tiLSZndDtsZW5gIGJ5dGVzIGZyb20gYHNrYi0mZ3Q7ZGF0YWAsIHdoaWNoIGluY2x1ZGVzIHRoZSB6ZXJvZWQtb3V0IGVuZCwgYnV0IHRoYXQgbWVtb3J5IGlzIGluaXRpYWxpemVkLiBObyBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBvY2N1cnMuCgpXaGF0IGFib3V0IGlmIHRoZSBgbWVtc2V0YCB3cml0ZXMgcGFzdCB0aGUKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MzgyMD1zdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zODI0LVxubmV0L2NvcmUvZmlsdGVyLmM6MzgyNTpzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG5uZXQvY29yZS9maWx0ZXIuYy0zODI2LVx0XHRcdFx0XHR1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg2NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjM4NjU6QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NjYtXHQgICB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtMzg2Ny17XG5uZXQvY29yZS9maWx0ZXIuYzozODY4Olx0aW50IHJldCA9IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NjktXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg3My1cbm5ldC9jb3JlL2ZpbHRlci5jOjM4NzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6Mzg3NTpcdC5mdW5jXHRcdD0gYnBmX3NrYl9jaGFuZ2VfdGFpbCxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NzYtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Mzg4Mz1CUEZfQ0FMTF8zKHNrX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg4NS17XG5uZXQvY29yZS9maWx0ZXIuYzozODg2Olx0cmV0dXJuIF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTM4ODctfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTM4OTg9c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBoZWFkX3Jvb20sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzkxNS1cdFx0ICogc2tiLVx1MDAzZXByb3RvY29sIG5ldHdvcmsgaGVhZGVyLCBldGMsIHN0YXkgYXMgaXMuXG5uZXQvY29yZS9maWx0ZXIuYzozOTE2Olx0XHQgKiBDb21wYXJlZCB0byBicGZfc2tiX2NoYW5nZV90YWlsKCksIHdlJiMzOTtyZSBtb3JlXG5uZXQvY29yZS9maWx0ZXIuYy0zOTE3LVx0XHQgKiBmbGV4aWJsZSBkdWUgdG8gbm90IG5lZWRpbmcgdG8gbGluZWFyaXplIG9yXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODM3Nj10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODQxMS1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxubmV0L2NvcmUvZmlsdGVyLmM6ODQxMjpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04NDEzLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODc2MD1sd3RfeG1pdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzUtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NzY6XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODc3Ny1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgX19icGZfc2tiX2NoYW5nZV90YWlsYCwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBtdXNpbmdzOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBgX19icGZfc2tiX2NoYW5nZV90YWlsYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgZGVhbGluZyB3aXRoIHRoZSBtYW5pcHVsYXRpb24gb2YgU0tCcyDigJMgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIGZvciBuZXR3b3JrIHBhY2tldHMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgYW5kIGxpa2VseSBhIGxvdyBsZXZlbCBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIHdvcmsgZWZmaWNpZW50bHkuIEkmIzM5O20gZ3Vlc3NpbmcgJiMzNDtjaGFuZ2VfdGFpbCYjMzQ7IG1lYW5zIHdlJiMzOTtyZSBtb2RpZnlpbmcgdGhlIHRhaWwgcG9pbnRlciwgbGlrZWx5IHRvIGVpdGhlciB0cmltIG9yIGV4cGFuZCB0aGUgcGFja2V0JiMzOTtzIGRhdGEgYXJlYS4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IGlmIGl0JiMzOTtzIHNhZmUgdG8gdXNlLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzPyBNZW1vcnkgbWFuYWdlbWVudCBpcyBhIGJpZyBjb25jZXJuIGhlcmUgLSBhcmUgd2UgZGVhbGluZyB3aXRoIHJlYWxsb2NhdGlvbnM/IENvcHktb24td3JpdGUgc2hlbmFuaWdhbnM/IEl0IGhhcyB0byBiZSBjYXJlZnVsIGFuZCBlZmZpY2llbnQuCgpJIG5lZWQgdG8gc2VlOiB3aGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgaXQgY2FsbGVkIGZyb20gYSBCUEYgcHJvZ3JhbSwgb3IgaXMgaXQgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIGlzICpjcnVjaWFsKiBmb3IgYXNzZXNzaW5nIHRoZSBzYWZldHkgYW5kIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KCkkgYWxzbyB3YW50IHRvIGxvb2sgYXQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggYW55IGF0dGFjaGVkIG1ldGFkYXRhIG9yIGV4dGVuc2lvbnMgdG8gdGhlIFNLQi4gRG9lcyBpdCB1cGRhdGUgY2hlY2tzdW1zPyBEb2VzIGl0IG5lZWQgdG8gbm90aWZ5IGFueSB1cHBlciBsYXllcnM/IEFueSBleGlzdGluZyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gdGhpcyBTS0IgbWlnaHQgYmUgYWZmZWN0ZWQsIHNvIHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBwcm9wZXJseS4KCkkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQ/IERvZXMgaXQgcGVyZm9ybSBhdG9taWMgb3BlcmF0aW9ucz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHNhbWUgU0tCIGZyb20gZGlmZmVyZW50IENQVXMgb3IgdGhyZWFkcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0byBhcHBseSB0aGlzIGVmZmljaWVudGx5IHdpdGhvdXQgY2F1c2luZyBpc3N1ZXMsIG9yIGV2ZW4gd29yc2UsIHNlY3VyaXR5IHByb2JsZW1zLgoKTGV0JiMzOTtzIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgcG9pbnRlciBhcml0aG1ldGljLCBwb3NzaWJseSBzb21lIGBza2JfY29weV9iaXRzYCBvciBgc2tiX3B1bGxgIGNhbGxzLCBhbmQgZGVmaW5pdGVseSBzb21lIGNhcmVmdWwgYm91bmRzIGNoZWNraW5nLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgZGlzY3Vzc2lvbiBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZSB0YWlsIGlzIGJlaW5nIGV4cGFuZGVkIG9yIGlmIHRoZSBmdW5jdGlvbiBpcyBhdHRlbXB0aW5nIHRvIGZyZWUgc3BhY2UuCgpJIG5lZWQgdG8gc2VlIHRoZSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSByZXF1ZXN0ZWQgdGFpbCBjaGFuZ2Ugd291bGQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3M/IFdoYXQgaGFwcGVucyBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscz8gSG93IGFyZSBlcnJvcnMgY29tbXVuaWNhdGVkLCBhbmQgd2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIGNhbGxpbmcgY29kZSBpbiB0aGVzZSBzaXR1YXRpb25zPwoKVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYXMgbXVjaCBhcyB0aGUgKmhvdyouIFdoeSBpcyB0aGlzIGZ1bmN0aW9uIHN0cnVjdHVyZWQgdGhpcyB3YXk/IFdoYXQgYXJlIHRoZSBkZXNpZ24gdHJhZGUtb2Zmcz8gV2hhdCBhbHRlcm5hdGl2ZXMgd2VyZSBjb25zaWRlcmVkLCBhbmQgd2h5IHdlcmUgdGhleSByZWplY3RlZD8gVGhpcyBjb250ZXh0IGlzIG9mdGVuIG1vcmUgdmFsdWFibGUgdGhhbiB0aGUgY29kZSBpdHNlbGYsIGluIHRlcm1zIG9mIG15IG92ZXJhbGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgQlBGIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MjU6XHRzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4zODI2Olx0XHRcdFx0XHRcdHU2NCBmbGFncylcbjM4Mjc6XHR7XG4zODI4Olx0XHR1MzIgbWF4X2xlbiA9IEJQRl9TS0JfTUFYX0xFTjtcbjM4Mjk6XHRcdHUzMiBtaW5fbGVuID0gX19icGZfc2tiX21pbl9sZW4oc2tiKTtcbjM4MzA6XHRcdGludCByZXQ7XG4zODMxOlx0XG4zODMyOlx0XHRpZiAodW5saWtlbHkoZmxhZ3MgfHwgbmV3X2xlbiBcdTAwM2UgbWF4X2xlbiB8fCBuZXdfbGVuIFx1MDAzYyBtaW5fbGVuKSlcbjM4MzM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODM0Olx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4zODM1Olx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zODM2Olx0XG4zODM3Olx0XHQvKiBUaGUgYmFzaWMgaWRlYSBvZiB0aGlzIGhlbHBlciBpcyB0aGF0IGl0JiMzOTtzIHBlcmZvcm1pbmcgdGhlXG4zODM4Olx0XHQgKiBuZWVkZWQgd29yayB0byBlaXRoZXIgZ3JvdyBvciB0cmltIGFuIHNrYiwgYW5kIGVCUEYgcHJvZ3JhbVxuMzgzOTpcdFx0ICogcmV3cml0ZXMgdGhlIHJlc3QgdmlhIGhlbHBlcnMgbGlrZSBicGZfc2tiX3N0b3JlX2J5dGVzKCksXG4zODQwOlx0XHQgKiBicGZfbFhfY3N1bV9yZXBsYWNlKCkgYW5kIG90aGVycyByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3XG4zODQxOlx0XHQgKiBidWZmZXIgaGVyZS4gVGhpcyBvbmUgaXMgYSBzbG93IHBhdGggaGVscGVyIGFuZCBpbnRlbmRlZFxuMzg0MjpcdFx0ICogZm9yIHJlcGxpZXMgd2l0aCBjb250cm9sIG1lc3NhZ2VzLlxuMzg0MzpcdFx0ICpcbjM4NDQ6XHRcdCAqIExpa2UgaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8oKSwgd2Ugd2FudCB0byBrZWVwIHRoaXMgcmF0aGVyXG4zODQ1Olx0XHQgKiBtaW5pbWFsIGFuZCB3aXRob3V0IHByb3RvY29sIHNwZWNpZmljcyBzbyB0aGF0IHdlIGFyZSBhYmxlXG4zODQ2Olx0XHQgKiB0byBzZXBhcmF0ZSBjb25jZXJucyBhcyBpbiBicGZfc2tiX3N0b3JlX2J5dGVzKCkgc2hvdWxkIG9ubHlcbjM4NDc6XHRcdCAqIGJlIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgYnVmZmVycy5cbjM4NDg6XHRcdCAqXG4zODQ5Olx0XHQgKiBJdCYjMzk7cyByZWFsbHkgZXhwZWN0ZWQgdG8gYmUgYSBzbG93IHBhdGggb3BlcmF0aW9uIGhlcmUgZm9yXG4zODUwOlx0XHQgKiBjb250cm9sIG1lc3NhZ2UgcmVwbGllcywgc28gd2UmIzM5O3JlIGltcGxpY2l0bHkgbGluZWFyaXppbmcsXG4zODUxOlx0XHQgKiB1bmNsb25pbmcgYW5kIGRyb3Agb2ZmbG9hZHMgZnJvbSB0aGUgc2tiIGJ5IHRoaXMuXG4zODUyOlx0XHQgKi9cbjM4NTM6XHRcdHJldCA9IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLVx1MDAzZWxlbik7XG4zODU0Olx0XHRpZiAoIXJldCkge1xuMzg1NTpcdFx0XHRpZiAobmV3X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjM4NTY6XHRcdFx0XHRyZXQgPSBicGZfc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM4NTc6XHRcdFx0ZWxzZSBpZiAobmV3X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbjM4NTg6XHRcdFx0XHRyZXQgPSBicGZfc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM4NTk6XHRcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHNrYl9pc19nc28oc2tiKSlcbjM4NjA6XHRcdFx0XHRza2JfZ3NvX3Jlc2V0KHNrYik7XG4zODYxOlx0XHR9XG4zODYyOlx0XHRyZXR1cm4gcmV0O1xuMzg2MzpcdH1cbjM4NjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGBicGZfc2tiX2dyb3dfcmNzdW1gKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBicGZfc2tiX2dyb3dfcmNzdW1gLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgcmVjYWxsaW5nIHdoYXQgaXQmIzM5O3MgKnN1cHBvc2VkKiB0byBkby4gSXQmIzM5O3MgYSBCUEYgaGVscGVyLCByaWdodD8gTGlrZWx5IGRlYWxpbmcgd2l0aCBleHRlbmRpbmcgYW4gU0tCIChTb2NrZXQgQnVmZmVyKSBhbmQgbWFuYWdpbmcgdGhlIGNoZWNrc3VtIHJlbGF0ZWQgdG8gdGhlIGV4dGVuc2lvbi4gVGhlICYjMzQ7cmNzdW0mIzM0OyBwYXJ0IGltbWVkaWF0ZWx5IHBvaW50cyB0b3dhcmRzIHJlY29tcHV0aW5nIGNoZWNrc3Vtcywgd2hpY2ggaXMgY3JpdGljYWwgaW4gbmV0d29yayBwZXJmb3JtYW5jZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBpcyBjYWxsZWQg4oCTIHdoYXQgdHJpZ2dlcnMgdGhlIG5lZWQgdG8gZ3JvdyB0aGUgU0tCIGFuZCwgY29uc2VxdWVudGx5LCByZWNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0uIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRoYXQgSSBzaG91bGQga2VlcCBpbiBtaW5kIGFzIEkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nPyBJIGtub3cgdGhpcyBhcmVhIGludGltYXRlbHksIHNvIEkmIzM5O20gbG9va2luZyBmb3IgbnVhbmNlLi4uIHBvdGVudGlhbCBlZGdlIGNhc2VzLCBvciBub3ZlbCBhcHByb2FjaGVzIGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za2JfZ3Jvd19yY3N1bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTM3ODg9c3RhdGljIHUzMiBfX2JwZl9za2JfbWluX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM4MDgtXG5uZXQvY29yZS9maWx0ZXIuYzozODA5OnN0YXRpYyBpbnQgYnBmX3NrYl9ncm93X3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxubmV0L2NvcmUvZmlsdGVyLmMtMzgxMC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzgyNT1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg1NS1cdFx0aWYgKG5ld19sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG5uZXQvY29yZS9maWx0ZXIuYzozODU2Olx0XHRcdHJldCA9IGJwZl9za2JfZ3Jvd19yY3N1bShza2IsIG5ld19sZW4pO1xubmV0L2NvcmUvZmlsdGVyLmMtMzg1Ny1cdFx0ZWxzZSBpZiAobmV3X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4ODkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYGJwZl9za2JfZ3Jvd19yY3N1bWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgYnBmX3NrYl9ncm93X3Jjc3VtYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgQlBGIGVjb3N5c3RlbS4gVGhpcyBmdW5jdGlvbiwgZ2l2ZW4gaXRzIG5hbWUsIGxpa2VseSBoYW5kbGVzIHRoZSBjaGVja3N1bSB1cGRhdGUgd2hlbiBhIHBhY2tldCYjMzk7cyBTS0IgKFNvY2tldCBCdWZmZXIpIGlzIGdyb3duLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGNoZWNrbGlzdDogd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXM/IE1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgU0tCIGl0c2VsZj8gVGhlIG5lZWQgZm9yIGNhcmVmdWwgbWFuaXB1bGF0aW9uIG9mIHRoZSBjaGVja3N1bSBmaWVsZHMgd2l0aGluIHRoZSBoZWFkZXJzPyBBcmUgdGhlcmUgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zPwoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIGxhcmdlciBjaGVja3N1bSBvZmZsb2FkIHByb2Nlc3MsIGFuZCBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbmNpZXMgdGhhdCBjb3VsZCBjcmVlcCBpbnRvIHRoZSBkYXRhLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgbmVjZXNzYXJ5IGhlYWRlciB1cGRhdGVzIGlmIHRoZSBwYWNrZXQgc2l6ZSBjaGFuZ2VzLCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggY2hlY2tzdW0uIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIG1lbW9yeSBzYWZldHkgYXNwZWN0LCBhbmQgYW55IGNoZWNrcyBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzIGFyZSBjcml0aWNhbCB0byBzZWN1cml0eS4gSSYjMzk7bGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBhIGdvb2QgZGVhbCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMsIHdoaWNoIGlzIG5vcm1hbCBmb3Igd29ya2luZyB3aXRoIGNoZWNrc3Vtcy4gVGhlIGRldGFpbHMgb2YgaG93IHRoZSBmdW5jdGlvbiBhZmZlY3RzIHRoZSBgY3N1bV9zdGFydGAsIGBjc3VtX29mZnNldGAsIGFuZCBgY3N1bV9sZXZlbGAgZmllbGRzIGFyZSBvZiBpbW1lZGlhdGUgaW50ZXJlc3QuIEZpbmFsbHksIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBzaW5jZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMgY2FuIGJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyB0aGUgYWxnb3JpdGhtaWMgZWZmaWNpZW5jeS4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNydWNpYWwgcGllY2UgaW4gZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiBwYWNrZXRzIHdpdGhpbiBhIEJQRiBwcm9ncmFtLCBhbmQgSSYjMzk7bSBlYWdlciB0byBkaWcgaW4gYW5kIHNlZSB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODA5Olx0c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zODEwOlx0e1xuMzgxMTpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuMzgxMjpcdFx0aW50IHJldDtcbjM4MTM6XHRcbjM4MTQ6XHRcdHJldCA9IF9fc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM4MTU6XHRcdGlmICghcmV0KVxuMzgxNjpcdFx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2xkX2xlbiwgMCwgbmV3X2xlbiAtIG9sZF9sZW4pO1xuMzgxNzpcdFx0cmV0dXJuIHJldDtcbjM4MTg6XHR9XG4zODE5Olx0XG4zODIwOlx0c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zODIxOlx0e1xuMzgyMjpcdFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM4MjM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTU2CgkJCQkJCQlvdXRwdXQ6IDQxOQoJCQkJCQkJdGhvdWdodHM6IDkxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgWERQIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGl0IHNlZW1zIGBicGZfc2tiX2dyb3dfcmNzdW1gICpkb2VzKiBpbmRlZWQgemVybyB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSB3aXRoIGBtZW1zZXRgLCBzbyBhbnkgQlBGLWdyb3duIFNLQiB3aWxsIGhhdmUgemVyb2VkIHRhaWxyb29tLiBUaGF0JiMzOTtzIGEgcmVsaWVmLiBObyBpbW1lZGlhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2FnZSB0aGVyZS4KCk5vdywgd2hhdCBhYm91dCBgc2tiX3B1dGA/IFRoYXQmIzM5O3MgdGhlIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbiB1c2VkIGJ5IGRyaXZlcnMgYW5kIHRoZSBuZXR3b3JrIHN0YWNrLiBXaGVuIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIGNyZWF0ZXMgYW4gU0tCLCB0aGUgY2FsbGVycyBJJiMzOTttIHNlZWluZyDigJMgYHZldGhfeGRwX3Jjdl9za2JgLCBgY3B1bWFwYCwgYW5kIHRoZSBsaWtlIOKAkyAqZG9uJiMzOTt0KiBjYWxsIGBza2JfcHV0YCBvbiB0aGUgcmV0dXJuZWQgU0tCLiBUaGV5IGp1c3QgaGFuZCBpdCB1cCB0aGUgc3RhY2suIFRoZSBuZXR3b3JrIHN0YWNrIHByaW1hcmlseSBkZWFscyB3aXRoIHJlY2VpdmVkIHBhY2tldHMgYnkgdXNpbmcgYHBza2JfbWF5X3B1bGxgIG9yIGBza2JfcHVsbGAgdG8gcGFyc2UgaGVhZGVycy4gSWYgaGVhZGVycyBuZWVkIHRvIGJlIGFkZGVkLCBzdWNoIGFzIGZvciBmb3J3YXJkaW5nIG9yIGVuY2Fwc3VsYXRpb24sIHRoZSBzdGFjayBjYWxscyBgc2tiX3B1c2hgLCBhbmQgdGhhdCB1c2VzIHRoZSBhbHJlYWR5IGluaXRpYWxpemVkIGhlYWRyb29tICh0aGUgYHhkcGZgIHN0cnVjdCBhbmQgbWV0YWRhdGEgYXJlIGFscmVhZHkgemVyb2VkIG9yIGNvcGllZCkuIFNvIGBza2JfcHVzaGAgaXMgc2FmZS4gSWYgdGhlIHN0YWNrIG5lZWRzIHRvIGFkZCBhIHRyYWlsZXIsIGl0ICptaWdodCogdXNlIGBza2JfcHV0YCwgYnV0IHRoZW4gaXQgaW1tZWRpYXRlbHkgd3JpdGVzIHRoZSB0cmFpbGVyIGRhdGEgaW50byB0aGUgc3BhY2UgaXQgZ2V0cyBmcm9tIGBza2JfcHV0YC4gU28sIHRoYXQmIzM5O3Mgc2FmZSB0b28uCgpUaGVyZWZvcmUsIHRoZXJlIGlzbiYjMzk7dCBhY3R1YWxseSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSAqbGVhayogaGVyZS4gVGhlIGJ1Z3MgYXJlIHB1cmVseSByZWxhdGVkIHRvIG1lbW9yeSBjb3JydXB0aW9uOiBvdXQtb2YtYm91bmRzIHdyaXRlcyBhbmQgb3ZlcmxhcHBpbmcgZGF0YS4gS0FTQU4gaXMgdGhlIHRvb2wgZm9yIGNhdGNoaW5nIHRoZXNlIGJ1Z3MsIHdoaWNoIGlzIHBlcmZlY3QgZm9yIG15IG5lZWRzLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUgYmVjYXVzZSB0aGVyZSYjMzk7cyBubyByZWFkIG9yIGxlYWsgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nIGZvciB0aGUgS01TQU4gY2FsbDoKCjEuICBUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDogQW4gaW5jb3JyZWN0IHNpemUgY2hlY2sgYW5kIGFuIGluY29ycmVjdCBoZWFkcm9vbSBjYWxjdWxhdGlvbi4KMi4gIFRoZSBzaXplIGNoZWNrIGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcndyaXRlIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QuIFRoaXMgbGVhZHMgdG8gZGF0YSBjb3JydXB0aW9uIGluIGVpdGhlciB0aGUgcGFja2V0IGRhdGEgaXRzZWxmIG9yIGluIGBza2Jfc2hhcmVkX2luZm9gLgozLiAgVGhlIGluY29ycmVjdCBoZWFkcm9vbSBjYWxjdWxhdGlvbiwgd2hpY2ggaW5jb3JyZWN0bHkgc2V0IGB4ZHBmLSZndDtoZWFkcm9vbWAsIGNhdXNlZCBgYnVpbGRfc2tiX2Fyb3VuZGAgdG8gbWlzY2FsY3VsYXRlIHdoZXJlIHRoZSBidWZmZXIgc3RhcnRzIHdoaWNoIHJlc3VsdGVkIGluIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHdyaXRpbmcgYHNrYl9zaGFyZWRfaW5mb2Agb3V0IG9mIHRoZSBib3VuZHMgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLgo0LiAgVGhlc2UgYXJlIGJvdGggbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBhbmQgYXJlIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIG92ZXJsYXBwaW5nIGRhdGEuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Lgo1LiAgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgYW5kIGFueSByZXN1bHRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdWUgdG8gY29ycnVwdGVkIHN0cnVjdHVyZXMuCjYuICBUaGVyZSYjMzk7cyBubyBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvciBpcyByZWFkIG9yIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGUgcGFja2V0IGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEFueSBoZWFkcm9vbSBvciB0YWlscm9vbSB1c2VkIGJ5IHRoZSBzdGFjayBpcyBpbml0aWFsaXplZCwgc3VjaCBhcyB0aHJvdWdoIGBicGZfc2tiX2dyb3dfcmNzdW1gLgo3LiAgVGhlcmVmb3JlLCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3QganVzdGlmaWVkIGJlY2F1c2UgS0FTQU4gaXMgc3VmZmljaWVudC4gSSYjMzk7bGwgbWFrZSB0aGUgZGVjaXNpb24gdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWA6XG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFx1MDAzZSBQQUdFX1NJWkVgIGluc3RlYWQgb2YgYFx1MDAzZSBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCkgdGhhdCBhbGxvd2VkIHBhY2tldCBkYXRhIHRvIG92ZXJsYXAgd2l0aCB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0IHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlLiBUaGlzIGNhdXNlcyBwYWNrZXQgZGF0YSB0byBiZSBvdmVyd3JpdHRlbiBieSBgc2tiX3NoYXJlZF9pbmZvYCBpbml0aWFsaXphdGlvbiwgb3IgYHNrYl9zaGFyZWRfaW5mb2AgdG8gYmUgY29ycnVwdGVkIGJ5IHBhY2tldCBtb2RpZmljYXRpb25zLlxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVx1MDAzZWhlYWRyb29tID0gMGAgaW5zdGVhZCBvZiBgbWV0YXNpemVgKSB0aGF0IGNhdXNlZCBgYnVpbGRfc2tiX2Fyb3VuZGAgdG8gbWlzY2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLiBUaGlzIHNoaWZ0ZWQgdGhlIGxvZ2ljYWwgZW5kIG9mIHRoZSBidWZmZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgcGFnZSwgY2F1c2luZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCB0byB3cml0ZSBgc2tiX3NoYXJlZF9pbmZvYCBvdXQtb2YtYm91bmRzIG9mIHRoZSBhbGxvY2F0ZWQgcGFnZS5cblxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXG5cblN0YW5kYXJkIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFnZSwgYXMgd2VsbCBhcyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBhIGNvcnJ1cHRlZCBgc2tiX3NoYXJlZF9pbmZvYCAoZS5nLiwgY29ycnVwdGVkIGBucl9mcmFnc2AgbGVhZGluZyB0byBPT0IgcmVhZHMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLCBhcyBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDpcbjEuIEFuIGluY29ycmVjdCBzaXplIGNoZWNrIChgXHUwMDNlIFBBR0VfU0laRWAgaW5zdGVhZCBvZiBgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgKSB0aGF0IGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcmxhcCB3aXRoIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UuIFRoaXMgY2F1c2VzIHBhY2tldCBkYXRhIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGBza2Jfc2hhcmVkX2luZm9gIGluaXRpYWxpemF0aW9uLCBvciBgc2tiX3NoYXJlZF9pbmZvYCB0byBiZSBjb3JydXB0ZWQgYnkgcGFja2V0IG1vZGlmaWNhdGlvbnMuXG4yLiBBbiBpbmNvcnJlY3QgYGhlYWRyb29tYCBjYWxjdWxhdGlvbiAoYHhkcGYtXHUwMDNlaGVhZHJvb20gPSAwYCBpbnN0ZWFkIG9mIGBtZXRhc2l6ZWApIHRoYXQgY2F1c2VkIGBidWlsZF9za2JfYXJvdW5kYCB0byBtaXNjYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuIFRoaXMgc2hpZnRlZCB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIGJ1ZmZlciBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLCBjYXVzaW5nIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHRvIHdyaXRlIGBza2Jfc2hhcmVkX2luZm9gIG91dC1vZi1ib3VuZHMgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLlxuXG5Cb3RoIGlzc3VlcyBhcmUgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCBvdmVybGFwcGluZyBkYXRhKS4gVGhleSBkbyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYWNrZXQgZGF0YSBjb3BpZWQgaW50byB0aGUgcGFnZSBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIGFueSBoZWFkcm9vbSBvciB0YWlscm9vbSB1c2VkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrIGlzIGVpdGhlciBhbHJlYWR5IGluaXRpYWxpemVkIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0YWNrIChlLmcuLCBgYnBmX3NrYl9ncm93X3Jjc3VtYCB6ZXJvZXMgbmV3IHRhaWxyb29tKS5cblxuU3RhbmRhcmQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIGBza2Jfc2hhcmVkX2luZm9gIChlLmcuLCBjb3JydXB0ZWQgYG5yX2ZyYWdzYCBsZWFkaW5nIHRvIE9PQiByZWFkcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQsIGFzIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MTk6NTcuNzkxNzc3MTI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NTk2MDQwMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWA6XFxuMS4gQW4gaW5jb3JyZWN0IHNpemUgY2hlY2sgKGBcXHUwMDNlIFBBR0VfU0laRWAgaW5zdGVhZCBvZiBgXFx1MDAzZSBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCkgdGhhdCBhbGxvd2VkIHBhY2tldCBkYXRhIHRvIG92ZXJsYXAgd2l0aCB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0IHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlLiBUaGlzIGNhdXNlcyBwYWNrZXQgZGF0YSB0byBiZSBvdmVyd3JpdHRlbiBieSBgc2tiX3NoYXJlZF9pbmZvYCBpbml0aWFsaXphdGlvbiwgb3IgYHNrYl9zaGFyZWRfaW5mb2AgdG8gYmUgY29ycnVwdGVkIGJ5IHBhY2tldCBtb2RpZmljYXRpb25zLlxcbjIuIEFuIGluY29ycmVjdCBgaGVhZHJvb21gIGNhbGN1bGF0aW9uIChgeGRwZi1cXHUwMDNlaGVhZHJvb20gPSAwYCBpbnN0ZWFkIG9mIGBtZXRhc2l6ZWApIHRoYXQgY2F1c2VkIGBidWlsZF9za2JfYXJvdW5kYCB0byBtaXNjYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuIFRoaXMgc2hpZnRlZCB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIGJ1ZmZlciBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLCBjYXVzaW5nIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHRvIHdyaXRlIGBza2Jfc2hhcmVkX2luZm9gIG91dC1vZi1ib3VuZHMgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLlxcblxcbkJvdGggaXNzdWVzIGFyZSBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIG92ZXJsYXBwaW5nIGRhdGEpLiBUaGV5IGRvIG5vdCBpbnZvbHZlIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhY2tldCBkYXRhIGNvcGllZCBpbnRvIHRoZSBwYWdlIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgYW55IGhlYWRyb29tIG9yIHRhaWxyb29tIHVzZWQgYnkgdGhlIG5ldHdvcmsgc3RhY2sgaXMgZWl0aGVyIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgc3RhY2sgKGUuZy4sIGBicGZfc2tiX2dyb3dfcmNzdW1gIHplcm9lcyBuZXcgdGFpbHJvb20pLlxcblxcblN0YW5kYXJkIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFnZSwgYXMgd2VsbCBhcyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBhIGNvcnJ1cHRlZCBgc2tiX3NoYXJlZF9pbmZvYCAoZS5nLiwgY29ycnVwdGVkIGBucl9mcmFnc2AgbGVhZGluZyB0byBPT0IgcmVhZHMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLCBhcyBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgWERQIGxvZ2ljIGZvciBjb252ZXJ0aW5nIHplcm8tY29weSBYRFAgYnVmZmVycyB0byBYRFAgZnJhbWVzIChgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCkuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIGFuZCBYRFBfVFgvWERQX1JFRElSRUNUIGFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjE5OjU3Ljc5MTc4MzE3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5ODg2MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzVhM2RiMWFhZWIxNzA0NmE3OTliNjA1YWY3MjNjZThjZjk4YTA1NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxODoxOTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS94ZHAuYyBiL25ldC9jb3JlL3hkcC5jXFxuaW5kZXggOTg5MGEzMDU4NGJhNy4uNGJiOTc3OTBiMTg5MSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS94ZHAuY1xcbisrKyBiL25ldC9jb3JlL3hkcC5jXFxuQEAgLTU4NSw3ICs1ODUsNyBAQCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxuIFxcdFxcdCAgIHhkcC1cXHUwMDNlZGF0YSAtIHhkcC1cXHUwMDNlZGF0YV9tZXRhO1xcbiBcXHR0b3RzaXplID0geGRwLVxcdTAwM2VkYXRhX2VuZCAtIHhkcC1cXHUwMDNlZGF0YSArIG1ldGFzaXplO1xcbiBcXG4tXFx0aWYgKHNpemVvZigqeGRwZikgKyB0b3RzaXplIFxcdTAwM2UgUEFHRV9TSVpFKVxcbitcXHRpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXFx1MDAzZSBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdHBhZ2UgPSBkZXZfYWxsb2NfcGFnZSgpO1xcbkBAIC02MDIsNyArNjAyLDcgQEAgc3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbiBcXG4gXFx0eGRwZi1cXHUwMDNlZGF0YSA9IGFkZHIgKyBtZXRhc2l6ZTtcXG4gXFx0eGRwZi1cXHUwMDNlbGVuID0gdG90c2l6ZSAtIG1ldGFzaXplO1xcbi1cXHR4ZHBmLVxcdTAwM2VoZWFkcm9vbSA9IDA7XFxuK1xcdHhkcGYtXFx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XFxuIFxcdHhkcGYtXFx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XFxuIFxcdHhkcGYtXFx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xcbiBcXHR4ZHBmLVxcdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoxOTo1OC4yNjIzNDU3MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NzYzOTcxNzExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBYRFAgbG9naWMgZm9yIGNvbnZlcnRpbmcgemVyby1jb3B5IFhEUCBidWZmZXJzIHRvIFhEUCBmcmFtZXMgKGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgYW5kIFhEUF9UWC9YRFBfUkVESVJFQ1QgYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzVhM2RiMWFhZWIxNzA0NmE3OTliNjA1YWY3MjNjZThjZjk4YTA1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE4OjE5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUveGRwLmMgYi9uZXQvY29yZS94ZHAuY1xuaW5kZXggOTg5MGEzMDU4NGJhNy4uNGJiOTc3OTBiMTg5MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3hkcC5jXG4rKysgYi9uZXQvY29yZS94ZHAuY1xuQEAgLTU4NSw3ICs1ODUsNyBAQCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gXHRcdCAgIHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbiBcdHRvdHNpemUgPSB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSArIG1ldGFzaXplO1xuIFxuLVx0aWYgKHNpemVvZigqeGRwZikgKyB0b3RzaXplIFx1MDAzZSBQQUdFX1NJWkUpXG4rXHRpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cGFnZSA9IGRldl9hbGxvY19wYWdlKCk7XG5AQCAtNjAyLDcgKzYwMiw3IEBAIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcbiBcdHhkcGYtXHUwMDNlZGF0YSA9IGFkZHIgKyBtZXRhc2l6ZTtcbiBcdHhkcGYtXHUwMDNlbGVuID0gdG90c2l6ZSAtIG1ldGFzaXplO1xuLVx0eGRwZi1cdTAwM2VoZWFkcm9vbSA9IDA7XG4rXHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XG4gXHR4ZHBmLVx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XG4gXHR4ZHBmLVx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xuIFx0eGRwZi1cdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MTk6NTguMjYyMzQ3MDM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNDg0MTk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIENvcmUgWERQIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG5ldC9jb3JlL3hkcC5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZnVuY3Rpb24uIEknbSBzZWVpbmcgdHdvIGtleSBjaGFuZ2VzLiBGaXJzdCwgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiB0byBob3cgdGhlIHNpemUgY2hlY2sgaXMgcGVyZm9ybWVkLCByZXBsYWNpbmcgYFBBR0VfU0laRWAgd2l0aCBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuIFRoaXMgbG9va3MgbGlrZSB0aGV5J3JlIGFjY291bnRpbmcgZm9yIHRoZSBTS0Igb3ZlcmhlYWQgbm93LCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgYWxsb2NhdGlvbi4gSXQncyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIHdoZW4gY3JlYXRpbmcgWERQIGZyYW1lcy4gU2Vjb25kLCBgeGRwZi1cdTAwM2VoZWFkcm9vbWAgaXMgYmVpbmcgc2V0IHRvIGBtZXRhc2l6ZWAgaW5zdGVhZCBvZiAwLiBUaGF0J3MgYSBzaGlmdCBpbiBob3cgdGhlIGhlYWRyb29tIGlzIG1hbmFnZWQ7IHRoZSBpbml0aWFsIGFzc3VtcHRpb24gbWF5IGhhdmUgYmVlbiBhIGRlZmF1bHQgemVybyBoZWFkcm9vbS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhvc2Ugd2VyZSBhcHByb3ByaWF0ZSwgYW5kIHdoYXQgdHJpZ2dlcmVkIHRoZSBjaGFuZ2UuIEkgbmVlZCB0byBkaXZlIGludG8gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgaXRzZWxmLCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhhdCBjb250ZXh0LiBUaGlzIGlzIGNvcmUgWERQIGxvZ2ljLCBzbyBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGVmZmVjdHMgdGhlIHBhY2tldCBoYW5kbGluZyBmbG93LiBJcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBPciBtYXliZSBpdCdzIGVuYWJsaW5nIHNvbWUgbmV3IGZlYXR1cmU/IEknbGwgY2hlY2sgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBwb3NzaWJseSB0aGUgbWFpbGluZyBsaXN0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjaGFuZ2VzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDowMy40NzcxOTE3MTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMDMwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3hkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3hkcC5jPTU3ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYXR0YWNobWVudF9zZXR1cCk7XFxubmV0L2NvcmUveGRwLmMtNTc1LVxcbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L2NvcmUveGRwLmMtNTc3LXtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTYxMi19XFxubmV0L2NvcmUveGRwLmM6NjEzOkVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxubmV0L2NvcmUveGRwLmMtNjE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDowMy41MjAyOTk2NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYyNTg0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGZ1bmN0aW9uIGJldHRlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyBhbmQgd2hlcmUgaXQncyBhY3R1YWxseSBiZWluZyAqdXNlZCouIFNpbXBseSByZWFkaW5nIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGdpdmVzIG1lIGNsdWVzLCBidXQgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgaXMgZ29pbmcgdG8gcHJvdmlkZSB0aGUgcmVhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aG9zZSBjYWxscyEgTGV0J3Mgc2VlIHdoYXQncyBpbXBvcnRpbmcgdGhhdCBndXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDowNi45ODI4ODU1NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxODAzMDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYz02Mj1tbHg1ZV94bWl0X3hkcF9idWZmKHN0cnVjdCBtbHg1ZV94ZHBzcSAqc3EsIHN0cnVjdCBtbHg1ZV9ycSAqcnEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMtODktXFx0XFx0ICogZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIHhkcF9idWZmIHNob3VsZG4ndCBiZSByZWN5Y2xlZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM6OTA6XFx0XFx0ICogYXMgaXQgd2FzIGFscmVhZHkgZG9uZSBpbiB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jLTkxLVxcdFxcdCAqL1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmg9Mzc4PXN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21femMoc3RydWN0IHhkcF9idWZmICp4ZHApO1xcbmluY2x1ZGUvbmV0L3hkcC5oOjM3OTpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApO1xcbmluY2x1ZGUvbmV0L3hkcC5oLTM4MC1zdHJ1Y3Qgc2tfYnVmZiAqX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQzMD1zdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtNDM0LVxcdGlmICh4ZHAtXFx1MDAzZXJ4cS1cXHUwMDNlbWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTClcXG5pbmNsdWRlL25ldC94ZHAuaDo0MzU6XFx0XFx0cmV0dXJuIHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSh4ZHApO1xcbmluY2x1ZGUvbmV0L3hkcC5oLTQzNi1cXG4tLVxcbm5ldC9jb3JlL3hkcC5jPTU3ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYXR0YWNobWVudF9zZXR1cCk7XFxubmV0L2NvcmUveGRwLmMtNTc1LVxcbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L2NvcmUveGRwLmMtNTc3LXtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTYxMi19XFxubmV0L2NvcmUveGRwLmM6NjEzOkVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxubmV0L2NvcmUveGRwLmMtNjE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDowOS4wMDA5MjEyNjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc1OTk0MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGZ1bmN0aW9uLCBgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZWAsIGlzIGRlZmluZWQgYXMgYSBgc3RhdGljIGlubGluZWAgZnVuY3Rpb24uIFRoYXQncyBnb29kOyBpdCBzdWdnZXN0cyBpdCdzIGxpa2VseSBoZWF2aWx5IG9wdGltaXplZCBhbmQgc3BlY2lmaWMgdG8gYSBjZXJ0YWluIGNvbnRleHQgd2l0aGluIHRoZSBYRFAgZnJhbWV3b3JrLiBUaGUgZmFjdCB0aGF0IGl0J3MgaW4gYGluY2x1ZGUvbmV0L3hkcC5oYCB0ZWxscyBtZSBpdCdzIGEgY29yZSBYRFAgdXRpbGl0eS4gVGhlIGltcG9ydGFudCB0aGluZyBub3cgaXMgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBCZWluZyBgc3RhdGljIGlubGluZWAgbWVhbnMgaXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhpcyBmaWxlLCBvciBhIGZpbGUgaW5jbHVkZWQgYnkgdGhlIGN1cnJlbnQgZmlsZSwgc28gdGhlcmUgc2hvdWxkIGJlIGEgbGltaXRlZCBudW1iZXIgb2YgcGxhY2VzIHRvIGxvb2ssIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDoxMi4wNzY5MTc0ODlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MTYzMjcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vZW5hL2VuYV94ZHAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBlbmFfeGRwX2V4ZWN1dGUoc3RydWN0IGVuYV9yaW5nICpyeF9yaW5nLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9lbmEvZW5hX3hkcC5oLTk1LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9lbmEvZW5hX3hkcC5oOjk2OlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL2VuYS9lbmFfeGRwLmgtOTctXFx0XFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jPTM4Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFxX3hkcF9idWlsZF9za2Ioc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmMtMzkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYzozOTM6XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmMtMzk0LVxcdGlmICh1bmxpa2VseSgheGRwZikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmM9NDA1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jLTQ0Mi1cXHRjYXNlIFhEUF9UWDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmM6NDQzOlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jLTQ0NC1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTczMD1zdGF0aWMgYm9vbCB0c25lcF94ZHBfeG1pdF9iYWNrKHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTczNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjczNTpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy03MzYtXFx0Ym9vbCB4bWl0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYz0yMjEyPXN0YXRpYyBpbnQgZHBhYV9hMDUwMzg1X3dhX3hkcGYoc3RydWN0IGRwYWFfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjI3NS1cXHQvKiBDcmVhdGUgYW4gWERQIGZyYW1lIGFyb3VuZCB0aGUgbmV3IGJ1ZmZlciBpbiBhIHNpbWlsYXIgZmFzaGlvblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM6MjI3NjpcXHQgKiB0byB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjI3Ny1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM9MjU5MT1zdGF0aWMgdTMyIGRwYWFfcnVuX3hkcChzdHJ1Y3QgZHBhYV9wcml2ICpwcml2LCBzdHJ1Y3QgcW1fZmQgKmZkLCB2b2lkICp2YWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjY0My1cXHRcXHR4ZHAuZnJhbWVfc3ogPSBEUEFBX0JQX1JBV19TSVpFO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM6MjY0NDpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcXHUwMDI2eGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jLTI2NDUtXFx0XFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jPTE0MT1zdGF0aWMgdm9pZCAqZnVuX3J1bl94ZHAoc3RydWN0IGZ1bmV0aF9yeHEgKnEsIHNrYl9mcmFnX3QgKmZyYWdzLCB2b2lkICpidWZfdmEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX3J4LmMtMTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguYzoxNjg6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoXFx1MDAyNnhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jLTE2OS1cXHRcXHRpZiAoIXhkcGYgfHwgIWZ1bl94ZHBfdHgoeGRwX3EsIHhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NjA1PXN0YXRpYyBpbnQgZ3ZlX3hkcF90eF9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjYxMzpcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTYxNC1cXHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jPTIyNDc9aW50IGk0MGVfeG1pdF94ZHBfdHhfcmluZyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc3RydWN0IGk0MGVfcmluZyAqeGRwX3JpbmcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYy0yMjQ4LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jOjIyNDk6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jLTIyNTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYz0yOTU2PWludCBpZ2JfeGRwX3htaXRfYmFjayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jLTI5NTcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jOjI5NTg6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYy0yOTU5LVxcdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYz0yNDkxPXN0YXRpYyBpbnQgaWdjX3hkcF94bWl0X2JhY2soc3RydWN0IGlnY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYy0yNDkyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYzoyNDkzOlxcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMtMjQ5NC1cXHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jPTI0MDA9c3RhdGljIGludCBpeGdiZV9ydW5feGRwKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTI0MjEtXFx0Y2FzZSBYRFBfVFg6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jOjI0MjI6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMjQyMy1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmM9OTc9c3RhdGljIGludCBpeGdiZV9ydW5feGRwX3pjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtMTI0LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jOjEyNTpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTEyNi1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz0yMTc0PW12bmV0YV94ZHBfeG1pdF9iYWNrKHN0cnVjdCBtdm5ldGFfcG9ydCAqcHAsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy0yMTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6MjE4MzpcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtMjE4NC1cXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM9MzczMT1tdnBwMl94ZHBfeG1pdF9iYWNrKHN0cnVjdCBtdnBwMl9wb3J0ICpwb3J0LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTM3MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM6MzczODpcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTM3MzktXFx0aWYgKHVubGlrZWx5KCF4ZHBmKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYz0xNDg4PXN0YXRpYyBib29sIG90eDJfeGRwX3Jjdl9wa3RfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtMTUzNS1cXHRcXHRjcS1cXHUwMDNlcG9vbF9wdHJzKys7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jOjE1MzY6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoXFx1MDAyNnhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jLTE1MzctXFx0XFx0cmV0dXJuIG90eDJfeGRwX3NxX2FwcGVuZF9wa3QocGZ2ZiwgeGRwZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYy0xNTU5LVxcdFxcdFxcdFxcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYzoxNTYwOlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFxcdTAwMjZ4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYy0xNTYxLVxcdFxcdHhkcF9yZXR1cm5fZnJhbWUoeGRwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTIxMzc9c3RhdGljIHUzMiBtdGtfeGRwX3J1bihzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgbXRrX3J4X3JpbmcgKnJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTIxNjUtXFx0Y2FzZSBYRFBfVFg6IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjIxNjY6XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTIxNjctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM9NjI9bWx4NWVfeG1pdF94ZHBfYnVmZihzdHJ1Y3QgbWx4NWVfeGRwc3EgKnNxLCBzdHJ1Y3QgbWx4NWVfcnEgKnJxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jLTcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYzo3MjpcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy03My1cXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jLTEyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM6MTI2OlxcdC8qIERyaXZlciBhc3N1bWVzIHRoYXQgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSByZXR1cm5zIGFuIHhkcF9mcmFtZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy0xMjctXFx0ICogdGhhdCBwb2ludHMgdG8gdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBhcyB0aGUgb3JpZ2luYWwgeGRwX2J1ZmYuIEl0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY190eHJ4LmM9NDcwPXN0YXRpYyBib29sIGlvbmljX3J1bl94ZHAoc3RydWN0IGlvbmljX3J4X3N0YXRzICpzdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX3R4cnguYy01NDctXFx0Y2FzZSBYRFBfVFg6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jOjU0ODpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcXHUwMDI2eGRwX2J1Zik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jLTU0OS1cXHRcXHRpZiAoIXhkcGYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9yeC5jPTI0OT1zdGF0aWMgYm9vbCBlZnhfZG9feGRwKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9yeC5jLTMwOS1cXHRcXHQvKiBCdWZmZXIgb3duZXJzaGlwIHBhc3NlcyB0byB0eCBvbiBzdWNjZXNzLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9yeC5jOjMxMDpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcXHUwMDI2eGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvcnguYy0zMTEtXFx0XFx0ZXJyID0gZWZ4X3hkcF90eF9idWZmZXJzKGVmeCwgMSwgXFx1MDAyNnhkcGYsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmM9MjUxPXN0YXRpYyBib29sIGVmeF9kb194ZHAoc3RydWN0IGVmeF9uaWMgKmVmeCwgc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmMtMzExLVxcdFxcdC8qIEJ1ZmZlciBvd25lcnNoaXAgcGFzc2VzIHRvIHR4IG9uIHN1Y2Nlc3MuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmM6MzEyOlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFxcdTAwMjZ4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9yeC5jLTMxMy1cXHRcXHRlcnIgPSBlZnhfc2llbmFfeGRwX3R4X2J1ZmZlcnMoZWZ4LCAxLCBcXHUwMDI2eGRwZiwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM9ODgyPXN0YXRpYyB1MzIgbmV0c2VjX3hkcF94bWl0X2JhY2soc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy04ODQtXFx0c3RydWN0IG5ldHNlY19kZXNjX3JpbmcgKnR4X3JpbmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZGVzY19yaW5nW05FVFNFQ19SSU5HX1RYXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6ODg1OlxcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTg4Ni1cXHR1MzIgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz01MjU3PXN0YXRpYyBpbnQgc3RtbWFjX3hkcF94bWl0X2JhY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy01MjYwLVxcdGJvb2wgemMgPSAhISh4ZHAtXFx1MDAzZXJ4cS1cXHUwMDNlbWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo1MjYxOlxcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy01MjYyLVxcdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTUyODEtXFx0fSBlbHNlIGlmIChyZXMgPT0gU1RNTUFDX1hEUF9DT05TVU1FRCBcXHUwMDI2XFx1MDAyNiB6Yykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NTI4MjpcXHRcXHQvKiB4ZHAgaGFzIGJlZW4gZnJlZWQgYnkgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSgpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNTI4My1cXHRcXHQgKiBubyBuZWVkIHRvIGNhbGwgeHNrX2J1ZmZfZnJlZSgpIGFnYWluLCBzbyByZXR1cm5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmM9MTE2OD1zdGF0aWMgaW50IGFtNjVfY3Bzd19ydW5feGRwKHN0cnVjdCBhbTY1X2Nwc3dfcnhfZmxvdyAqZmxvdyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmMtMTE5OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jOjEyMDA6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTEyMDEtXFx0XFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19wcml2LmM9MTMzNj1pbnQgY3Bzd19ydW5feGRwKHN0cnVjdCBjcHN3X3ByaXYgKnByaXYsIGludCBjaCwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYy0xMzU4LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfcHJpdi5jOjEzNTk6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYy0xMzYwLVxcdFxcdGlmICh1bmxpa2VseSgheGRwZikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYz03Nzk9c3RhdGljIHUzMiBlbWFjX3J1bl94ZHAoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyICpsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYy03OTYtXFx0XFx0LyogU2VuZCBwYWNrZXQgdG8gVFggcmluZyBmb3IgaW1tZWRpYXRlIHRyYW5zbWlzc2lvbiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jOjc5NzpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jLTc5OC1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMjUzPXN0YXRpYyBpbnQgdHVuX3hkcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5kcml2ZXJzL25ldC90dW4uYy0xMjU0LXtcXG5kcml2ZXJzL25ldC90dW4uYzoxMjU1OlxcdHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNTYtXFx0aW50IG54bWl0O1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTYyMj1zdGF0aWMgaW50IHZldGhfeGRwX3R4KHN0cnVjdCB2ZXRoX3JxICpycSwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNjI0LXtcXG5kcml2ZXJzL25ldC92ZXRoLmM6NjI1OlxcdHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L3ZldGguYy02MjYtXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9MTY4NT1zdGF0aWMgaW50IHZpcnRuZXRfeGRwX2hhbmRsZXIoc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZywgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtMTcwMi1cXHRcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0cy1cXHUwMDNleGRwX3R4KTtcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6MTcwMzpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0xNzA0LVxcdFxcdGlmICh1bmxpa2VseSgheGRwZikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M194ZHAuYz0yNjE9dm14bmV0M19ydW5feGRwKHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfeGRwLmMtMjg1LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M194ZHAuYzoyODY6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfeGRwLmMtMjg3LVxcdFxcdGlmICh1bmxpa2VseSgheGRwZiB8fFxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmM9OTY3PXN0YXRpYyB1MzIgeGVubmV0X3J1bl94ZHAoc3RydWN0IG5ldGZyb250X3F1ZXVlICpxdWV1ZSwgc3RydWN0IHBhZ2UgKnBkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMtOTgzLVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jOjk4NDpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jLTk4NS1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZHAuaD00Mjk9c3RhdGljIGlubGluZVxcbmluY2x1ZGUvbmV0L3hkcC5oOjQzMDpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmluY2x1ZGUvbmV0L3hkcC5oLTQzMS17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NTE5PWludCB4ZHBfZG9fcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NTI3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1Mjg6XFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X2ZyYW1lKHJpLCBkZXYsIHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKSxcXG5uZXQvY29yZS9maWx0ZXIuYy00NTI5LVxcdFxcdFxcdFxcdCAgICAgICB4ZHBfcHJvZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjEzLjcxODU1NTU2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ1MjU2NjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRFAgWmVyby1Db3B5IEZyYW1lIENvbnZlcnNpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcHJldHR5IHNwZWNpZmljIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgZml4IGluIHRoZSBYRFAgemVyby1jb3B5IHBhdGguIEl0J3MgdHJpZ2dlcmVkIHdoZW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZ2V0cyBjYWxsZWQsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBtZW1vcnkgdHlwZSBpcyBYU0sgYnVmZiBwb29sIGFuZCB3ZSdyZSB1c2luZyB6ZXJvLWNvcHkgQUZfWERQLCBsaWtlbHkgdmlhIFhEUF9UWCBvciBYRFBfUkVESVJFQ1QgYWN0aW9ucy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgZml4aW5nIHRoZSBgeGRwZi1cdTAwM2VoZWFkcm9vbWAgYXNzaWdubWVudCDigJMgaXQgd2FzIHdyb25nbHkgc2V0IHRvIHplcm8gYW5kIG5lZWRzIHRvIGJlIHNldCB0byBgbWV0YXNpemVgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIHNpemUgY2hlY2sgdG8gdXRpbGl6ZSBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgaXMgYSBjaGFuZ2UgcmlnaHQgaW4gdGhlIFhEUCBjb3JlLiBTbyB0aGlzIGZpeCBjb3VsZCBiZSBpbXBvcnRhbnQsIGV2ZW4gbW9yZSBzbyBiZWNhdXNlIFhEUCBpcyB3aWRlbHkgdXNlZCBpbiB2aXJ0dWFsaXplZCBzZXR1cHMg4oCTIHZldGgsIHR1biwgdmlydGlvX25ldCBhcmUgYWxsIHJlbGV2YW50IHRhcmdldHMuIFRoZSBmYWN0IHRoYXQgaXQncyBpbiB0aGUgY29udmVyc2lvbiBmcm9tIHplcm8tY29weSBidWZmZXJzIHRvIFhEUCBmcmFtZXMgaXMgYSBwcmV0dHkgbG93LWxldmVsIHBvaW50LCBhbmQgaXQncyBlc3NlbnRpYWwgdGhhdCBpdCdzIGNvcnJlY3QuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHZlcmlmeSBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBpbiBgbmV0L2NvcmUveGRwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjIyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjIzLjE3MTEyNDE4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MTk5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3hkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3hkcC5jPTU3ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYXR0YWNobWVudF9zZXR1cCk7XFxubmV0L2NvcmUveGRwLmMtNTc1LVxcbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L2NvcmUveGRwLmMtNTc3LXtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTYxMi19XFxubmV0L2NvcmUveGRwLmM6NjEzOkVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxubmV0L2NvcmUveGRwLmMtNjE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDoyMy4yMjEwNDkyNzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ1NDU4NzE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9uIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBvciBub3QgaXQncyBhY3R1YWxseSBleHBvcnRlZCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgZm9yIGZ1enppbmcuIEdvb2QsIGl0IGlzIGV4cG9ydGVkLiBOb3csIHNpbmNlIHRoZXJlJ3MgYSBwYXRjaCB0aGF0IHRhcmdldHMgdGhpcyBmdW5jdGlvbiwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbidzIHVzYWdlLCBzbyBJJ2xsIHNjYW4gYG5ldC9jb3JlL3hkcC5jYCB0byBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBvciBjYWxsIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLiBVbmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDozMS42NzU2MzkzOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3hkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NjpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxuIDU3NzpcXHR7XFxuIDU3ODpcXHRcXHR1bnNpZ25lZCBpbnQgbWV0YXNpemUsIHRvdHNpemU7XFxuIDU3OTpcXHRcXHR2b2lkICphZGRyLCAqZGF0YV90b19jb3B5O1xcbiA1ODA6XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZjtcXG4gNTgxOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHQvKiBDbG9uZSBpbnRvIGEgTUVNX1RZUEVfUEFHRV9PUkRFUjAgeGRwX2ZyYW1lLiAqL1xcbiA1ODQ6XFx0XFx0bWV0YXNpemUgPSB4ZHBfZGF0YV9tZXRhX3Vuc3VwcG9ydGVkKHhkcCkgPyAwIDpcXG4gNTg1OlxcdFxcdFxcdCAgIHhkcC1cXHUwMDNlZGF0YSAtIHhkcC1cXHUwMDNlZGF0YV9tZXRhO1xcbiA1ODY6XFx0XFx0dG90c2l6ZSA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEgKyBtZXRhc2l6ZTtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0aWYgKHNpemVvZigqeGRwZikgKyB0b3RzaXplIFxcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcXG4gNTg5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1OTA6XFx0XFxuIDU5MTpcXHRcXHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcXG4gNTkyOlxcdFxcdGlmICghcGFnZSlcXG4gNTkzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRhZGRyID0gcGFnZV90b192aXJ0KHBhZ2UpO1xcbiA1OTY6XFx0XFx0eGRwZiA9IGFkZHI7XFxuIDU5NzpcXHRcXHRtZW1zZXQoeGRwZiwgMCwgc2l6ZW9mKCp4ZHBmKSk7XFxuIDU5ODpcXHRcXG4gNTk5OlxcdFxcdGFkZHIgKz0gc2l6ZW9mKCp4ZHBmKTtcXG4gNjAwOlxcdFxcdGRhdGFfdG9fY29weSA9IG1ldGFzaXplID8geGRwLVxcdTAwM2VkYXRhX21ldGEgOiB4ZHAtXFx1MDAzZWRhdGE7XFxuIDYwMTpcXHRcXHRtZW1jcHkoYWRkciwgZGF0YV90b19jb3B5LCB0b3RzaXplKTtcXG4gNjAyOlxcdFxcbiA2MDM6XFx0XFx0eGRwZi1cXHUwMDNlZGF0YSA9IGFkZHIgKyBtZXRhc2l6ZTtcXG4gNjA0OlxcdFxcdHhkcGYtXFx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZTtcXG4gNjA1OlxcdFxcdHhkcGYtXFx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XFxuIDYwNjpcXHRcXHR4ZHBmLVxcdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xcbiA2MDc6XFx0XFx0eGRwZi1cXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XFxuIDYwODpcXHRcXHR4ZHBmLVxcdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xcbiA2MDk6XFx0XFxuIDYxMDpcXHRcXHR4c2tfYnVmZl9mcmVlKHhkcCk7XFxuIDYxMTpcXHRcXHRyZXR1cm4geGRwZjtcXG4gNjEyOlxcdH1cXG4gNjEzOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxuIDYxNDpcXHRcXG4gNjE1OlxcdC8qIFVzZWQgYnkgWERQX1dBUk4gbWFjcm8sIHRvIGF2b2lkIGlubGluaW5nIFdBUk4oKSBpbiBmYXN0LXBhdGggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjA6MzEuNjc1NzQzNTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTg2NTczMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBhcmVhcyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIFhEUCBzdGFjay4gQW5kLCB5ZWFoLCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCByZWFsbHkgc3RhbmRzIG91dCBhcyBhIHByaW1lIHRhcmdldC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgWERQIGZyYW1ld29yaywgc28gYnVncyBoZXJlIGNvdWxkIGhhdmUgcHJldHR5IHNpZ25pZmljYW50IGNvbnNlcXVlbmNlcy5cblxuTXkgZm9jdXMgcmlnaHQgbm93IGlzIGRlZmluaXRlbHkgb24gdGhhdCBzcGVjaWZpYyBzeW1ib2wuIEkgd2FudCB0byBidWlsZCBhIGZ1enppbmcgc2V0dXAgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBpdC4gR2l2ZW4gdGhhdCBpdCdzIHJlbGF0ZWQgdG8gemVyby1jb3B5IHdpdGggQUZfWERQLCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFuZCwgY3J1Y2lhbGx5LCBgWERQX1NPQ0tFVFNgIHRvIGFsbG93IGZ1enppbmcgb2YgdGhlIHplcm8tY29weSBwYXRoLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gdGhhdCBgWERQX1NPQ0tFVFNgIGlzIGluZGVlZCBlbmFibGVkIHdoZW4gSSBleHBlY3QgaXQgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDo0Mi4yNjIzMTg4NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NjAyODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRFBfU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQveGRwL0tjb25maWctOS1cXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG5uZXQveGRwL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjA6NDIuMzI2OTI3NDg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwODkxNjk2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgWERQX1NPQ0tFVFNgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgc3Vycm91bmRpbmcgYFhEUF9TT0NLRVRTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBpdCBoYXMgYW55IGNydWNpYWwgZGVwZW5kZW5jaWVzIOKAkyBlaXRoZXIgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIG9yIG1heWJlIGV2ZW4gdXNlcnNwYWNlIGxpYnJhcmllcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2Ygd2hhdCBpdCBlbmFibGVzIGFuZCBhbnkgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9yIGNhdmVhdHMgYXNzb2NpYXRlZCB3aXRoIGl0cyB1c2UuIFdoYXQgYXJlIHRoZSBidWlsZGluZyBibG9ja3MgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBkZXBsb3lpbmcgc29tZXRoaW5nIHRoYXQgdXNlcyBpdCBpbiBwcm9kdWN0aW9uPyBMZXQncyB0cmFjZSBpdCBiYWNrIGFuZCBleHBvc2UgdGhvc2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjQ5LjQxNjEwMDA0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBYRFBfU09DS0VUU1xcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuICAgNTpcXHRcXHRkZWZhdWx0IG5cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgWERQIHNvY2tldHMgYWxsb3dzIGEgY2hhbm5lbCBiZXR3ZWVuIFhEUCBwcm9ncmFtcyBhbmRcXG4gICA4OlxcdFxcdCAgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucy5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFhEUF9TT0NLRVRTXFxuICAxMzpcXHRcXHRkZWZhdWx0IG5cXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgU3VwcG9ydCBmb3IgUEZfWERQIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cXG4gIDE2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjA6NDkuNDE2MTczNTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjA1NzAzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYRFBfU09DS0VUUyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBYRFBfU09DS0VUU2AgaGVyZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcmVsYXRpb25zaGlwLCBhbmQgSSB3b25kZXIgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBsaW5rZWQgdG8gdGhpcyBmZWF0dXJlLiBMZXQgbWUgc3RhcnQgYnkgbG9va2luZyBhcm91bmQuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmVzaWRlIGluIGBuZXQvY29yZS94ZHAuY2AuIE5vdywgYSBrZXkgcXVlc3Rpb24gcG9wcyB1cDogaXMgdGhlIGNvZGUgd2l0aGluIGBuZXQvY29yZS94ZHAuY2AgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHVuY29uZGl0aW9uYWxseSwgb3IgaXMgdGhlcmUgYSBjb25kaXRpb25hbCBjb21waWxlIG9wdGlvbiBhdCBwbGF5IGhlcmU/IEkgbmVlZCB0byBrbm93IHRoZSBidWlsZCBiZWhhdmlvciB0byB1bmRlcnN0YW5kIHdoYXQncyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjU1LjUzNjc0NTY5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NjM2MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG4tLVxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjE1OlxcdFxcdFxcdGZpYl9ub3RpZmllci5vIHhkcC5vIGZsb3dfb2ZmbG9hZC5vIGdyby5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNi1cXHRcXHRcXHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIGdzby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjU1Ljk4NTM4ODI0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODQzMDcxMzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgWERQIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGB4ZHAub2AgaXMgYmVpbmcgY29tcGlsZWQgcmVnYXJkbGVzcyDigJMgZ29vZCB0byBrbm93LCB0aGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSByZWFsIG1lYXQgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAuIE5vdywgSSByZWNhbGwgdGhhdCBmdW5jdGlvbiBiZWluZyB1c2VkIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgeGRwLVx1MDAzZXJ4cS1cdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MYCwgd2hpY2ggcmluZ3MgYWxhcm0gYmVsbHMgZm9yIEFGX1hEUCB6ZXJvLWNvcHkgc2NlbmFyaW9zLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggemVyby1jb3B5LCBlbmFibGluZyBgWERQX1NPQ0tFVFNgIGZvciB0aGlzIGNvbmZpZyBtYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgb2YgY291cnNlLCBnaXZlbiB0aGF0IGl0IG1lbnRpb25zIFhEUCBwcm9ncmFtcywgd2Ugd2lsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFzIGEgY29uZmlndXJhdGlvbi5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhlIHBhdGNoIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBOb3BlLCBpdCBsb29rcyBsaWtlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGlzIHRoZSAqb25seSogc3ltYm9sIHRoYXQgd2UgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaGUgcGF0Y2ggc2VlbXMgaGlnaGx5IGZvY3VzZWQuXG5cblVsdGltYXRlbHksIHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGNvcmUgWERQIGxvZ2ljIHRoYXQgaGFuZGxlcyB0aGUgY29udmVyc2lvbiBvZiB6ZXJvLWNvcHkgWERQIGJ1ZmZlcnMgaW50byBzdGFuZGFyZCBYRFAgZnJhbWVzIHdpdGhpbiB0aGUga2VybmVsLiBXZSBrbm93IHRoaXMgaXMgcmVsZXZhbnQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggQUZfWERQLCBpbmNsdWRpbmcgWERQX1RYIGFuZCBYRFBfUkVESVJFQ1QgYWN0aW9ucywgbWFraW5nIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gcHJvYmUuIEdpdmVuIGl0cyBjZW50cmFsIHJvbGUgaW4gemVyby1jb3B5IFhEUCBwcm9jZXNzaW5nIGFuZCB0aGUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIGFuZCB0aGF0IHRoZSBzeW1ib2wgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgaXMgbXkgcHJpbWFyeSBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NTksIk91dHB1dFRva2VucyI6MTIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIxOjA1LjgyODQ2MjAwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTk4MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBYRFAgbG9naWMgZm9yIGNvbnZlcnRpbmcgemVyby1jb3B5IFhEUCBidWZmZXJzIHRvIFhEUCBmcmFtZXMgKGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgYW5kIFhEUF9UWC9YRFBfUkVESVJFQ1QgYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBYRFAgbG9naWMgZm9yIGNvbnZlcnRpbmcgemVyby1jb3B5IFhEUCBidWZmZXJzIHRvIFhEUCBmcmFtZXMgKGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgYW5kIFhEUF9UWC9YRFBfUkVESVJFQ1QgYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjE6MDUuOTAyMDY2NzU3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE0ODU3MzcyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMTowNS45MDI1OTU5MTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYxNDg1MjAyMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDpcXG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFxcdTAwM2UgUEFHRV9TSVpFYCBpbnN0ZWFkIG9mIGBcXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgKSB0aGF0IGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcmxhcCB3aXRoIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UuIFRoaXMgY2F1c2VzIHBhY2tldCBkYXRhIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGBza2Jfc2hhcmVkX2luZm9gIGluaXRpYWxpemF0aW9uLCBvciBgc2tiX3NoYXJlZF9pbmZvYCB0byBiZSBjb3JydXB0ZWQgYnkgcGFja2V0IG1vZGlmaWNhdGlvbnMuXFxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVxcdTAwM2VoZWFkcm9vbSA9IDBgIGluc3RlYWQgb2YgYG1ldGFzaXplYCkgdGhhdCBjYXVzZWQgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIG1pc2NhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVGhpcyBzaGlmdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgYnVmZmVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgdG8gd3JpdGUgYHNrYl9zaGFyZWRfaW5mb2Agb3V0LW9mLWJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXFxuXFxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIGBza2Jfc2hhcmVkX2luZm9gIChlLmcuLCBjb3JydXB0ZWQgYG5yX2ZyYWdzYCBsZWFkaW5nIHRvIE9PQiByZWFkcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQsIGFzIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NWEzZGIxYWFlYjE3MDQ2YTc5OWI2MDVhZjcyM2NlOGNmOThhMDU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTg6MTk6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS94ZHAuYyBiL25ldC9jb3JlL3hkcC5jXG5pbmRleCA5ODkwYTMwNTg0YmE3Li40YmI5Nzc5MGIxODkxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUveGRwLmNcbisrKyBiL25ldC9jb3JlL3hkcC5jXG5AQCAtNTg1LDcgKzU4NSw3IEBAIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcdFx0ICAgeGRwLVx1MDAzZWRhdGEgLSB4ZHAtXHUwMDNlZGF0YV9tZXRhO1xuIFx0dG90c2l6ZSA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhICsgbWV0YXNpemU7XG4gXG4tXHRpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFBBR0VfU0laRSlcbitcdGlmIChzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcbkBAIC02MDIsNyArNjAyLDcgQEAgc3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIFxuIFx0eGRwZi1cdTAwM2VkYXRhID0gYWRkciArIG1ldGFzaXplO1xuIFx0eGRwZi1cdTAwM2VsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7XG4tXHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gMDtcbitcdHhkcGYtXHUwMDNlaGVhZHJvb20gPSBtZXRhc2l6ZTtcbiBcdHhkcGYtXHUwMDNlbWV0YXNpemUgPSBtZXRhc2l6ZTtcbiBcdHhkcGYtXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XG4gXHR4ZHBmLVx1MDAzZW1lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9PUkRFUjA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMTowNS45MDI1OTY4NTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgyNDkyNTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBlcmZvcm1hbmNlIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgd2l0aGluIGBuZXQvY29yZS94ZHAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB0aGV5J3ZlIHVwZGF0ZWQgYSBzaXplIGNoZWNrLCBzcGVjaWZpY2FsbHkgYWx0ZXJpbmcgYGlmIChzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgUEFHRV9TSVpFKWAgdG8gYGlmIChzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlgLiAgVGhhdCBzdWdnZXN0cyB0aGV5J3JlIGFjY291bnRpbmcgZm9yIHNvbWUgYWRkaXRpb25hbCBvdmVyaGVhZCBpbiB0aGUgY2FsY3VsYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gU0tCLCBidXQgbGV0J3Mgc2VlIHdoeS4gIFRoZXkgYWxzbyBtYWRlIGEgY2hhbmdlIHRvIGB4ZHBmLVx1MDAzZWhlYWRyb29tYCwgc2V0dGluZyBpdCB0byBgbWV0YXNpemVgIGluc3RlYWQgb2YgMC5cblxuTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0LiBMZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb2Ygd2hhdCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCAqYWN0dWFsbHkqIGRvZXMuIFJpZ2h0LCBpdCdzIGFib3V0IGhhbmRsaW5nIHplcm8tY29weSBidWZmZXJzIGFuZCB0cmFuc2xhdGluZyB0aGVtIGludG8gWERQIGZyYW1lcywgYWxsb2NhdGluZyBhIHBhZ2UsIGNvcHlpbmcgZGF0YSwgYW5kIGNvbnN0cnVjdGluZyB0aGUgZnJhbWUuXG5cbk5vdywgdGhhdCBgaGVhZHJvb21gIGNoYW5nZSByZWFsbHkgcHJpY2tlZCBteSBlYXJzLiBUaGV5J3JlIGNoYW5naW5nIGl0IGZyb20gMCB0byBgbWV0YXNpemVgLiAgVGhhdOKAmXMgd2hlcmUgSSBnZXQgY29uY2VybmVkLiAgQ291bGQgdGhpcyBpbnRyb2R1Y2UgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJZiBgaGVhZHJvb21gIGlzIHVzZWQgdG8gaW5kZXggYmFja3dhcmRzIGZyb20gdGhlIGFsbG9jYXRlZCBtZW1vcnksICpiZWZvcmUqIHRoZSBhY3R1YWwgZGF0YSBzZWN0aW9uIGB4ZHBmLVx1MDAzZWRhdGFgLCB0aGVuIHNldHRpbmcgaXQgdG8gYSBub24temVybyB2YWx1ZSBsaWtlIGBtZXRhc2l6ZWAgY291bGQgZWFzaWx5IGxlYWQgdG8gcmVhZGluZyBkYXRhIHRoYXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiBXZSdyZSBnb2luZyB0byBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGBoZWFkcm9vbWAgdXNhZ2UsIGFuZCBzZWUgaG93IHRoaXMgdmFsdWUgaXMgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMToxMi43Mjc1MjUyMjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTgxODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS94ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS94ZHAuYz01NzQ9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2F0dGFjaG1lbnRfc2V0dXApO1xcbm5ldC9jb3JlL3hkcC5jLTU3NS1cXG5uZXQvY29yZS94ZHAuYzo1NzY6c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbm5ldC9jb3JlL3hkcC5jLTU3Ny17XFxuLS1cXG5uZXQvY29yZS94ZHAuYy02MTItfVxcbm5ldC9jb3JlL3hkcC5jOjYxMzpFWFBPUlRfU1lNQk9MX0dQTCh4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUpO1xcbm5ldC9jb3JlL3hkcC5jLTYxNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjE6MTIuNzgwMTEyODQxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzOTQ1NzQ1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGZ1bmN0aW9uLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYW5kIHByb2Nlc3MgdGhpcy4gSSd2ZSBzZWVuIGEgZmV3IG9mIHRoZXNlLCBzbyBJIGtub3cgdGhpcyBpcyByZWxhdGVkIHRvIHplcm8tY29weSAoWkMpIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkncmUgdHJhbnNmb3JtZWQgdG8gZml0IHdpdGhpbiBhbiBYRFAgKGVYcHJlc3MgRGF0YSBQYXRoKSBjb250ZXh0LiBNeSBleHBlcmllbmNlIHdpdGggdGhpcyB0eXBlIG9mIG9wZXJhdGlvbiBpcyB1c3VhbGx5IHJlbGF0ZWQgdG8gZWZmaWNpZW5jeSBhbmQgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGhhbmRsZWQsIHdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCAobGlrZSBwb3RlbnRpYWxseSBgemNfZnJhbWVgIGFuZCBgeGRwX2ZyYW1lYCksIGFuZCB0aGUgY3JpdGljYWwgb3BlcmF0aW9ucyBiZWluZyBwZXJmb3JtZWQuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3BpZXMgb3IgcmUtYWxsb2NhdGlvbnMgd2hpY2ggd291bGQgc2lnbmlmaWNhbnRseSBpbXBhY3QgcGVyZm9ybWFuY2UuIElzIHRoZXJlIGFuIGVmZmljaWVudCBtZWNoYW5pc20gZm9yIHBhc3NpbmcgZGF0YSBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHVzZXIgc3BhY2Ugb3IgaXMgaXQgdGFraW5nIHBsYWNlIGluIGtlcm5lbCBzcGFjZSB3aXRoIHRoZSB0cmFuc2Zvcm1hdGlvbj8gQXJlIHRoZXkgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgd2hpbGUgYmVpbmcgemVyby1jb3B5LCBhcyB0aGlzIGlzIGFuIGFyZWEgdGhhdCBtdXN0IGJlIGFkZHJlc3NlZCBmb3IgYW55IGxldmVsIG9mIHByb2R1Y3Rpb24gdXNhZ2UuIEZpbmFsbHksIGxldCdzIHNlZSBob3cgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMToxOC4xNzQ2OTEwNzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3hkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NjpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxuIDU3NzpcXHR7XFxuIDU3ODpcXHRcXHR1bnNpZ25lZCBpbnQgbWV0YXNpemUsIHRvdHNpemU7XFxuIDU3OTpcXHRcXHR2b2lkICphZGRyLCAqZGF0YV90b19jb3B5O1xcbiA1ODA6XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZjtcXG4gNTgxOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHQvKiBDbG9uZSBpbnRvIGEgTUVNX1RZUEVfUEFHRV9PUkRFUjAgeGRwX2ZyYW1lLiAqL1xcbiA1ODQ6XFx0XFx0bWV0YXNpemUgPSB4ZHBfZGF0YV9tZXRhX3Vuc3VwcG9ydGVkKHhkcCkgPyAwIDpcXG4gNTg1OlxcdFxcdFxcdCAgIHhkcC1cXHUwMDNlZGF0YSAtIHhkcC1cXHUwMDNlZGF0YV9tZXRhO1xcbiA1ODY6XFx0XFx0dG90c2l6ZSA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEgKyBtZXRhc2l6ZTtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0aWYgKHNpemVvZigqeGRwZikgKyB0b3RzaXplIFxcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcXG4gNTg5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1OTA6XFx0XFxuIDU5MTpcXHRcXHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcXG4gNTkyOlxcdFxcdGlmICghcGFnZSlcXG4gNTkzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRhZGRyID0gcGFnZV90b192aXJ0KHBhZ2UpO1xcbiA1OTY6XFx0XFx0eGRwZiA9IGFkZHI7XFxuIDU5NzpcXHRcXHRtZW1zZXQoeGRwZiwgMCwgc2l6ZW9mKCp4ZHBmKSk7XFxuIDU5ODpcXHRcXG4gNTk5OlxcdFxcdGFkZHIgKz0gc2l6ZW9mKCp4ZHBmKTtcXG4gNjAwOlxcdFxcdGRhdGFfdG9fY29weSA9IG1ldGFzaXplID8geGRwLVxcdTAwM2VkYXRhX21ldGEgOiB4ZHAtXFx1MDAzZWRhdGE7XFxuIDYwMTpcXHRcXHRtZW1jcHkoYWRkciwgZGF0YV90b19jb3B5LCB0b3RzaXplKTtcXG4gNjAyOlxcdFxcbiA2MDM6XFx0XFx0eGRwZi1cXHUwMDNlZGF0YSA9IGFkZHIgKyBtZXRhc2l6ZTtcXG4gNjA0OlxcdFxcdHhkcGYtXFx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZTtcXG4gNjA1OlxcdFxcdHhkcGYtXFx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XFxuIDYwNjpcXHRcXHR4ZHBmLVxcdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xcbiA2MDc6XFx0XFx0eGRwZi1cXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XFxuIDYwODpcXHRcXHR4ZHBmLVxcdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xcbiA2MDk6XFx0XFxuIDYxMDpcXHRcXHR4c2tfYnVmZl9mcmVlKHhkcCk7XFxuIDYxMTpcXHRcXHRyZXR1cm4geGRwZjtcXG4gNjEyOlxcdH1cXG4gNjEzOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxuIDYxNDpcXHRcXG4gNjE1OlxcdC8qIFVzZWQgYnkgWERQX1dBUk4gbWFjcm8sIHRvIGF2b2lkIGlubGluaW5nIFdBUk4oKSBpbiBmYXN0LXBhdGggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjE6MTguMTc0ODIzNzc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDIwNzMwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU3RydWN0dXJlIFBvcHVsYXRpb24qKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gSSdtIGFsbG9jYXRpbmcgYSBuZXcgcGFnZSwgd2hpY2ggSSdtIGNhbGxpbmcgYHhkcGZgIGJlY2F1c2UgaXQncyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWdlLiBUaGF0J3MgZ29vZCwgc3RhbmRhcmQgcHJhY3RpY2UuIEkgemVybyBvdXQgdGhlIGVudGlyZSBwYWdlIOKAkyBhIGNsZWFuIHNsYXRlLiBUaGVuLCBJJ20gY29weWluZyBkYXRhIGludG8gdGhpcyBhbGxvY2F0ZWQgbWVtb3J5LiBUaGUgY29weSBpcyBhIGJpdCBjb252b2x1dGVkLiBJJ20gdGFraW5nIGB0b3RzaXplYCBieXRlcyBmcm9tIHNvbWV3aGVyZSBhbmQgbW92aW5nIHRoZW0gdG8gYW4gYWRkcmVzcy4gYHRvdHNpemVgIGlzIGB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSArIG1ldGFzaXplYCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBhYm91dCBtb3ZpbmcgYm90aCBtZXRhZGF0YSBhbmQgcGFja2V0IGRhdGEuIFRoZSBzb3VyY2Ugb2YgdGhlIGNvcHkgaXMgZWl0aGVyIGB4ZHAtXHUwMDNlZGF0YV9tZXRhYCAoaWYgYG1ldGFzaXplYCBpcyBncmVhdGVyIHRoYW4gemVybykgb3IgYHhkcC1cdTAwM2VkYXRhYCwgYXMgeW91IHdvdWxkIGV4cGVjdC4gU28sIEkgYW0gY29weWluZyB0aGUgbWV0YWRhdGEsIGFuZCB0aGVuIHRoZSBwYWNrZXQgZGF0YS5cblxuVGhlIGFkZHJlc3Mgd2hlcmUgSSBhbSAqY29weWluZyogaXMgYGFkZHIgKyBzaXplb2YoKnhkcGYpYCwgc28gaXQgc3RhcnRzICphZnRlciogdGhlIGB4ZHBmYCBzdHJ1Y3R1cmUgaXRzZWxmLiBgeGRwZi1cdTAwM2VkYXRhYCBpcyB0aGVuIHNldCB0byB0aGUgbG9jYXRpb24gaW4gdGhlIHBhZ2UgYWZ0ZXIgdGhlIG1ldGFkYXRhLCBpLmUuLCBgYWRkciArIG1ldGFzaXplYC4gVGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IChgeGRwZi1cdTAwM2VsZW5gKSBpcyB0aGVuIHNldCB0byB0aGUgdG90YWwgc2l6ZSBtaW51cyB0aGUgbWV0YWRhdGEgc2l6ZS4gU2VlbXMgbG9naWNhbCwgc28gZmFyLlxuXG5Ob3cgY29tZXMgdGhlIGludGVyZXN0aW5nIHBhcnQ6IGB4ZHBmLVx1MDAzZWhlYWRyb29tYC4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gdGhpbmsgbW9yZSBjYXJlZnVsbHkuIEl0J3MgYmVpbmcgc2V0IHRvIGBtZXRhc2l6ZWAuIFRoYXQnc+KApiB1bmV4cGVjdGVkLiBgaGVhZHJvb21gIHVzdWFsbHkgcmVmZXJzIHRvIHRoZSBzcGFjZSBhdmFpbGFibGUgKmJlZm9yZSogdGhlIHBhY2tldCBkYXRhIHRvIHByZXBlbmQgaGVhZGVycy4gVXN1YWxseSwgeW91IHdvdWxkIHdhbnQgdGhpcyBzcGFjZSB0byBpbmNyZWFzZS4gSG93ZXZlciwgdGhpcyBkZWZpbml0aW9uIG9mIGBoZWFkcm9vbWAgbWVhbnMgdGhhdCBgeGRwZi1cdTAwM2VkYXRhIC0gaGVhZHJvb21gIHBvaW50cyB0byBgYWRkcmAsIHdoaWNoIGluZGVlZCBjb250YWlucyB0aGUgY29waWVkIG1ldGFkYXRhLiBUaGUgbG9naWMgY2hlY2tzIG91dCAtIHlvdSB3b3VsZCBhY2Nlc3MgdGhlIG1ldGFkYXRhIGJ5IHN0YXJ0aW5nIGBoZWFkcm9vbWAgYnl0ZXMgYmFjay5cblxuQnV0IG5vdyBJIHNlZSB0aGUgcHJvYmxlbS4gSWYgYGhlYWRyb29tYCBpcyBlcXVhbCB0byBgbWV0YXNpemVgIGFuZCBJIHRyeSB0byBwcmVwZW5kIGEgaGVhZGVyLCBJIHdpbGwgKm92ZXJ3cml0ZSogdGhlIG1ldGFkYXRhLiBUaGF04oCZcyBkZWZpbml0ZWx5IG5vdCBpZGVhbC4gVGhpcyBtZWFucyB0aGF0IGlmIGBoZWFkcm9vbWAgaXMgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUsIHlvdSBjYW7igJl0IHByZXBlbmQgYW55dGhpbmcgd2l0aG91dCBjb3JydXB0aW5nIHRoZSBleGlzdGluZyBtZXRhZGF0YS5cblxuU28sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgdGhpcyBtZWFuIGBoZWFkcm9vbWAgc2hvdWxkIGJlIHplcm8sIGVmZmVjdGl2ZWx5IGRpc2FsbG93aW5nIGhlYWRlciBwcmVwZW5kcz8gT3IsIGFtIEkgbWlzdW5kZXJzdGFuZGluZyB3aGF0IGBoZWFkcm9vbWAgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQ/XG5cbkFscmlnaHQsIGxldCdzIHN0ZXAgYmFjay4gV2FpdCwgbGV0J3MgZ2V0IHRoaXMgcmlnaHQ6IGB4ZHBmLVx1MDAzZWhlYWRyb29tYCBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBgeGRwZmAgc3RydWN0IGFuZCB0aGUgYmVnaW5uaW5nIG9mIGB4ZHBmLVx1MDAzZWRhdGFgLiBSaWdodD8gT2theSwgdGhhdCdzIHdoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSAqdXNlcyogYHhkcGYtXHUwMDNlaGVhZHJvb21gIHRvIGJlIHN1cmUuIEl0IHdpbGwgbWFrZSBtb3JlIHNlbnNlIHRvIGNoZWNrIHRoYXQgYmVmb3JlIEkgbWFrZSBhbnkganVkZ2VtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIxOjI1LjMxNjg5OTc0OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NzM4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGVhZHJvb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUveGRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUveGRwLmM9NTc2PXN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTYwNC1cXHR4ZHBmLVxcdTAwM2VsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7XFxubmV0L2NvcmUveGRwLmM6NjA1OlxcdHhkcGYtXFx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XFxubmV0L2NvcmUveGRwLmMtNjA2LVxcdHhkcGYtXFx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XFxuLS1cXG5uZXQvY29yZS94ZHAuYz03OTQ9c3RydWN0IHNrX2J1ZmYgKl9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXFxuLS1cXG5uZXQvY29yZS94ZHAuYy03OTgtXFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fZnJhbWUoeGRwZik7XFxubmV0L2NvcmUveGRwLmM6Nzk5OlxcdHVuc2lnbmVkIGludCBoZWFkcm9vbSwgZnJhbWVfc2l6ZTtcXG5uZXQvY29yZS94ZHAuYy04MDAtXFx0dm9pZCAqaGFyZF9zdGFydDtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTgwNi1cXG5uZXQvY29yZS94ZHAuYzo4MDc6XFx0LyogUGFydCBvZiBoZWFkcm9vbSB3YXMgcmVzZXJ2ZWQgdG8geGRwZiAqL1xcbm5ldC9jb3JlL3hkcC5jOjgwODpcXHRoZWFkcm9vbSA9IHNpemVvZigqeGRwZikgKyB4ZHBmLVxcdTAwM2VoZWFkcm9vbTtcXG5uZXQvY29yZS94ZHAuYy04MDktXFxuLS1cXG5uZXQvY29yZS94ZHAuYy04MTQtXFxubmV0L2NvcmUveGRwLmM6ODE1OlxcdGhhcmRfc3RhcnQgPSB4ZHBmLVxcdTAwM2VkYXRhIC0gaGVhZHJvb207XFxubmV0L2NvcmUveGRwLmMtODE2LVxcdHNrYiA9IGJ1aWxkX3NrYl9hcm91bmQoc2tiLCBoYXJkX3N0YXJ0LCBmcmFtZV9zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTgxOS1cXG5uZXQvY29yZS94ZHAuYzo4MjA6XFx0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XFxubmV0L2NvcmUveGRwLmMtODIxLVxcdF9fc2tiX3B1dChza2IsIHhkcGYtXFx1MDAzZWxlbik7XFxuLS1cXG5uZXQvY29yZS94ZHAuYz04NjQ9c3RydWN0IHhkcF9mcmFtZSAqeGRwZl9jbG9uZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKVxcbm5ldC9jb3JlL3hkcC5jLTg2NS17XFxubmV0L2NvcmUveGRwLmM6ODY2OlxcdHVuc2lnbmVkIGludCBoZWFkcm9vbSwgdG90YWxzaXplO1xcbm5ldC9jb3JlL3hkcC5jLTg2Ny1cXHRzdHJ1Y3QgeGRwX2ZyYW1lICpueGRwZjtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTg3MC1cXG5uZXQvY29yZS94ZHAuYzo4NzE6XFx0aGVhZHJvb20gPSB4ZHBmLVxcdTAwM2VoZWFkcm9vbSArIHNpemVvZigqeGRwZik7XFxubmV0L2NvcmUveGRwLmM6ODcyOlxcdHRvdGFsc2l6ZSA9IGhlYWRyb29tICsgeGRwZi1cXHUwMDNlbGVuO1xcbm5ldC9jb3JlL3hkcC5jLTg3My1cXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTg4My1cXHRueGRwZiA9IGFkZHI7XFxubmV0L2NvcmUveGRwLmM6ODg0OlxcdG54ZHBmLVxcdTAwM2VkYXRhID0gYWRkciArIGhlYWRyb29tO1xcbm5ldC9jb3JlL3hkcC5jLTg4NS1cXHRueGRwZi1cXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIxOjI1LjM2Mzg3NzY2NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTk1NDM5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuZGVyc3RhbmRpbmcgWERQIEZyYW1lIEhlYWRyb29tKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgWERQIGZyYW1lIHN0cnVjdHVyZSBhbmQgdHJ5aW5nIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1lbW9yeSBsYXlvdXQsIHNwZWNpZmljYWxseSB0aGUgYGhlYWRyb29tYC4gIEkgc2VlIGhvdyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCwgYGhlYWRyb29tYCBpc24ndCBxdWl0ZSBhcyBzdHJhaWdodGZvcndhcmQgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSXQncyB0aGUgc3BhY2UgYmV0d2VlbiBgeGRwZmAgYW5kIGB4ZHBmLVx1MDAzZWRhdGFgLlxuXG5JJ20gdHJhY2luZyB0aHJvdWdoIHRoZSBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBmdW5jdGlvbi4gYGFkZHJgIGlzIGNhbGN1bGF0ZWQgYXMgYHBhZ2VfdG9fdmlydChwYWdlKSArIHNpemVvZigqeGRwZilgLCB3aGVyZSB0aGUgcGFnZSBpcyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gVGhlIGB4ZHBmYCBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UsIHNvIGBhZGRyYCBwb2ludHMganVzdCBhZnRlciBpdC4gVGhlbiwgdGhlIGB4ZHBmLVx1MDAzZWRhdGFgIHBvaW50ZXIgaXMgc2V0IHRvIGBhZGRyICsgbWV0YXNpemVgLCB3aGljaCBpcyB3aGVyZSB0aGUgcGFja2V0IGRhdGEgYmVnaW5zLCBwb3RlbnRpYWxseSBvZmZzZXQgYnkgbWV0YWRhdGEuIEZpbmFsbHksIGB4ZHBmLVx1MDAzZWhlYWRyb29tYCBpcyBzZXQgdG8gYG1ldGFzaXplYC5cblxuTm93LCB0aGUgY29ubmVjdGlvbiBpcyBtYWRlIGluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAuIEkgc2VlIHRoZSBjYWxjdWxhdGlvbjogYGhlYWRyb29tID0gc2l6ZW9mKCp4ZHBmKSArIHhkcGYtXHUwMDNlaGVhZHJvb21gLiAgU2luY2UgYHhkcGYtXHUwMDNlaGVhZHJvb21gICppcyogYG1ldGFzaXplYCwgdGhlIHRvdGFsIGBoZWFkcm9vbWAgaXMgYHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFRoZSBgaGFyZF9zdGFydGAgaXMgY2FsY3VsYXRlZCBhcyBgeGRwZi1cdTAwM2VkYXRhIC0gaGVhZHJvb21gLiBJIGNhbiBub3cgc3ViIGluIHRoZSBkZWZpbml0aW9uIG9mIHRob3NlIHRlcm1zIHRvIHlpZWxkIGBoYXJkX3N0YXJ0ID0gcGFnZV90b192aXJ0KHBhZ2UpYC4gU28gYGhhcmRfc3RhcnRgIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UuXG5cbkJ1dCwgaWYgSSBoYWQgYHhkcGYtXHUwMDNlaGVhZHJvb21gIGFzIDAsIHRoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIGBoZWFkcm9vbWAgd291bGQgY2hhbmdlIHRvIGBzaXplb2YoKnhkcGYpYC4gIGBoYXJkX3N0YXJ0YCB3b3VsZCBiZSBgcGFnZV90b192aXJ0KHBhZ2UpICsgbWV0YXNpemVgLlxuXG5Ob3csIHRoZSByZWFsIGlzc3VlIGJlY29tZXMgYXBwYXJlbnQuIGBidWlsZF9za2JfYXJvdW5kYCB1c2VzIGBoYXJkX3N0YXJ0YCBhbmQgdGhlIGBmcmFtZV9zaXplYC4gQW5kIGBmcmFtZV9zaXplYCBpcyBiYXNlZCBvbiBgeGRwZi1cdTAwM2VmcmFtZV9zemAuIElmIEkgc2V0IGBoYXJkX3N0YXJ0YCBhdCBgcGFnZV90b192aXJ0KHBhZ2UpICsgbWV0YXNpemVgLCBhbmQgYXNzdW1lIHRoZSBmcmFtZSB0YWtlcyB1cCB0aGUgZW50aXJlIHBhZ2UsIHRoZW4gSSdtIHdyaXRpbmcgZGF0YSBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhZ2UhICBUaGF0J3MgYSBkZWZpbml0ZSBuby1uby4gU28gaXQncyBsb29raW5nIGxpa2UgYGhlYWRyb29tYCAqbXVzdCogYmUgc2V0IGNvcnJlY3RseSB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIFhEUCBmcmFtZSBtZXRhZGF0YS4gIFRoYXQgbWFrZXMgc2Vuc2U7IGBoZWFkcm9vbWAgaXMgc3BlY2lmaWNhbGx5IHRvICphdm9pZCogb3ZlcmZsb3dpbmcgdGhlIHBhZ2UgYm91bmRhcnkuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcwMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMTozNS4zNTkzMTk2MTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3hkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5NDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4gNzk1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuIDc5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA3OTc6XFx0e1xcbiA3OTg6XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fZnJhbWUoeGRwZik7XFxuIDc5OTpcXHRcXHR1bnNpZ25lZCBpbnQgaGVhZHJvb20sIGZyYW1lX3NpemU7XFxuIDgwMDpcXHRcXHR2b2lkICpoYXJkX3N0YXJ0O1xcbiA4MDE6XFx0XFx0dTggbnJfZnJhZ3M7XFxuIDgwMjpcXHRcXG4gODAzOlxcdFxcdC8qIHhkcCBmcmFncyBmcmFtZSAqL1xcbiA4MDQ6XFx0XFx0aWYgKHVubGlrZWx5KHhkcF9mcmFtZV9oYXNfZnJhZ3MoeGRwZikpKVxcbiA4MDU6XFx0XFx0XFx0bnJfZnJhZ3MgPSBzaW5mby1cXHUwMDNlbnJfZnJhZ3M7XFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdC8qIFBhcnQgb2YgaGVhZHJvb20gd2FzIHJlc2VydmVkIHRvIHhkcGYgKi9cXG4gODA4OlxcdFxcdGhlYWRyb29tID0gc2l6ZW9mKCp4ZHBmKSArIHhkcGYtXFx1MDAzZWhlYWRyb29tO1xcbiA4MDk6XFx0XFxuIDgxMDpcXHRcXHQvKiBNZW1vcnkgc2l6ZSBiYWNraW5nIHhkcF9mcmFtZSBkYXRhIGFscmVhZHkgaGF2ZSByZXNlcnZlZFxcbiA4MTE6XFx0XFx0ICogcm9vbSBmb3IgYnVpbGRfc2tiIHRvIHBsYWNlIHNrYl9zaGFyZWRfaW5mbyBpbiB0YWlscm9vbS5cXG4gODEyOlxcdFxcdCAqL1xcbiA4MTM6XFx0XFx0ZnJhbWVfc2l6ZSA9IHhkcGYtXFx1MDAzZWZyYW1lX3N6O1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRoYXJkX3N0YXJ0ID0geGRwZi1cXHUwMDNlZGF0YSAtIGhlYWRyb29tO1xcbiA4MTY6XFx0XFx0c2tiID0gYnVpbGRfc2tiX2Fyb3VuZChza2IsIGhhcmRfc3RhcnQsIGZyYW1lX3NpemUpO1xcbiA4MTc6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA4MTg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgaGVhZHJvb20pO1xcbiA4MjE6XFx0XFx0X19za2JfcHV0KHNrYiwgeGRwZi1cXHUwMDNlbGVuKTtcXG4gODIyOlxcdFxcdGlmICh4ZHBmLVxcdTAwM2VtZXRhc2l6ZSlcXG4gODIzOlxcdFxcdFxcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCB4ZHBmLVxcdTAwM2VtZXRhc2l6ZSk7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdGlmICh1bmxpa2VseSh4ZHBfZnJhbWVfaGFzX2ZyYWdzKHhkcGYpKSlcXG4gODI2OlxcdFxcdFxcdHhkcF91cGRhdGVfc2tiX2ZyYWdzX2luZm8oc2tiLCBucl9mcmFncywgc2luZm8tXFx1MDAzZXhkcF9mcmFnc19zaXplLFxcbiA4Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICBucl9mcmFncyAqIHhkcGYtXFx1MDAzZWZyYW1lX3N6LFxcbiA4Mjg6XFx0XFx0XFx0XFx0XFx0XFx0ICB4ZHBfZnJhbWVfZ2V0X3NrYl9mbGFncyh4ZHBmKSk7XFxuIDgyOTpcXHRcXG4gODMwOlxcdFxcdC8qIEVzc2VudGlhbCBTS0IgaW5mbzogcHJvdG9jb2wgYW5kIHNrYi1cXHUwMDNlZGV2ICovXFxuIDgzMTpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHQvKiBPcHRpb25hbCBTS0IgaW5mbywgY3VycmVudGx5IG1pc3Npbmc6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIxOjM1LjM1OTQzMDE4M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQ4NzExMjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBYRFAgRnJhbWUgSGFuZGxpbmcgYW5kIFBvdGVudGlhbCBNZW1vcnkgQ29ycnVwdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgaXNzdWUgbGllcyB3aXRoaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBYRFAgZnJhbWVzIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgaXQgY29uc3RydWN0cyBTS0JzIChTb2NrZXQgQnVmZmVyKSBmcm9tIHplcm8tY29weSBYRFAgZnJhbWVzLCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byB0aGUgbGF5b3V0IG9mIGRhdGEgd2l0aGluIHRoZSBhbGxvY2F0ZWQgcGFnZXMuXG5cblRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgaW4gYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBoaW5nZXMgb24gY2FsY3VsYXRpbmcgYSBzdGFydGluZyBhZGRyZXNzIChgaGFyZF9zdGFydGApIGZvciB0aGUgU0tCJ3MgZGF0YSBidWZmZXIuIFRoZSBjcml0aWNhbCB2YXJpYWJsZXMgaW5jbHVkZSBgeGRwZi1cdTAwM2VoZWFkcm9vbWAsIGB4ZHBmLVx1MDAzZWRhdGFgLCBhbmQgdGhlIGFsbG9jYXRlZCBgcGFnZWAuIElmIGB4ZHBmLVx1MDAzZWhlYWRyb29tYCBpcyB6ZXJvLCBhcyBpcyBzZXQsIGBoYXJkX3N0YXJ0YCBpcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGFuZCBwb2ludHMgdG8gYW4gYWRkcmVzcyAqYmVmb3JlKiB0aGUgc3RhcnQgb2YgdGhlIGRhdGEgd2l0aGluIHRoZSBwYWdlLCBiZWNhdXNlIGB4ZHBmLVx1MDAzZWRhdGFgIGlzbid0IHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB3aGVyZSB0aGUgY29waWVkIHBhY2tldCBkYXRhIGlzLCBpdCdzIGFmdGVyIHRoZSBoZWFkZXIgYW5kIHRoZSBgbWV0YXNpemVgLlxuXG5UaGlzIGxlYWRzIHRvIGEgbWlzYWxpZ25tZW50IHdoZW4gYGJ1aWxkX3NrYl9hcm91bmRgIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCB0aGUgU0tCLiBXaXRoIGBoYXJkX3N0YXJ0YCBwb2ludGluZyB0byBhIGxvY2F0aW9uIHNoaWZ0ZWQgYnkgYG1ldGFzaXplYCBieXRlcyBmcm9tIHRoZSBhY3R1YWwgZGF0YSBzdGFydCwgdGhlIFNLQidzIGFzc3VtZWQgbWVtb3J5IHJhbmdlIGV4dGVuZHMgYmV5b25kIHRoZSBhbGxvY2F0ZWQgcGFnZS4gVGhpcyBtaXNhbGlnbm1lbnQgdGhlbiBtZWFucyB0aGF0IGBidWlsZF9za2JfYXJvdW5kYCB0cmllcyB0byBwbGFjZSB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhpcyBvdXQtb2YtYm91bmRzIHJlZ2lvbi4gVGhlIGBza2Jfc2hhcmVkX2luZm9gIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSBTS0IsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2tldCBmcmFnbWVudHMgYW5kIG90aGVyIG1ldGFkYXRhLiBCZWNhdXNlIG9mIHRoaXMgbWlzYWxpZ25tZW50IGluIGNhbGN1bGF0aW5nIGBoYXJkX3N0YXJ0YCwgaXQncyBjbGVhciB0aGF0IGl0IGNvdWxkIGJlIHdyaXRpbmcgb3V0LW9mLWJvdW5kcyBvZiB0aGUgcGFnZSwgd2hpY2ggS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggc2luY2UgaXQncyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLlxuXG5UaGUgcGF0Y2gncyBjaGFuZ2UgdG8gdGhlIHNpemUgY2hlY2s6XG5gYGBjXG4tXHRpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFBBR0VfU0laRSlcbitcdGlmIChzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcbmBgYFxuaXMgZGVzaWduZWQgdG8gYWRkcmVzcyBhbiBpbXBvcnRhbnQgcG9pbnQuIGBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCBtYWtlcyBzdXJlIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciBgc2tiX3NoYXJlZF9pbmZvYCB3aXRoaW4gdGhlIGFsbG9jYXRlZCBwYWdlLiBUaGUgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBidWZmZXIgd2l0aCBgbWVtY3B5KGFkZHIsIGRhdGFfdG9fY29weSwgdG90c2l6ZSlgLiBUaGVuIHRoZSBgYnVpbGRfc2tiX2Fyb3VuZGAgd2lsbCBvdmVyd3JpdGUgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgd2l0aCBgc2tiX3NoYXJlZF9pbmZvYCBpZiB0aGUgY2hlY2sgaXNuJ3QgZG9uZSB0byBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgc2tiIG1ldGFkYXRhLCB0aGVyZWZvcmUsIHRoaXMgY29ycnVwdGlvbiB3aWxsIGNvcnJ1cHQgdGhlIHBhY2tldCdzIGRhdGEgd2l0aCBza2IgbWV0YWRhdGEuIEl0IGlzIGEgY29ycnVwdGlvbiBvZiB0aGUgZGF0YSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYXMgdGhlIGBza2Jfc2hhcmVkX2luZm9gIGlzIGluaXRpYWxpemVkLlxuXG5JbiBzdW1tYXJ5LCB0aGUgY3J1eCBvZiB0aGUgdnVsbmVyYWJpbGl0eSBhcHBlYXJzIHRvIGJlIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgZHVlIHRvIGEgY2FsY3VsYXRpb24gZXJyb3IgaW4gYGhhcmRfc3RhcnRgIGFuZCBhbiBpbnN1ZmZpY2llbnQgc2l6ZSBjaGVjayBpbiB0aGUgYnVmZmVyIGFsbG9jYXRpb24uIFRoZSBlcnJvciByZXN1bHRzIGZyb20gdGhlIGluaXRpYWwgd3JvbmcgYXNzdW1wdGlvbiBhYm91dCB0aGUgZGF0YSBsb2NhdGlvbiB3aXRoaW4gdGhlIHBhZ2UgYW5kIGhvdyB0aGUgYnVmZmVyIGlzIHRoZW4gaGFuZGxlZCBieSB0aGUga2VybmVsJ3MgU0tCIGNvbnN0cnVjdGlvbiBwcm9jZXNzLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBhbGxvY2F0aW5nIGVub3VnaCBzcGFjZSBmb3IgYHNrYl9zaGFyZWRfaW5mb2AuIEtBU0FOIHdpbGwgbGlrZWx5IGNhdGNoIHRoZXNlIGlzc3VlcyBiZWNhdXNlIHRoZXkgYXJlIGVpdGhlciBvdXQtb2YtYm91bmRzIHdyaXRlcyB0byB0aGUgcGFnZSBvciBkYXRhIGNvcnJ1cHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6MDIuODQ2NTQ1Mzc3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcyNTc4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnVpbGRfc2tiX2Fyb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0zMTY9c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzM3LSAqIFRoZSBoZWFkcyBhcmUgYmVpbmcgemVyb2VkIHdpdGggZWl0aGVyIG1lbXNldCgpIG9yICVfX0dGUF9aRVJPLCBzbyB0aGV5IGFyZVxcbm5ldC9jb3JlL3NrYnVmZi5jOjMzODogKiByZWFkeSBmb3IgeyxfX31idWlsZF9za2JfYXJvdW5kKCkgYW5kIGRvbid0IGhhdmUgYW55IGRhdGEgYnVmZmVycyBhdHRhY2hlZC5cXG5uZXQvY29yZS9za2J1ZmYuYy0zMzktICogTXVzdCBiZSBjYWxsZWQgKm9ubHkqIGZyb20gdGhlIEJIIGNvbnRleHQuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00NTM9RVhQT1JUX1NZTUJPTChzbGFiX2J1aWxkX3NrYik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NTUtLyogQ2FsbGVyIG11c3QgcHJvdmlkZSBTS0IgdGhhdCBpcyBtZW1zZXQgY2xlYXJlZCAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjQ1NjpzdGF0aWMgdm9pZCBfX2J1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG5uZXQvY29yZS9za2J1ZmYuYy00NTctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTktXFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6NTAwOlxcdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNTAxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE4PUVYUE9SVF9TWU1CT0woYnVpbGRfc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUyMC0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo1MjE6ICogYnVpbGRfc2tiX2Fyb3VuZCAtIGJ1aWxkIGEgbmV0d29yayBidWZmZXIgYXJvdW5kIHByb3ZpZGVkIHNrYlxcbm5ldC9jb3JlL3NrYnVmZi5jLTUyMi0gKiBAc2tiOiBza19idWZmIHByb3ZpZGUgYnkgY2FsbGVyLCBtdXN0IGJlIG1lbXNldCBjbGVhcmVkXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MjUtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NTI2OnN0cnVjdCBza19idWZmICpidWlsZF9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNTI3LVxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTMxLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjUzMjpcXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUzMy1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUzOS19XFxubmV0L2NvcmUvc2tidWZmLmM6NTQwOkVYUE9SVF9TWU1CT0woYnVpbGRfc2tiX2Fyb3VuZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNTQxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTYwLVxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjU2MTpcXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTU2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6MDMuNDEzODA3MTQ5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3OTExOTY4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYF9fYnVpbGRfc2tiX2Fyb3VuZGAsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBSb2xlIG9mIGBfX2J1aWxkX3NrYl9hcm91bmRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgemVyb2VzIGluIG9uIGBfX2J1aWxkX3NrYl9hcm91bmRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgYXMgYSBzZWFzb25lZCBwcmFjdGl0aW9uZXIsIEkga25vdyBpdCdzIGZ1bmRhbWVudGFsIHRvIGJ1aWxkaW5nIFNvY2tldCBCdWZmZXIgKFNLQikgc3RydWN0dXJlcyBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgd2hlbiBoYW5kbGluZyBwcmUtZXhpc3RpbmcgZGF0YSBidWZmZXJzLiBUaGlzIGlzbid0IGEgc2ltcGxlIGFsbG9jYXRpb247IHRoaXMgaXMgYWJvdXQgbWV0aWN1bG91c2x5IGNyYWZ0aW5nIGFuIFNLQiBhcm91bmQgbWVtb3J5IHRoYXQgKmFscmVhZHkgZXhpc3RzKi5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGlja2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGJlbmVmaXRzIOKAkyBlZmZpY2llbmN5IGluIHNpdHVhdGlvbnMgd2hlcmUgd2UgaGF2ZSBhIGRhdGEgcGFja2V0IGFuZCB3YW50IHRvIHF1aWNrbHkgd3JhcCBpdCBpbiB0aGUgU0tCIGFic3RyYWN0aW9uLCBlbGltaW5hdGluZyB1bm5lY2Vzc2FyeSBjb3B5aW5nLiBCdXQgSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwaXRmYWxscy4gV2hhdCBhcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucz8gSG93IGRvZXMgaXQgaGFuZGxlIGZyYWdtZW50YXRpb24/IERvZXMgaXQgaW50cm9kdWNlIGFueSBjb21wbGV4aXRpZXMgYXJvdW5kIGJ1ZmZlciBvd25lcnNoaXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQ/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgbWVtb3J5IGFsaWdubWVudCBpc3N1ZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGFueSBsaW1pdGF0aW9ucyByZWdhcmRpbmcgd2hlcmUgdGhlIGV4aXN0aW5nIG1lbW9yeSBjb21lcyBmcm9tLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbW1vbiB1c2UgY2FzZXMuIElzIHRoaXMgcHJpbWFyaWx5IHVzZWQgaW4gc2l0dWF0aW9ucyBsaWtlIHplcm8tY29weSBuZXR3b3JraW5nLCBvZmZsb2FkIHNjZW5hcmlvcywgb3Igd2hlbiBkZWFsaW5nIHdpdGggcGFja2V0cyBwcmUtcmVjZWl2ZWQgZnJvbSBoYXJkd2FyZT8gSSdtIHBpY3R1cmluZyBzcGVjaWZpYyBjb2RlIHBhdGhzIGluIG15IGhlYWQg4oCTIHBlcmhhcHMgaW50ZXJhY3Rpb24gd2l0aCBETUEgZW5naW5lcywgb3IgdGhlIHdheSB0aGUgc3RhY2sgaGFuZGxlcyBjZXJ0YWluIGhlYWRlciBtYW5pcHVsYXRpb25zIGFyb3VuZCB0aGVzZSAnd3JhcHBlZCcgU0tCcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBudWFuY2VzIG9mIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBTS0ItcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgc2tiX3B1dGAgYW5kIGBza2JfcHVsbGAuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gc2NydXRpbml6ZSBpdHMgaW50ZXJuYWwgd29ya2luZ3MuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBtZW1vcnkgYmFycmllcnMgaW52b2x2ZWQ/IFdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSwgaWYgYW55PyBBbmQgaG93IHdlbGwgZG9lcyBpdCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSdzIHVzdWFsbHkgYSBzcGVjaWZpYyBlcnJvciBmbG93IEkgbmVlZCB0byByZW1lbWJlci4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgaG93IGdyYWNlZnVsbHkgaXQgaGFuZGxlcyBlZGdlIGNhc2VzLlxuXG5JbiBlc3NlbmNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBjb25zdHJhaW50cywgYW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCdzIG9wdGltaXplZCB0byBzaGluZSwgYWxsIHRvIGVuc3VyZSBJJ20gdXNpbmcgaXQgc2FmZWx5IGFuZCBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMjoxMy4yMDUwMDY3NDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1NjpcXHRzdGF0aWMgdm9pZCBfX2J1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG4gNDU3OlxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbiA0NTg6XFx0e1xcbiA0NTk6XFx0XFx0dW5zaWduZWQgaW50IHNpemUgPSBmcmFnX3NpemU7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdC8qIGZyYWdfc2l6ZSA9PSAwIGlzIGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBub3cuIENhbGxlcnNcXG4gNDYyOlxcdFxcdCAqIHVzaW5nIHNsYWIgYnVmZmVyIHNob3VsZCB1c2Ugc2xhYl9idWlsZF9za2IoKSBpbnN0ZWFkLlxcbiA0NjM6XFx0XFx0ICovXFxuIDQ2NDpcXHRcXHRpZiAoV0FSTl9PTkNFKHNpemUgPT0gMCwgXFxcIlVzZSBzbGFiX2J1aWxkX3NrYigpIGluc3RlYWRcXFwiKSlcXG4gNDY1OlxcdFxcdFxcdGRhdGEgPSBfX3NsYWJfYnVpbGRfc2tiKGRhdGEsIFxcdTAwMjZzaXplKTtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxuIDQ2ODpcXHR9XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdC8qKlxcbiA0NzE6XFx0ICogX19idWlsZF9za2IgLSBidWlsZCBhIG5ldHdvcmsgYnVmZmVyXFxuIDQ3MjpcXHQgKiBAZGF0YTogZGF0YSBidWZmZXIgcHJvdmlkZWQgYnkgY2FsbGVyXFxuIDQ3MzpcXHQgKiBAZnJhZ19zaXplOiBzaXplIG9mIGRhdGEgKG11c3Qgbm90IGJlIDApXFxuIDQ3NDpcXHQgKlxcbiA0NzU6XFx0ICogQWxsb2NhdGUgYSBuZXcgXFx1MDAyNnNrX2J1ZmYuIENhbGxlciBwcm92aWRlcyBzcGFjZSBob2xkaW5nIGhlYWQgYW5kXFxuIDQ3NjpcXHQgKiBza2Jfc2hhcmVkX2luZm8uIEBkYXRhIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZSBwYWdlXFxuIDQ3NzpcXHQgKiBhbGxvY2F0b3Igb3Igdm1hbGxvYygpLiAoQSBAZnJhZ19zaXplIG9mIDAgdG8gaW5kaWNhdGUgYSBrbWFsbG9jKClcXG4gNDc4OlxcdCAqIGFsbG9jYXRpb24gaXMgZGVwcmVjYXRlZCwgYW5kIGNhbGxlcnMgc2hvdWxkIHVzZSBzbGFiX2J1aWxkX3NrYigpXFxuIDQ3OTpcXHQgKiBpbnN0ZWFkLilcXG4gNDgwOlxcdCAqIFRoZSByZXR1cm4gaXMgdGhlIG5ldyBza2IgYnVmZmVyLlxcbiA0ODE6XFx0ICogT24gYSBmYWlsdXJlIHRoZSByZXR1cm4gaXMgJU5VTEwsIGFuZCBAZGF0YSBpcyBub3QgZnJlZWQuXFxuIDQ4MjpcXHQgKiBOb3RlcyA6XFxuIDQ4MzpcXHQgKiAgQmVmb3JlIElPLCBkcml2ZXIgYWxsb2NhdGVzIG9ubHkgZGF0YSBidWZmZXIgd2hlcmUgTklDIHB1dCBpbmNvbWluZyBmcmFtZVxcbiA0ODQ6XFx0ICogIERyaXZlciBzaG91bGQgYWRkIHJvb20gYXQgaGVhZCAoTkVUX1NLQl9QQUQpIGFuZFxcbiA0ODU6XFx0ICogIE1VU1QgYWRkIHJvb20gYXQgdGFpbCAoU0tCX0RBVEFfQUxJR04oc2tiX3NoYXJlZF9pbmZvKSlcXG4gNDg2OlxcdCAqICBBZnRlciBJTywgZHJpdmVyIGNhbGxzIGJ1aWxkX3NrYigpLCB0byBhbGxvY2F0ZSBza19idWZmIGFuZCBwb3B1bGF0ZSBpdFxcbiA0ODc6XFx0ICogIGJlZm9yZSBnaXZpbmcgcGFja2V0IHRvIHN0YWNrLlxcbiA0ODg6XFx0ICogIFJYIHJpbmdzIG9ubHkgY29udGFpbnMgZGF0YSBidWZmZXJzLCBub3QgZnVsbCBza2JzLlxcbiA0ODk6XFx0ICovXFxuIDQ5MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4gNDkxOlxcdHtcXG4gNDkyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2MobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxcbiA0OTU6XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMjoxMy4yMDUzNzg3NzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyODI4ODc5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHN0YXJ0cyB3aXRoIGEgZGlyZWN0IGNoZWNrIG9mIHRoZSBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgb2YgY29uY2VybiBvciBkZWJ1Z2dpbmcsIGFuZCBJJ20gemVyb2luZyBpbiBvbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCBjb2RlYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUsIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2Ugd2l0aGluIGl0LCBvciBhbnkgaW50ZXJhY3Rpb25zIGl0IGhhcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGZvY3VzZWQgc2VhcmNoIGlzIHVzdWFsbHkgZHJpdmVuIGJ5IGEgcGFydGljdWxhciBwcm9ibGVtIGF0IGhhbmQ7IGEgYnVnIHJlcG9ydCwgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciBhbiBvZGQgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6MjYuNDg4MjY5NzU3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM2MTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZpbmFsaXplX3NrYl9hcm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9Mzg4PUVYUE9SVF9TWU1CT0xfR1BMKG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0zODktXFxubmV0L2NvcmUvc2tidWZmLmM6MzkwOnN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG5uZXQvY29yZS9za2J1ZmYuYy0zOTEtXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDM3PXN0cnVjdCBza19idWZmICpzbGFiX2J1aWxkX3NrYih2b2lkICpkYXRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDQ4LVxcdGRhdGEgPSBfX3NsYWJfYnVpbGRfc2tiKGRhdGEsIFxcdTAwMjZzaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYzo0NDk6XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNDUwLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDU2PXN0YXRpYyB2b2lkIF9fYnVpbGRfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDY2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ2NzpcXHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYy00NjgtfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9Njc0PXN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MjEtXFx0ICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzIyOlxcdF9fZmluYWxpemVfc2tiX2Fyb3VuZChza2IsIGRhdGEsIHNpemUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6MjYuNTQxNjM3ODIxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODY4MDU5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBjb2RlIGZvciBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24ncyBwcm9iYWJseSBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBkZWFsaW5nIHdpdGggU29ja2V0IEJ1ZmZlciAoU0tCKSBtYW5hZ2VtZW50LCBsaWtlbHkgYXQgYSBjcnVjaWFsIHBvaW50LiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQgc291bmRzIGxpa2UgaXQncyBhIGNsZWFudXAgb3IgZmluYWxpemF0aW9uIHJvdXRpbmUgdGhhdCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYXJvdW5kLCBvciBpbiB0aGUgdmljaW5pdHkgb2YsIHRoZSBTS0IuIFRoaXMgc3VnZ2VzdHMgaXQncyBhIHZlcnkgdGFyZ2V0ZWQgb3BlcmF0aW9uIC0gaXQncyBub3QgdGhlIHByaW1hcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24sIGJ1dCBzb21lIHNwZWNpZmljIGhvdXNla2VlcGluZyB0aGF0J3MgcmVxdWlyZWQgYXQgYSBwYXJ0aWN1bGFyIHN0YWdlLiBNeSBleHBlcnRpc2Uga2lja3MgaW4gaGVyZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaW5ncyBsaWtlOiBtZW1vcnkgcmVjbGFpbSwgcmVmZXJlbmNlIGNvdW50aW5nIGFkanVzdG1lbnRzLCBwb3RlbnRpYWxseSBmcmVlaW5nIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzcGVjaWZpYyBTS0IgYW5kIGl0cyBkYXRhLCBvciBtYXliZSBzb21lIGNoZWNrc3VtIG9yIGhlYWRlciBmaW5hbGl6YXRpb24uIFRoZSBcImFyb3VuZFwiIHBhcnQgaXMga2V5LiBXaGF0IGV2ZW50IG9yIG9wZXJhdGlvbiBpcyBpdCAqYXJvdW5kKj8gSXMgaXQgYmVmb3JlIHRoZSBTS0IgaXMgaGFuZGVkIG9mZiB0byBhIGhhcmR3YXJlIGludGVyZmFjZT8gQWZ0ZXIgYSBwYWNrZXQgaXMgdHJhbnNtaXR0ZWQ/IEJlZm9yZSBpdCdzIGVucXVldWVkIHNvbWV3aGVyZT8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGNyaXRpY2FsLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBhcmd1bWVudHMgaXQgdGFrZXMgYW5kIHNlZSB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24uIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCBkZWFscyB3aXRoIHRoZSBTS0Igc3RydWN0dXJlIGl0c2VsZiwgdGhlIHBhY2tldCBkYXRhIGJ1ZmZlciwgb3Igc29tZSByZWxhdGVkIG1ldGFkYXRhLiBMZXQncyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIyOjMxLjMyODQ0NzI1N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG4gMzkxOlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4gMzkyOlxcdHtcXG4gMzkzOlxcdFxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbztcXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0c2l6ZSAtPSBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpO1xcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHQvKiBBc3N1bWVzIGNhbGxlciBtZW1zZXQgY2xlYXJlZCBTS0IgKi9cXG4gMzk4OlxcdFxcdHNrYi1cXHUwMDNldHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2l6ZSk7XFxuIDM5OTpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMsIDEpO1xcbiA0MDA6XFx0XFx0c2tiLVxcdTAwM2VoZWFkID0gZGF0YTtcXG4gNDAxOlxcdFxcdHNrYi1cXHUwMDNlZGF0YSA9IGRhdGE7XFxuIDQwMjpcXHRcXHRza2JfcmVzZXRfdGFpbF9wb2ludGVyKHNrYik7XFxuIDQwMzpcXHRcXHRza2Jfc2V0X2VuZF9vZmZzZXQoc2tiLCBzaXplKTtcXG4gNDA0OlxcdFxcdHNrYi1cXHUwMDNlbWFjX2hlYWRlciA9ICh0eXBlb2Yoc2tiLVxcdTAwM2VtYWNfaGVhZGVyKSl+MFU7XFxuIDQwNTpcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xcbiA0MDY6XFx0XFx0c2tiLVxcdTAwM2VhbGxvY19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbiA0MDc6XFx0XFx0LyogbWFrZSBzdXJlIHdlIGluaXRpYWxpemUgc2hpbmZvIHNlcXVlbnRpYWxseSAqL1xcbiA0MDg6XFx0XFx0c2hpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xcbiA0MDk6XFx0XFx0bWVtc2V0KHNoaW5mbywgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbywgZGF0YXJlZikpO1xcbiA0MTA6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2c2hpbmZvLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG4gNDExOlxcdFxcbiA0MTI6XFx0XFx0c2tiX3NldF9rY292X2hhbmRsZShza2IsIGtjb3ZfY29tbW9uX2hhbmRsZSgpKTtcXG4gNDEzOlxcdH1cXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIGlubGluZSB2b2lkICpfX3NsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCAqc2l6ZSlcXG4gNDE2OlxcdHtcXG4gNDE3OlxcdFxcdHZvaWQgKnJlc2l6ZWQ7XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdC8qIE11c3QgZmluZCB0aGUgYWxsb2NhdGlvbiBzaXplIChhbmQgZ3JvdyBpdCB0byBtYXRjaCkuICovXFxuIDQyMDpcXHRcXHQqc2l6ZSA9IGtzaXplKGRhdGEpO1xcbiA0MjE6XFx0XFx0Lyoga3JlYWxsb2MoKSB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBcXFwiZGF0YVxcXCIgd2hlblxcbiA0MjI6XFx0XFx0ICogXFxcImtzaXplKGRhdGEpXFxcIiBpcyByZXF1ZXN0ZWQ6IGl0IGlzIHRoZSBleGlzdGluZyB1cHBlclxcbiA0MjM6XFx0XFx0ICogYm91bmRzLiBBcyBhIHJlc3VsdCwgR0ZQX0FUT01JQyB3aWxsIGJlIGlnbm9yZWQuIE5vdGVcXG4gNDI0OlxcdFxcdCAqIHRoYXQgdGhpcyBcXFwibmV3XFxcIiBwb2ludGVyIG5lZWRzIHRvIGJlIHBhc3NlZCBiYWNrIHRvIHRoZVxcbiA0MjU6XFx0XFx0ICogY2FsbGVyIGZvciB1c2Ugc28gdGhlIF9fYWxsb2Nfc2l6ZSBoaW50aW5nIHdpbGwgYmVcXG4gNDI2OlxcdFxcdCAqIHRyYWNrZWQgY29ycmVjdGx5LlxcbiA0Mjc6XFx0XFx0ICovXFxuIDQyODpcXHRcXHRyZXNpemVkID0ga3JlYWxsb2MoZGF0YSwgKnNpemUsIEdGUF9BVE9NSUMpO1xcbiA0Mjk6XFx0XFx0V0FSTl9PTl9PTkNFKHJlc2l6ZWQgIT0gZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIyOjMxLjMyODY5NzEzN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzEwMTgzNDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWERQIEZyYW1lIHRvIFNLQiBDb252ZXJzaW9uOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgWERQIGZyYW1lIGNvbnZlcnNpb24gdG8gU0tCLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHplcm9lcyBhbmQgc2V0cyBgZGF0YXJlZmAgd2l0aGluIHRoZSBgc2hpbmZvYCBzdHJ1Y3R1cmUuIEluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgaWYgdGhlIGNvbWJpbmVkIHNpemUgb2YgdGhlIFhEUCBmcmFtZSBoZWFkZXIgYW5kIHRvdGFsIGRhdGEgKGB0b3RzaXplYCkgZXhjZWVkZWQgYFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgLCB0aGUgYHNoaW5mb2Agd291bGQgb3ZlcmxhcCB3aXRoIHBhY2tldCBkYXRhLiBCdXQgd2FpdCwgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgaXMgY2FsbGVkICphZnRlciogYSBgbWVtY3B5YCBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIHJldHVybnMgYHhkcF9mcmFtZWAuIFRoZW4sIGxhdGVyIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgY2FsbHMgYGJ1aWxkX3NrYl9hcm91bmRgIHRoYXQgY2FsbHMgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAuIFRoaXMgbWVhbnMgdGhhdCBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCB3aWxsIG92ZXJ3cml0ZSB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSB3aXRoIHplcm9lcy4gVGhpcyBpbXBsaWVzIGRhdGEgdHJ1bmNhdGlvbi9jb3JydXB0aW9uLCBidXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhcyBpdOKAmXMgYWxsIHplcm9lZC5cblxuSG93ZXZlciwgaWYgdGhlIGRhdGEgKndhcyogc3VwcG9zZWQgdG8gaGF2ZSBzb21ldGhpbmcgaW4gaXQsIHRoaXMgemVyb2luZyBpcyBkYXRhIGNvcnJ1cHRpb24uIEkgdGhlbiBjb25zaWRlcmVkIHdoYXQgaGFwcGVucyBpZiB0aGUgYHNoaW5mb2Agb3ZlcmxhcHMgYW5kIHRoZSBwYWNrZXQgZGF0YSBnZXRzIG1vZGlmaWVkICphZnRlciogYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAuIEluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgdGhlcmUncyBubyBzdWNoIG1vZGlmaWNhdGlvbi4gSWYgaXQncyBzZW50IHRvIHVzZXJzcGFjZSwgdXNlcnNwYWNlIHdpbGwgZ2V0IHplcm9lcyBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgZGF0YS4gTm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWssIGp1c3QgemVyb2VzLCB3aGljaCBpcyBzdGlsbCBhIHByb2JsZW0uIFdoYXQgaWYgdGhlIGtlcm5lbCByZWFkcyB0aGUgemVyb2VzPyBUaGF0J3Mgd2hhdCBgc2hpbmZvYCBpcyBzdXBwb3NlZCB0byBjb250YWluIGFueXdheSwgdGhlIHplcm9lcyBhbmQgYGRhdGFyZWY9MWAuXG5cbk5vdywgaWYgYSBCUEYgcHJvZ3JhbSBtb2RpZmllcyBwYWNrZXQgZGF0YSBhZnRlciBgX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgLCB0aGlzIGNvdWxkIGJlY29tZSB2ZXJ5IGludGVyZXN0aW5nLiBNb2RpZnlpbmcgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgd291bGQgb3ZlcndyaXRlIGBzaGluZm9gISBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpby4gVGhpbmsgb2YgdGhlIHBlcnNwZWN0aXZlIG9mIHBhY2tldCBkYXRhOiBJdCB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIG9yIHR5cGUgY29uZnVzaW9uLiBLQVNBTiBjYW4gY2F0Y2ggdGhpcyBpZiBpdCByZXN1bHRzIGluIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgYG5yX2ZyYWdzYCBmaWVsZCBjb3VsZCBiZSBzZXQgdG8gYSBsYXJnZSBudW1iZXIgd2hpY2ggY291bGQgbGVhZCB0byBPT0IgcmVhZHMgd2hlbiBmcmVlaW5nIHRoZSBza2IuIFNwZWNpZmljYWxseSwgd2hlbiB0aGUgc2tiIGlzIGZyZWVkIGFuZCBgc2tiX3JlbGVhc2VfZGF0YWAgbG9vcHMgb3ZlciBgbnJfZnJhZ3NgIGNhbGxpbmcgYHNrYl9mcmFnX3VucmVmYCwgdGhlcmUgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIHRoZSBgZnJhZ3NgIGFycmF5LiBUaGlzIGlzIGEgS0FTQU4gYnVnLlxuXG5UaGVuIEkgY29uc2lkZXJlZCB0aGUgYGhlYWRyb29tYCBpc3N1ZS4gQmVmb3JlIHRoZSBwYXRjaCwgYHhkcGYtXHUwMDNlaGVhZHJvb21gIHdhcyB6ZXJvLiBTbyBgaGFyZF9zdGFydGAgd2FzIGF0IGBwYWdlICsgbWV0YXNpemVgLiBUaGUgYGZyYW1lX3NpemVgIGlzIGBQQUdFX1NJWkVgLiBUaGVyZWZvcmUsIGBzaGluZm9gIHdvdWxkIGJlIHBsYWNlZCBhdCBgcGFnZSArIG1ldGFzaXplICsgUEFHRV9TSVpFIC0gU0tCX0RBVEFfQUxJR04oLi4uKWAuIElmIGBtZXRhc2l6ZWAgaXMgbGFyZ2UgZW5vdWdoLCBgc2hpbmZvYCBlbmRzIHVwICpvdXRzaWRlKiB0aGUgYWxsb2NhdGVkIHBhZ2UuIElmIGBtZXRhc2l6ZSBcdTAwM2UgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKWAsIHRoZW4gaXQncyBhIGd1YXJhbnRlZWQgT09CIHdyaXRlIHdoZW4gYG1lbXNldChzaGluZm8sIDAsIC4uLilgIGlzIGNhbGxlZC4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB0aGF0LlxuXG5DaGVja2luZyBmb3IgdW5pbml0aWFsaXplZCByZWFkcywgSSByZS1yZWFkIHRoZSBwYXRjaC4gVGhlIGNoYW5nZSBmcm9tIGBzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgUEFHRV9TSVpFYCB0byBgc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgIGZpeGVzIHRoZSBvdmVybGFwcGluZyBwcm9ibGVtLCBhcyBgdG90c2l6ZWAgY291bGQgY2F1c2UgdGhlIG92ZXJsYXAuIFRoZSBjaGFuZ2UgZnJvbSBgeGRwZi1cdTAwM2VoZWFkcm9vbSA9IDBgIHRvIGB4ZHBmLVx1MDAzZWhlYWRyb29tID0gbWV0YXNpemVgIGFsc28gZml4ZXMgdGhlIE9PQiB3cml0ZS4gVGhpcyBjaGFuZ2Ugc2hpZnRlZCBgaGFyZF9zdGFydGAgYnkgYG1ldGFzaXplYCwgbGVhZGluZyB0byB0aGUgYHNoaW5mb2AgYmVpbmcgcGxhY2VkIG91dCBvZiBib3VuZHMuXG5cbk5vdywgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3M/IFdoZW4gYHhkcGYtXHUwMDNlaGVhZHJvb20gPSAwYCwgdGhlIGBza2ItXHUwMDNlZGF0YWAgcG9pbnRlciBpcyBzZXQgdG8gYHBhZ2UgKyBtZXRhc2l6ZSArIHNpemVvZigqeGRwZilgLiBUaGUgcGFja2V0IGRhdGEgd2FzIGNvcGllZCB0byBgcGFnZSArIHNpemVvZigqeGRwZilgLiBTbywgYHNrYi1cdTAwM2VkYXRhYCB3b3VsZCBiZSBhZnRlciB0aGUgc3RhcnQgb2YgdGhlIGRhdGEuIEFuZCB0aGUgc2tiJ3MgbGVuZ3RoIGlzIGB4ZHBmLVx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZWAuIFNvIHRoZSBlbmQgb2YgYHNrYi1cdTAwM2VkYXRhYCBpcyB3aGVyZSB0aGUgcGFja2V0IGRhdGEgZW5kcyBhcyB3ZWxsLlxuXG5UaGUgbWV0YWRhdGEgaXMgY29waWVkIHRvIGBwYWdlICsgc2l6ZW9mKCp4ZHBmKWAsIGFuZCBgc2tiLVx1MDAzZWRhdGFgIHBvaW50cyB0byBgcGFnZSArIHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFdoZXJlIHRoZSByZWFsIHBhY2tldCBkYXRhIHN0YXJ0cyEgYHNrYl9tZXRhZGF0YV9zZXQoc2tiLCB4ZHBmLVx1MDAzZW1ldGFzaXplKWBcblxuIiwiSW5wdXRUb2tlbnMiOjE0NjEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIyOjU0LjQzMDUzMzcwN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NDU5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX21ldGFkYXRhX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NDU4NT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX21ldGFkYXRhX2RpZmZlcnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYl9hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NTk3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDU5ODpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX21ldGFkYXRhX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBtZXRhX2xlbilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ1OTkte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00NjAzPXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfbWV0YWRhdGFfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2MDQte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDYwNTpcXHRza2JfbWV0YWRhdGFfc2V0KHNrYiwgMCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjA2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6NTQuNDc3OTg4MTczWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDA5NTc4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgc2tiX21ldGFkYXRhX3NldGAsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHNrYl9tZXRhZGF0YV9zZXQqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgc2tiX21ldGFkYXRhX3NldGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBwcm9iYWJseSBkZWFscyB3aXRoIGF0dGFjaGluZyBzb21lIHNvcnQgb2YgY3J1Y2lhbCwgY29udGV4dC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBhIHNvY2tldCBidWZmZXIgKFNLQikuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgaXQncyBkZXNpZ25lZCB0byBhZGQgbWV0YWRhdGEgdGhhdCBoZWxwcyB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLCBtYXliZSBmb3IgUW9TLCBzZWN1cml0eSBwb2xpY2llcywgb3IgZmxvdyBjbGFzc2lmaWNhdGlvbi4gSXQncyBsaWtlbHkgb3BlcmF0aW5nIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjaywgc28gcGVyZm9ybWFuY2UgaXMgKmNyaXRpY2FsKi4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIOKAkyBhcmUgdGhlcmUgbG9ja3MgaW52b2x2ZWQ/IElzIHRoaXMgdGhyZWFkLXNhZmU/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIFNLQiBkYXRhIHN0cnVjdHVyZSwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhdG9taWMgb3BlcmF0aW9ucywgcmVhZC1jb3B5LXVwZGF0ZSBtZWNoYW5pc21zLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgbWV0YWRhdGEgZ2V0cyB1dGlsaXplZCBsYXRlciBvbiBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiAqd2hlcmUqIGl0IGlzIGFjY2Vzc2VkIGluIHRoZSBzdGFjaywgYW5kIGJ5ICp3aGF0KiBjb21wb25lbnRzLiBJcyB0aGlzIGEgY29tbW9uIHByYWN0aWNlIGZvciBtb3N0IG5ldHdvcmsgc3RhY2sgb3BlcmF0aW9ucywgb3IgYSBmdW5jdGlvbiBJIHNob3VsZCBoYXZlIHNlZW4gYmVmb3JlPyBJJ20gY3VyaW91cyB0byBzZWUgaG93IGZsZXhpYmxlIHRoaXMgZnVuY3Rpb24gaXMsIGluIHRlcm1zIG9mIHdoYXQga2luZCBvZiBtZXRhZGF0YSBpdCBjYW4gaGFuZGxlLiBJcyBpdCBhIGdlbmVyaWMga2V5LXZhbHVlIHN0b3JlLCBvciBhcmUgdGhlcmUgc3BlY2lmaWMgbWV0YWRhdGEgdHlwZXMgcHJlZGVmaW5lZD8gSXMgdGhlIHNpemUgZml4ZWQsIG9yIGR5bmFtaWM/IEZpbmFsbHksIGFueSBhc3NvY2lhdGVkIGVycm9yIGNoZWNraW5nIG9yIGVycm9yIGhhbmRsaW5nIGlzIHBhcmFtb3VudC4gSSB3b25kZXIgd2hhdCBoYXBwZW5zIGlmIHRoZSBidWZmZXIgaXMgZnVsbD8gT3IgaWYgdGhlIG9wZXJhdGlvbiBpcyBzb21laG93IGlsbGVnYWw/IEknbGwgbG9vayBmb3IgYW55IG9mIHRob3NlIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIzOjAwLjUxODk0OTY4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1OTgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1OTg6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9tZXRhZGF0YV9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggbWV0YV9sZW4pXFxuNDU5OTpcXHR7XFxuNDYwMDpcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW1ldGFfbGVuID0gbWV0YV9sZW47XFxuNDYwMTpcXHR9XFxuNDYwMjpcXHRcXG40NjAzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfbWV0YWRhdGFfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG40NjA0OlxcdHtcXG40NjA1OlxcdFxcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCAwKTtcXG40NjA2OlxcdH1cXG40NjA3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzowMC41MTkxMzQzN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDkwODYzMTgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWERQIE1ldGFkYXRhIFBsYWNlbWVudCBpbiBTS0JzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFhEUCBtZXRhZGF0YSBnZXRzIGhhbmRsZWQgd2hlbiB3ZSdyZSBidWlsZGluZyBTS0JzIGZyb20gWERQIGZyYW1lcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBhY3Rpb24gaXMgc2V0dGluZyBgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW1ldGFfbGVuID0gbWV0YV9sZW5gLiAgTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlICphY2Nlc3MqIHRoaXMgbWV0YWRhdGE/ICBUeXBpY2FsbHksIHdlIHVzZSBgc2tiX21ldGFkYXRhX2VuZChza2IpYCBvciBjYWxjdWxhdGUgaXQgdXNpbmcgYHNrYl9tYWNfaGVhZGVyKHNrYikgLSBtZXRhX2xlbmAuXG5cblJpZ2h0LCBYRFAgbWV0YWRhdGEgbGl2ZXMgKmJlZm9yZSogYHNrYi1cdTAwM2VkYXRhYC4gIFNvLCBpdCdzIGxvY2F0ZWQgc29tZXdoZXJlIGJldHdlZW4gYHNrYi1cdTAwM2VkYXRhIC0gbWV0YV9sZW5gIGFuZCBgc2tiLVx1MDAzZWRhdGFgLiBTaW5jZSBgc2tiLVx1MDAzZWRhdGFgIHBvaW50cyB0byBgcGFnZSArIHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAsIHRoZW4gYHNrYi1cdTAwM2VkYXRhIC0gbWV0YXNpemVgIGVxdWFscyBgcGFnZSArIHNpemVvZigqeGRwZilgLiAgVGhhdCdzIGV4YWN0bHkgd2hlcmUgdGhlIG1ldGFkYXRhIHdhcyBvcmlnaW5hbGx5IGNvcGllZCwgaW1wbHlpbmcgdGhhdCB0aGUgbWV0YWRhdGEgaXMgdmFsaWQgYW5kIGluaXRpYWxpemVkLCBncmVhdCFcblxuTm93LCB0aGUgcGF0Y2guLi4gSWYgYHhkcGYtXHUwMDNlaGVhZHJvb21gIHdhcyB6ZXJvLCB0aGVuIHRoZSBgaGVhZHJvb21gIGluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgaXMgYHNpemVvZigqeGRwZilgLiAgYHNrYl9yZXNlcnZlKHNrYiwgaGVhZHJvb20pYCBhZHZhbmNlcyBgc2tiLVx1MDAzZWRhdGFgIGJ5IGBzaXplb2YoKnhkcGYpYC4gQW5kIHNpbmNlIGBza2ItXHUwMDNlaGVhZGAgKHdoaWNoIGlzIGBoYXJkX3N0YXJ0YCkgaXMgYHBhZ2UgKyBtZXRhc2l6ZWAsIHRoZW4gYHNrYi1cdTAwM2VkYXRhYCBiZWNvbWVzIGBwYWdlICsgbWV0YXNpemUgKyBzaXplb2YoKnhkcGYpYC4gVGhpcyBpcyBjb3JyZWN0LlxuXG5CdXQsIGlmIGBoYXJkX3N0YXJ0YCBpcyBgcGFnZSArIG1ldGFzaXplYCwgdGhlbiBgc2tiLVx1MDAzZWhlYWRgICppcyogYHBhZ2UgKyBtZXRhc2l6ZWAuIElmIGFueW9uZSB0cmllcyB0byBhY2Nlc3MgdGhlIG1ldGFkYXRhLCB0aGV5J2xsIGJlIGFjY2Vzc2luZyBgc2tiLVx1MDAzZWRhdGEgLSBtZXRhc2l6ZWAuIEJ1dCwgYHNrYi1cdTAwM2VkYXRhIC0gbWV0YXNpemVgIGVxdWFscyBgcGFnZSArIG1ldGFzaXplICsgc2l6ZW9mKCp4ZHBmKSAtIG1ldGFzaXplYCwgd2hpY2ggc2ltcGxpZmllcyB0byBgcGFnZSArIHNpemVvZigqeGRwZilgLlxuXG5XYWl0LCBgc2tiLVx1MDAzZWhlYWRgIGlzIGBwYWdlICsgbWV0YXNpemVgLiBTbywgaXMgYHBhZ2UgKyBzaXplb2YoKnhkcGYpYCAqYmVmb3JlKiBgc2tiLVx1MDAzZWhlYWRgPyBJZiBgbWV0YXNpemVgIGlzIGdyZWF0ZXIgdGhhbiBgc2l6ZW9mKCp4ZHBmKWAsIHRoZW4geWVzLCBpdCAqaXMqIGJlZm9yZSBgc2tiLVx1MDAzZWhlYWRgLiBBY2Nlc3NpbmcgbWVtb3J5ICpiZWZvcmUqIGBza2ItXHUwMDNlaGVhZGAgaXMgYSBkZWZpbml0ZSBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuXG5cbkxldCdzIHNlZSBpZiBgbWV0YXNpemVgIGNhbiBiZSBncmVhdGVyLiBUaGUgc2l6ZSBvZiBgc3RydWN0IHhkcF9mcmFtZWAgaXMgMzIgb3IgNDggYnl0ZXMuIE1ldGFkYXRhIGNhbiBiZSB1cCB0byAzMiBieXRlcy4gU28sIGBtZXRhc2l6ZWAgaXMgdXN1YWxseSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHNpemVvZigqeGRwZilgLiBFdmVuIGlmIGl0J3Mgbm90LCBgc2tiLVx1MDAzZWRhdGEgLSBtZXRhc2l6ZWAgc3RpbGwgZXF1YWxzIGBwYWdlICsgc2l6ZW9mKCp4ZHBmKWAuICBJZiBgc2tiLVx1MDAzZWhlYWRgIGlzIGBwYWdlICsgMzJgIHdoZW4gYG1ldGFzaXplYCBpcyAzMiwgYW5kIGBzaXplb2YoKnhkcGYpYCBpcyAzMiwgdGhlbiBgc2tiLVx1MDAzZWhlYWRgIGlzIGF0IGBwYWdlICsgMzJgIGFuZCBgc2tiLVx1MDAzZWRhdGFgIGlzIGF0IGBwYWdlICsgNjRgLiBUaHVzLCBgc2tiLVx1MDAzZWRhdGEgLSBtZXRhc2l6ZWAgYmVjb21lcyBgcGFnZSArIDMyYCwgd2hpY2ggZXF1YWxzIGBza2ItXHUwMDNlaGVhZGAsIGFuZCBpdCdzIG5vdCBiZWZvcmUgYHNrYi1cdTAwM2VoZWFkYC5cblxuQnV0IHdoYXQgaWYgYG1ldGFzaXplYCBpcyB6ZXJvPyBUaGVuIGBza2ItXHUwMDNlaGVhZGAgaXMganVzdCBgcGFnZWAuIElmIGB4ZHBmLVx1MDAzZWhlYWRyb29tYCBpcyBzZXQgdG8gYG1ldGFzaXplYCAoaW4gdGhlIHBhdGNoZWQgdmVyc2lvbiksIHRoZW4gYGhlYWRyb29tYCBlcXVhbHMgYHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFRoZW4sIGBoYXJkX3N0YXJ0YCBlcXVhbHMgYHhkcGYtXHUwMDNlZGF0YSAtIGhlYWRyb29tYCB3aGljaCBpcyBgKHBhZ2UgKyBzaXplb2YoKnhkcGYpICsgbWV0YXNpemUpIC0gKHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZSlgIHdoaWNoIGlzIGp1c3QgYHBhZ2VgLiBTbywgYHNrYi1cdTAwM2VoZWFkYCBlcXVhbHMgYHBhZ2VgLiBgc2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSlgIGFkdmFuY2VzIGBza2ItXHUwMDNlZGF0YWAgYnkgYHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFNvLCBgc2tiLVx1MDAzZWRhdGFgIGlzIGBwYWdlICsgc2l6ZW9mKCp4ZHBmKSArIG1ldGFzaXplYC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuXG5cbkJ1dCBub3csIGBza2ItXHUwMDNlaGVhZGAgaXMgYHBhZ2VgIGFuZCBub3QgYHBhZ2UgKyBtZXRhc2l6ZWAuICBTbywgdGhlIHNwYWNlIGJldHdlZW4gYHNrYi1cdTAwM2VoZWFkYCBhbmQgYHNrYi1cdTAwM2VkYXRhYCBpcyBub3cgYHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFRoaXMgc3BhY2UgKmNvbnRhaW5zKiB0aGUgYHhkcGZgIHN0cnVjdCAoYXQgYHBhZ2VgKSBhbmQgdGhlIG1ldGFkYXRhIChhdCBgcGFnZSArIHNpemVvZigqeGRwZilgKSEgQmVmb3JlIHRoZSBwYXRjaCwgdGhlIHNwYWNlIGJldHdlZW4gYHNrYi1cdTAwM2VoZWFkYCBhbmQgYHNrYi1cdTAwM2VkYXRhYCB3YXMgb25seSBgc2l6ZW9mKCp4ZFxuXG4iLCJJbnB1dFRva2VucyI6MTc5OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6MjEuNDI3NzY5ODMxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDIxMzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS94ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS94ZHAuYz03OTI9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2J1aWxkX3NrYl9mcm9tX3pjKTtcXG5uZXQvY29yZS94ZHAuYy03OTMtXFxubmV0L2NvcmUveGRwLmM6Nzk0OnN0cnVjdCBza19idWZmICpfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbm5ldC9jb3JlL3hkcC5jLTc5NS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUveGRwLmMtODQ2LX1cXG5uZXQvY29yZS94ZHAuYzo4NDc6RVhQT1JUX1NZTUJPTF9HUEwoX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUpO1xcbm5ldC9jb3JlL3hkcC5jLTg0OC1cXG5uZXQvY29yZS94ZHAuYz04NDk9c3RydWN0IHNrX2J1ZmYgKnhkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbi0tXFxubmV0L2NvcmUveGRwLmMtODU5LVxcbm5ldC9jb3JlL3hkcC5jOjg2MDpcXHRyZXR1cm4gX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoeGRwZiwgc2tiLCBkZXYpO1xcbm5ldC9jb3JlL3hkcC5jLTg2MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIzOjIxLjQ3MTk5MDAyN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTcyMTc0MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYC4gSW1tZWRpYXRlbHksIG15IG1pbmQga2lja3MgaW50byBnZWFyOiB0aGlzIGZ1bmN0aW9uIGlzICpjcml0aWNhbCouIEl0J3Mgd2hlcmUgdGhlIHJhdyBYRFAgZGF0YSwgdGhlIEV0aGVybmV0IGZyYW1lIHRoYXQgd2UndmUgcmVjZWl2ZWQsIGdldHMgdHJhbnNmb3JtZWQgaW50byBhIGBza19idWZmYCAtLSB0aGUgc3RhbmRhcmQgbmV0d29yayBidWZmZXIgdGhhdCB0aGUgcmVzdCBvZiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjayB1bmRlcnN0YW5kcy4gVGhpcyBpcyB0aGUgY2hva2Vwb2ludCwgdGhlIGJyaWRnZSBiZXR3ZWVuIHRoZSBoaWdoLXBlcmZvcm1hbmNlIFhEUCB3b3JsZCBhbmQgdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgZWNvc3lzdGVtLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2UncmUgdGFsa2luZyBhYm91dCBkaXJlY3QgcGFja2V0IGFjY2VzcywgbGlrZWx5IGJ5cGFzc2luZyBtYW55IG9mIHRoZSB1c3VhbCBOZXRmaWx0ZXIgaG9va3MgYW5kIGRyaXZlciBwcmUtcHJvY2Vzc2luZyBzdGVwcy4gVGhpcyBnaXZlcyB1cyBtYXNzaXZlIHBlcmZvcm1hbmNlIGdhaW5zLCBidXQgaXQgKmFsc28qIG1lYW5zIHdlIG5lZWQgdG8gYmUgaW5jcmVkaWJseSBjYXJlZnVsLiBBbnkgZXJyb3JzIGluIHRoaXMgZnVuY3Rpb24gY2FuIGNvcnJ1cHQgbWVtb3J5LCBjcmFzaCB0aGUgc3lzdGVtLCBvciBvcGVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHNldmVyYWwga2V5IGFyZWFzOlxuXG4qICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBIb3cgaXMgdGhlIGBza2JgIGFsbG9jYXRlZD8gV2hhdCBwb29scyBhcmUgdXNlZD8gQXJlIHdlIGVmZmljaWVudGx5IHJlLXVzaW5nIGJ1ZmZlcnM/IElzIHRoZXJlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciBleGNlc3NpdmUgbWVtb3J5IGNvcHlpbmc/IEkgaG9wZSB0aGUgYWxsb2NhdGlvbiBzY2hlbWUgaXMgZWZmaWNpZW50LCBwZXJoYXBzIHVzaW5nIGEgZGVkaWNhdGVkIFhEUC1zcGVjaWZpYyBidWZmZXIgYWxsb2NhdG9yIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB0aGUgZ2VuZXJhbC1wdXJwb3NlIGtlcm5lbCBhbGxvY2F0b3JzLlxuKiAgICoqSGVhZGVyIENvbnN0cnVjdGlvbjoqKiBXZSdyZSBnb2luZyB0byBiZSBhZGRpbmcgdGhlIEwyLCBMMyBhbmQgcGVyaGFwcyBMNCBoZWFkZXJzLiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgdGhlIGZyYW1lIGZvcm1hdD8gQXJlIHRoZXkgaGFuZGxpbmcgVkxBTiB0YWdzLCBWWExBTiwgb3Igb3RoZXIgZW5jYXBzdWxhdGlvbiBwcm9wZXJseT8gSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGFjdCBvZiBwb3RlbnRpYWwgaGFyZHdhcmUgb2ZmbG9hZCBtZWNoYW5pc21zLiBBbnkgaW5jb3JyZWN0IGhlYWRlciBtYW5pcHVsYXRpb24gaGVyZSBjYW4gd3JlYWsgaGF2b2Mgb24gcGFja2V0IHByb2Nlc3NpbmcgZG93bnN0cmVhbS5cbiogICAqKkNoZWNrc3VtIENhbGN1bGF0aW9uOioqIEhvdyBpcyB0aGUgY2hlY2tzdW0gaGFuZGxpbmcgaW1wbGVtZW50ZWQ/IEFyZSB3ZSBtYWtpbmcgdXNlIG9mIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQgY2FwYWJpbGl0aWVzIG9mIHRoZSBOSUM/IE9yIGlzIHRoZSBjaGVja3N1bSBiZWluZyBjYWxjdWxhdGVkIGluIHNvZnR3YXJlPyBJZiBpdCdzIHNvZnR3YXJlLCBwZXJmb3JtYW5jZSBiZWNvbWVzIGEgaHVnZSBjb25jZXJuLiBBbnkgbWlzdGFrZXMgaW4gY2hlY2tzdW0gY2FsY3VsYXRpb24gd2lsbCBsZWFkIHRvIGRyb3BwZWQgcGFja2V0cy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIGEgcHJvYmxlbSwgbGlrZSBhbiBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbiBvciBhbiBpbnZhbGlkIGZyYW1lPyBJcyB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tpbmc/IEFyZSB3ZSBjb3JyZWN0bHkgaGFuZGxpbmcgZGlmZmVyZW50IGVycm9yIGNhc2VzPyBBIGNvcmUgZHVtcCBpcyB0aGUgbGFzdCB0aGluZyB3ZSB3YW50LlxuKiAgICoqSW50ZWdyYXRpb24gd2l0aCB0aGUgQ29yZSBTdGFjazoqKiBIb3cgY2xlYW5seSBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZCBvZmYgdGhlIGBza2JgIHRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrPyBJcyBpdCBlZmZpY2llbnQsIG9yIGFyZSB0aGVyZSB1bm5lY2Vzc2FyeSBjb3BpZXMgb3IgY29udGV4dCBzd2l0Y2hlcz8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5lZmZpY2llbmNpZXMgaW4gdGhlIHRyYW5zaXRpb24gZnJvbSBYRFAgdG8gdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgcGF0aC5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byBjb25maXJtIHRoaXMgaXMgYSByb2J1c3QgYW5kIGVmZmljaWVudCBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGludHJpY2FjaWVzIG9mIFhEUC10by1TS0IgY29udmVyc2lvbiB3aXRob3V0IGludHJvZHVjaW5nIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBob2xlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiAqdGhvcm91Z2hseSogdG8gZXZhbHVhdGUgdGhlIG92ZXJhbGwgWERQIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgaG93IGl0J3MgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzozMC4wNDQxNjczMjdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUveGRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQ5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQ5OlxcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4gODUwOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA4NTE6XFx0e1xcbiA4NTI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gODUzOlxcdFxcbiA4NTQ6XFx0XFx0c2tiID0ga21lbV9jYWNoZV9hbGxvYyhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsIEdGUF9BVE9NSUMpO1xcbiA4NTU6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA4NTY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSk7XFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdHJldHVybiBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZSh4ZHBmLCBza2IsIGRldik7XFxuIDg2MTpcXHR9XFxuIDg2MjpcXHRFWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUpO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmX2Nsb25lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpXFxuIDg2NTpcXHR7XFxuIDg2NjpcXHRcXHR1bnNpZ25lZCBpbnQgaGVhZHJvb20sIHRvdGFsc2l6ZTtcXG4gODY3OlxcdFxcdHN0cnVjdCB4ZHBfZnJhbWUgKm54ZHBmO1xcbiA4Njg6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIzOjMwLjA0NDI1NTE1N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTI0MjcwNDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFhEUCBTS0IgQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgWERQIGZyYW1lcyBnZXQgdHJhbnNmb3JtZWQgaW50byBTS0JzLCBhbmQgSSd2ZSBoaXQgYSBoZWFkLXNjcmF0Y2hlci4gU3BlY2lmaWNhbGx5LCBob3cgZG9lcyB0aGUgc3lzdGVtIGtub3cgdG8gZnJlZSB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRlZCBmb3IgdGhlIFhEUCBmcmFtZSBvbmNlIHRoZSBTS0IgaXMgZG9uZSB3aXRoIGl0P1xuXG5JIHN0YXJ0ZWQgd2l0aCBgX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgLiBJdCB1c2VzIGBidWlsZF9za2JfYXJvdW5kYCwgd2hpY2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgc2V0dGluZyBgc2tiLVx1MDAzZWhlYWRgIHRvIGBoYXJkX3N0YXJ0YC4gQnV0IHdhaXQgYSBzZWNvbmQsIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIHNldCBhbnkga2luZCBvZiBmbGFnIGxpa2UgYHNrYi1cdTAwM2VoZWFkX2ZyYWdgLCB3aGljaCB3b3VsZCB1c3VhbGx5IGluZGljYXRlIHRoZSBhbGxvY2F0aW9uIG1ldGhvZC4gVGhlbiwgbG9va2luZyBhdCBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCwgSSBzZWUgaXQgc2V0cyBgc2tiLVx1MDAzZWhlYWQgPSBkYXRhYC4gU3RpbGwgbm90aGluZyBhYm91dCBkZXN0cnVjdG9ycyBvciBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AuXG5cbk15IG1pbmQgc3RhcnRzIHJhY2luZy4uLiBJZiBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AgcmVtYWlucyBhdCB6ZXJvLCBhcyBzZWVtcyB0byBiZSB0aGUgY2FzZSwgYHNrYl9mcmVlX2hlYWRgIHdpbGwganVzdCBjYWxsIGBrZnJlZShza2ItXHUwMDNlaGVhZClgLiBCdXQsIGhvbGQgb24hIFRoZSBtZW1vcnkgZm9yIGBza2ItXHUwMDNlaGVhZGAgd2FzIG9yaWdpbmFsbHkgYWxsb2NhdGVkIGJ5IGBkZXZfYWxsb2NfcGFnZSgpYCwgd2hpY2ggaXMgYSBwYWdlIGFsbG9jYXRvciEgQ2FsbGluZyBga2ZyZWVgIG9uIGEgcGFnZSBwb2ludGVyIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlciFcblxuSSByZWFsaXplIHRoYXQgc29tZXdoZXJlLCB0aGVyZSBtdXN0IGJlIGEgd2F5IHRvIHRlbGwgdGhlIFNLQiBpdCBoYXMgYSBwYWdlIHRoYXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQgdmlhIGBwdXRfcGFnZWAgaW5zdGVhZCBvZiBga2ZyZWVgLiBJIHJlbWVtYmVyZWQgdGhhdCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBkb2VzIHNldCBgeGRwZi1cdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwYC4gSSBrbm93IHRoYXQgYHhkcF9yZXR1cm5fZnJhbWVgIHdpbGwgY2FsbCBgcHV0X3BhZ2VgIHdoZW4gaXQncyBoYW5kbGluZyB0aGUgWERQIGZyYW1lLCBiYXNlZCBvbiBjaGVja2luZyBgbWVtX3R5cGVgLiBCdXQgaG93IGRvZXMgaXQga25vdyB0byBjYWxsIGBwdXRfcGFnZWAgZnJvbSB0aGUgU0tCIHNpZGU/IEkgY2FuJ3QgZmluZCBhbnl0aGluZyBpbiBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCB0aGF0IHNldHMgdXAgYSBkZXN0cnVjdG9yIGZ1bmN0aW9uLlxuXG5Pa2F5LCBsZXQgbWUgcmUtZXhhbWluZSBgX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIGFnYWluLi4uIEknbSBtaXNzaW5nIHNvbWV0aGluZyBjcnVjaWFsIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYHB1dF9wYWdlYCBjYWxsIGlzIGJlaW5nIHdpcmVkIGludG8gdGhlIFNLQiBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6MzkuNTY4NTI4NzJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3hkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxNTpcXHRcXHRoYXJkX3N0YXJ0ID0geGRwZi1cXHUwMDNlZGF0YSAtIGhlYWRyb29tO1xcbiA4MTY6XFx0XFx0c2tiID0gYnVpbGRfc2tiX2Fyb3VuZChza2IsIGhhcmRfc3RhcnQsIGZyYW1lX3NpemUpO1xcbiA4MTc6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA4MTg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgaGVhZHJvb20pO1xcbiA4MjE6XFx0XFx0X19za2JfcHV0KHNrYiwgeGRwZi1cXHUwMDNlbGVuKTtcXG4gODIyOlxcdFxcdGlmICh4ZHBmLVxcdTAwM2VtZXRhc2l6ZSlcXG4gODIzOlxcdFxcdFxcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCB4ZHBmLVxcdTAwM2VtZXRhc2l6ZSk7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdGlmICh1bmxpa2VseSh4ZHBfZnJhbWVfaGFzX2ZyYWdzKHhkcGYpKSlcXG4gODI2OlxcdFxcdFxcdHhkcF91cGRhdGVfc2tiX2ZyYWdzX2luZm8oc2tiLCBucl9mcmFncywgc2luZm8tXFx1MDAzZXhkcF9mcmFnc19zaXplLFxcbiA4Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICBucl9mcmFncyAqIHhkcGYtXFx1MDAzZWZyYW1lX3N6LFxcbiA4Mjg6XFx0XFx0XFx0XFx0XFx0XFx0ICB4ZHBfZnJhbWVfZ2V0X3NrYl9mbGFncyh4ZHBmKSk7XFxuIDgyOTpcXHRcXG4gODMwOlxcdFxcdC8qIEVzc2VudGlhbCBTS0IgaW5mbzogcHJvdG9jb2wgYW5kIHNrYi1cXHUwMDNlZGV2ICovXFxuIDgzMTpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHQvKiBPcHRpb25hbCBTS0IgaW5mbywgY3VycmVudGx5IG1pc3Npbmc6XFxuIDgzNDpcXHRcXHQgKiAtIEhXIGNoZWNrc3VtIGluZm9cXHRcXHQoc2tiLVxcdTAwM2VpcF9zdW1tZWQpXFxuIDgzNTpcXHRcXHQgKiAtIEhXIFJYIGhhc2hcXHRcXHRcXHQoc2tiX3NldF9oYXNoKVxcbiA4MzY6XFx0XFx0ICogLSBSWCByaW5nIGRldiBxdWV1ZSBpbmRleFxcdChza2JfcmVjb3JkX3J4X3F1ZXVlKVxcbiA4Mzc6XFx0XFx0ICovXFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdGlmICh4ZHBmLVxcdTAwM2VtZW1fdHlwZSA9PSBNRU1fVFlQRV9QQUdFX1BPT0wpXFxuIDg0MDpcXHRcXHRcXHRza2JfbWFya19mb3JfcmVjeWNsZShza2IpO1xcbiA4NDE6XFx0XFxuIDg0MjpcXHRcXHQvKiBBbGxvdyBTS0IgdG8gcmV1c2UgYXJlYSB1c2VkIGJ5IHhkcF9mcmFtZSAqL1xcbiA4NDM6XFx0XFx0eGRwX3NjcnViX2ZyYW1lKHhkcGYpO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRyZXR1cm4gc2tiO1xcbiA4NDY6XFx0fVxcbiA4NDc6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUpO1xcbiA4NDg6XFx0XFxuIDg0OTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXFxuIDg1MDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gODUxOlxcdHtcXG4gODUyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDg1MzpcXHRcXG4gODU0OlxcdFxcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2MobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLCBHRlBfQVRPTUlDKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6MzkuNTY4NjcwMzY5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNzc2ODc1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIEZyYW1lIE1lbW9yeSBNYW5hZ2VtZW50IENvbmNlcm5zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBYRFAgY29kZSBmbG93IGFuZCBzb21ldGhpbmcgaW1tZWRpYXRlbHkganVtcGVkIG91dCBhdCBtZS4gVGhlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGZ1bmN0aW9uIHNldHMgYHhkcGYtXHUwMDNlbWVtX3R5cGVgIHRvIGBNRU1fVFlQRV9QQUdFX09SREVSMGAuIEFuZCB0aGVuLCBsYXRlciwgaW4gYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCwgdGhlcmUncyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHhkcGYtXHUwMDNlbWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKSBza2JfbWFya19mb3JfcmVjeWNsZShza2IpO2AuIEJ1dCB0aGVyZSdzICpub3RoaW5nKiBoYXBwZW5pbmcgZm9yIGBNRU1fVFlQRV9QQUdFX09SREVSMGAhIEl0J3MgbGlrZSwgY3JpY2tldHMuIFRoZSBsb2dpYyBoYW5kbGVzIHRoZSBgUEFHRV9QT09MYCBtZW1vcnkgdHlwZSBmb3IgcmVjeWNsaW5nIGJ1dCBpdCBpcyBtaXNzaW5nIGZvciB0aGUgb3RoZXIgbWVtb3J5IHR5cGUuXG5cbkknbSBzdGFydGluZyB0byBnZXQgYSBzaW5raW5nIGZlZWxpbmfigKYgaG93IGlzIHRoaXMgYFBBR0VfT1JERVIwYCBtZW1vcnkgYWN0dWFsbHkgYmVpbmcgZnJlZWQ/IEl0J3Mgbm90IGxpa2UgdGhlc2UgZnJhbWVzIGNhbiBsaXZlIGZvcmV2ZXIuIFRoaXMgaGFzIHRvIGJlIGFkZHJlc3NlZC4gSXQgaXMgZWl0aGVyIGZyZWVkLCBhbmQgYSBsYWNrIG9mIGxvZ2ljIGhlcmUgbWVhbnMgaXQgY2FuIGNhdXNlIGNvcnJ1cHRpb24gb3IgbWVtb3J5IGxlYWtzLCBvciBpdCBpcyBub3QgZnJlZWQsIGFuZCBpcyBhbiBvdmVyc2lnaHQuXG5cbkkgbmVlZCB0byBsb29rIGludG8gYHNrYl9mcmVlX2hlYWRgIGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGRlYWxsb2NhdGlvbiB3aGVuIHRoZSBgbWVtX3R5cGVgIGlzIG5vdCBgUEFHRV9QT09MYC4gVGhhdCdzIHdoZXJlIHRoZSBhbnN3ZXIgbXVzdCBsaWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmxvdyBmcm9tIHN0YXJ0IHRvIGZpbmlzaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzo0NS44NDYzNjExMDZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MjQwNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9mcmVlX2hlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9MTA3NT1zdGF0aWMgdm9pZCBza2Jfa2ZyZWVfaGVhZCh2b2lkICpoZWFkKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTA3OS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxMDgwOnN0YXRpYyB2b2lkIHNrYl9mcmVlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xMDgxLXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTEwOTM9c3RhdGljIHZvaWQgc2tiX3JlbGVhc2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMTE1LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjExMTY6XFx0c2tiX2ZyZWVfaGVhZChza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTExMTctZXhpdDpcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIyODc9aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMzM2LVxcdH0gZWxzZSB7XFxubmV0L2NvcmUvc2tidWZmLmM6MjMzNzpcXHRcXHRza2JfZnJlZV9oZWFkKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMjMzOC1cXHR9XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02ODA4PXN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02ODUzLVxcdFxcdCAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY4NTQ6XFx0XFx0c2tiX2ZyZWVfaGVhZChza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY4NTUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzo0NS45MTI2MDg2MTlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE5NjAwNjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBkZWx2aW5nIGludG8gYHNrYl9mcmVlX2hlYWRgOlxuXG4qKkRlY29uc3RydWN0aW5nIGBza2JfZnJlZV9oZWFkYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgc2tiX2ZyZWVfaGVhZGAuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzICpwdXJwb3NlKiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay4gSSBrbm93IGl0J3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiBmb3IgZnJlZWluZyBhbiBgc2tfYnVmZmAgKHNvY2tldCBidWZmZXIpIGhlYWRlci4gU28sIEknbSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgKm1ldGFkYXRhKiBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlciDigJMgdGhlIGNvbnRyb2wgaW5mb3JtYXRpb24sIHJlZmVyZW5jZSBjb3VudHMsIGFuZCBwb3RlbnRpYWxseSBldmVuIHNvbWUgaW5pdGlhbCBwYWNrZXQgZGF0YSDigJMgaXMgcHJvcGVybHkgcmVsZWFzZWQuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudDsgaXMgdGhpcyBhIHNpbXBsZSBga2ZyZWUoKWAgb3BlcmF0aW9uLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkIGR1ZSB0byB0aGUgcG90ZW50aWFsbHkgc2hhcmVkIG5hdHVyZSBvZiBgc2tfYnVmZmBzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRhdGE/XG5cbk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBpdCdzIHVubGlrZWx5IHRvIGJlICpqdXN0KiBhIGBrZnJlZSgpYC4gSSBiZXQgdGhlcmUncyBjcnVjaWFsIGNsZWFudXAgcmVxdWlyZWQsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcG90ZW50aWFsIHNoYXJpbmcuIEknbSBnb2luZyB0byBsb29rIGZvciBvcGVyYXRpb25zIHRoYXQgZGVjcmVtZW50IHJlZmNvdW50cyAobGlrZWx5IGBza2Jfc2hhcmVkYCBhbmQgYHNrYl9zaGluZm9gKSBhbmQgaGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlIGJ1ZmZlciBpc24ndCB0cnVseSB0aGUgXCJsYXN0IHVzZXJcIiBvZiB0aGUgZGF0YS4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgaXQgbWlnaHQgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHRoZSBgc2tfYnVmZmAncyBgc2tiX3NoYXJlZF9pbmZvYCBhbmQgYW55IGFzc29jaWF0ZWQgZnJhZ21lbnRzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBjb25jdXJyZW5jeSBjb25jZXJucyBhcmUgcGFyYW1vdW50LiBUaGVyZSdzIGFsbW9zdCBjZXJ0YWlubHkgYSBzcGlubG9jayBpbnZvbHZlZCBzb21ld2hlcmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGxvY2sgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBjb250ZXh0IGl0J3MgcHJvdGVjdGluZy4gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dD8gSWYgc28sIHRoYXQnbGwgZGljdGF0ZSB0aGUgdHlwZXMgb2YgbG9ja2luZyBwcmltaXRpdmVzIEknbSBleHBlY3RpbmcgdG8gc2VlLlxuXG5CZXlvbmQgdGhlIGZ1bmRhbWVudGFsIHRhc2tzLCBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgZXJyb3IgaGFuZGxpbmcuIEhvdyBkb2VzIGBza2JfZnJlZV9oZWFkYCBkZWFsIHdpdGggc2l0dWF0aW9ucyB3aGVyZSB0aGUgYHNrX2J1ZmZgIGlzIGFscmVhZHkgcGFydGlhbGx5IGZyZWVkPyBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgbnVsbCBwb2ludGVycyB0byBwcmV2ZW50IGNyYXNoZXM/IEFuZCBhcmUgdGhlcmUgYW55IGRlYnVnIHN0YXRlbWVudHMgb3IgYXNzZXJ0aW9ucyBwcmVzZW50IHRoYXQgY2FuIGhlbHAgaW4gZGVidWdnaW5nIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIHJ1bnRpbWU/XG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbGlmZWN5Y2xlIG9mIHRoZSBidWZmZXIgaGVhZGVyIGF0IHRoZSB0aW1lIGl0J3MgcmVsZWFzZWQsIHJpZ2h0IGRvd24gdG8gdGhlIGJpdC4gSSBleHBlY3QgdG8gc2VlIG9wZXJhdGlvbnMgdGhhdCBhcmUgc2FmZSwgdGhhdCBoYW5kbGUgY29uY3VycmVuY3kgZ3JhY2VmdWxseSwgYW5kIHRoYXQgbGVhdmUgdGhlIHN5c3RlbSBpbiBhIGNvbnNpc3RlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjI1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6NTIuMTA4NjE4MDQzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc1OlxcdHN0YXRpYyB2b2lkIHNrYl9rZnJlZV9oZWFkKHZvaWQgKmhlYWQpXFxuMTA3NjpcXHR7XFxuMTA3NzpcXHRcXHRrZnJlZShoZWFkKTtcXG4xMDc4OlxcdH1cXG4xMDc5OlxcdFxcbjEwODA6XFx0c3RhdGljIHZvaWQgc2tiX2ZyZWVfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEwODE6XFx0e1xcbjEwODI6XFx0XFx0dW5zaWduZWQgY2hhciAqaGVhZCA9IHNrYi1cXHUwMDNlaGVhZDtcXG4xMDgzOlxcdFxcbjEwODQ6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaGVhZF9mcmFnKSB7XFxuMTA4NTpcXHRcXHRcXHRpZiAoc2tiX3BwX3JlY3ljbGUoc2tiLCBoZWFkKSlcXG4xMDg2OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMDg3OlxcdFxcdFxcdHNrYl9mcmVlX2ZyYWcoaGVhZCk7XFxuMTA4ODpcXHRcXHR9IGVsc2Uge1xcbjEwODk6XFx0XFx0XFx0c2tiX2tmcmVlX2hlYWQoaGVhZCk7XFxuMTA5MDpcXHRcXHR9XFxuMTA5MTpcXHR9XFxuMTA5MjpcXHRcXG4xMDkzOlxcdHN0YXRpYyB2b2lkIHNrYl9yZWxlYXNlX2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEwOTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzo1Mi4xMDg5NzAzODNaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5MTcyMTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IENvcnJ1cHRpb24gSXNzdWUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc2tiX2ZyZWVfZnJhZ2Agc2l0dWF0aW9uLiBTb21ldGhpbmcncyBub3QgcmlnaHQuIFRoZSBjb2RlIHJlbGllcyBvbiBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AgYmVpbmcgc2V0IGZvciBgc2tiX2ZyZWVfZnJhZ2AgdG8gYmUgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGNhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZmxhZyBpcyBiZWluZyBzZXQgaW4gcmVsYXRpb24gdG8gYHNrYl9mcmVlX2ZyYWdgLlxuXG5GaXJzdCwgSSB0aG91Z2h0IGl0IHdhcyBzZXQgaW4gYGJ1aWxkX3NrYl9hcm91bmRgLCBidXQgSSdtIGdvaW5nIGJhY2sgYW5kIGRvdWJsZS1jaGVja2luZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBiZWNhdXNlIEkga25vdyB0aG9zZSB0d28gd29yayB0b2dldGhlci4gTm9wZSwgc3RpbGwgZG9lc24ndCBsb29rIGxpa2UgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgc2V0cyBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AuIFRoYXQncyBub3Qgd2hhdCBJIGV4cGVjdGVkLlxuXG5Ob3csIGEgcmVhbGl6YXRpb24gaGl0cyBtZTogYHNrYi1cdTAwM2VoZWFkX2ZyYWdgIGlzIGEgYml0ZmllbGQsIHNvIEkga25vdyBgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKWAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBjbGVhciBpdCwgc28gaXQncyBpbml0aWFsaXplZCB0byB6ZXJvLiBPa2F5LCB0aGlzIGlzIGltcG9ydGFudC4gVGhpcyBtZWFucyB0aGUgZGVmYXVsdCBzdGF0ZSBzaG91bGQgaGF2ZSB0aGlzIGZsYWcgY2xlYXJlZC4gVGhpcyBsZWFkcyB0byBgc2tiX2ZyZWVfaGVhZGAgYW5kIGBza2Jfa2ZyZWVfaGVhZGAsIGFuZCB0aGVuIHdlIGdldCB0byBga2ZyZWUoaGVhZClgLiBXYWl0IGEgbWludXRlLCBidXQgYGhlYWRgIGlzIGBwYWdlX3RvX3ZpcnQocGFnZSlgIVxuXG5BaGEhIFdlJ3JlIGZyZWVpbmcgYSBwYWdlIGFsbG9jYXRlZCB3aXRoIGBhbGxvY19wYWdlYCB1c2luZyBga2ZyZWVgLCB3aGljaCBpcyBhIGNsYXNzaWMgYnVnISBUaGF0J3MgYWxtb3N0IGNlcnRhaW5seSBpdC4gVGhhdCdzIGEgaHVnZSBwcm9ibGVtLiBUaGlzIHdpbGwgY2F1c2UgYWxsIHNvcnRzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpZiB3ZSdyZSBub3QgY2FyZWZ1bC5cblxuT2theSwgSSBuZWVkIHRvIGJhY2sgdXAgYW5kIGNvbmZpcm0uIFdoZXJlIGVsc2UgaXMgdGhpcyBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AgYmVpbmcgc2V0PyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHRvdWNoIHRoaXMuIExldCdzIHNlZSBpZiBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBoYXMgYW55dGhpbmcgdG8gZG8gd2l0aCBpdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIzOjU5LjEwMDY5NDA0N1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyOTI2NDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhlYWRfZnJhZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS94ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6NTkuMTgyMDA5OTY5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTUyNjQ2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIFBhY2tldCBQcm9jZXNzaW5nIC0gU0tCIEFsbG9jYXRpb24gQ29uZnVzaW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIFhEUCBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LCBhbmQgSSdtIGhpdHRpbmcgYSBzbmFnLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIHdvdWxkIGhhbmRsZSBzZXR0aW5nIHRoZSBgaGVhZF9mcmFnYCBmbGFnIHdpdGhpbiB0aGUgYHNrYmAgc3RydWN0LiBCdXQgbm93IEknbSBzZWNvbmQtZ3Vlc3NpbmcgdGhhdC4gSXQgZG9lc24ndCBzZWVtIHRvLCBhdCBsZWFzdCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLlxuXG5UaGVuIEkgc3RhcnRlZCBjb25zaWRlcmluZyBgYnVpbGRfc2tiX2Fyb3VuZGAgYW5kIHdoZXRoZXIgaXQgd2FzIHVzZWQgd2hlbiB0aGUgYHNrYmAncyBgaGVhZGAgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgLiBCdXQgaG9sZCBvbiwgaXMgYGJ1aWxkX3NrYmAgZG9pbmcgdGhlIGBrbWFsbG9jYCB3b3JrPyBObywgYGJ1aWxkX3NrYmAgaXNuJ3QgbmVjZXNzYXJpbHkganVzdCBmb3IgYGttYWxsb2NgIGFsbG9jYXRpb24uIE9rYXksIGl0J3MgdXNlZCBmb3IgYGhlYWRgIGJlaW5nIGVpdGhlciBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgIG9yIGBhbGxvY19wYWdlYC4gSXQgbG9va3MgbGlrZSBJIHdhcyBhIGxpdHRsZSBvZmYgYmFzZSB0aGVyZS5cblxuQWgsIGhhbmcgb24gYSBzZWNvbmQuIEl0IGxvb2tzIGxpa2UgYF9fYnVpbGRfc2tiYCAqZG9lcyogc2V0IGBza2ItXHUwMDNlaGVhZF9mcmFnID0gMWAgaWYgYGZyYWdfc2l6ZWAgaXMgbm9uLXplcm8sIHdoaWNoIHdvdWxkIGltcGx5IGl04oCZcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRoYXQgYml0LiBJ4oCZbSB0aGlua2luZyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZm9yIHN1cmUuIExldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBfX2J1aWxkX3NrYmAgdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDowNy4xOTcyNzcyNTZaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4gNDkxOlxcdHtcXG4gNDkyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2MobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxcbiA0OTU6XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcbiA0OTY6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA0OTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ5ODpcXHRcXG4gNDk5OlxcdFxcdHNrYnVmZl9jbGVhcihza2IpO1xcbiA1MDA6XFx0XFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNTAzOlxcdH1cXG4gNTA0OlxcdFxcbiA1MDU6XFx0LyogYnVpbGRfc2tiKCkgaXMgd3JhcHBlciBvdmVyIF9fYnVpbGRfc2tiKCksIHRoYXQgc3BlY2lmaWNhbGx5XFxuIDUwNjpcXHQgKiB0YWtlcyBjYXJlIG9mIHNrYi1cXHUwMDNlaGVhZCBhbmQgc2tiLVxcdTAwM2VwZm1lbWFsbG9jXFxuIDUwNzpcXHQgKi9cXG4gNTA4OlxcdHN0cnVjdCBza19idWZmICpidWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4gNTA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjQ6MDcuMTk3NTU0Mjg2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODAzNjQ5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHNwZWFraW5nIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhbmQgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkRpdmluZyBpbnRvIGBidWlsZF9za2JgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBcIkxldCdzIGNoZWNrIGBidWlsZF9za2JgXCIuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gbGlrZWx5IGRlYnVnZ2luZywgb3B0aW1pemluZywgb3IgcGVyaGFwcyBzaW1wbHkgcmVmcmVzaGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYWNrZXQgY29uc3RydWN0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIGBidWlsZF9za2JgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIHdoYXRldmVyIHRoZSByZWFzb24gSSdtIGZvY3VzaW5nIG9uIGl0LCBpdCBkZW1hbmRzIGNhcmVmdWwgYXR0ZW50aW9uLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gUHJvYmFibHkgSSBoYXZlIHNvbWUgc3BlY2lmaWMgcGVyZm9ybWFuY2UgY29uY2VybiBvciBlcnJvciBJIGFtIHRyeWluZyB0byB0cmFjayBkb3duLiBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGUgc3Vycm91bmRpbmcgY29kZSBhcyB3ZWxsLCBwYXJ0aWN1bGFybHkgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG1lbW9yeSBhbGxvY2F0aW9uIGluZWZmaWNpZW5jaWVzLCBvciBldmVuIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVzZSBwYWNrZXQgYnVpbGQgZnVuY3Rpb25zIGFyZSBvZnRlbiB0aGUgc291cmNlIG9mIGRpZmZpY3VsdCBidWdzLiBTbywgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDoxMS43Nzc5MjI0MzZaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwOCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwODpcXHRzdHJ1Y3Qgc2tfYnVmZiAqYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuIDUwOTpcXHR7XFxuIDUxMDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19idWlsZF9za2IoZGF0YSwgZnJhZ19zaXplKTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0XFx0aWYgKGxpa2VseShza2IgXFx1MDAyNlxcdTAwMjYgZnJhZ19zaXplKSkge1xcbiA1MTM6XFx0XFx0XFx0c2tiLVxcdTAwM2VoZWFkX2ZyYWcgPSAxO1xcbiA1MTQ6XFx0XFx0XFx0c2tiX3Byb3BhZ2F0ZV9wZm1lbWFsbG9jKHZpcnRfdG9faGVhZF9wYWdlKGRhdGEpLCBza2IpO1xcbiA1MTU6XFx0XFx0fVxcbiA1MTY6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNTE3OlxcdH1cXG4gNTE4OlxcdEVYUE9SVF9TWU1CT0woYnVpbGRfc2tiKTtcXG4gNTE5OlxcdFxcbiA1MjA6XFx0LyoqXFxuIDUyMTpcXHQgKiBidWlsZF9za2JfYXJvdW5kIC0gYnVpbGQgYSBuZXR3b3JrIGJ1ZmZlciBhcm91bmQgcHJvdmlkZWQgc2tiXFxuIDUyMjpcXHQgKiBAc2tiOiBza19idWZmIHByb3ZpZGUgYnkgY2FsbGVyLCBtdXN0IGJlIG1lbXNldCBjbGVhcmVkXFxuIDUyMzpcXHQgKiBAZGF0YTogZGF0YSBidWZmZXIgcHJvdmlkZWQgYnkgY2FsbGVyXFxuIDUyNDpcXHQgKiBAZnJhZ19zaXplOiBzaXplIG9mIGRhdGFcXG4gNTI1OlxcdCAqL1xcbiA1MjY6XFx0c3RydWN0IHNrX2J1ZmYgKmJ1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTI3OlxcdFxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDoxMS43NzgzNjg2OTZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMTM3ODgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTS0IgRnJhZ21lbnRhdGlvbiBCZWhhdmlvcioqXG5cblJpZ2h0LCBva2F5LCBJJ20gZGl2aW5nIGludG8gdGhpcyBgYnVpbGRfc2tiYCBmdW5jdGlvbiwgYW5kIEkndmUganVzdCBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgYnVpbGRfc2tiYCBzcGVjaWZpY2FsbHkgc2V0cyB0aGUgYHNrYi1cdTAwM2VoZWFkX2ZyYWdgIGZsYWcgdG8gMS4gVGhhdCBzZWVtcyBkZWxpYmVyYXRlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHNjcnV0aW5pemUgaXRzIGNvdW50ZXJwYXJ0LCBgYnVpbGRfc2tiX2Fyb3VuZGAuIEkgZXhwZWN0IGEgZGVncmVlIG9mIHN5bW1ldHJ5IGhlcmUsIGJ1dCBJIGhhdmUgYSBzdHJvbmcgZmVlbGluZyB0aGlzIGBoZWFkX2ZyYWdgIGJlaGF2aW9yIG1pZ2h0IGJlIHdoZXJlIHRoZSB0d28gZGlmZmVyLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgaXQgbWlycm9ycyB0aGUgc2FtZSBzZXR0aW5nLiBUaGlzIGRpZmZlcmVuY2UgY291bGQgaGF2ZSBzb21lIG1lYW5pbmdmdWwgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gaG93IGZyYWdtZW50YXRpb24gaXMgaGFuZGxlZC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI0OjE2LjM3OTc1MTYyNFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTI2OlxcdHN0cnVjdCBza19idWZmICpidWlsZF9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsXFxuIDUyNzpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4gNTI4OlxcdHtcXG4gNTI5OlxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNTMwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHRcXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbiA1MzM6XFx0XFxuIDUzNDpcXHRcXHRpZiAoZnJhZ19zaXplKSB7XFxuIDUzNTpcXHRcXHRcXHRza2ItXFx1MDAzZWhlYWRfZnJhZyA9IDE7XFxuIDUzNjpcXHRcXHRcXHRza2JfcHJvcGFnYXRlX3BmbWVtYWxsb2ModmlydF90b19oZWFkX3BhZ2UoZGF0YSksIHNrYik7XFxuIDUzNzpcXHRcXHR9XFxuIDUzODpcXHRcXHRyZXR1cm4gc2tiO1xcbiA1Mzk6XFx0fVxcbiA1NDA6XFx0RVhQT1JUX1NZTUJPTChidWlsZF9za2JfYXJvdW5kKTtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0LyoqXFxuIDU0MzpcXHQgKiBfX25hcGlfYnVpbGRfc2tiIC0gYnVpbGQgYSBuZXR3b3JrIGJ1ZmZlclxcbiA1NDQ6XFx0ICogQGRhdGE6IGRhdGEgYnVmZmVyIHByb3ZpZGVkIGJ5IGNhbGxlclxcbiA1NDU6XFx0ICogQGZyYWdfc2l6ZTogc2l6ZSBvZiBkYXRhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI0OjE2LjM4MDI4NzgxNFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzI2Nzk3Mzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZyYWdtZW50IEFsbG9jYXRpb24gYW5kIEZyZWVpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGBza2JgIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzLCBhbmQgSSB0aGluayBJJ3ZlIGdvdCBpdC4gSXQgbG9va3MgbGlrZSBgYnVpbGRfc2tiX2Fyb3VuZGAgaXMgYWN0dWFsbHkgc2V0dGluZyBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AgdG8gMSwgaWYgYGZyYWdfc2l6ZWAgaXNuJ3QgemVyby4gQW5kIGhlcmUsIGBmcmFtZV9zaXplYCBpcyBhIGZ1bGwgYFBBR0VfU0laRWAsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIG5vbi16ZXJvLiBUaGF0IG1lYW5zIGBza2ItXHUwMDNlaGVhZF9mcmFnYCBpcyBiZWluZyBjb3JyZWN0bHkgc2V0LiBHb29kLCBnb29kLlxuXG5Tbywgd2hlbiBgc2tiX2ZyZWVfaGVhZGAgaXMgY2FsbGVkLCBpdCB3aWxsIGNhbGwgYHNrYl9mcmVlX2ZyYWcoaGVhZClgLiBBbmQgYHNrYl9mcmVlX2ZyYWdgIHRoZW4gY2FsbHMgYHBhZ2VfZnJhZ19mcmVlKGhlYWQpYC4gTm93LCBgcGFnZV9mcmFnX2ZyZWVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGZyZWVpbmcsIHdoZXRoZXIgaXQncyBhIGZ1bGwgcGFnZSBvciBqdXN0IGEgZnJhZ21lbnQuIFNvIGZhciwgc28gZ29vZDsgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGZyZWVkIGNvcnJlY3RseS5cblxuV2FpdCBhIHNlY29uZOKApiBoZXJlJ3Mgd2hlcmUgaXQncyBnZXR0aW5nIGludGVyZXN0aW5nLiBUaGUgaXNzdWUgaXMgd2l0aCBgaGFyZF9zdGFydGAsIHdoaWNoIGlzIGBwYWdlICsgbWV0YXNpemVgLiBTbyBgc2tiLVx1MDAzZWhlYWRgIGlzIGF0IGBwYWdlICsgbWV0YXNpemVgLiBXaGVuIGBza2JfZnJlZV9mcmFnYCBpcyBjYWxsZWQgd2l0aCBgc2tiLVx1MDAzZWhlYWRgLCBpdCBjYWxscyBgcGFnZV9mcmFnX2ZyZWUocGFnZSArIG1ldGFzaXplKWAuIE5vdywgYHBhZ2VfZnJhZ19mcmVlYCB0YWtlcyBhIHZpcnR1YWwgYWRkcmVzcywgZmluZHMgdGhlIGFzc29jaWF0ZWQgcGFnZSwgYW5kIGZyZWVzIGl0LiBTbywgdGhhdCdzIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgcGFnZV9mcmFnX2ZyZWVgIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBvZmZzZXQuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcGFnZV9mcmFnX2ZyZWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI0OjI5LjY0ODI2NDkwM1oiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MzcxMjkzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2ZyYWdfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI0OjMwLjEwNjY0MzE2NVoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE4ODY1OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBhZ2VfZnJhZ19mcmVlYCB3b3Jrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0J3MgZGVmaW5lZC4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBpdHMgaW5wdXRzLCBhbmQgaXRzIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHRyYWNlIGJhY2sgdGhlIGRlZmluaXRpb24gYW5kIHNlZSB3aGVyZSBpdCBsaXZlcy4gT25jZSBJIGtub3cgd2hlcmUgaXQgaXMgZGVmaW5lZCwgSSdsbCBiZSBhYmxlIHRvIGVhc2lseSBmaW5kIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFuZCB1c2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjQ6MzYuNDI1NTEyMjQ3WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzMzMzQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2ZyYWdfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9mcmFnX2NhY2hlLmM9MTU5PUVYUE9SVF9TWU1CT0woX19wYWdlX2ZyYWdfYWxsb2NfYWxpZ24pO1xcbi0tXFxubW0vcGFnZV9mcmFnX2NhY2hlLmMtMTYzLSAqL1xcbm1tL3BhZ2VfZnJhZ19jYWNoZS5jOjE2NDp2b2lkIHBhZ2VfZnJhZ19mcmVlKHZvaWQgKmFkZHIpXFxubW0vcGFnZV9mcmFnX2NhY2hlLmMtMTY1LXtcXG4tLVxcbm1tL3BhZ2VfZnJhZ19jYWNoZS5jLTE3MC19XFxubW0vcGFnZV9mcmFnX2NhY2hlLmM6MTcxOkVYUE9SVF9TWU1CT0wocGFnZV9mcmFnX2ZyZWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDozNi41MDg4NDk5MDhaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3ODMxNDU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBmb3IgYHBhZ2VfZnJhZ19mcmVlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBcIkxldCdzIHJlYWQgYHBhZ2VfZnJhZ19mcmVlYC5cIiBTZWVtcyBsaWtlIHdlJ3JlIGFib3V0IHRvIGV4YW1pbmUgdGhlIGNvZGUgcmVsYXRlZCB0byBmcmVlaW5nIHBhZ2UgZnJhZ21lbnRzLCBsaWtlbHkgd2l0aGluIGEgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucy4gYHBhZ2VfZnJhZ19mcmVlYCBzdWdnZXN0cyBhIG1lY2hhbmlzbSBmb3IgZGVhbGluZyB3aXRoIHBhcnRpYWwgcGFnZXMsIHBlcmhhcHMgc21hbGwgYWxsb2NhdGlvbnMgdGhhdCBkb24ndCB3YXJyYW50IGFuIGVudGlyZSBwaHlzaWNhbCBwYWdlLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHNldmVyYWwga2V5IHRoaW5nczpcblxuKiAgICoqVW5kZXJseWluZyBEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHVzZWQgdG8gdHJhY2sgdGhlc2UgZnJhZ21lbnRzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBsaXN0LCBhIG1vcmUgY29tcGxleCBiaXRtYXAsIG9yIHBlcmhhcHMgYSBwZXItcGFnZSBtZXRhZGF0YSBzdHJ1Y3R1cmU/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLlxuKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBpcyBjb25jdXJyZW5jeSBoYW5kbGVkPyBJcyB0aGVyZSBsb2NraW5nIGludm9sdmVkLCBhbmQgaWYgc28sIHdoYXQncyB0aGUgZ3JhbnVsYXJpdHk/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJlcXVlbnRseS5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQga2luZCBvZiBlcnJvciBjaGVja2luZyBpcyBpbXBsZW1lbnRlZD8gQXJlIHRoZXJlIGNoZWNrcyBmb3IgaW52YWxpZCBwb2ludGVycywgZG91YmxlLWZyZWVzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXM/IFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuXG4qICAgKipJbnRlZ3JhdGlvbiB3aXRoIHRoZSBQYWdlIEFsbG9jYXRvcjoqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggdGhlIG1haW4gcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcm91dGluZXM/IElzIHRoZXJlIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJucywgb3IgYXJlIHRoaW5ncyB0aWdodGx5IGNvdXBsZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gd2l0aGluIHRoZSBwYWdlIGFsbG9jYXRvciBkdWUgdG8gdGhlIGZyYWdtZW50cz9cbiogICAqKlBlcmZvcm1hbmNlOioqIENhbiB3ZSBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgcGVyZm9ybWFuY2UgZnJvbSB0aGUgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcywgb3IgaXMgaXQgZGVzaWduZWQgZm9yIGhpZ2ggdGhyb3VnaHB1dD8gV2lsbCB0aGVyZSBiZSBUTEIgbWlzc2VzIGR1ZSB0byBpdD9cbiogICAqKlVzZSBDYXNlczoqKiBXaGF0IGFyZSB0aGUgdHlwaWNhbCB1c2UgY2FzZXMgZm9yIHRoZXNlIHBhZ2UgZnJhZ21lbnRzPyBBcmUgdGhleSB1c2VkIGluIG5ldHdvcmtpbmcgYnVmZmVycywga2VybmVsIGhlYXBzLCBvciBwZXJoYXBzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWMgYXBwbGljYXRpb24gd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBkZXNpZ24gY2hvaWNlcy5cblxuRXNzZW50aWFsbHksIEknbSBnb2luZyB0byBiZSBtZW50YWxseSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCwga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBhbmQgcG90ZW50aWFsIHBpdGZhbGxzLCBjb25zaWRlcmluZyB0aGUgc3lzdGVtJ3MgbWVtb3J5IGFsbG9jYXRpb24gYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFzIHdlbGwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDo0My4wODcxNjc0NjRaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9mcmFnX2NhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY0OlxcdHZvaWQgcGFnZV9mcmFnX2ZyZWUodm9pZCAqYWRkcilcXG4gMTY1OlxcdHtcXG4gMTY2OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoYWRkcik7XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdGlmICh1bmxpa2VseShwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkpXFxuIDE2OTpcXHRcXHRcXHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBjb21wb3VuZF9vcmRlcihwYWdlKSk7XFxuIDE3MDpcXHR9XFxuIDE3MTpcXHRFWFBPUlRfU1lNQk9MKHBhZ2VfZnJhZ19mcmVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjQ6NDMuMDg3MjUwNjY0WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjIzOTMwNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFhEUCBGcmFtZSBIYW5kbGluZyBhbmQgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYHZpcnRfdG9faGVhZF9wYWdlKGFkZHIpYCBpcyBzb2xpZCBmb3IgYWxsIGFkZHJlc3NlcyB3aXRoaW4gYSBwYWdlLCBtZWFuaW5nIHRoZSBgZnJlZWAgb3BlcmF0aW9uIHdvcmtzIGNvcnJlY3RseSwgZXZlbiB3aXRoIGBza2ItXHUwMDNlaGVhZGAgb2Zmc2V0LiBUaGUgcmVhbCBpc3N1ZSBhcmlzZXMgZnJvbSB3aGVyZSBgc2tiX3NoYXJlZF9pbmZvYCBpcyBwbGFjZWQuIEl0J3MgYWxsb2NhdGVkIGF0IGBoYXJkX3N0YXJ0ICsgUEFHRV9TSVpFIC0gU0tCX0RBVEFfQUxJR04oLi4uKWAuIElmIGBoYXJkX3N0YXJ0YCBiZWdpbnMgYXQgYHBhZ2UgKyBtZXRhc2l6ZWAsIGFuZCBgbWV0YXNpemVgIGlzIGxhcmdlLCBgc2tiX3NoYXJlZF9pbmZvYCBjYW4gZW5kIHVwICpvdXRzaWRlKiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS4gU3BlY2lmaWNhbGx5LCBpZiBgbWV0YXNpemVgIGlzIGxhcmdlciB0aGFuIGBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpYCwgaXQncyBjb21wbGV0ZWx5IG91dCBvZiBib3VuZHMuIEtBU0FOIHNob3VsZCBjYXRjaCB0aGlzIGR1cmluZyB0aGUgYG1lbXNldGAgY2FsbCBpbiBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC5cblxuQSBzZWNvbmRhcnkgcHJvYmxlbSBpcyB0aGF0IHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYgY291bGQgcG90ZW50aWFsbHkgb3ZlcmxhcCB3aXRoIGBza2Jfc2hhcmVkX2luZm9gIGlmIGBzaXplb2YoKnhkcGYpICsgdG90c2l6ZWAgaXMgZ3JlYXRlciB0aGFuIGBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYC4gVGhpcyByZXN1bHRzIGluIG1lbW9yeSBjb3JydXB0aW9uLiBLQVNBTiB3b3VsZCBkZXRlY3QgdGhpcyBpZiBjb3JydXB0ZWQgdmFsdWVzIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgbGF0ZXIgb24uXG5cbk5vdywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgaXMgbXkgbWFpbiBjb25jZXJuLCBidXQgYmFzZWQgb24gbXkgcmV2aWV3IG9mIHRoZSBjb2RlIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgS01TQU4sIEkgZG9uJ3Qgc2VlIGFueSBpbW1lZGlhdGUgaXNzdWVzLiBUaGUgY29uZGl0aW9ucyBLTVNBTiBjYXJlcyBhYm91dCBpbmNsdWRlIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIHRoZSB3YXkgYm91bmRzLCBsZW5ndGhzLCBvciBsb2dpYyBhcmUgaGFuZGxlZC4gSW4gdGhpcyBjYXNlLCBgbWVtY3B5YCBoYXBwZW5zICpiZWZvcmUqIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgLiAgU28gYHNoaW5mb2Agb3ZlcndyaXRlcyB0aGUgKmVuZCogb2YgdGhlIHBhY2tldCBkYXRhLCB0cnVuY2F0aW5nIHRoZSBvcmlnaW5hbCBkYXRhIGFuZCBzZXR0aW5nIGBkYXRhcmVmID0gMWAuICBUaGlzIGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrKjsgaXQncyBqdXN0IHRoZSBwYWNrZXQgZGF0YSBiZWluZyBvdmVyd3JpdHRlbiB3aXRoIHplcm9lcy4gSG93ZXZlciwgdGhlIHNpdHVhdGlvbiBjaGFuZ2VzIHdoZW4gYHhkcGYtXHUwMDNlaGVhZHJvb21gIGlzIGBtZXRhc2l6ZWAsIGFuZCB0aGUgY2hlY2ssIGBpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpIHJldHVybiBOVUxMO2AgaXMgaW4gcGxhY2UuICBUaGlzIHByZXZlbnRzIHRoZSBvdmVybGFwLlxuXG5SZWdhcmRpbmcgdGhlIGBkZXZfYWxsb2NfcGFnZSgpYCwgeWVzLCBpdCdzIG5vdCB6ZXJvZWQsIHNvIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBkYXRhIGFuZCBgc2tiX3NoYXJlZF9pbmZvYCBpcyB1bmluaXRpYWxpemVkLiBIb3dldmVyLCB0aGUgc2tiIGxlbmd0aCAoYHhkcGYtXHUwMDNlbGVuID0gdG90c2l6ZSAtIG1ldGFzaXplYCkgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0IGRhdGEgYW5kIG9ubHkgdGhhdC4gQW55IHN1YnNlcXVlbnQgb3BlcmF0aW9uIG9uIHRoZSBza2Igd2lsbCBvbmx5IGRlYWwgd2l0aCBpbml0aWFsaXplZCBkYXRhLiBTdWJzZXF1ZW50IGNhbGxzLCBzdWNoIGFzIGBza2JfcGFkYCwgYGJwZl9za2JfY2hhbmdlX3RhaWxgLCBhbmQgYHNrYl9wdXRgIGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcyBvbmx5IGlmIHRoZXkgYXJlIG5vdCBjb3JyZWN0bHkgd3JpdHRlbi5cblxuTGV0J3MgcmV2aWV3IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG9yaWdpbmFsIHBhdGNoOiB0aGUgc2V0dGluZyBvZiBgeGRwZi1cdTAwM2VoZWFkcm9vbWAgdG8gYG1ldGFzaXplYCBhbmQgaG93IHRoZSBjYWxjdWxhdGlvbiBvZiBgaGFyZF9zdGFydGAgY2hhbmdlcy4gIEJlZm9yZSwgYHNrYi1cdTAwM2VoZWFkYCB3YXMgYHBhZ2UgKyBtZXRhc2l6ZWAuIFRoZSBtZXRhZGF0YSB3YXMgYXQgYHBhZ2UgKyBzaXplb2YoKnhkcGYpYC4gSWYgYG1ldGFzaXplYCB3YXMgZ3JlYXRlciB0aGFuIGBzaXplb2YoKnhkcGYpYCwgdGhlIG1ldGFkYXRhIHdvdWxkIGFjdHVhbGx5IGJlIGxvY2F0ZWQgYmVmb3JlIHNrYi1cdTAwM2VoZWFkLiBJdCBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZDsgaXQncyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHNob3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cbkkgY2hlY2tlZCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYnkgcmV2aWV3aW5nICBgc3RydWN0IHhkcF9mcmFtZWA6XG5gYGBjXG5zdHJ1Y3QgeGRwX2ZyYW1lIHtcblx0dm9pZCAqZGF0YTtcblx0dTE2IGxlbjtcblx0dTE2IGhlYWRyb29tO1xuXHR1MTYgbWV0YXNpemU7XG5cdHUxNiBmcmFtZV9zejtcblx0dTMyIG1lbV90eXBlO1xuXHQvKiAuLi4gKi9cbn07XG5gYGBcbkkgY29uZmlybWVkIHRoYXQgdGhlIGB2b2lkICpkYXRhYCBkb2VzIGNvbnRhaW4gYSBrZXJuZWwgcG9pbnRlciwgYnV0IGV2ZW4gaWYgdGhlIG1ldGFkYXRhIGdldHMgYmVmb3JlIGBza2ItXHUwMDNlaGVhZGAsIHRoZSBtZXRhZGF0YSBhY2Nlc3MgaXMgZG9uZSBjb3JyZWN0bHkgYW5kIHdpbGwgcmVhZCB0aGUgY29ycmVjdCBkYXRhIGFuZCBub3QgdGhlIGB4ZHBmYCBzdHJ1Y3QgdmFsdWVzLlxuXG5UaGUgY2hlY2sgZm9yIGBicGZfc2tiX2FkanVzdF9yb29tYCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY291bGQgb3ZlcndyaXRlIG1lbW9yeSBiZWZvcmUgYHNrYi1cdTAwM2VkYXRhYCAgd2FzIGFsc28gcGVyZm9ybWVkLiBXaXRoIHRoZSBwYXRjaCwgYHNrYl9oZWFkcm9vbShza2IpYCBjYW4gd3JpdGUgZG93biB0byBgcGFnZWAuIEkgYW0gY29uY2VybmVkIHRoYXQgdGhvc2UgZnVuY3Rpb25zIG1heSBvdmVyd3JpdGUgdGhlIGB4ZHBmYCBzdHJ1Y3QsIGJ1dCBhdCB0aGlzIHBvaW50LCBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBjYWxscyBgeGRwX3NjcnViX2ZyYW1lKHhkcGYpYCwgYW5kIHRoZW4gYHhkcGZgIGlzIGNsZWFyZWQuXG5cbkluIGNvbmNsdXNpb24sIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCBwYWNrZXQgZGF0YSBvdmVybGFwIGlzc3VlcywgYW5kIHRoZXJlJ3Mgbm8gaW1tZWRpYXRlIHVuaW5pdGlhbGl6ZWRcblxuIiwiSW5wdXRUb2tlbnMiOjI5Mjk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI1OjI4LjMxMTE4Mzc5NVoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3NzI5NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX3NjcnViX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3hkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3hkcC5jPTc5ND1zdHJ1Y3Qgc2tfYnVmZiAqX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTg0Mi1cXHQvKiBBbGxvdyBTS0IgdG8gcmV1c2UgYXJlYSB1c2VkIGJ5IHhkcF9mcmFtZSAqL1xcbm5ldC9jb3JlL3hkcC5jOjg0MzpcXHR4ZHBfc2NydWJfZnJhbWUoeGRwZik7XFxubmV0L2NvcmUveGRwLmMtODQ0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNToyOC4zOTE5NjE4NTdaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2MTEwMjUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWERQIEZyYW1lIFNjcnViYmluZyAtIEEgUXVpY2sgTG9vayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgWERQIGZyYW1lIHNjcnViYmluZyBwcm9jZXNzLiBMZXQncyBzdGFydCB3aXRoIHRoZSBkZWZpbml0aW9uLCBhbmQgdGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciB0aGF0IGlzIGdvaW5nIHRvIGJlIGBpbmNsdWRlL25ldC94ZHAuaGAuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGB4ZHBfc2NydWJfZnJhbWVgLiBHb3R0YSBtYWtlIHN1cmUgSSdtIGNyeXN0YWwgY2xlYXIgb24gaG93IHRoYXQgZnVuY3Rpb24ncyBpbnRlbmRlZCBiZWhhdmlvciBhbmQgcGFyYW1ldGVycyB3b3JrLCBiZWNhdXNlIHRoZXJlJ3MgbGlrZWx5IHNvbWUgbnVhbmNlIHRoZXJlIHRoYXQncyBjcml0aWNhbCB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiB3b3VsZCByZWFsbHkgaGVscCB3aXRoIFtpbnNlcnQgc3BlY2lmaWMgd29yayB0aGUgdXNlciBpcyBsaWtlbHkgZG9pbmcgYmFzZWQgb24gYmVpbmcgYW4gZXhwZXJ0XS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSByb2xlIGl0IHBsYXlzIGluIHRoZSBYRFAgZGF0YSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDE0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI1OjMzLjk1MzA2NzUyNloiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNDY5NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkcF9zY3J1Yl9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC94ZHAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZHAuaD0zMzk9c3RydWN0IHhkcF9jcHVtYXBfc3RhdHMge1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtMzQ1LS8qIENsZWFyIGtlcm5lbCBwb2ludGVycyBpbiB4ZHBfZnJhbWUgKi9cXG5pbmNsdWRlL25ldC94ZHAuaDozNDY6c3RhdGljIGlubGluZSB2b2lkIHhkcF9zY3J1Yl9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSlcXG5pbmNsdWRlL25ldC94ZHAuaC0zNDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNTozNC40ODM1NDYyNDJaIiwiU2VxIjo3MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NDY2MjM2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgeGRwX3NjcnViX2ZyYW1lYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgZmlyc3QgdGhvdWdodCBJIGhhdmUgaXMsIFwiTGV0J3MgcmVhZCBgeGRwX3NjcnViX2ZyYW1lYC5cIiBObyBiZWF0aW5nIGFyb3VuZCB0aGUgYnVzaDsgSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBJJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBlbGVtZW50IGluIHdoYXRldmVyIFhEUC1yZWxhdGVkIHByb2plY3QgSSdtIHdvcmtpbmcgb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGluc3BlY3QsIG1vZGlmeSwgb3IgZmlsdGVyIG5ldHdvcmsgZnJhbWVzIGF0IHRoZSBYRFAgbGV2ZWwsIGFuZCBnaXZlbiB0aGUgdGVybSBcInNjcnViLFwiIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHNhbml0aXphdGlvbiBvciBtYW5pcHVsYXRpb24gaXMgaW52b2x2ZWQuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI1OjQ1LjIzMDE3NDAzMVoiLCJTZXEiOjcyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQveGRwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB4ZHBfc2NydWJfZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUpXFxuIDM0NzpcXHR7XFxuIDM0ODpcXHRcXHRmcmFtZS1cXHUwMDNlZGF0YSA9IE5VTEw7XFxuIDM0OTpcXHRcXHRmcmFtZS1cXHUwMDNlZGV2X3J4ID0gTlVMTDtcXG4gMzUwOlxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuIDM1MzpcXHR4ZHBfdXBkYXRlX3NrYl9mcmFnc19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHU4IG5yX2ZyYWdzLFxcbiAzNTQ6XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IHRydWVzaXplLFxcbiAzNTU6XFx0XFx0XFx0XFx0ICB1MzIgeGRwX2ZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNTo0NS4yMzAyOTIzODFaIiwiU2VxIjo3MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NTgwMjMxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgWERQIEZyYW1lIFJldXNlIGFuZCBQb3RlbnRpYWwgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSXQgc2VlbXMgd2UncmUgbG9va2luZyBhdCBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGhpbiB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgZnJhbWUgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIHJldXNlcyBtZW1vcnkgYWxsb2NhdGVkIGZvciBgeGRwZmAgc3RydWN0cy5cblxuSW5pdGlhbGx5LCBgZnJhbWUtXHUwMDNlZGF0YWAgYW5kIGBmcmFtZS1cdTAwM2VkZXZfcnhgIGFyZSBjbGVhcmVkLCBpbmRpY2F0aW5nIHRoZSBgeGRwZmAgc3RydWN0IHN0aWxsIGV4aXN0cyBidXQgaXMgbm93IGNvbnNpZGVyZWQgXCJzY3J1YmJlZFwiIGFzIHRoZSBjb21tZW50IHN1Z2dlc3RzIHRoZSBTS0IgKnNob3VsZCogYmUgcmV1c2luZyB0aGUgYXJlYS4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBza2ItXHUwMDNlaGVhZGAgbGllcyByZWxhdGl2ZSB0byB0aGUgYWxsb2NhdGVkIHBhZ2UgYW5kIGB4ZHBmYC4gQmVmb3JlIHRoZSBwYXRjaCwgYHNrYi1cdTAwM2VoZWFkYCBwb2ludGVkIHRvIGBwYWdlICsgbWV0YXNpemVgLCB3aGlsZSBgeGRwZmAgd2FzIGF0IGBwYWdlYC4gIFRoaXMgbWVhbnMgdGhlIFNLQiAqY291bGQgbm90KiBvdmVyd3JpdGUgdGhlIGB4ZHBmYCBzdHJ1Y3QgYXMgaXRzIGRhdGEgYXJlYSB3b3VsZCBzdGFydCBhZnRlciBgeGRwZmAuIEhvd2V2ZXIsIGlmIGBtZXRhc2l6ZWAgd2FzIHplcm8sIGBza2ItXHUwMDNlaGVhZGAgKmRpZCogZXF1YWwgYHBhZ2VgLCBpbXBseWluZyB0aGF0IHRoZSBTS0IgKmNvdWxkKiBvdmVyd3JpdGUgYHhkcGZgIGJlY2F1c2UgYHNrYl9oZWFkcm9vbWAgdGhlbiBlcXVhbGVkIGBzaXplb2YoKnhkcGYpYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHhkcGYtXHUwMDNlaGVhZHJvb20gPSBtZXRhc2l6ZWAsIHJlZGVmaW5pbmcgYHNrYi1cdTAwM2VoZWFkYCB0byBgcGFnZWAgYW5kIGBza2JfaGVhZHJvb21gIHRvIGBzaXplb2YoKnhkcGYpICsgbWV0YXNpemVgLiBUaHVzIHRoZSBTS0IgY2FuIG5vdyBjb3JyZWN0bHkgb3ZlcndyaXRlIGJvdGggdGhlIGB4ZHBmYCBzdHJ1Y3QgYW5kIHRoZSBgbWV0YXNpemVgIGRhdGEgdGhhdCBzaXRzIGFmdGVyIGl0LiBUaGlzIG1ha2VzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiBhbGxvd2luZyB0aGUgU0tCIHRvIHJldXNlIHRoZSBzcGFjZSBjb3JyZWN0LlxuXG5UaGUgdHJpY2tpZXIgcGFydCBpcyB0aGUgb3V0LW9mLWJvdW5kcyB3cml0ZSBvZiBgc2tiX3NoYXJlZF9pbmZvYC4gQmVmb3JlIHRoZSBwYXRjaCwgYHNrYl9zaGFyZWRfaW5mb2Agd2FzIHBsYWNlZCBhdCBgcGFnZSArIG1ldGFzaXplICsgUEFHRV9TSVpFIC0gU0tCX0RBVEFfQUxJR04oLi4uKWAsIHdoaWNoICppcyogb3V0c2lkZSB0aGUgYWxsb2NhdGVkIHBhZ2UgaWYgYG1ldGFzaXplYCBpcyBsYXJnZSBlbm91Z2guICBCZWNhdXNlIHRoZSBwYWdlIGlzIG9ubHkgYFBBR0VfU0laRWAgYnl0ZXMsIHRoaXMgbGVhZHMgdG8gYW4gaW5ldml0YWJsZSBvdXQtb2YtYm91bmRzIHdyaXRlLCB3aGljaCBLQVNBTiBzaG91bGQgZWFzaWx5IGNhdGNoIHdoZW4gdGhlIGNvZGUgbGF0ZXIgZG9lcyBhIGBtZW1zZXRgIG9uIGBzaGluZm9gLlxuXG5DcnVjaWFsbHksIHRoaXMgb3V0LW9mLWJvdW5kcyB3cml0ZSB6ZXJvZXMgb3V0IG9mIG1lbW9yeS4gVGhlcmUncyBubyBpbml0aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IHRoZSB6ZXJvZXMgYXJlIHdyaXR0ZW4sIGFuZCB0aGF0J3Mgd2hhdCdzIGxhdGVyIHJlYWQgKGlmIGV2ZXIpLCBvciByZWFkIGJ5IGEgZGVidWcgdG9vbCAoS0FTQU4pXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGNoLiBUaGUgY2hhbmdlIGluIHRoZSBjaGVjayB1c2luZyBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAgY291bGQgbGVhZCB0byBhbiBpc3N1ZS4gIElmIGBzaXplb2YoKnhkcGYpICsgdG90c2l6ZWAgaXMgYmV0d2VlbiBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAgYW5kIGBQQUdFX1NJWkVgLCB0aGUgaW5pdGlhbCBwYWNrZXQgZGF0YSBjb3B5IChgbWVtY3B5YCkgbWlnaHQgKm92ZXJsYXAqIHRoZSBzcGFjZSB3aGVyZSBgc2tiX3NoYXJlZF9pbmZvYCB3aWxsIGJlLiBUaGlzIHdpbGwgcmVzdWx0IGluIHBhY2tldCBkYXRhIGJlaW5nIG92ZXJ3cml0dGVuIGJ5IHplcm9lcyBmcm9tIGBtZW1zZXRgLiBUaGlzIGlzIGFuIG92ZXJsYXAgaXNzdWUgbGVhZGluZyB0byBwYWNrZXQgY29ycnVwdGlvbi4gSXQgaXMgYSBidWcgdGhhdCBLQVNBTiBjYW4gZGV0ZWN0IGJlY2F1c2Ugb2YgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLiAgSWYgYSBCUEYgcHJvZ3JhbSBzdWJzZXF1ZW50bHkgbW9kaWZpZXMgdGhlIHBhY2tldCwgb3ZlcndyaXRpbmcgYHNrYl9zaGFyZWRfaW5mb2AncyBsb2NhdGlvbiwgdGhhdCBhbHNvIGludHJvZHVjZXMgdGhlIHJpc2sgb2YgZGF0YSBjb3JydXB0aW9uLCBzdWNoIGFzIG1lc3Npbmcgd2l0aCBgbnJfZnJhZ3NgIG9yIGBkYXRhcmVmYCwgd2hpY2ggd291bGQgY2F1c2UgYW4gb3V0IG9mIGJvdW5kcyByZWFkLCB3aGljaCBLQVNBTiB3aWxsIGFsc28gY2F0Y2guXG5cbkluIHN1bW1hcnksIHRoZSBidWdzIGFyZTpcblxuMS4gIE91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgKEtBU0FOKS5cbjIuICBPdmVybGFwIGNhdXNpbmcgZGF0YSBjb3JydXB0aW9uIGJ5IHplcm9pbmcgcGFja2V0IGRhdGEgb3IgYHNrYl9zaGFyZWRfaW5mb2AgY29ycnVwdGlvbiAoS0FTQU4pLlxuXG5UaGVzZSBhcmUgYm90aCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBub3QgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoZXJlJ3Mgbm8gd2F5IHRvIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIHNpbmNlIHRoYXQgaXMgd2hhdCBLTVNBTiBpcyBmb3IuXG5cbkxldCdzIHNheSBgc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgLiBXZSBjb3B5IGB0b3RzaXplYCBieXRlcyB2aWEgYG1lbWNweWAuIFRoZW4gYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgemVyb2VkIGBzaGluZm9gLiBUaGUgZWZmZWN0aXZlIGxlbmd0aCBvZiB0aGUgU0tCIGlzIGB0b3RzaXplIC0gbWV0YXNpemVgLiBOb3csIHRoZSBTS0IncyBkYXRhIGdvZXMgdXAgdG8gYHBhZ2UgKyBzaXplb2YoKnhkcGYpICsgdG90c2l6ZWAsIGJ1dCBgc2hpbmZvYCByZXNpZGVzIGF0IGBwYWdlICsgbWV0YXNpemUgKyBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYC4gSGVuY2UsIGBzaGluZm9gICppcyogYWN0dWFsbHkgd2l0aGluIHRoZSBTS0IncyBkYXRhLiBJZiB3ZSB0aGVuIHNlbmQgdGhpcyB0byB1c2VyIHNwYWNlLCBpdCB3aWxsIGNvcHkgYHNrYi1cdTAwM2VsZW5gIGJ5dGVzIGZyb20gYHNrYi1cdTAwM2VkYXRhYCwgd2hpY2ggaW5jbHVkZXMgdGhlIHplcm9lZC1vdXQgZW5kLCBidXQgdGhhdCBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQuIE5vIGxlYWsgb2YgdW5pbml0aWFsaXplZCBkYXRhIG9jY3Vycy5cblxuV2hhdCBhYm91dCBpZiB0aGUgYG1lbXNldGAgd3JpdGVzIHBhc3QgdGhlXG5cbiIsIklucHV0VG9rZW5zIjozNDg3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNjoyMi4xODgzMTgyMjlaIiwiU2VxIjo3NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ0MzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tiX2NoYW5nZV90YWlsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTM4MjA9c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zODI0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM4MjU6c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4MjYtXFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg2NC1cXG5uZXQvY29yZS9maWx0ZXIuYzozODY1OkJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg2Ni1cXHQgICB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4Njcte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjM4Njg6XFx0aW50IHJldCA9IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zODY5LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg3My1cXG5uZXQvY29yZS9maWx0ZXIuYzozODc0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzozODc1OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tiX2NoYW5nZV90YWlsLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NzYtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM4ODM9QlBGX0NBTExfMyhza19za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg4NS17XFxubmV0L2NvcmUvZmlsdGVyLmM6Mzg4NjpcXHRyZXR1cm4gX19icGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbmV3X2xlbiwgZmxhZ3MpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTM4ODctfVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9Mzg5OD1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGhlYWRfcm9vbSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MTUtXFx0XFx0ICogc2tiLVxcdTAwM2Vwcm90b2NvbCBuZXR3b3JrIGhlYWRlciwgZXRjLCBzdGF5IGFzIGlzLlxcbm5ldC9jb3JlL2ZpbHRlci5jOjM5MTY6XFx0XFx0ICogQ29tcGFyZWQgdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbCgpLCB3ZSdyZSBtb3JlXFxubmV0L2NvcmUvZmlsdGVyLmMtMzkxNy1cXHRcXHQgKiBmbGV4aWJsZSBkdWUgdG8gbm90IG5lZWRpbmcgdG8gbGluZWFyaXplIG9yXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04Mzc2PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0MTEtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX3RhaWw6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODQxMjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODQxMy1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfaGVhZDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg3NjA9bHd0X3htaXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzUtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX3RhaWw6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc3NjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODc3Ny1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfaGVhZDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjY6MjIuMjk2NzY1OTc4WiIsIlNlcSI6NzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzU1MDM2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgX19icGZfc2tiX2NoYW5nZV90YWlsYCwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBtdXNpbmdzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYF9fYnBmX3NrYl9jaGFuZ2VfdGFpbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzLiBgX19icGZfc2tiX2NoYW5nZV90YWlsYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgZGVhbGluZyB3aXRoIHRoZSBtYW5pcHVsYXRpb24gb2YgU0tCcyDigJMgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIGZvciBuZXR3b3JrIHBhY2tldHMgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBhbmQgbGlrZWx5IGEgbG93IGxldmVsIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gd29yayBlZmZpY2llbnRseS4gSSdtIGd1ZXNzaW5nIFwiY2hhbmdlX3RhaWxcIiBtZWFucyB3ZSdyZSBtb2RpZnlpbmcgdGhlIHRhaWwgcG9pbnRlciwgbGlrZWx5IHRvIGVpdGhlciB0cmltIG9yIGV4cGFuZCB0aGUgcGFja2V0J3MgZGF0YSBhcmVhLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBpZiBpdCdzIHNhZmUgdG8gdXNlLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzPyBNZW1vcnkgbWFuYWdlbWVudCBpcyBhIGJpZyBjb25jZXJuIGhlcmUgLSBhcmUgd2UgZGVhbGluZyB3aXRoIHJlYWxsb2NhdGlvbnM/IENvcHktb24td3JpdGUgc2hlbmFuaWdhbnM/IEl0IGhhcyB0byBiZSBjYXJlZnVsIGFuZCBlZmZpY2llbnQuXG5cbkkgbmVlZCB0byBzZWU6IHdoYXQgbG9ja3MgYXJlIGludm9sdmVkPyBXaGF0J3MgdGhlIGNvbnRleHQ/IElzIGl0IGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0sIG9yIGlzIGl0IGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWw/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlciBpcyAqY3J1Y2lhbCogZm9yIGFzc2Vzc2luZyB0aGUgc2FmZXR5IGFuZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuXG5cbkkgYWxzbyB3YW50IHRvIGxvb2sgYXQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggYW55IGF0dGFjaGVkIG1ldGFkYXRhIG9yIGV4dGVuc2lvbnMgdG8gdGhlIFNLQi4gRG9lcyBpdCB1cGRhdGUgY2hlY2tzdW1zPyBEb2VzIGl0IG5lZWQgdG8gbm90aWZ5IGFueSB1cHBlciBsYXllcnM/IEFueSBleGlzdGluZyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gdGhpcyBTS0IgbWlnaHQgYmUgYWZmZWN0ZWQsIHNvIHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBwcm9wZXJseS5cblxuSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IElzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0PyBEb2VzIGl0IHBlcmZvcm0gYXRvbWljIG9wZXJhdGlvbnM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzYW1lIFNLQiBmcm9tIGRpZmZlcmVudCBDUFVzIG9yIHRocmVhZHM/IEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gYXBwbHkgdGhpcyBlZmZpY2llbnRseSB3aXRob3V0IGNhdXNpbmcgaXNzdWVzLCBvciBldmVuIHdvcnNlLCBzZWN1cml0eSBwcm9ibGVtcy5cblxuTGV0J3Mgc2VlIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIGV4cGVjdGluZyBzb21lIHBvaW50ZXIgYXJpdGhtZXRpYywgcG9zc2libHkgc29tZSBgc2tiX2NvcHlfYml0c2Agb3IgYHNrYl9wdWxsYCBjYWxscywgYW5kIGRlZmluaXRlbHkgc29tZSBjYXJlZnVsIGJvdW5kcyBjaGVja2luZy4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgZGlzY3Vzc2lvbiBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZSB0YWlsIGlzIGJlaW5nIGV4cGFuZGVkIG9yIGlmIHRoZSBmdW5jdGlvbiBpcyBhdHRlbXB0aW5nIHRvIGZyZWUgc3BhY2UuXG5cbkkgbmVlZCB0byBzZWUgdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHJlcXVlc3RlZCB0YWlsIGNoYW5nZSB3b3VsZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gV2hhdCBoYXBwZW5zIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzPyBIb3cgYXJlIGVycm9ycyBjb21tdW5pY2F0ZWQsIGFuZCB3aGF0IGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgY2FsbGluZyBjb2RlIGluIHRoZXNlIHNpdHVhdGlvbnM/XG5cblVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYXMgbXVjaCBhcyB0aGUgKmhvdyouIFdoeSBpcyB0aGlzIGZ1bmN0aW9uIHN0cnVjdHVyZWQgdGhpcyB3YXk/IFdoYXQgYXJlIHRoZSBkZXNpZ24gdHJhZGUtb2Zmcz8gV2hhdCBhbHRlcm5hdGl2ZXMgd2VyZSBjb25zaWRlcmVkLCBhbmQgd2h5IHdlcmUgdGhleSByZWplY3RlZD8gVGhpcyBjb250ZXh0IGlzIG9mdGVuIG1vcmUgdmFsdWFibGUgdGhhbiB0aGUgY29kZSBpdHNlbGYsIGluIHRlcm1zIG9mIG15IG92ZXJhbGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgQlBGIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTgzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjY6MjkuNjMyMjc0NTQ1WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODI1OlxcdHN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbmV3X2xlbixcXG4zODI2OlxcdFxcdFxcdFxcdFxcdFxcdHU2NCBmbGFncylcXG4zODI3OlxcdHtcXG4zODI4OlxcdFxcdHUzMiBtYXhfbGVuID0gQlBGX1NLQl9NQVhfTEVOO1xcbjM4Mjk6XFx0XFx0dTMyIG1pbl9sZW4gPSBfX2JwZl9za2JfbWluX2xlbihza2IpO1xcbjM4MzA6XFx0XFx0aW50IHJldDtcXG4zODMxOlxcdFxcbjM4MzI6XFx0XFx0aWYgKHVubGlrZWx5KGZsYWdzIHx8IG5ld19sZW4gXFx1MDAzZSBtYXhfbGVuIHx8IG5ld19sZW4gXFx1MDAzYyBtaW5fbGVuKSlcXG4zODMzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0aWYgKHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbilcXG4zODM1OlxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMzgzNjpcXHRcXG4zODM3OlxcdFxcdC8qIFRoZSBiYXNpYyBpZGVhIG9mIHRoaXMgaGVscGVyIGlzIHRoYXQgaXQncyBwZXJmb3JtaW5nIHRoZVxcbjM4Mzg6XFx0XFx0ICogbmVlZGVkIHdvcmsgdG8gZWl0aGVyIGdyb3cgb3IgdHJpbSBhbiBza2IsIGFuZCBlQlBGIHByb2dyYW1cXG4zODM5OlxcdFxcdCAqIHJld3JpdGVzIHRoZSByZXN0IHZpYSBoZWxwZXJzIGxpa2UgYnBmX3NrYl9zdG9yZV9ieXRlcygpLFxcbjM4NDA6XFx0XFx0ICogYnBmX2xYX2NzdW1fcmVwbGFjZSgpIGFuZCBvdGhlcnMgcmF0aGVyIHRoYW4gcGFzc2luZyBhIHJhd1xcbjM4NDE6XFx0XFx0ICogYnVmZmVyIGhlcmUuIFRoaXMgb25lIGlzIGEgc2xvdyBwYXRoIGhlbHBlciBhbmQgaW50ZW5kZWRcXG4zODQyOlxcdFxcdCAqIGZvciByZXBsaWVzIHdpdGggY29udHJvbCBtZXNzYWdlcy5cXG4zODQzOlxcdFxcdCAqXFxuMzg0NDpcXHRcXHQgKiBMaWtlIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvKCksIHdlIHdhbnQgdG8ga2VlcCB0aGlzIHJhdGhlclxcbjM4NDU6XFx0XFx0ICogbWluaW1hbCBhbmQgd2l0aG91dCBwcm90b2NvbCBzcGVjaWZpY3Mgc28gdGhhdCB3ZSBhcmUgYWJsZVxcbjM4NDY6XFx0XFx0ICogdG8gc2VwYXJhdGUgY29uY2VybnMgYXMgaW4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5XFxuMzg0NzpcXHRcXHQgKiBiZSB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGJ1ZmZlcnMuXFxuMzg0ODpcXHRcXHQgKlxcbjM4NDk6XFx0XFx0ICogSXQncyByZWFsbHkgZXhwZWN0ZWQgdG8gYmUgYSBzbG93IHBhdGggb3BlcmF0aW9uIGhlcmUgZm9yXFxuMzg1MDpcXHRcXHQgKiBjb250cm9sIG1lc3NhZ2UgcmVwbGllcywgc28gd2UncmUgaW1wbGljaXRseSBsaW5lYXJpemluZyxcXG4zODUxOlxcdFxcdCAqIHVuY2xvbmluZyBhbmQgZHJvcCBvZmZsb2FkcyBmcm9tIHRoZSBza2IgYnkgdGhpcy5cXG4zODUyOlxcdFxcdCAqL1xcbjM4NTM6XFx0XFx0cmV0ID0gX19icGZfdHJ5X21ha2Vfd3JpdGFibGUoc2tiLCBza2ItXFx1MDAzZWxlbik7XFxuMzg1NDpcXHRcXHRpZiAoIXJldCkge1xcbjM4NTU6XFx0XFx0XFx0aWYgKG5ld19sZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4zODU2OlxcdFxcdFxcdFxcdHJldCA9IGJwZl9za2JfZ3Jvd19yY3N1bShza2IsIG5ld19sZW4pO1xcbjM4NTc6XFx0XFx0XFx0ZWxzZSBpZiAobmV3X2xlbiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKVxcbjM4NTg6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzg1OTpcXHRcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBza2JfaXNfZ3NvKHNrYikpXFxuMzg2MDpcXHRcXHRcXHRcXHRza2JfZ3NvX3Jlc2V0KHNrYik7XFxuMzg2MTpcXHRcXHR9XFxuMzg2MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjM4NjM6XFx0fVxcbjM4NjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjI5LjYzMzIxMDY5NVoiLCJTZXEiOjc3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI4MjA4MjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgYnBmX3NrYl9ncm93X3Jjc3VtYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBicGZfc2tiX2dyb3dfcmNzdW1gLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQncyBzdGFydCBieSByZWNhbGxpbmcgd2hhdCBpdCdzICpzdXBwb3NlZCogdG8gZG8uIEl0J3MgYSBCUEYgaGVscGVyLCByaWdodD8gTGlrZWx5IGRlYWxpbmcgd2l0aCBleHRlbmRpbmcgYW4gU0tCIChTb2NrZXQgQnVmZmVyKSBhbmQgbWFuYWdpbmcgdGhlIGNoZWNrc3VtIHJlbGF0ZWQgdG8gdGhlIGV4dGVuc2lvbi4gVGhlIFwicmNzdW1cIiBwYXJ0IGltbWVkaWF0ZWx5IHBvaW50cyB0b3dhcmRzIHJlY29tcHV0aW5nIGNoZWNrc3Vtcywgd2hpY2ggaXMgY3JpdGljYWwgaW4gbmV0d29yayBwZXJmb3JtYW5jZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGlzIGNhbGxlZCDigJMgd2hhdCB0cmlnZ2VycyB0aGUgbmVlZCB0byBncm93IHRoZSBTS0IgYW5kLCBjb25zZXF1ZW50bHksIHJlY2FsY3VsYXRlIHRoZSBjaGVja3N1bS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzIG9yIG9wdGltaXphdGlvbnMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBJIHNob3VsZCBrZWVwIGluIG1pbmQgYXMgSSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmc/IEkga25vdyB0aGlzIGFyZWEgaW50aW1hdGVseSwgc28gSSdtIGxvb2tpbmcgZm9yIG51YW5jZS4uLiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgb3Igbm92ZWwgYXBwcm9hY2hlcyBpbiBpdHMgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzNTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjQxLjkxNTI5NjU4NVoiLCJTZXEiOjc4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4OTI2NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za2JfZ3Jvd19yY3N1bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0zNzg4PXN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4MDgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MzgwOTpzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG5uZXQvY29yZS9maWx0ZXIuYy0zODEwLXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM4MjU9c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg1NS1cXHRcXHRpZiAobmV3X2xlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM4NTY6XFx0XFx0XFx0cmV0ID0gYnBmX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxubmV0L2NvcmUvZmlsdGVyLmMtMzg1Ny1cXHRcXHRlbHNlIGlmIChuZXdfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjQyLjYwNDIyOTI1NVoiLCJTZXEiOjc5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzczOTU4MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYGJwZl9za2JfZ3Jvd19yY3N1bWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGJwZl9za2JfZ3Jvd19yY3N1bWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciBpdHMgY29udGV4dCB3aXRoaW4gdGhlIEJQRiBlY29zeXN0ZW0uIFRoaXMgZnVuY3Rpb24sIGdpdmVuIGl0cyBuYW1lLCBsaWtlbHkgaGFuZGxlcyB0aGUgY2hlY2tzdW0gdXBkYXRlIHdoZW4gYSBwYWNrZXQncyBTS0IgKFNvY2tldCBCdWZmZXIpIGlzIGdyb3duLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGNoZWNrbGlzdDogd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXM/IE1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgU0tCIGl0c2VsZj8gVGhlIG5lZWQgZm9yIGNhcmVmdWwgbWFuaXB1bGF0aW9uIG9mIHRoZSBjaGVja3N1bSBmaWVsZHMgd2l0aGluIHRoZSBoZWFkZXJzPyBBcmUgdGhlcmUgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zP1xuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBsYXJnZXIgY2hlY2tzdW0gb2ZmbG9hZCBwcm9jZXNzLCBhbmQgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbmNpZXMgdGhhdCBjb3VsZCBjcmVlcCBpbnRvIHRoZSBkYXRhLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGFsbCBuZWNlc3NhcnkgaGVhZGVyIHVwZGF0ZXMgaWYgdGhlIHBhY2tldCBzaXplIGNoYW5nZXMsIHNpbmNlIHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBjaGVja3N1bS4gSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgbWVtb3J5IHNhZmV0eSBhc3BlY3QsIGFuZCBhbnkgY2hlY2tzIGZvciBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3MgYXJlIGNyaXRpY2FsIHRvIHNlY3VyaXR5LiBJJ2xsIGJlIGV4cGVjdGluZyB0byBzZWUgYSBnb29kIGRlYWwgb2YgYml0d2lzZSBvcGVyYXRpb25zLCB3aGljaCBpcyBub3JtYWwgZm9yIHdvcmtpbmcgd2l0aCBjaGVja3N1bXMuIFRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgZnVuY3Rpb24gYWZmZWN0cyB0aGUgYGNzdW1fc3RhcnRgLCBgY3N1bV9vZmZzZXRgLCBhbmQgYGNzdW1fbGV2ZWxgIGZpZWxkcyBhcmUgb2YgaW1tZWRpYXRlIGludGVyZXN0LiBGaW5hbGx5LCBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBzaW5jZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMgY2FuIGJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBhbGdvcml0aG1pYyBlZmZpY2llbmN5LiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjcnVjaWFsIHBpZWNlIGluIGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgcGFja2V0cyB3aXRoaW4gYSBCUEYgcHJvZ3JhbSwgYW5kIEknbSBlYWdlciB0byBkaWcgaW4gYW5kIHNlZSB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg4OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjQ5Ljk3ODE5MTI3OVoiLCJTZXEiOjgwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwOSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgwOTpcXHRzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4zODEwOlxcdHtcXG4zODExOlxcdFxcdHVuc2lnbmVkIGludCBvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuMzgxMjpcXHRcXHRpbnQgcmV0O1xcbjM4MTM6XFx0XFxuMzgxNDpcXHRcXHRyZXQgPSBfX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzgxNTpcXHRcXHRpZiAoIXJldClcXG4zODE2OlxcdFxcdFxcdG1lbXNldChza2ItXFx1MDAzZWRhdGEgKyBvbGRfbGVuLCAwLCBuZXdfbGVuIC0gb2xkX2xlbik7XFxuMzgxNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjM4MTg6XFx0fVxcbjM4MTk6XFx0XFxuMzgyMDpcXHRzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4zODIxOlxcdHtcXG4zODIyOlxcdFxcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzgyMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjQ5Ljk3ODczMjQwOVoiLCJTZXEiOjgxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQwOTAzMjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWERQIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gaXQgc2VlbXMgYGJwZl9za2JfZ3Jvd19yY3N1bWAgKmRvZXMqIGluZGVlZCB6ZXJvIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IHdpdGggYG1lbXNldGAsIHNvIGFueSBCUEYtZ3Jvd24gU0tCIHdpbGwgaGF2ZSB6ZXJvZWQgdGFpbHJvb20uIFRoYXQncyBhIHJlbGllZi4gTm8gaW1tZWRpYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWthZ2UgdGhlcmUuXG5cbk5vdywgd2hhdCBhYm91dCBgc2tiX3B1dGA/IFRoYXQncyB0aGUgaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9uIHVzZWQgYnkgZHJpdmVycyBhbmQgdGhlIG5ldHdvcmsgc3RhY2suIFdoZW4gYHhkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgY3JlYXRlcyBhbiBTS0IsIHRoZSBjYWxsZXJzIEknbSBzZWVpbmcg4oCTIGB2ZXRoX3hkcF9yY3Zfc2tiYCwgYGNwdW1hcGAsIGFuZCB0aGUgbGlrZSDigJMgKmRvbid0KiBjYWxsIGBza2JfcHV0YCBvbiB0aGUgcmV0dXJuZWQgU0tCLiBUaGV5IGp1c3QgaGFuZCBpdCB1cCB0aGUgc3RhY2suIFRoZSBuZXR3b3JrIHN0YWNrIHByaW1hcmlseSBkZWFscyB3aXRoIHJlY2VpdmVkIHBhY2tldHMgYnkgdXNpbmcgYHBza2JfbWF5X3B1bGxgIG9yIGBza2JfcHVsbGAgdG8gcGFyc2UgaGVhZGVycy4gSWYgaGVhZGVycyBuZWVkIHRvIGJlIGFkZGVkLCBzdWNoIGFzIGZvciBmb3J3YXJkaW5nIG9yIGVuY2Fwc3VsYXRpb24sIHRoZSBzdGFjayBjYWxscyBgc2tiX3B1c2hgLCBhbmQgdGhhdCB1c2VzIHRoZSBhbHJlYWR5IGluaXRpYWxpemVkIGhlYWRyb29tICh0aGUgYHhkcGZgIHN0cnVjdCBhbmQgbWV0YWRhdGEgYXJlIGFscmVhZHkgemVyb2VkIG9yIGNvcGllZCkuIFNvIGBza2JfcHVzaGAgaXMgc2FmZS4gSWYgdGhlIHN0YWNrIG5lZWRzIHRvIGFkZCBhIHRyYWlsZXIsIGl0ICptaWdodCogdXNlIGBza2JfcHV0YCwgYnV0IHRoZW4gaXQgaW1tZWRpYXRlbHkgd3JpdGVzIHRoZSB0cmFpbGVyIGRhdGEgaW50byB0aGUgc3BhY2UgaXQgZ2V0cyBmcm9tIGBza2JfcHV0YC4gU28sIHRoYXQncyBzYWZlIHRvby5cblxuVGhlcmVmb3JlLCB0aGVyZSBpc24ndCBhY3R1YWxseSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSAqbGVhayogaGVyZS4gVGhlIGJ1Z3MgYXJlIHB1cmVseSByZWxhdGVkIHRvIG1lbW9yeSBjb3JydXB0aW9uOiBvdXQtb2YtYm91bmRzIHdyaXRlcyBhbmQgb3ZlcmxhcHBpbmcgZGF0YS4gS0FTQU4gaXMgdGhlIHRvb2wgZm9yIGNhdGNoaW5nIHRoZXNlIGJ1Z3MsIHdoaWNoIGlzIHBlcmZlY3QgZm9yIG15IG5lZWRzLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZSBiZWNhdXNlIHRoZXJlJ3Mgbm8gcmVhZCBvciBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5MZXQncyBicmVhayBkb3duIHRoZSByZWFzb25pbmcgZm9yIHRoZSBLTVNBTiBjYWxsOlxuXG4xLiAgVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgaW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWA6IEFuIGluY29ycmVjdCBzaXplIGNoZWNrIGFuZCBhbiBpbmNvcnJlY3QgaGVhZHJvb20gY2FsY3VsYXRpb24uXG4yLiAgVGhlIHNpemUgY2hlY2sgYWxsb3dlZCBwYWNrZXQgZGF0YSB0byBvdmVyd3JpdGUgdGhlIGBza2Jfc2hhcmVkX2luZm9gIHN0cnVjdC4gVGhpcyBsZWFkcyB0byBkYXRhIGNvcnJ1cHRpb24gaW4gZWl0aGVyIHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYgb3IgaW4gYHNrYl9zaGFyZWRfaW5mb2AuXG4zLiAgVGhlIGluY29ycmVjdCBoZWFkcm9vbSBjYWxjdWxhdGlvbiwgd2hpY2ggaW5jb3JyZWN0bHkgc2V0IGB4ZHBmLVx1MDAzZWhlYWRyb29tYCwgY2F1c2VkIGBidWlsZF9za2JfYXJvdW5kYCB0byBtaXNjYWxjdWxhdGUgd2hlcmUgdGhlIGJ1ZmZlciBzdGFydHMgd2hpY2ggcmVzdWx0ZWQgaW4gYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgd3JpdGluZyBgc2tiX3NoYXJlZF9pbmZvYCBvdXQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXG40LiAgVGhlc2UgYXJlIGJvdGggbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBhbmQgYXJlIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIG92ZXJsYXBwaW5nIGRhdGEuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuNS4gIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gIGFuZCBhbnkgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVlIHRvIGNvcnJ1cHRlZCBzdHJ1Y3R1cmVzLlxuNi4gIFRoZXJlJ3Mgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IgaXMgcmVhZCBvciBzZW50IHRvIHVzZXJzcGFjZS4gVGhlIHBhY2tldCBkYXRhIGlzIGluaXRpYWxpemVkLiBBbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgc3RhY2sgaXMgaW5pdGlhbGl6ZWQsIHN1Y2ggYXMgdGhyb3VnaCBgYnBmX3NrYl9ncm93X3Jjc3VtYC5cbjcuICBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IGp1c3RpZmllZCBiZWNhdXNlIEtBU0FOIGlzIHN1ZmZpY2llbnQuIEknbGwgbWFrZSB0aGUgZGVjaXNpb24gdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1NTYsIk91dHB1dFRva2VucyI6NDE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6Mjc6MDcuMzg3NzY4ODkxWiIsIlNlcSI6ODIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDpcXG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFxcdTAwM2UgUEFHRV9TSVpFYCBpbnN0ZWFkIG9mIGBcXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgKSB0aGF0IGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcmxhcCB3aXRoIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UuIFRoaXMgY2F1c2VzIHBhY2tldCBkYXRhIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGBza2Jfc2hhcmVkX2luZm9gIGluaXRpYWxpemF0aW9uLCBvciBgc2tiX3NoYXJlZF9pbmZvYCB0byBiZSBjb3JydXB0ZWQgYnkgcGFja2V0IG1vZGlmaWNhdGlvbnMuXFxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVxcdTAwM2VoZWFkcm9vbSA9IDBgIGluc3RlYWQgb2YgYG1ldGFzaXplYCkgdGhhdCBjYXVzZWQgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIG1pc2NhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVGhpcyBzaGlmdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgYnVmZmVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgdG8gd3JpdGUgYHNrYl9zaGFyZWRfaW5mb2Agb3V0LW9mLWJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXFxuXFxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIGBza2Jfc2hhcmVkX2luZm9gIChlLmcuLCBjb3JydXB0ZWQgYG5yX2ZyYWdzYCBsZWFkaW5nIHRvIE9PQiByZWFkcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQsIGFzIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDpcXG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFxcdTAwM2UgUEFHRV9TSVpFYCBpbnN0ZWFkIG9mIGBcXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgKSB0aGF0IGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcmxhcCB3aXRoIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UuIFRoaXMgY2F1c2VzIHBhY2tldCBkYXRhIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGBza2Jfc2hhcmVkX2luZm9gIGluaXRpYWxpemF0aW9uLCBvciBgc2tiX3NoYXJlZF9pbmZvYCB0byBiZSBjb3JydXB0ZWQgYnkgcGFja2V0IG1vZGlmaWNhdGlvbnMuXFxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVxcdTAwM2VoZWFkcm9vbSA9IDBgIGluc3RlYWQgb2YgYG1ldGFzaXplYCkgdGhhdCBjYXVzZWQgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIG1pc2NhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVGhpcyBzaGlmdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgYnVmZmVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgdG8gd3JpdGUgYHNrYl9zaGFyZWRfaW5mb2Agb3V0LW9mLWJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXFxuXFxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIGBza2Jfc2hhcmVkX2luZm9gIChlLmcuLCBjb3JydXB0ZWQgYG5yX2ZyYWdzYCBsZWFkaW5nIHRvIE9PQiByZWFkcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQsIGFzIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4njtf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 17:58:51 +0000 UTC FinishedAt: 2026-08-18 18:27:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c71bf113dfdf426bdaf106636f573ef87b6613a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c71bf113dfdf426bdaf106636f573ef87b6613a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "7e316e17-e50f-4fce-8d66-c805b7784e37" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xdp_convert_zc_to_xdp_frame" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWA6XG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFx1MDAzZSBQQUdFX1NJWkVgIGluc3RlYWQgb2YgYFx1MDAzZSBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCkgdGhhdCBhbGxvd2VkIHBhY2tldCBkYXRhIHRvIG92ZXJsYXAgd2l0aCB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0IHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlLiBUaGlzIGNhdXNlcyBwYWNrZXQgZGF0YSB0byBiZSBvdmVyd3JpdHRlbiBieSBgc2tiX3NoYXJlZF9pbmZvYCBpbml0aWFsaXphdGlvbiwgb3IgYHNrYl9zaGFyZWRfaW5mb2AgdG8gYmUgY29ycnVwdGVkIGJ5IHBhY2tldCBtb2RpZmljYXRpb25zLlxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVx1MDAzZWhlYWRyb29tID0gMGAgaW5zdGVhZCBvZiBgbWV0YXNpemVgKSB0aGF0IGNhdXNlZCBgYnVpbGRfc2tiX2Fyb3VuZGAgdG8gbWlzY2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLiBUaGlzIHNoaWZ0ZWQgdGhlIGxvZ2ljYWwgZW5kIG9mIHRoZSBidWZmZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgcGFnZSwgY2F1c2luZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCB0byB3cml0ZSBgc2tiX3NoYXJlZF9pbmZvYCBvdXQtb2YtYm91bmRzIG9mIHRoZSBhbGxvY2F0ZWQgcGFnZS5cblxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXG5cblN0YW5kYXJkIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFnZSwgYXMgd2VsbCBhcyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBhIGNvcnJ1cHRlZCBgc2tiX3NoYXJlZF9pbmZvYCAoZS5nLiwgY29ycnVwdGVkIGBucl9mcmFnc2AgbGVhZGluZyB0byBPT0IgcmVhZHMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLCBhcyBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFhEUCBsb2dpYyBmb3IgY29udmVydGluZyB6ZXJvLWNvcHkgWERQIGJ1ZmZlcnMgdG8gWERQIGZyYW1lcyAoYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWApLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX1hEUCBhbmQgWERQX1RYL1hEUF9SRURJUkVDVCBhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzVhM2RiMWFhZWIxNzA0NmE3OTliNjA1YWY3MjNjZThjZjk4YTA1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE4OjE5OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3hkcC5jIGIvbmV0L2NvcmUveGRwLmNcbmluZGV4IDk4OTBhMzA1ODRiYTcuLjRiYjk3NzkwYjE4OTEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS94ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUveGRwLmNcbkBAIC01ODUsNyAmIzQzOzU4NSw3IEBAIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcdFx0ICAgeGRwLVx1MDAzZWRhdGEgLSB4ZHAtXHUwMDNlZGF0YV9tZXRhO1xuIFx0dG90c2l6ZSA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhICYjNDM7IG1ldGFzaXplO1xuIFxuLVx0aWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSBcdTAwM2UgUEFHRV9TSVpFKVxuJiM0MztcdGlmIChzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cGFnZSA9IGRldl9hbGxvY19wYWdlKCk7XG5AQCAtNjAyLDcgJiM0Mzs2MDIsNyBAQCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gXG4gXHR4ZHBmLVx1MDAzZWRhdGEgPSBhZGRyICYjNDM7IG1ldGFzaXplO1xuIFx0eGRwZi1cdTAwM2VsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7XG4tXHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gMDtcbiYjNDM7XHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XG4gXHR4ZHBmLVx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XG4gXHR4ZHBmLVx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xuIFx0eGRwZi1cdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBYRFAgbG9naWMgZm9yIGNvbnZlcnRpbmcgemVyby1jb3B5IFhEUCBidWZmZXJzIHRvIFhEUCBmcmFtZXMgKGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgYW5kIFhEUF9UWC9YRFBfUkVESVJFQ1QgYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc1YTNkYjFhYWViMTcwNDZhNzk5YjYwNWFmNzIzY2U4Y2Y5OGEwNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxODoxOTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3hkcC5jIGIvbmV0L2NvcmUveGRwLmMKaW5kZXggOTg5MGEzMDU4NGJhNy4uNGJiOTc3OTBiMTg5MSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUveGRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUveGRwLmMKQEAgLTU4NSw3ICYjNDM7NTg1LDcgQEAgc3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCQkgICB4ZHAtJmd0O2RhdGEgLSB4ZHAtJmd0O2RhdGFfbWV0YTsKIAl0b3RzaXplID0geGRwLSZndDtkYXRhX2VuZCAtIHhkcC0mZ3Q7ZGF0YSAmIzQzOyBtZXRhc2l6ZTsKIAotCWlmIChzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgJmd0OyBQQUdFX1NJWkUpCiYjNDM7CWlmIChzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgJmd0OyBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpKQogCQlyZXR1cm4gTlVMTDsKIAogCXBhZ2UgPSBkZXZfYWxsb2NfcGFnZSgpOwpAQCAtNjAyLDcgJiM0Mzs2MDIsNyBAQCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApCiAKIAl4ZHBmLSZndDtkYXRhID0gYWRkciAmIzQzOyBtZXRhc2l6ZTsKIAl4ZHBmLSZndDtsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7Ci0JeGRwZi0mZ3Q7aGVhZHJvb20gPSAwOwomIzQzOwl4ZHBmLSZndDtoZWFkcm9vbSA9IG1ldGFzaXplOwogCXhkcGYtJmd0O21ldGFzaXplID0gbWV0YXNpemU7CiAJeGRwZi0mZ3Q7ZnJhbWVfc3ogPSBQQUdFX1NJWkU7CiAJeGRwZi0mZ3Q7bWVtX3R5cGUgPSBNRU1fVFlQRV9QQUdFX09SREVSMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIENvcmUgWERQIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9jb3JlL3hkcC5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGZ1bmN0aW9uLiBJJiMzOTttIHNlZWluZyB0d28ga2V5IGNoYW5nZXMuIEZpcnN0LCB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byBob3cgdGhlIHNpemUgY2hlY2sgaXMgcGVyZm9ybWVkLCByZXBsYWNpbmcgYFBBR0VfU0laRWAgd2l0aCBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuIFRoaXMgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhY2NvdW50aW5nIGZvciB0aGUgU0tCIG92ZXJoZWFkIG5vdywgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IGFsbG9jYXRpb24uIEl0JiMzOTtzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgd2hlbiBjcmVhdGluZyBYRFAgZnJhbWVzLiBTZWNvbmQsIGB4ZHBmLSZndDtoZWFkcm9vbWAgaXMgYmVpbmcgc2V0IHRvIGBtZXRhc2l6ZWAgaW5zdGVhZCBvZiAwLiBUaGF0JiMzOTtzIGEgc2hpZnQgaW4gaG93IHRoZSBoZWFkcm9vbSBpcyBtYW5hZ2VkOyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIG1heSBoYXZlIGJlZW4gYSBkZWZhdWx0IHplcm8gaGVhZHJvb20uCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aG9zZSB3ZXJlIGFwcHJvcHJpYXRlLCBhbmQgd2hhdCB0cmlnZ2VyZWQgdGhlIGNoYW5nZS4gSSBuZWVkIHRvIGRpdmUgaW50byBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBpdHNlbGYsIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGF0IGNvbnRleHQuIFRoaXMgaXMgY29yZSBYRFAgbG9naWMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGVmZmVjdHMgdGhlIHBhY2tldCBoYW5kbGluZyBmbG93LiBJcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBPciBtYXliZSBpdCYjMzk7cyBlbmFibGluZyBzb21lIG5ldyBmZWF0dXJlPyBJJiMzOTtsbCBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHBvc3NpYmx5IHRoZSBtYWlsaW5nIGxpc3QgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZXMuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9NTc0PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9hdHRhY2htZW50X3NldHVwKTtcbm5ldC9jb3JlL3hkcC5jLTU3NS1cbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQvY29yZS94ZHAuYy01Nzcte1xuLS1cbm5ldC9jb3JlL3hkcC5jLTYxMi19XG5uZXQvY29yZS94ZHAuYzo2MTM6RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKTtcbm5ldC9jb3JlL3hkcC5jLTYxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZnVuY3Rpb24gYmV0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IGFuZCB3aGVyZSBpdCYjMzk7cyBhY3R1YWxseSBiZWluZyAqdXNlZCouIFNpbXBseSByZWFkaW5nIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGdpdmVzIG1lIGNsdWVzLCBidXQgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgaXMgZ29pbmcgdG8gcHJvdmlkZSB0aGUgcmVhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aG9zZSBjYWxscyEgTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGltcG9ydGluZyB0aGF0IGd1eSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jPTYyPW1seDVlX3htaXRfeGRwX2J1ZmYoc3RydWN0IG1seDVlX3hkcHNxICpzcSwgc3RydWN0IG1seDVlX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMtODktXHRcdCAqIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIHRoZSB4ZHBfYnVmZiBzaG91bGRuJiMzOTt0IGJlIHJlY3ljbGVkLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jOjkwOlx0XHQgKiBhcyBpdCB3YXMgYWxyZWFkeSBkb25lIGluIHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy05MS1cdFx0ICovXG4tLVxuaW5jbHVkZS9uZXQveGRwLmg9Mzc4PXN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21femMoc3RydWN0IHhkcF9idWZmICp4ZHApO1xuaW5jbHVkZS9uZXQveGRwLmg6Mzc5OnN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCk7XG5pbmNsdWRlL25ldC94ZHAuaC0zODAtc3RydWN0IHNrX2J1ZmYgKl9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXG4tLVxuaW5jbHVkZS9uZXQveGRwLmg9NDMwPXN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuaW5jbHVkZS9uZXQveGRwLmgtNDM0LVx0aWYgKHhkcC1cdTAwM2VyeHEtXHUwMDNlbWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTClcbmluY2x1ZGUvbmV0L3hkcC5oOjQzNTpcdFx0cmV0dXJuIHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSh4ZHApO1xuaW5jbHVkZS9uZXQveGRwLmgtNDM2LVxuLS1cbm5ldC9jb3JlL3hkcC5jPTU3ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYXR0YWNobWVudF9zZXR1cCk7XG5uZXQvY29yZS94ZHAuYy01NzUtXG5uZXQvY29yZS94ZHAuYzo1NzY6c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L2NvcmUveGRwLmMtNTc3LXtcbi0tXG5uZXQvY29yZS94ZHAuYy02MTItfVxubmV0L2NvcmUveGRwLmM6NjEzOkVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XG5uZXQvY29yZS94ZHAuYy02MTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZWAqKgoKT2theSwgc28gSSBzZWUgdGhpcyBmdW5jdGlvbiwgYHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWVgLCBpcyBkZWZpbmVkIGFzIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBoZWF2aWx5IG9wdGltaXplZCBhbmQgc3BlY2lmaWMgdG8gYSBjZXJ0YWluIGNvbnRleHQgd2l0aGluIHRoZSBYRFAgZnJhbWV3b3JrLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGluIGBpbmNsdWRlL25ldC94ZHAuaGAgdGVsbHMgbWUgaXQmIzM5O3MgYSBjb3JlIFhEUCB1dGlsaXR5LiBUaGUgaW1wb3J0YW50IHRoaW5nIG5vdyBpcyB0byB1bmRlcnN0YW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIEJlaW5nIGBzdGF0aWMgaW5saW5lYCBtZWFucyBpdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGlzIGZpbGUsIG9yIGEgZmlsZSBpbmNsdWRlZCBieSB0aGUgY3VycmVudCBmaWxlLCBzbyB0aGVyZSBzaG91bGQgYmUgYSBsaW1pdGVkIG51bWJlciBvZiBwbGFjZXMgdG8gbG9vaywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vZW5hL2VuYV94ZHAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBlbmFfeGRwX2V4ZWN1dGUoc3RydWN0IGVuYV9yaW5nICpyeF9yaW5nLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vZW5hL2VuYV94ZHAuaC05NS1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL2VuYS9lbmFfeGRwLmg6OTY6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vZW5hL2VuYV94ZHAuaC05Ny1cdFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYz0zODY9c3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYy0zOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmM6MzkzOlx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYy0zOTQtXHRpZiAodW5saWtlbHkoIXhkcGYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYz00MDU9c3RhdGljIHN0cnVjdCBza19idWZmICphcV94ZHBfcnVuX3Byb2coc3RydWN0IGFxX25pY19zICphcV9uaWMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jLTQ0Mi1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jOjQ0MzpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYy00NDQtXHRcdGlmICh1bmxpa2VseSgheGRwZikpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTczMD1zdGF0aWMgYm9vbCB0c25lcF94ZHBfeG1pdF9iYWNrKHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy03MzQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjczNTpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtNzM2LVx0Ym9vbCB4bWl0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM9MjIxMj1zdGF0aWMgaW50IGRwYWFfYTA1MDM4NV93YV94ZHBmKHN0cnVjdCBkcGFhX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yMjc1LVx0LyogQ3JlYXRlIGFuIFhEUCBmcmFtZSBhcm91bmQgdGhlIG5ldyBidWZmZXIgaW4gYSBzaW1pbGFyIGZhc2hpb25cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM6MjI3NjpcdCAqIHRvIHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jLTIyNzctXHQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jPTI1OTE9c3RhdGljIHUzMiBkcGFhX3J1bl94ZHAoc3RydWN0IGRwYWFfcHJpdiAqcHJpdiwgc3RydWN0IHFtX2ZkICpmZCwgdm9pZCAqdmFkZHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNjQzLVx0XHR4ZHAuZnJhbWVfc3ogPSBEUEFBX0JQX1JBV19TSVpFO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYzoyNjQ0Olx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcdTAwMjZ4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNjQ1LVx0XHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jPTE0MT1zdGF0aWMgdm9pZCAqZnVuX3J1bl94ZHAoc3RydWN0IGZ1bmV0aF9yeHEgKnEsIHNrYl9mcmFnX3QgKmZyYWdzLCB2b2lkICpidWZfdmEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jLTE2Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguYzoxNjg6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFx1MDAyNnhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX3J4LmMtMTY5LVx0XHRpZiAoIXhkcGYgfHwgIWZ1bl94ZHBfdHgoeGRwX3EsIHhkcGYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jPTYwNT1zdGF0aWMgaW50IGd2ZV94ZHBfdHhfZHFvKHN0cnVjdCBndmVfcHJpdiAqcHJpdiwgc3RydWN0IGd2ZV9yeF9yaW5nICpyeCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYy02MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9yeF9kcW8uYzo2MTM6XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjE0LVx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmM9MjI0Nz1pbnQgaTQwZV94bWl0X3hkcF90eF9yaW5nKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMtMjI0OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jOjIyNDk6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYy0yMjUwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jPTI5NTY9aW50IGlnYl94ZHBfeG1pdF9iYWNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHhkcF9idWZmICp4ZHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYy0yOTU3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jOjI5NTg6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9tYWluLmMtMjk1OS1cdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmM9MjQ5MT1zdGF0aWMgaW50IGlnY194ZHBfeG1pdF9iYWNrKHN0cnVjdCBpZ2NfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHhkcF9idWZmICp4ZHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYy0yNDkyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jOjI0OTM6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMtMjQ5NC1cdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jPTI0MDA9c3RhdGljIGludCBpeGdiZV9ydW5feGRwKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0yNDIxLVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmM6MjQyMjpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYy0yNDIzLVx0XHRpZiAodW5saWtlbHkoIXhkcGYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jPTk3PXN0YXRpYyBpbnQgaXhnYmVfcnVuX3hkcF96YyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94c2suYy0xMjQtXHRjYXNlIFhEUF9UWDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jOjEyNTpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTEyNi1cdFx0aWYgKHVubGlrZWx5KCF4ZHBmKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jPTIxNzQ9bXZuZXRhX3hkcF94bWl0X2JhY2soc3RydWN0IG12bmV0YV9wb3J0ICpwcCwgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy0yMTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYzoyMTgzOlx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtMjE4NC1cdGlmICh1bmxpa2VseSgheGRwZikpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM9MzczMT1tdnBwMl94ZHBfeG1pdF9iYWNrKHN0cnVjdCBtdnBwMl9wb3J0ICpwb3J0LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy0zNzM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM6MzczODpcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyL212cHAyX21haW4uYy0zNzM5LVx0aWYgKHVubGlrZWx5KCF4ZHBmKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmM9MTQ4OD1zdGF0aWMgYm9vbCBvdHgyX3hkcF9yY3ZfcGt0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYy0xNTM1LVx0XHRjcS1cdTAwM2Vwb29sX3B0cnMmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jOjE1MzY6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFx1MDAyNnhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtMTUzNy1cdFx0cmV0dXJuIG90eDJfeGRwX3NxX2FwcGVuZF9wa3QocGZ2ZiwgeGRwZixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtMTU1OS1cdFx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jOjE1NjA6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFx1MDAyNnhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtMTU2MS1cdFx0eGRwX3JldHVybl9mcmFtZSh4ZHBmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTIxMzc9c3RhdGljIHUzMiBtdGtfeGRwX3J1bihzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgbXRrX3J4X3JpbmcgKnJpbmcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0yMTY1LVx0Y2FzZSBYRFBfVFg6IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MjE2NjpcdFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMjE2Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM9NjI9bWx4NWVfeG1pdF94ZHBfYnVmZihzdHJ1Y3QgbWx4NWVfeGRwc3EgKnNxLCBzdHJ1Y3QgbWx4NWVfcnEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy03MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYzo3MjpcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMtNzMtXHRpZiAodW5saWtlbHkoIXhkcGYpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy0xMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM6MTI2Olx0LyogRHJpdmVyIGFzc3VtZXMgdGhhdCB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lIHJldHVybnMgYW4geGRwX2ZyYW1lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMtMTI3LVx0ICogdGhhdCBwb2ludHMgdG8gdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBhcyB0aGUgb3JpZ2luYWwgeGRwX2J1ZmYuIEl0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jPTQ3MD1zdGF0aWMgYm9vbCBpb25pY19ydW5feGRwKHN0cnVjdCBpb25pY19yeF9zdGF0cyAqc3RhdHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jLTU0Ny1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jOjU0ODpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoXHUwMDI2eGRwX2J1Zik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY190eHJ4LmMtNTQ5LVx0XHRpZiAoIXhkcGYpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvcnguYz0yNDk9c3RhdGljIGJvb2wgZWZ4X2RvX3hkcChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3J4LmMtMzA5LVx0XHQvKiBCdWZmZXIgb3duZXJzaGlwIHBhc3NlcyB0byB0eCBvbiBzdWNjZXNzLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3J4LmM6MzEwOlx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcdTAwMjZ4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3J4LmMtMzExLVx0XHRlcnIgPSBlZnhfeGRwX3R4X2J1ZmZlcnMoZWZ4LCAxLCBcdTAwMjZ4ZHBmLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvcnguYz0yNTE9c3RhdGljIGJvb2wgZWZ4X2RvX3hkcChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmMtMzExLVx0XHQvKiBCdWZmZXIgb3duZXJzaGlwIHBhc3NlcyB0byB0eCBvbiBzdWNjZXNzLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmM6MzEyOlx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcdTAwMjZ4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmMtMzEzLVx0XHRlcnIgPSBlZnhfc2llbmFfeGRwX3R4X2J1ZmZlcnMoZWZ4LCAxLCBcdTAwMjZ4ZHBmLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM9ODgyPXN0YXRpYyB1MzIgbmV0c2VjX3hkcF94bWl0X2JhY2soc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtODg0LVx0c3RydWN0IG5ldHNlY19kZXNjX3JpbmcgKnR4X3JpbmcgPSBcdTAwMjZwcml2LVx1MDAzZWRlc2NfcmluZ1tORVRTRUNfUklOR19UWF07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6ODg1Olx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy04ODYtXHR1MzIgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NTI1Nz1zdGF0aWMgaW50IHN0bW1hY194ZHBfeG1pdF9iYWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTUyNjAtXHRib29sIHpjID0gISEoeGRwLVx1MDAzZXJ4cS1cdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NTI2MTpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTUyNjItXHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNTI4MS1cdH0gZWxzZSBpZiAocmVzID09IFNUTU1BQ19YRFBfQ09OU1VNRUQgXHUwMDI2XHUwMDI2IHpjKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjUyODI6XHRcdC8qIHhkcCBoYXMgYmVlbiBmcmVlZCBieSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKCksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTUyODMtXHRcdCAqIG5vIG5lZWQgdG8gY2FsbCB4c2tfYnVmZl9mcmVlKCkgYWdhaW4sIHNvIHJldHVyblxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmM9MTE2OD1zdGF0aWMgaW50IGFtNjVfY3Bzd19ydW5feGRwKHN0cnVjdCBhbTY1X2Nwc3dfcnhfZmxvdyAqZmxvdyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTExOTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jOjEyMDA6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTEyMDEtXHRcdGlmICh1bmxpa2VseSgheGRwZikpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYz0xMzM2PWludCBjcHN3X3J1bl94ZHAoc3RydWN0IGNwc3dfcHJpdiAqcHJpdiwgaW50IGNoLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYy0xMzU4LVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYzoxMzU5Olx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19wcml2LmMtMTM2MC1cdFx0aWYgKHVubGlrZWx5KCF4ZHBmKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYz03Nzk9c3RhdGljIHUzMiBlbWFjX3J1bl94ZHAoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyICpsZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfY29tbW9uLmMtNzk2LVx0XHQvKiBTZW5kIHBhY2tldCB0byBUWCByaW5nIGZvciBpbW1lZGlhdGUgdHJhbnNtaXNzaW9uICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYzo3OTc6XHRcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYy03OTgtXHRcdGlmICh1bmxpa2VseSgheGRwZikpIHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMjUzPXN0YXRpYyBpbnQgdHVuX3hkcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNTQte1xuZHJpdmVycy9uZXQvdHVuLmM6MTI1NTpcdHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvdHVuLmMtMTI1Ni1cdGludCBueG1pdDtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9NjIyPXN0YXRpYyBpbnQgdmV0aF94ZHBfdHgoc3RydWN0IHZldGhfcnEgKnJxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjI0LXtcbmRyaXZlcnMvbmV0L3ZldGguYzo2MjU6XHRzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L3ZldGguYy02MjYtXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTE2ODU9c3RhdGljIGludCB2aXJ0bmV0X3hkcF9oYW5kbGVyKHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0xNzAyLVx0XHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzLVx1MDAzZXhkcF90eCk7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6MTcwMzpcdFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0xNzA0LVx0XHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XG4tLVxuZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX3hkcC5jPTI2MT12bXhuZXQzX3J1bl94ZHAoc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfeGRwLmMtMjg1LVx0Y2FzZSBYRFBfVFg6XG5kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfeGRwLmM6Mjg2Olx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX3hkcC5jLTI4Ny1cdFx0aWYgKHVubGlrZWx5KCF4ZHBmIHx8XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmM9OTY3PXN0YXRpYyB1MzIgeGVubmV0X3J1bl94ZHAoc3RydWN0IG5ldGZyb250X3F1ZXVlICpxdWV1ZSwgc3RydWN0IHBhZ2UgKnBkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jLTk4My1cdGNhc2UgWERQX1RYOlxuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmM6OTg0Olx0XHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMtOTg1LVx0XHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XG4tLVxuaW5jbHVkZS9uZXQveGRwLmg9NDI5PXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbmV0L3hkcC5oOjQzMDpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuaW5jbHVkZS9uZXQveGRwLmgtNDMxLXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NTE5PWludCB4ZHBfZG9fcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDUyNy1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1Mjg6XHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfZnJhbWUocmksIGRldiwgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApLFxubmV0L2NvcmUvZmlsdGVyLmMtNDUyOS1cdFx0XHRcdCAgICAgICB4ZHBfcHJvZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRFAgWmVyby1Db3B5IEZyYW1lIENvbnZlcnNpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc3BlY2lmaWMgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCBmaXggaW4gdGhlIFhEUCB6ZXJvLWNvcHkgcGF0aC4gSXQmIzM5O3MgdHJpZ2dlcmVkIHdoZW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZ2V0cyBjYWxsZWQsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBtZW1vcnkgdHlwZSBpcyBYU0sgYnVmZiBwb29sIGFuZCB3ZSYjMzk7cmUgdXNpbmcgemVyby1jb3B5IEFGX1hEUCwgbGlrZWx5IHZpYSBYRFBfVFggb3IgWERQX1JFRElSRUNUIGFjdGlvbnMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGZpeGluZyB0aGUgYHhkcGYtJmd0O2hlYWRyb29tYCBhc3NpZ25tZW50IOKAkyBpdCB3YXMgd3JvbmdseSBzZXQgdG8gemVybyBhbmQgbmVlZHMgdG8gYmUgc2V0IHRvIGBtZXRhc2l6ZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgc2l6ZSBjaGVjayB0byB1dGlsaXplIGBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYC4KCkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgaXMgYSBjaGFuZ2UgcmlnaHQgaW4gdGhlIFhEUCBjb3JlLiBTbyB0aGlzIGZpeCBjb3VsZCBiZSBpbXBvcnRhbnQsIGV2ZW4gbW9yZSBzbyBiZWNhdXNlIFhEUCBpcyB3aWRlbHkgdXNlZCBpbiB2aXJ0dWFsaXplZCBzZXR1cHMg4oCTIHZldGgsIHR1biwgdmlydGlvX25ldCBhcmUgYWxsIHJlbGV2YW50IHRhcmdldHMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gdGhlIGNvbnZlcnNpb24gZnJvbSB6ZXJvLWNvcHkgYnVmZmVycyB0byBYRFAgZnJhbWVzIGlzIGEgcHJldHR5IGxvdy1sZXZlbCBwb2ludCwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0aGF0IGl0JiMzOTtzIGNvcnJlY3QuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgaW4gYG5ldC9jb3JlL3hkcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9NTc0PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9hdHRhY2htZW50X3NldHVwKTtcbm5ldC9jb3JlL3hkcC5jLTU3NS1cbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQvY29yZS94ZHAuYy01Nzcte1xuLS1cbm5ldC9jb3JlL3hkcC5jLTYxMi19XG5uZXQvY29yZS94ZHAuYzo2MTM6RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKTtcbm5ldC9jb3JlL3hkcC5jLTYxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4KCioqSW52ZXN0aWdhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgb3Igbm90IGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmb3IgZnV6emluZy4gR29vZCwgaXQgaXMgZXhwb3J0ZWQuIE5vdywgc2luY2UgdGhlcmUmIzM5O3MgYSBwYXRjaCB0aGF0IHRhcmdldHMgdGhpcyBmdW5jdGlvbiwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UsIHNvIEkmIzM5O2xsIHNjYW4gYG5ldC9jb3JlL3hkcC5jYCB0byBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBvciBjYWxsIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLiBVbmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS94ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTc2Olx0c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIDU3NzpcdHtcbiA1Nzg6XHRcdHVuc2lnbmVkIGludCBtZXRhc2l6ZSwgdG90c2l6ZTtcbiA1Nzk6XHRcdHZvaWQgKmFkZHIsICpkYXRhX3RvX2NvcHk7XG4gNTgwOlx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmO1xuIDU4MTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gNTgyOlx0XG4gNTgzOlx0XHQvKiBDbG9uZSBpbnRvIGEgTUVNX1RZUEVfUEFHRV9PUkRFUjAgeGRwX2ZyYW1lLiAqL1xuIDU4NDpcdFx0bWV0YXNpemUgPSB4ZHBfZGF0YV9tZXRhX3Vuc3VwcG9ydGVkKHhkcCkgPyAwIDpcbiA1ODU6XHRcdFx0ICAgeGRwLVx1MDAzZWRhdGEgLSB4ZHAtXHUwMDNlZGF0YV9tZXRhO1xuIDU4NjpcdFx0dG90c2l6ZSA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhICYjNDM7IG1ldGFzaXplO1xuIDU4NzpcdFxuIDU4ODpcdFx0aWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcbiA1ODk6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTkwOlx0XG4gNTkxOlx0XHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcbiA1OTI6XHRcdGlmICghcGFnZSlcbiA1OTM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTk0Olx0XG4gNTk1Olx0XHRhZGRyID0gcGFnZV90b192aXJ0KHBhZ2UpO1xuIDU5NjpcdFx0eGRwZiA9IGFkZHI7XG4gNTk3Olx0XHRtZW1zZXQoeGRwZiwgMCwgc2l6ZW9mKCp4ZHBmKSk7XG4gNTk4Olx0XG4gNTk5Olx0XHRhZGRyICYjNDM7PSBzaXplb2YoKnhkcGYpO1xuIDYwMDpcdFx0ZGF0YV90b19jb3B5ID0gbWV0YXNpemUgPyB4ZHAtXHUwMDNlZGF0YV9tZXRhIDogeGRwLVx1MDAzZWRhdGE7XG4gNjAxOlx0XHRtZW1jcHkoYWRkciwgZGF0YV90b19jb3B5LCB0b3RzaXplKTtcbiA2MDI6XHRcbiA2MDM6XHRcdHhkcGYtXHUwMDNlZGF0YSA9IGFkZHIgJiM0MzsgbWV0YXNpemU7XG4gNjA0Olx0XHR4ZHBmLVx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZTtcbiA2MDU6XHRcdHhkcGYtXHUwMDNlaGVhZHJvb20gPSBtZXRhc2l6ZTtcbiA2MDY6XHRcdHhkcGYtXHUwMDNlbWV0YXNpemUgPSBtZXRhc2l6ZTtcbiA2MDc6XHRcdHhkcGYtXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XG4gNjA4Olx0XHR4ZHBmLVx1MDAzZW1lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9PUkRFUjA7XG4gNjA5Olx0XG4gNjEwOlx0XHR4c2tfYnVmZl9mcmVlKHhkcCk7XG4gNjExOlx0XHRyZXR1cm4geGRwZjtcbiA2MTI6XHR9XG4gNjEzOlx0RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKTtcbiA2MTQ6XHRcbiA2MTU6XHQvKiBVc2VkIGJ5IFhEUF9XQVJOIG1hY3JvLCB0byBhdm9pZCBpbmxpbmluZyBXQVJOKCkgaW4gZmFzdC1wYXRoICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBYRFAgc3RhY2suIEFuZCwgeWVhaCwgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgcmVhbGx5IHN0YW5kcyBvdXQgYXMgYSBwcmltZSB0YXJnZXQuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBYRFAgZnJhbWV3b3JrLCBzbyBidWdzIGhlcmUgY291bGQgaGF2ZSBwcmV0dHkgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLgoKTXkgZm9jdXMgcmlnaHQgbm93IGlzIGRlZmluaXRlbHkgb24gdGhhdCBzcGVjaWZpYyBzeW1ib2wuIEkgd2FudCB0byBidWlsZCBhIGZ1enppbmcgc2V0dXAgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBpdC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyByZWxhdGVkIHRvIHplcm8tY29weSB3aXRoIEFGX1hEUCwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYEJQRl9TWVNDQUxMYCBhbmQsIGNydWNpYWxseSwgYFhEUF9TT0NLRVRTYCB0byBhbGxvdyBmdXp6aW5nIG9mIHRoZSB6ZXJvLWNvcHkgcGF0aC4gSSBzaG91bGQgcHJvYmFibHkganVzdCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB0byBjb25maXJtIHRoYXQgYFhEUF9TT0NLRVRTYCBpcyBpbmRlZWQgZW5hYmxlZCB3aGVuIEkgZXhwZWN0IGl0IHRvIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWERQX1NPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYFhEUF9TT0NLRVRTYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGxhbmRzY2FwZSBzdXJyb3VuZGluZyBgWERQX1NPQ0tFVFNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGhhcyBhbnkgY3J1Y2lhbCBkZXBlbmRlbmNpZXMg4oCTIGVpdGhlciBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgb3IgbWF5YmUgZXZlbiB1c2Vyc3BhY2UgbGlicmFyaWVzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB3aGF0IGl0IGVuYWJsZXMgYW5kIGFueSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb3IgY2F2ZWF0cyBhc3NvY2lhdGVkIHdpdGggaXRzIHVzZS4gV2hhdCBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBoaWRkZW4gZ290Y2hhcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIGRlcGxveWluZyBzb21ldGhpbmcgdGhhdCB1c2VzIGl0IGluIHByb2R1Y3Rpb24/IExldCYjMzk7cyB0cmFjZSBpdCBiYWNrIGFuZCBleHBvc2UgdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBYRFBfU09DS0VUU1xuICAgMzpcdFx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXG4gICA4Olx0XHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xuICAxMzpcdFx0ZGVmYXVsdCBuXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDE2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTc3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYRFBfU09DS0VUUyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYFhEUF9TT0NLRVRTYCBoZXJlLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCBoaW5nZXMgb24gYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyByZWxhdGlvbnNoaXAsIGFuZCBJIHdvbmRlciB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIGxpbmtlZCB0byB0aGlzIGZlYXR1cmUuIExldCBtZSBzdGFydCBieSBsb29raW5nIGFyb3VuZC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXNpZGUgaW4gYG5ldC9jb3JlL3hkcC5jYC4gTm93LCBhIGtleSBxdWVzdGlvbiBwb3BzIHVwOiBpcyB0aGUgY29kZSB3aXRoaW4gYG5ldC9jb3JlL3hkcC5jYCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgdW5jb25kaXRpb25hbGx5LCBvciBpcyB0aGVyZSBhIGNvbmRpdGlvbmFsIGNvbXBpbGUgb3B0aW9uIGF0IHBsYXkgaGVyZT8gSSBuZWVkIHRvIGtub3cgdGhlIGJ1aWxkIGJlaGF2aW9yIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG4tLVxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTU6XHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE2LVx0XHRcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gZ3NvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTkKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgWERQIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYHhkcC5vYCBpcyBiZWluZyBjb21waWxlZCByZWdhcmRsZXNzIOKAkyBnb29kIHRvIGtub3csIHRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSByZWFsIG1lYXQgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAuIE5vdywgSSByZWNhbGwgdGhhdCBmdW5jdGlvbiBiZWluZyB1c2VkIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgeGRwLSZndDtyeHEtJmd0O21lbS50eXBlID09IE1FTV9UWVBFX1hTS19CVUZGX1BPT0xgLCB3aGljaCByaW5ncyBhbGFybSBiZWxscyBmb3IgQUZfWERQIHplcm8tY29weSBzY2VuYXJpb3MuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggemVyby1jb3B5LCBlbmFibGluZyBgWERQX1NPQ0tFVFNgIGZvciB0aGlzIGNvbmZpZyBtYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgb2YgY291cnNlLCBnaXZlbiB0aGF0IGl0IG1lbnRpb25zIFhEUCBwcm9ncmFtcywgd2Ugd2lsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFzIGEgY29uZmlndXJhdGlvbi4KCkxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIOKAkyBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTm9wZSwgaXQgbG9va3MgbGlrZSBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBpcyB0aGUgKm9ubHkqIHN5bWJvbCB0aGF0IHdlIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlIHBhdGNoIHNlZW1zIGhpZ2hseSBmb2N1c2VkLgoKVWx0aW1hdGVseSwgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY29yZSBYRFAgbG9naWMgdGhhdCBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIG9mIHplcm8tY29weSBYRFAgYnVmZmVycyBpbnRvIHN0YW5kYXJkIFhEUCBmcmFtZXMgd2l0aGluIHRoZSBrZXJuZWwuIFdlIGtub3cgdGhpcyBpcyByZWxldmFudCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBBRl9YRFAsIGluY2x1ZGluZyBYRFBfVFggYW5kIFhEUF9SRURJUkVDVCBhY3Rpb25zLCBtYWtpbmcgaXQgYSBjcml0aWNhbCBwb2ludCB0byBwcm9iZS4gR2l2ZW4gaXRzIGNlbnRyYWwgcm9sZSBpbiB6ZXJvLWNvcHkgWERQIHByb2Nlc3NpbmcgYW5kIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcgYW5kIHRoYXQgdGhlIHN5bWJvbCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBpcyBteSBwcmltYXJ5IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgWERQIGxvZ2ljIGZvciBjb252ZXJ0aW5nIHplcm8tY29weSBYRFAgYnVmZmVycyB0byBYRFAgZnJhbWVzIChgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCkuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIGFuZCBYRFBfVFgvWERQX1JFRElSRUNUIGFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFhEUCBsb2dpYyBmb3IgY29udmVydGluZyB6ZXJvLWNvcHkgWERQIGJ1ZmZlcnMgdG8gWERQIGZyYW1lcyAoYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWApLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX1hEUCBhbmQgWERQX1RYL1hEUF9SRURJUkVDVCBhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGluIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgOlxuMS4gQW4gaW5jb3JyZWN0IHNpemUgY2hlY2sgKGBcdTAwM2UgUEFHRV9TSVpFYCBpbnN0ZWFkIG9mIGBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWApIHRoYXQgYWxsb3dlZCBwYWNrZXQgZGF0YSB0byBvdmVybGFwIHdpdGggdGhlIGBza2Jfc2hhcmVkX2luZm9gIHN0cnVjdCBwbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGFnZS4gVGhpcyBjYXVzZXMgcGFja2V0IGRhdGEgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgYHNrYl9zaGFyZWRfaW5mb2AgaW5pdGlhbGl6YXRpb24sIG9yIGBza2Jfc2hhcmVkX2luZm9gIHRvIGJlIGNvcnJ1cHRlZCBieSBwYWNrZXQgbW9kaWZpY2F0aW9ucy5cbjIuIEFuIGluY29ycmVjdCBgaGVhZHJvb21gIGNhbGN1bGF0aW9uIChgeGRwZi1cdTAwM2VoZWFkcm9vbSA9IDBgIGluc3RlYWQgb2YgYG1ldGFzaXplYCkgdGhhdCBjYXVzZWQgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIG1pc2NhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVGhpcyBzaGlmdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgYnVmZmVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgdG8gd3JpdGUgYHNrYl9zaGFyZWRfaW5mb2Agb3V0LW9mLWJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXG5cbkJvdGggaXNzdWVzIGFyZSBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIG92ZXJsYXBwaW5nIGRhdGEpLiBUaGV5IGRvIG5vdCBpbnZvbHZlIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhY2tldCBkYXRhIGNvcGllZCBpbnRvIHRoZSBwYWdlIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgYW55IGhlYWRyb29tIG9yIHRhaWxyb29tIHVzZWQgYnkgdGhlIG5ldHdvcmsgc3RhY2sgaXMgZWl0aGVyIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgc3RhY2sgKGUuZy4sIGBicGZfc2tiX2dyb3dfcmNzdW1gIHplcm9lcyBuZXcgdGFpbHJvb20pLlxuXG5TdGFuZGFyZCBLQVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcyB3cml0ZSBvZiBgc2tiX3NoYXJlZF9pbmZvYCBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhZ2UsIGFzIHdlbGwgYXMgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgYHNrYl9zaGFyZWRfaW5mb2AgKGUuZy4sIGNvcnJ1cHRlZCBgbnJfZnJhZ3NgIGxlYWRpbmcgdG8gT09CIHJlYWRzKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZCwgYXMgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCB0aGVzZSBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NWEzZGIxYWFlYjE3MDQ2YTc5OWI2MDVhZjcyM2NlOGNmOThhMDU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTg6MTk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS94ZHAuYyBiL25ldC9jb3JlL3hkcC5jCmluZGV4IDk4OTBhMzA1ODRiYTcuLjRiYjk3NzkwYjE4OTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3hkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3hkcC5jCkBAIC01ODUsNyAmIzQzOzU4NSw3IEBAIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkKIAkJICAgeGRwLSZndDtkYXRhIC0geGRwLSZndDtkYXRhX21ldGE7CiAJdG90c2l6ZSA9IHhkcC0mZ3Q7ZGF0YV9lbmQgLSB4ZHAtJmd0O2RhdGEgJiM0MzsgbWV0YXNpemU7CiAKLQlpZiAoc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplICZndDsgUEFHRV9TSVpFKQomIzQzOwlpZiAoc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplICZndDsgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTsKQEAgLTYwMiw3ICYjNDM7NjAyLDcgQEAgc3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQogCiAJeGRwZi0mZ3Q7ZGF0YSA9IGFkZHIgJiM0MzsgbWV0YXNpemU7CiAJeGRwZi0mZ3Q7bGVuID0gdG90c2l6ZSAtIG1ldGFzaXplOwotCXhkcGYtJmd0O2hlYWRyb29tID0gMDsKJiM0MzsJeGRwZi0mZ3Q7aGVhZHJvb20gPSBtZXRhc2l6ZTsKIAl4ZHBmLSZndDttZXRhc2l6ZSA9IG1ldGFzaXplOwogCXhkcGYtJmd0O2ZyYW1lX3N6ID0gUEFHRV9TSVpFOwogCXhkcGYtJmd0O21lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9PUkRFUjA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUGVyZm9ybWFuY2UgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIHdpdGhpbiBgbmV0L2NvcmUveGRwLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhleSYjMzk7dmUgdXBkYXRlZCBhIHNpemUgY2hlY2ssIHNwZWNpZmljYWxseSBhbHRlcmluZyBgaWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSAmZ3Q7IFBBR0VfU0laRSlgIHRvIGBpZiAoc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplICZndDsgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlgLiAgVGhhdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBhY2NvdW50aW5nIGZvciBzb21lIGFkZGl0aW9uYWwgb3ZlcmhlYWQgaW4gdGhlIGNhbGN1bGF0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIFNLQiwgYnV0IGxldCYjMzk7cyBzZWUgd2h5LiAgVGhleSBhbHNvIG1hZGUgYSBjaGFuZ2UgdG8gYHhkcGYtJmd0O2hlYWRyb29tYCwgc2V0dGluZyBpdCB0byBgbWV0YXNpemVgIGluc3RlYWQgb2YgMC4KCk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBkaWcgaW50byB0aGUgY29udGV4dC4gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeSBvZiB3aGF0IGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgICphY3R1YWxseSogZG9lcy4gUmlnaHQsIGl0JiMzOTtzIGFib3V0IGhhbmRsaW5nIHplcm8tY29weSBidWZmZXJzIGFuZCB0cmFuc2xhdGluZyB0aGVtIGludG8gWERQIGZyYW1lcywgYWxsb2NhdGluZyBhIHBhZ2UsIGNvcHlpbmcgZGF0YSwgYW5kIGNvbnN0cnVjdGluZyB0aGUgZnJhbWUuCgpOb3csIHRoYXQgYGhlYWRyb29tYCBjaGFuZ2UgcmVhbGx5IHByaWNrZWQgbXkgZWFycy4gVGhleSYjMzk7cmUgY2hhbmdpbmcgaXQgZnJvbSAwIHRvIGBtZXRhc2l6ZWAuICBUaGF04oCZcyB3aGVyZSBJIGdldCBjb25jZXJuZWQuICBDb3VsZCB0aGlzIGludHJvZHVjZSBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IElmIGBoZWFkcm9vbWAgaXMgdXNlZCB0byBpbmRleCBiYWNrd2FyZHMgZnJvbSB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgKmJlZm9yZSogdGhlIGFjdHVhbCBkYXRhIHNlY3Rpb24gYHhkcGYtJmd0O2RhdGFgLCB0aGVuIHNldHRpbmcgaXQgdG8gYSBub24temVybyB2YWx1ZSBsaWtlIGBtZXRhc2l6ZWAgY291bGQgZWFzaWx5IGxlYWQgdG8gcmVhZGluZyBkYXRhIHRoYXQgaGFzbiYjMzk7dCBiZWVuIGluaXRpYWxpemVkIHlldC4gV2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYGhlYWRyb29tYCB1c2FnZSwgYW5kIHNlZSBob3cgdGhpcyB2YWx1ZSBpcyBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9NTc0PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9hdHRhY2htZW50X3NldHVwKTtcbm5ldC9jb3JlL3hkcC5jLTU3NS1cbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQvY29yZS94ZHAuYy01Nzcte1xuLS1cbm5ldC9jb3JlL3hkcC5jLTYxMi19XG5uZXQvY29yZS94ZHAuYzo2MTM6RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKTtcbm5ldC9jb3JlL3hkcC5jLTYxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYW5kIHByb2Nlc3MgdGhpcy4gSSYjMzk7dmUgc2VlbiBhIGZldyBvZiB0aGVzZSwgc28gSSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byB6ZXJvLWNvcHkgKFpDKSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB0cmFuc2Zvcm1lZCB0byBmaXQgd2l0aGluIGFuIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpIGNvbnRleHQuIE15IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIHR5cGUgb2Ygb3BlcmF0aW9uIGlzIHVzdWFsbHkgcmVsYXRlZCB0byBlZmZpY2llbmN5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgaXMgaGFuZGxlZCwgd2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkIChsaWtlIHBvdGVudGlhbGx5IGB6Y19mcmFtZWAgYW5kIGB4ZHBfZnJhbWVgKSwgYW5kIHRoZSBjcml0aWNhbCBvcGVyYXRpb25zIGJlaW5nIHBlcmZvcm1lZC4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcGllcyBvciByZS1hbGxvY2F0aW9ucyB3aGljaCB3b3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gSXMgdGhlcmUgYW4gZWZmaWNpZW50IG1lY2hhbmlzbSBmb3IgcGFzc2luZyBkYXRhIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZSBvciBpcyBpdCB0YWtpbmcgcGxhY2UgaW4ga2VybmVsIHNwYWNlIHdpdGggdGhlIHRyYW5zZm9ybWF0aW9uPyBBcmUgdGhleSBlbnN1cmluZyBkYXRhIGludGVncml0eSB3aGlsZSBiZWluZyB6ZXJvLWNvcHksIGFzIHRoaXMgaXMgYW4gYXJlYSB0aGF0IG11c3QgYmUgYWRkcmVzc2VkIGZvciBhbnkgbGV2ZWwgb2YgcHJvZHVjdGlvbiB1c2FnZS4gRmluYWxseSwgbGV0JiMzOTtzIHNlZSBob3cgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3NjpcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiA1Nzc6XHR7XG4gNTc4Olx0XHR1bnNpZ25lZCBpbnQgbWV0YXNpemUsIHRvdHNpemU7XG4gNTc5Olx0XHR2b2lkICphZGRyLCAqZGF0YV90b19jb3B5O1xuIDU4MDpcdFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZjtcbiA1ODE6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIDU4MjpcdFxuIDU4MzpcdFx0LyogQ2xvbmUgaW50byBhIE1FTV9UWVBFX1BBR0VfT1JERVIwIHhkcF9mcmFtZS4gKi9cbiA1ODQ6XHRcdG1ldGFzaXplID0geGRwX2RhdGFfbWV0YV91bnN1cHBvcnRlZCh4ZHApID8gMCA6XG4gNTg1Olx0XHRcdCAgIHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbiA1ODY6XHRcdHRvdHNpemUgPSB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSAmIzQzOyBtZXRhc2l6ZTtcbiA1ODc6XHRcbiA1ODg6XHRcdGlmIChzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpXG4gNTg5Olx0XHRcdHJldHVybiBOVUxMO1xuIDU5MDpcdFxuIDU5MTpcdFx0cGFnZSA9IGRldl9hbGxvY19wYWdlKCk7XG4gNTkyOlx0XHRpZiAoIXBhZ2UpXG4gNTkzOlx0XHRcdHJldHVybiBOVUxMO1xuIDU5NDpcdFxuIDU5NTpcdFx0YWRkciA9IHBhZ2VfdG9fdmlydChwYWdlKTtcbiA1OTY6XHRcdHhkcGYgPSBhZGRyO1xuIDU5NzpcdFx0bWVtc2V0KHhkcGYsIDAsIHNpemVvZigqeGRwZikpO1xuIDU5ODpcdFxuIDU5OTpcdFx0YWRkciAmIzQzOz0gc2l6ZW9mKCp4ZHBmKTtcbiA2MDA6XHRcdGRhdGFfdG9fY29weSA9IG1ldGFzaXplID8geGRwLVx1MDAzZWRhdGFfbWV0YSA6IHhkcC1cdTAwM2VkYXRhO1xuIDYwMTpcdFx0bWVtY3B5KGFkZHIsIGRhdGFfdG9fY29weSwgdG90c2l6ZSk7XG4gNjAyOlx0XG4gNjAzOlx0XHR4ZHBmLVx1MDAzZWRhdGEgPSBhZGRyICYjNDM7IG1ldGFzaXplO1xuIDYwNDpcdFx0eGRwZi1cdTAwM2VsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7XG4gNjA1Olx0XHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XG4gNjA2Olx0XHR4ZHBmLVx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XG4gNjA3Olx0XHR4ZHBmLVx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xuIDYwODpcdFx0eGRwZi1cdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xuIDYwOTpcdFxuIDYxMDpcdFx0eHNrX2J1ZmZfZnJlZSh4ZHApO1xuIDYxMTpcdFx0cmV0dXJuIHhkcGY7XG4gNjEyOlx0fVxuIDYxMzpcdEVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XG4gNjE0Olx0XG4gNjE1Olx0LyogVXNlZCBieSBYRFBfV0FSTiBtYWNybywgdG8gYXZvaWQgaW5saW5pbmcgV0FSTigpIGluIGZhc3QtcGF0aCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTQzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFN0cnVjdHVyZSBQb3B1bGF0aW9uKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkmIzM5O20gYWxsb2NhdGluZyBhIG5ldyBwYWdlLCB3aGljaCBJJiMzOTttIGNhbGxpbmcgYHhkcGZgIGJlY2F1c2UgaXQmIzM5O3MgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZS4gVGhhdCYjMzk7cyBnb29kLCBzdGFuZGFyZCBwcmFjdGljZS4gSSB6ZXJvIG91dCB0aGUgZW50aXJlIHBhZ2Ug4oCTIGEgY2xlYW4gc2xhdGUuIFRoZW4sIEkmIzM5O20gY29weWluZyBkYXRhIGludG8gdGhpcyBhbGxvY2F0ZWQgbWVtb3J5LiBUaGUgY29weSBpcyBhIGJpdCBjb252b2x1dGVkLiBJJiMzOTttIHRha2luZyBgdG90c2l6ZWAgYnl0ZXMgZnJvbSBzb21ld2hlcmUgYW5kIG1vdmluZyB0aGVtIHRvIGFuIGFkZHJlc3MuIGB0b3RzaXplYCBpcyBgeGRwLSZndDtkYXRhX2VuZCAtIHhkcC0mZ3Q7ZGF0YSAmIzQzOyBtZXRhc2l6ZWAsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgYWJvdXQgbW92aW5nIGJvdGggbWV0YWRhdGEgYW5kIHBhY2tldCBkYXRhLiBUaGUgc291cmNlIG9mIHRoZSBjb3B5IGlzIGVpdGhlciBgeGRwLSZndDtkYXRhX21ldGFgIChpZiBgbWV0YXNpemVgIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvKSBvciBgeGRwLSZndDtkYXRhYCwgYXMgeW91IHdvdWxkIGV4cGVjdC4gU28sIEkgYW0gY29weWluZyB0aGUgbWV0YWRhdGEsIGFuZCB0aGVuIHRoZSBwYWNrZXQgZGF0YS4KClRoZSBhZGRyZXNzIHdoZXJlIEkgYW0gKmNvcHlpbmcqIGlzIGBhZGRyICYjNDM7IHNpemVvZigqeGRwZilgLCBzbyBpdCBzdGFydHMgKmFmdGVyKiB0aGUgYHhkcGZgIHN0cnVjdHVyZSBpdHNlbGYuIGB4ZHBmLSZndDtkYXRhYCBpcyB0aGVuIHNldCB0byB0aGUgbG9jYXRpb24gaW4gdGhlIHBhZ2UgYWZ0ZXIgdGhlIG1ldGFkYXRhLCBpLmUuLCBgYWRkciAmIzQzOyBtZXRhc2l6ZWAuIFRoZSBsZW5ndGggb2YgdGhlIHBhY2tldCAoYHhkcGYtJmd0O2xlbmApIGlzIHRoZW4gc2V0IHRvIHRoZSB0b3RhbCBzaXplIG1pbnVzIHRoZSBtZXRhZGF0YSBzaXplLiBTZWVtcyBsb2dpY2FsLCBzbyBmYXIuCgpOb3cgY29tZXMgdGhlIGludGVyZXN0aW5nIHBhcnQ6IGB4ZHBmLSZndDtoZWFkcm9vbWAuIFRoaXMgaXMgd2hlcmUgSSBoYXZlIHRvIHRoaW5rIG1vcmUgY2FyZWZ1bGx5LiBJdCYjMzk7cyBiZWluZyBzZXQgdG8gYG1ldGFzaXplYC4gVGhhdCYjMzk7c+KApiB1bmV4cGVjdGVkLiBgaGVhZHJvb21gIHVzdWFsbHkgcmVmZXJzIHRvIHRoZSBzcGFjZSBhdmFpbGFibGUgKmJlZm9yZSogdGhlIHBhY2tldCBkYXRhIHRvIHByZXBlbmQgaGVhZGVycy4gVXN1YWxseSwgeW91IHdvdWxkIHdhbnQgdGhpcyBzcGFjZSB0byBpbmNyZWFzZS4gSG93ZXZlciwgdGhpcyBkZWZpbml0aW9uIG9mIGBoZWFkcm9vbWAgbWVhbnMgdGhhdCBgeGRwZi0mZ3Q7ZGF0YSAtIGhlYWRyb29tYCBwb2ludHMgdG8gYGFkZHJgLCB3aGljaCBpbmRlZWQgY29udGFpbnMgdGhlIGNvcGllZCBtZXRhZGF0YS4gVGhlIGxvZ2ljIGNoZWNrcyBvdXQgLSB5b3Ugd291bGQgYWNjZXNzIHRoZSBtZXRhZGF0YSBieSBzdGFydGluZyBgaGVhZHJvb21gIGJ5dGVzIGJhY2suCgpCdXQgbm93IEkgc2VlIHRoZSBwcm9ibGVtLiBJZiBgaGVhZHJvb21gIGlzIGVxdWFsIHRvIGBtZXRhc2l6ZWAgYW5kIEkgdHJ5IHRvIHByZXBlbmQgYSBoZWFkZXIsIEkgd2lsbCAqb3ZlcndyaXRlKiB0aGUgbWV0YWRhdGEuIFRoYXTigJlzIGRlZmluaXRlbHkgbm90IGlkZWFsLiBUaGlzIG1lYW5zIHRoYXQgaWYgYGhlYWRyb29tYCBpcyBzZXQgdG8gYSBub24temVybyB2YWx1ZSwgeW91IGNhbuKAmXQgcHJlcGVuZCBhbnl0aGluZyB3aXRob3V0IGNvcnJ1cHRpbmcgdGhlIGV4aXN0aW5nIG1ldGFkYXRhLgoKU28sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgdGhpcyBtZWFuIGBoZWFkcm9vbWAgc2hvdWxkIGJlIHplcm8sIGVmZmVjdGl2ZWx5IGRpc2FsbG93aW5nIGhlYWRlciBwcmVwZW5kcz8gT3IsIGFtIEkgbWlzdW5kZXJzdGFuZGluZyB3aGF0IGBoZWFkcm9vbWAgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQ/CgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBXYWl0LCBsZXQmIzM5O3MgZ2V0IHRoaXMgcmlnaHQ6IGB4ZHBmLSZndDtoZWFkcm9vbWAgaXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgYHhkcGZgIHN0cnVjdCBhbmQgdGhlIGJlZ2lubmluZyBvZiBgeGRwZi0mZ3Q7ZGF0YWAuIFJpZ2h0PyBPa2F5LCB0aGF0JiMzOTtzIHdoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSAqdXNlcyogYHhkcGYtJmd0O2hlYWRyb29tYCB0byBiZSBzdXJlLiBJdCB3aWxsIG1ha2UgbW9yZSBzZW5zZSB0byBjaGVjayB0aGF0IGJlZm9yZSBJIG1ha2UgYW55IGp1ZGdlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hlYWRyb29tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9NTc2PXN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5uZXQvY29yZS94ZHAuYy02MDQtXHR4ZHBmLVx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZTtcbm5ldC9jb3JlL3hkcC5jOjYwNTpcdHhkcGYtXHUwMDNlaGVhZHJvb20gPSBtZXRhc2l6ZTtcbm5ldC9jb3JlL3hkcC5jLTYwNi1cdHhkcGYtXHUwMDNlbWV0YXNpemUgPSBtZXRhc2l6ZTtcbi0tXG5uZXQvY29yZS94ZHAuYz03OTQ9c3RydWN0IHNrX2J1ZmYgKl9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXG4tLVxubmV0L2NvcmUveGRwLmMtNzk4LVx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fZnJhbWUoeGRwZik7XG5uZXQvY29yZS94ZHAuYzo3OTk6XHR1bnNpZ25lZCBpbnQgaGVhZHJvb20sIGZyYW1lX3NpemU7XG5uZXQvY29yZS94ZHAuYy04MDAtXHR2b2lkICpoYXJkX3N0YXJ0O1xuLS1cbm5ldC9jb3JlL3hkcC5jLTgwNi1cbm5ldC9jb3JlL3hkcC5jOjgwNzpcdC8qIFBhcnQgb2YgaGVhZHJvb20gd2FzIHJlc2VydmVkIHRvIHhkcGYgKi9cbm5ldC9jb3JlL3hkcC5jOjgwODpcdGhlYWRyb29tID0gc2l6ZW9mKCp4ZHBmKSAmIzQzOyB4ZHBmLVx1MDAzZWhlYWRyb29tO1xubmV0L2NvcmUveGRwLmMtODA5LVxuLS1cbm5ldC9jb3JlL3hkcC5jLTgxNC1cbm5ldC9jb3JlL3hkcC5jOjgxNTpcdGhhcmRfc3RhcnQgPSB4ZHBmLVx1MDAzZWRhdGEgLSBoZWFkcm9vbTtcbm5ldC9jb3JlL3hkcC5jLTgxNi1cdHNrYiA9IGJ1aWxkX3NrYl9hcm91bmQoc2tiLCBoYXJkX3N0YXJ0LCBmcmFtZV9zaXplKTtcbi0tXG5uZXQvY29yZS94ZHAuYy04MTktXG5uZXQvY29yZS94ZHAuYzo4MjA6XHRza2JfcmVzZXJ2ZShza2IsIGhlYWRyb29tKTtcbm5ldC9jb3JlL3hkcC5jLTgyMS1cdF9fc2tiX3B1dChza2IsIHhkcGYtXHUwMDNlbGVuKTtcbi0tXG5uZXQvY29yZS94ZHAuYz04NjQ9c3RydWN0IHhkcF9mcmFtZSAqeGRwZl9jbG9uZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKVxubmV0L2NvcmUveGRwLmMtODY1LXtcbm5ldC9jb3JlL3hkcC5jOjg2NjpcdHVuc2lnbmVkIGludCBoZWFkcm9vbSwgdG90YWxzaXplO1xubmV0L2NvcmUveGRwLmMtODY3LVx0c3RydWN0IHhkcF9mcmFtZSAqbnhkcGY7XG4tLVxubmV0L2NvcmUveGRwLmMtODcwLVxubmV0L2NvcmUveGRwLmM6ODcxOlx0aGVhZHJvb20gPSB4ZHBmLVx1MDAzZWhlYWRyb29tICYjNDM7IHNpemVvZigqeGRwZik7XG5uZXQvY29yZS94ZHAuYzo4NzI6XHR0b3RhbHNpemUgPSBoZWFkcm9vbSAmIzQzOyB4ZHBmLVx1MDAzZWxlbjtcbm5ldC9jb3JlL3hkcC5jLTg3My1cbi0tXG5uZXQvY29yZS94ZHAuYy04ODMtXHRueGRwZiA9IGFkZHI7XG5uZXQvY29yZS94ZHAuYzo4ODQ6XHRueGRwZi1cdTAwM2VkYXRhID0gYWRkciAmIzQzOyBoZWFkcm9vbTtcbm5ldC9jb3JlL3hkcC5jLTg4NS1cdG54ZHBmLVx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuZGVyc3RhbmRpbmcgWERQIEZyYW1lIEhlYWRyb29tKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBYRFAgZnJhbWUgc3RydWN0dXJlIGFuZCB0cnlpbmcgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWVtb3J5IGxheW91dCwgc3BlY2lmaWNhbGx5IHRoZSBgaGVhZHJvb21gLiAgSSBzZWUgaG93IGluIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLCBgaGVhZHJvb21gIGlzbiYjMzk7dCBxdWl0ZSBhcyBzdHJhaWdodGZvcndhcmQgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSXQmIzM5O3MgdGhlIHNwYWNlIGJldHdlZW4gYHhkcGZgIGFuZCBgeGRwZi0mZ3Q7ZGF0YWAuCgpJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGUgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZnVuY3Rpb24uIGBhZGRyYCBpcyBjYWxjdWxhdGVkIGFzIGBwYWdlX3RvX3ZpcnQocGFnZSkgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAsIHdoZXJlIHRoZSBwYWdlIGlzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGUgYHhkcGZgIHN0cnVjdHVyZSBpcyBwbGFjZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZSwgc28gYGFkZHJgIHBvaW50cyBqdXN0IGFmdGVyIGl0LiBUaGVuLCB0aGUgYHhkcGYtJmd0O2RhdGFgIHBvaW50ZXIgaXMgc2V0IHRvIGBhZGRyICYjNDM7IG1ldGFzaXplYCwgd2hpY2ggaXMgd2hlcmUgdGhlIHBhY2tldCBkYXRhIGJlZ2lucywgcG90ZW50aWFsbHkgb2Zmc2V0IGJ5IG1ldGFkYXRhLiBGaW5hbGx5LCBgeGRwZi0mZ3Q7aGVhZHJvb21gIGlzIHNldCB0byBgbWV0YXNpemVgLgoKTm93LCB0aGUgY29ubmVjdGlvbiBpcyBtYWRlIGluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAuIEkgc2VlIHRoZSBjYWxjdWxhdGlvbjogYGhlYWRyb29tID0gc2l6ZW9mKCp4ZHBmKSAmIzQzOyB4ZHBmLSZndDtoZWFkcm9vbWAuICBTaW5jZSBgeGRwZi0mZ3Q7aGVhZHJvb21gICppcyogYG1ldGFzaXplYCwgdGhlIHRvdGFsIGBoZWFkcm9vbWAgaXMgYHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemVgLiBUaGUgYGhhcmRfc3RhcnRgIGlzIGNhbGN1bGF0ZWQgYXMgYHhkcGYtJmd0O2RhdGEgLSBoZWFkcm9vbWAuIEkgY2FuIG5vdyBzdWIgaW4gdGhlIGRlZmluaXRpb24gb2YgdGhvc2UgdGVybXMgdG8geWllbGQgYGhhcmRfc3RhcnQgPSBwYWdlX3RvX3ZpcnQocGFnZSlgLiBTbyBgaGFyZF9zdGFydGAgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZS4KCkJ1dCwgaWYgSSBoYWQgYHhkcGYtJmd0O2hlYWRyb29tYCBhcyAwLCB0aGVuIHRoZSBjYWxjdWxhdGlvbiBvZiBgaGVhZHJvb21gIHdvdWxkIGNoYW5nZSB0byBgc2l6ZW9mKCp4ZHBmKWAuICBgaGFyZF9zdGFydGAgd291bGQgYmUgYHBhZ2VfdG9fdmlydChwYWdlKSAmIzQzOyBtZXRhc2l6ZWAuCgpOb3csIHRoZSByZWFsIGlzc3VlIGJlY29tZXMgYXBwYXJlbnQuIGBidWlsZF9za2JfYXJvdW5kYCB1c2VzIGBoYXJkX3N0YXJ0YCBhbmQgdGhlIGBmcmFtZV9zaXplYC4gQW5kIGBmcmFtZV9zaXplYCBpcyBiYXNlZCBvbiBgeGRwZi0mZ3Q7ZnJhbWVfc3pgLiBJZiBJIHNldCBgaGFyZF9zdGFydGAgYXQgYHBhZ2VfdG9fdmlydChwYWdlKSAmIzQzOyBtZXRhc2l6ZWAsIGFuZCBhc3N1bWUgdGhlIGZyYW1lIHRha2VzIHVwIHRoZSBlbnRpcmUgcGFnZSwgdGhlbiBJJiMzOTttIHdyaXRpbmcgZGF0YSBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhZ2UhICBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgbm8tbm8uIFNvIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBgaGVhZHJvb21gICptdXN0KiBiZSBzZXQgY29ycmVjdGx5IHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgWERQIGZyYW1lIG1ldGFkYXRhLiAgVGhhdCBtYWtlcyBzZW5zZTsgYGhlYWRyb29tYCBpcyBzcGVjaWZpY2FsbHkgdG8gKmF2b2lkKiBvdmVyZmxvd2luZyB0aGUgcGFnZSBib3VuZGFyeS4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3hkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTQ6XHRzdHJ1Y3Qgc2tfYnVmZiAqX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcbiA3OTU6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA3OTY6XHRcdFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA3OTc6XHR7XG4gNzk4Olx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9mcmFtZSh4ZHBmKTtcbiA3OTk6XHRcdHVuc2lnbmVkIGludCBoZWFkcm9vbSwgZnJhbWVfc2l6ZTtcbiA4MDA6XHRcdHZvaWQgKmhhcmRfc3RhcnQ7XG4gODAxOlx0XHR1OCBucl9mcmFncztcbiA4MDI6XHRcbiA4MDM6XHRcdC8qIHhkcCBmcmFncyBmcmFtZSAqL1xuIDgwNDpcdFx0aWYgKHVubGlrZWx5KHhkcF9mcmFtZV9oYXNfZnJhZ3MoeGRwZikpKVxuIDgwNTpcdFx0XHRucl9mcmFncyA9IHNpbmZvLVx1MDAzZW5yX2ZyYWdzO1xuIDgwNjpcdFxuIDgwNzpcdFx0LyogUGFydCBvZiBoZWFkcm9vbSB3YXMgcmVzZXJ2ZWQgdG8geGRwZiAqL1xuIDgwODpcdFx0aGVhZHJvb20gPSBzaXplb2YoKnhkcGYpICYjNDM7IHhkcGYtXHUwMDNlaGVhZHJvb207XG4gODA5Olx0XG4gODEwOlx0XHQvKiBNZW1vcnkgc2l6ZSBiYWNraW5nIHhkcF9mcmFtZSBkYXRhIGFscmVhZHkgaGF2ZSByZXNlcnZlZFxuIDgxMTpcdFx0ICogcm9vbSBmb3IgYnVpbGRfc2tiIHRvIHBsYWNlIHNrYl9zaGFyZWRfaW5mbyBpbiB0YWlscm9vbS5cbiA4MTI6XHRcdCAqL1xuIDgxMzpcdFx0ZnJhbWVfc2l6ZSA9IHhkcGYtXHUwMDNlZnJhbWVfc3o7XG4gODE0Olx0XG4gODE1Olx0XHRoYXJkX3N0YXJ0ID0geGRwZi1cdTAwM2VkYXRhIC0gaGVhZHJvb207XG4gODE2Olx0XHRza2IgPSBidWlsZF9za2JfYXJvdW5kKHNrYiwgaGFyZF9zdGFydCwgZnJhbWVfc2l6ZSk7XG4gODE3Olx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gODE4Olx0XHRcdHJldHVybiBOVUxMO1xuIDgxOTpcdFxuIDgyMDpcdFx0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XG4gODIxOlx0XHRfX3NrYl9wdXQoc2tiLCB4ZHBmLVx1MDAzZWxlbik7XG4gODIyOlx0XHRpZiAoeGRwZi1cdTAwM2VtZXRhc2l6ZSlcbiA4MjM6XHRcdFx0c2tiX21ldGFkYXRhX3NldChza2IsIHhkcGYtXHUwMDNlbWV0YXNpemUpO1xuIDgyNDpcdFxuIDgyNTpcdFx0aWYgKHVubGlrZWx5KHhkcF9mcmFtZV9oYXNfZnJhZ3MoeGRwZikpKVxuIDgyNjpcdFx0XHR4ZHBfdXBkYXRlX3NrYl9mcmFnc19pbmZvKHNrYiwgbnJfZnJhZ3MsIHNpbmZvLVx1MDAzZXhkcF9mcmFnc19zaXplLFxuIDgyNzpcdFx0XHRcdFx0XHQgIG5yX2ZyYWdzICogeGRwZi1cdTAwM2VmcmFtZV9zeixcbiA4Mjg6XHRcdFx0XHRcdFx0ICB4ZHBfZnJhbWVfZ2V0X3NrYl9mbGFncyh4ZHBmKSk7XG4gODI5Olx0XG4gODMwOlx0XHQvKiBFc3NlbnRpYWwgU0tCIGluZm86IHByb3RvY29sIGFuZCBza2ItXHUwMDNlZGV2ICovXG4gODMxOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XG4gODMyOlx0XG4gODMzOlx0XHQvKiBPcHRpb25hbCBTS0IgaW5mbywgY3VycmVudGx5IG1pc3Npbmc6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFhEUCBGcmFtZSBIYW5kbGluZyBhbmQgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGxpZXMgd2l0aGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgWERQIGZyYW1lcyBhbmQsIHNwZWNpZmljYWxseSwgaG93IGl0IGNvbnN0cnVjdHMgU0tCcyAoU29ja2V0IEJ1ZmZlcikgZnJvbSB6ZXJvLWNvcHkgWERQIGZyYW1lcywgYW5kIGhvdyB0aGF0IHJlbGF0ZXMgdG8gdGhlIGxheW91dCBvZiBkYXRhIHdpdGhpbiB0aGUgYWxsb2NhdGVkIHBhZ2VzLgoKVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgbG9naWMgaW4gYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBoaW5nZXMgb24gY2FsY3VsYXRpbmcgYSBzdGFydGluZyBhZGRyZXNzIChgaGFyZF9zdGFydGApIGZvciB0aGUgU0tCJiMzOTtzIGRhdGEgYnVmZmVyLiBUaGUgY3JpdGljYWwgdmFyaWFibGVzIGluY2x1ZGUgYHhkcGYtJmd0O2hlYWRyb29tYCwgYHhkcGYtJmd0O2RhdGFgLCBhbmQgdGhlIGFsbG9jYXRlZCBgcGFnZWAuIElmIGB4ZHBmLSZndDtoZWFkcm9vbWAgaXMgemVybywgYXMgaXMgc2V0LCBgaGFyZF9zdGFydGAgaXMgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSBhbmQgcG9pbnRzIHRvIGFuIGFkZHJlc3MgKmJlZm9yZSogdGhlIHN0YXJ0IG9mIHRoZSBkYXRhIHdpdGhpbiB0aGUgcGFnZSwgYmVjYXVzZSBgeGRwZi0mZ3Q7ZGF0YWAgaXNuJiMzOTt0IHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB3aGVyZSB0aGUgY29waWVkIHBhY2tldCBkYXRhIGlzLCBpdCYjMzk7cyBhZnRlciB0aGUgaGVhZGVyIGFuZCB0aGUgYG1ldGFzaXplYC4KClRoaXMgbGVhZHMgdG8gYSBtaXNhbGlnbm1lbnQgd2hlbiBgYnVpbGRfc2tiX2Fyb3VuZGAgYXR0ZW1wdHMgdG8gY29uc3RydWN0IHRoZSBTS0IuIFdpdGggYGhhcmRfc3RhcnRgIHBvaW50aW5nIHRvIGEgbG9jYXRpb24gc2hpZnRlZCBieSBgbWV0YXNpemVgIGJ5dGVzIGZyb20gdGhlIGFjdHVhbCBkYXRhIHN0YXJ0LCB0aGUgU0tCJiMzOTtzIGFzc3VtZWQgbWVtb3J5IHJhbmdlIGV4dGVuZHMgYmV5b25kIHRoZSBhbGxvY2F0ZWQgcGFnZS4gVGhpcyBtaXNhbGlnbm1lbnQgdGhlbiBtZWFucyB0aGF0IGBidWlsZF9za2JfYXJvdW5kYCB0cmllcyB0byBwbGFjZSB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhpcyBvdXQtb2YtYm91bmRzIHJlZ2lvbi4gVGhlIGBza2Jfc2hhcmVkX2luZm9gIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSBTS0IsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2tldCBmcmFnbWVudHMgYW5kIG90aGVyIG1ldGFkYXRhLiBCZWNhdXNlIG9mIHRoaXMgbWlzYWxpZ25tZW50IGluIGNhbGN1bGF0aW5nIGBoYXJkX3N0YXJ0YCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBpdCBjb3VsZCBiZSB3cml0aW5nIG91dC1vZi1ib3VuZHMgb2YgdGhlIHBhZ2UsIHdoaWNoIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHNpbmNlIGl0JiMzOTtzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlIHRvIHRoZSBzaXplIGNoZWNrOgpgYGBjCi0JaWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSAmZ3Q7IFBBR0VfU0laRSkKJiM0MzsJaWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSAmZ3Q7IFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpCmBgYAppcyBkZXNpZ25lZCB0byBhZGRyZXNzIGFuIGltcG9ydGFudCBwb2ludC4gYFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgIG1ha2VzIHN1cmUgdGhhdCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIGBza2Jfc2hhcmVkX2luZm9gIHdpdGhpbiB0aGUgYWxsb2NhdGVkIHBhZ2UuIFRoZSBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciB3aXRoIGBtZW1jcHkoYWRkciwgZGF0YV90b19jb3B5LCB0b3RzaXplKWAuIFRoZW4gdGhlIGBidWlsZF9za2JfYXJvdW5kYCB3aWxsIG92ZXJ3cml0ZSB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSB3aXRoIGBza2Jfc2hhcmVkX2luZm9gIGlmIHRoZSBjaGVjayBpc24mIzM5O3QgZG9uZSB0byBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgc2tiIG1ldGFkYXRhLCB0aGVyZWZvcmUsIHRoaXMgY29ycnVwdGlvbiB3aWxsIGNvcnJ1cHQgdGhlIHBhY2tldCYjMzk7cyBkYXRhIHdpdGggc2tiIG1ldGFkYXRhLiBJdCBpcyBhIGNvcnJ1cHRpb24gb2YgdGhlIGRhdGEsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFzIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBpcyBpbml0aWFsaXplZC4KCkluIHN1bW1hcnksIHRoZSBjcnV4IG9mIHRoZSB2dWxuZXJhYmlsaXR5IGFwcGVhcnMgdG8gYmUgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBkdWUgdG8gYSBjYWxjdWxhdGlvbiBlcnJvciBpbiBgaGFyZF9zdGFydGAgYW5kIGFuIGluc3VmZmljaWVudCBzaXplIGNoZWNrIGluIHRoZSBidWZmZXIgYWxsb2NhdGlvbi4gVGhlIGVycm9yIHJlc3VsdHMgZnJvbSB0aGUgaW5pdGlhbCB3cm9uZyBhc3N1bXB0aW9uIGFib3V0IHRoZSBkYXRhIGxvY2F0aW9uIHdpdGhpbiB0aGUgcGFnZSBhbmQgaG93IHRoZSBidWZmZXIgaXMgdGhlbiBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwmIzM5O3MgU0tCIGNvbnN0cnVjdGlvbiBwcm9jZXNzLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBhbGxvY2F0aW5nIGVub3VnaCBzcGFjZSBmb3IgYHNrYl9zaGFyZWRfaW5mb2AuIEtBU0FOIHdpbGwgbGlrZWx5IGNhdGNoIHRoZXNlIGlzc3VlcyBiZWNhdXNlIHRoZXkgYXJlIGVpdGhlciBvdXQtb2YtYm91bmRzIHdyaXRlcyB0byB0aGUgcGFnZSBvciBkYXRhIGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX3NrYl9hcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0zMTY9c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTMzNy0gKiBUaGUgaGVhZHMgYXJlIGJlaW5nIHplcm9lZCB3aXRoIGVpdGhlciBtZW1zZXQoKSBvciAlX19HRlBfWkVSTywgc28gdGhleSBhcmVcbm5ldC9jb3JlL3NrYnVmZi5jOjMzODogKiByZWFkeSBmb3IgeyxfX31idWlsZF9za2JfYXJvdW5kKCkgYW5kIGRvbiYjMzk7dCBoYXZlIGFueSBkYXRhIGJ1ZmZlcnMgYXR0YWNoZWQuXG5uZXQvY29yZS9za2J1ZmYuYy0zMzktICogTXVzdCBiZSBjYWxsZWQgKm9ubHkqIGZyb20gdGhlIEJIIGNvbnRleHQuXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDUzPUVYUE9SVF9TWU1CT0woc2xhYl9idWlsZF9za2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ1NS0vKiBDYWxsZXIgbXVzdCBwcm92aWRlIFNLQiB0aGF0IGlzIG1lbXNldCBjbGVhcmVkICovXG5uZXQvY29yZS9za2J1ZmYuYzo0NTY6c3RhdGljIHZvaWQgX19idWlsZF9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXG5uZXQvY29yZS9za2J1ZmYuYy00NTctXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDkwPXN0cnVjdCBza19idWZmICpfX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5OS1cdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6NTAwOlx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMS1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01MTg9RVhQT1JUX1NZTUJPTChidWlsZF9za2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUyMC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjUyMTogKiBidWlsZF9za2JfYXJvdW5kIC0gYnVpbGQgYSBuZXR3b3JrIGJ1ZmZlciBhcm91bmQgcHJvdmlkZWQgc2tiXG5uZXQvY29yZS9za2J1ZmYuYy01MjItICogQHNrYjogc2tfYnVmZiBwcm92aWRlIGJ5IGNhbGxlciwgbXVzdCBiZSBtZW1zZXQgY2xlYXJlZFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUyNS0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjUyNjpzdHJ1Y3Qgc2tfYnVmZiAqYnVpbGRfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTI3LVx0XHRcdFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTMxLVxubmV0L2NvcmUvc2tidWZmLmM6NTMyOlx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTUzMy1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MzktfVxubmV0L2NvcmUvc2tidWZmLmM6NTQwOkVYUE9SVF9TWU1CT0woYnVpbGRfc2tiX2Fyb3VuZCk7XG5uZXQvY29yZS9za2J1ZmYuYy01NDEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTU2MC1cdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6NTYxOlx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTU2Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYF9fYnVpbGRfc2tiX2Fyb3VuZGAsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUm9sZSBvZiBgX19idWlsZF9za2JfYXJvdW5kYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgemVyb2VzIGluIG9uIGBfX2J1aWxkX3NrYl9hcm91bmRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIGFzIGEgc2Vhc29uZWQgcHJhY3RpdGlvbmVyLCBJIGtub3cgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gYnVpbGRpbmcgU29ja2V0IEJ1ZmZlciAoU0tCKSBzdHJ1Y3R1cmVzIGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB3aGVuIGhhbmRsaW5nIHByZS1leGlzdGluZyBkYXRhIGJ1ZmZlcnMuIFRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlIGFsbG9jYXRpb247IHRoaXMgaXMgYWJvdXQgbWV0aWN1bG91c2x5IGNyYWZ0aW5nIGFuIFNLQiBhcm91bmQgbWVtb3J5IHRoYXQgKmFscmVhZHkgZXhpc3RzKi4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMg4oCTIGVmZmljaWVuY3kgaW4gc2l0dWF0aW9ucyB3aGVyZSB3ZSBoYXZlIGEgZGF0YSBwYWNrZXQgYW5kIHdhbnQgdG8gcXVpY2tseSB3cmFwIGl0IGluIHRoZSBTS0IgYWJzdHJhY3Rpb24sIGVsaW1pbmF0aW5nIHVubmVjZXNzYXJ5IGNvcHlpbmcuIEJ1dCBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwaXRmYWxscy4gV2hhdCBhcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucz8gSG93IGRvZXMgaXQgaGFuZGxlIGZyYWdtZW50YXRpb24/IERvZXMgaXQgaW50cm9kdWNlIGFueSBjb21wbGV4aXRpZXMgYXJvdW5kIGJ1ZmZlciBvd25lcnNoaXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQ/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgbWVtb3J5IGFsaWdubWVudCBpc3N1ZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGFueSBsaW1pdGF0aW9ucyByZWdhcmRpbmcgd2hlcmUgdGhlIGV4aXN0aW5nIG1lbW9yeSBjb21lcyBmcm9tLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uIHVzZSBjYXNlcy4gSXMgdGhpcyBwcmltYXJpbHkgdXNlZCBpbiBzaXR1YXRpb25zIGxpa2UgemVyby1jb3B5IG5ldHdvcmtpbmcsIG9mZmxvYWQgc2NlbmFyaW9zLCBvciB3aGVuIGRlYWxpbmcgd2l0aCBwYWNrZXRzIHByZS1yZWNlaXZlZCBmcm9tIGhhcmR3YXJlPyBJJiMzOTttIHBpY3R1cmluZyBzcGVjaWZpYyBjb2RlIHBhdGhzIGluIG15IGhlYWQg4oCTIHBlcmhhcHMgaW50ZXJhY3Rpb24gd2l0aCBETUEgZW5naW5lcywgb3IgdGhlIHdheSB0aGUgc3RhY2sgaGFuZGxlcyBjZXJ0YWluIGhlYWRlciBtYW5pcHVsYXRpb25zIGFyb3VuZCB0aGVzZSAmIzM5O3dyYXBwZWQmIzM5OyBTS0JzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBudWFuY2VzIG9mIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBTS0ItcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgc2tiX3B1dGAgYW5kIGBza2JfcHVsbGAuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIG1lbW9yeSBiYXJyaWVycyBpbnZvbHZlZD8gV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlLCBpZiBhbnk/IEFuZCBob3cgd2VsbCBkb2VzIGl0IGhhbmRsZSBlcnJvciBjb25kaXRpb25zPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlJiMzOTtzIHVzdWFsbHkgYSBzcGVjaWZpYyBlcnJvciBmbG93IEkgbmVlZCB0byByZW1lbWJlci4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIGhvdyBncmFjZWZ1bGx5IGl0IGhhbmRsZXMgZWRnZSBjYXNlcy4KCkluIGVzc2VuY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgaXRzIGNvbnN0cmFpbnRzLCBhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0JiMzOTtzIG9wdGltaXplZCB0byBzaGluZSwgYWxsIHRvIGVuc3VyZSBJJiMzOTttIHVzaW5nIGl0IHNhZmVseSBhbmQgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1NjpcdHN0YXRpYyB2b2lkIF9fYnVpbGRfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhLFxuIDQ1NzpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuIDQ1ODpcdHtcbiA0NTk6XHRcdHVuc2lnbmVkIGludCBzaXplID0gZnJhZ19zaXplO1xuIDQ2MDpcdFxuIDQ2MTpcdFx0LyogZnJhZ19zaXplID09IDAgaXMgY29uc2lkZXJlZCBkZXByZWNhdGVkIG5vdy4gQ2FsbGVyc1xuIDQ2MjpcdFx0ICogdXNpbmcgc2xhYiBidWZmZXIgc2hvdWxkIHVzZSBzbGFiX2J1aWxkX3NrYigpIGluc3RlYWQuXG4gNDYzOlx0XHQgKi9cbiA0NjQ6XHRcdGlmIChXQVJOX09OQ0Uoc2l6ZSA9PSAwLCBcJiMzNDtVc2Ugc2xhYl9idWlsZF9za2IoKSBpbnN0ZWFkXCYjMzQ7KSlcbiA0NjU6XHRcdFx0ZGF0YSA9IF9fc2xhYl9idWlsZF9za2IoZGF0YSwgXHUwMDI2c2l6ZSk7XG4gNDY2Olx0XG4gNDY3Olx0XHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcbiA0Njg6XHR9XG4gNDY5Olx0XG4gNDcwOlx0LyoqXG4gNDcxOlx0ICogX19idWlsZF9za2IgLSBidWlsZCBhIG5ldHdvcmsgYnVmZmVyXG4gNDcyOlx0ICogQGRhdGE6IGRhdGEgYnVmZmVyIHByb3ZpZGVkIGJ5IGNhbGxlclxuIDQ3MzpcdCAqIEBmcmFnX3NpemU6IHNpemUgb2YgZGF0YSAobXVzdCBub3QgYmUgMClcbiA0NzQ6XHQgKlxuIDQ3NTpcdCAqIEFsbG9jYXRlIGEgbmV3IFx1MDAyNnNrX2J1ZmYuIENhbGxlciBwcm92aWRlcyBzcGFjZSBob2xkaW5nIGhlYWQgYW5kXG4gNDc2Olx0ICogc2tiX3NoYXJlZF9pbmZvLiBAZGF0YSBtdXN0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGUgcGFnZVxuIDQ3NzpcdCAqIGFsbG9jYXRvciBvciB2bWFsbG9jKCkuIChBIEBmcmFnX3NpemUgb2YgMCB0byBpbmRpY2F0ZSBhIGttYWxsb2MoKVxuIDQ3ODpcdCAqIGFsbG9jYXRpb24gaXMgZGVwcmVjYXRlZCwgYW5kIGNhbGxlcnMgc2hvdWxkIHVzZSBzbGFiX2J1aWxkX3NrYigpXG4gNDc5Olx0ICogaW5zdGVhZC4pXG4gNDgwOlx0ICogVGhlIHJldHVybiBpcyB0aGUgbmV3IHNrYiBidWZmZXIuXG4gNDgxOlx0ICogT24gYSBmYWlsdXJlIHRoZSByZXR1cm4gaXMgJU5VTEwsIGFuZCBAZGF0YSBpcyBub3QgZnJlZWQuXG4gNDgyOlx0ICogTm90ZXMgOlxuIDQ4MzpcdCAqICBCZWZvcmUgSU8sIGRyaXZlciBhbGxvY2F0ZXMgb25seSBkYXRhIGJ1ZmZlciB3aGVyZSBOSUMgcHV0IGluY29taW5nIGZyYW1lXG4gNDg0Olx0ICogIERyaXZlciBzaG91bGQgYWRkIHJvb20gYXQgaGVhZCAoTkVUX1NLQl9QQUQpIGFuZFxuIDQ4NTpcdCAqICBNVVNUIGFkZCByb29tIGF0IHRhaWwgKFNLQl9EQVRBX0FMSUdOKHNrYl9zaGFyZWRfaW5mbykpXG4gNDg2Olx0ICogIEFmdGVyIElPLCBkcml2ZXIgY2FsbHMgYnVpbGRfc2tiKCksIHRvIGFsbG9jYXRlIHNrX2J1ZmYgYW5kIHBvcHVsYXRlIGl0XG4gNDg3Olx0ICogIGJlZm9yZSBnaXZpbmcgcGFja2V0IHRvIHN0YWNrLlxuIDQ4ODpcdCAqICBSWCByaW5ncyBvbmx5IGNvbnRhaW5zIGRhdGEgYnVmZmVycywgbm90IGZ1bGwgc2ticy5cbiA0ODk6XHQgKi9cbiA0OTA6XHRzdHJ1Y3Qgc2tfYnVmZiAqX19idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbiA0OTE6XHR7XG4gNDkyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDQ5MzpcdFxuIDQ5NDpcdFx0c2tiID0ga21lbV9jYWNoZV9hbGxvYyhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsXG4gNDk1Olx0XHRcdFx0ICAgICAgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHN0YXJ0cyB3aXRoIGEgZGlyZWN0IGNoZWNrIG9mIHRoZSBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgb2YgY29uY2VybiBvciBkZWJ1Z2dpbmcsIGFuZCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGluIHRoZSBrZXJuZWwgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLCBhbnkgcG90ZW50aWFsIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIHdpdGhpbiBpdCwgb3IgYW55IGludGVyYWN0aW9ucyBpdCBoYXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBmb2N1c2VkIHNlYXJjaCBpcyB1c3VhbGx5IGRyaXZlbiBieSBhIHBhcnRpY3VsYXIgcHJvYmxlbSBhdCBoYW5kOyBhIGJ1ZyByZXBvcnQsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IgYW4gb2RkIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19maW5hbGl6ZV9za2JfYXJvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9Mzg4PUVYUE9SVF9TWU1CT0xfR1BMKG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4OS1cbm5ldC9jb3JlL3NrYnVmZi5jOjM5MDpzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXG5uZXQvY29yZS9za2J1ZmYuYy0zOTEtXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDQ4LVx0ZGF0YSA9IF9fc2xhYl9idWlsZF9za2IoZGF0YSwgXHUwMDI2c2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYzo0NDk6XHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ1MC1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00NTY9c3RhdGljIHZvaWQgX19idWlsZF9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDY2LVxubmV0L2NvcmUvc2tidWZmLmM6NDY3Olx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYy00NjgtfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcyMS1cdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzIyOlx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYy03MjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGNvZGUgZm9yIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiYjMzk7cyBwcm9iYWJseSBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBkZWFsaW5nIHdpdGggU29ja2V0IEJ1ZmZlciAoU0tCKSBtYW5hZ2VtZW50LCBsaWtlbHkgYXQgYSBjcnVjaWFsIHBvaW50LiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQgc291bmRzIGxpa2UgaXQmIzM5O3MgYSBjbGVhbnVwIG9yIGZpbmFsaXphdGlvbiByb3V0aW5lIHRoYXQgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFyb3VuZCwgb3IgaW4gdGhlIHZpY2luaXR5IG9mLCB0aGUgU0tCLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGEgdmVyeSB0YXJnZXRlZCBvcGVyYXRpb24gLSBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24sIGJ1dCBzb21lIHNwZWNpZmljIGhvdXNla2VlcGluZyB0aGF0JiMzOTtzIHJlcXVpcmVkIGF0IGEgcGFydGljdWxhciBzdGFnZS4gTXkgZXhwZXJ0aXNlIGtpY2tzIGluIGhlcmUsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhpbmdzIGxpa2U6IG1lbW9yeSByZWNsYWltLCByZWZlcmVuY2UgY291bnRpbmcgYWRqdXN0bWVudHMsIHBvdGVudGlhbGx5IGZyZWVpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIFNLQiBhbmQgaXRzIGRhdGEsIG9yIG1heWJlIHNvbWUgY2hlY2tzdW0gb3IgaGVhZGVyIGZpbmFsaXphdGlvbi4gVGhlICYjMzQ7YXJvdW5kJiMzNDsgcGFydCBpcyBrZXkuIFdoYXQgZXZlbnQgb3Igb3BlcmF0aW9uIGlzIGl0ICphcm91bmQqPyBJcyBpdCBiZWZvcmUgdGhlIFNLQiBpcyBoYW5kZWQgb2ZmIHRvIGEgaGFyZHdhcmUgaW50ZXJmYWNlPyBBZnRlciBhIHBhY2tldCBpcyB0cmFuc21pdHRlZD8gQmVmb3JlIGl0JiMzOTtzIGVucXVldWVkIHNvbWV3aGVyZT8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGNyaXRpY2FsLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBhcmd1bWVudHMgaXQgdGFrZXMgYW5kIHNlZSB3aGF0IGRhdGEgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IGRlYWxzIHdpdGggdGhlIFNLQiBzdHJ1Y3R1cmUgaXRzZWxmLCB0aGUgcGFja2V0IGRhdGEgYnVmZmVyLCBvciBzb21lIHJlbGF0ZWQgbWV0YWRhdGEuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHRzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXG4gMzkxOlx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiAzOTI6XHR7XG4gMzkzOlx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gMzk0Olx0XG4gMzk1Olx0XHRzaXplIC09IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSk7XG4gMzk2Olx0XG4gMzk3Olx0XHQvKiBBc3N1bWVzIGNhbGxlciBtZW1zZXQgY2xlYXJlZCBTS0IgKi9cbiAzOTg6XHRcdHNrYi1cdTAwM2V0cnVlc2l6ZSA9IFNLQl9UUlVFU0laRShzaXplKTtcbiAzOTk6XHRcdHJlZmNvdW50X3NldChcdTAwMjZza2ItXHUwMDNldXNlcnMsIDEpO1xuIDQwMDpcdFx0c2tiLVx1MDAzZWhlYWQgPSBkYXRhO1xuIDQwMTpcdFx0c2tiLVx1MDAzZWRhdGEgPSBkYXRhO1xuIDQwMjpcdFx0c2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihza2IpO1xuIDQwMzpcdFx0c2tiX3NldF9lbmRfb2Zmc2V0KHNrYiwgc2l6ZSk7XG4gNDA0Olx0XHRza2ItXHUwMDNlbWFjX2hlYWRlciA9ICh0eXBlb2Yoc2tiLVx1MDAzZW1hY19oZWFkZXIpKX4wVTtcbiA0MDU6XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuIDQwNjpcdFx0c2tiLVx1MDAzZWFsbG9jX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4gNDA3Olx0XHQvKiBtYWtlIHN1cmUgd2UgaW5pdGlhbGl6ZSBzaGluZm8gc2VxdWVudGlhbGx5ICovXG4gNDA4Olx0XHRzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7XG4gNDA5Olx0XHRtZW1zZXQoc2hpbmZvLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBkYXRhcmVmKSk7XG4gNDEwOlx0XHRhdG9taWNfc2V0KFx1MDAyNnNoaW5mby1cdTAwM2VkYXRhcmVmLCAxKTtcbiA0MTE6XHRcbiA0MTI6XHRcdHNrYl9zZXRfa2Nvdl9oYW5kbGUoc2tiLCBrY292X2NvbW1vbl9oYW5kbGUoKSk7XG4gNDEzOlx0fVxuIDQxNDpcdFxuIDQxNTpcdHN0YXRpYyBpbmxpbmUgdm9pZCAqX19zbGFiX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgKnNpemUpXG4gNDE2Olx0e1xuIDQxNzpcdFx0dm9pZCAqcmVzaXplZDtcbiA0MTg6XHRcbiA0MTk6XHRcdC8qIE11c3QgZmluZCB0aGUgYWxsb2NhdGlvbiBzaXplIChhbmQgZ3JvdyBpdCB0byBtYXRjaCkuICovXG4gNDIwOlx0XHQqc2l6ZSA9IGtzaXplKGRhdGEpO1xuIDQyMTpcdFx0Lyoga3JlYWxsb2MoKSB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBcJiMzNDtkYXRhXCYjMzQ7IHdoZW5cbiA0MjI6XHRcdCAqIFwmIzM0O2tzaXplKGRhdGEpXCYjMzQ7IGlzIHJlcXVlc3RlZDogaXQgaXMgdGhlIGV4aXN0aW5nIHVwcGVyXG4gNDIzOlx0XHQgKiBib3VuZHMuIEFzIGEgcmVzdWx0LCBHRlBfQVRPTUlDIHdpbGwgYmUgaWdub3JlZC4gTm90ZVxuIDQyNDpcdFx0ICogdGhhdCB0aGlzIFwmIzM0O25ld1wmIzM0OyBwb2ludGVyIG5lZWRzIHRvIGJlIHBhc3NlZCBiYWNrIHRvIHRoZVxuIDQyNTpcdFx0ICogY2FsbGVyIGZvciB1c2Ugc28gdGhlIF9fYWxsb2Nfc2l6ZSBoaW50aW5nIHdpbGwgYmVcbiA0MjY6XHRcdCAqIHRyYWNrZWQgY29ycmVjdGx5LlxuIDQyNzpcdFx0ICovXG4gNDI4Olx0XHRyZXNpemVkID0ga3JlYWxsb2MoZGF0YSwgKnNpemUsIEdGUF9BVE9NSUMpO1xuIDQyOTpcdFx0V0FSTl9PTl9PTkNFKHJlc2l6ZWQgIT0gZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWERQIEZyYW1lIHRvIFNLQiBDb252ZXJzaW9uOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBYRFAgZnJhbWUgY29udmVyc2lvbiB0byBTS0IsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgemVyb2VzIGFuZCBzZXRzIGBkYXRhcmVmYCB3aXRoaW4gdGhlIGBzaGluZm9gIHN0cnVjdHVyZS4gSW5pdGlhbGx5LCBpdCBzZWVtZWQgbGlrZSBpZiB0aGUgY29tYmluZWQgc2l6ZSBvZiB0aGUgWERQIGZyYW1lIGhlYWRlciBhbmQgdG90YWwgZGF0YSAoYHRvdHNpemVgKSBleGNlZWRlZCBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAsIHRoZSBgc2hpbmZvYCB3b3VsZCBvdmVybGFwIHdpdGggcGFja2V0IGRhdGEuIEJ1dCB3YWl0LCBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBpcyBjYWxsZWQgKmFmdGVyKiBhIGBtZW1jcHlgIGluIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLiBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbmQgcmV0dXJucyBgeGRwX2ZyYW1lYC4gVGhlbiwgbGF0ZXIgYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBjYWxscyBgYnVpbGRfc2tiX2Fyb3VuZGAgdGhhdCBjYWxscyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC4gVGhpcyBtZWFucyB0aGF0IGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHdpbGwgb3ZlcndyaXRlIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBkYXRhIHdpdGggemVyb2VzLiBUaGlzIGltcGxpZXMgZGF0YSB0cnVuY2F0aW9uL2NvcnJ1cHRpb24sIGJ1dCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFzIGl04oCZcyBhbGwgemVyb2VkLgoKSG93ZXZlciwgaWYgdGhlIGRhdGEgKndhcyogc3VwcG9zZWQgdG8gaGF2ZSBzb21ldGhpbmcgaW4gaXQsIHRoaXMgemVyb2luZyBpcyBkYXRhIGNvcnJ1cHRpb24uIEkgdGhlbiBjb25zaWRlcmVkIHdoYXQgaGFwcGVucyBpZiB0aGUgYHNoaW5mb2Agb3ZlcmxhcHMgYW5kIHRoZSBwYWNrZXQgZGF0YSBnZXRzIG1vZGlmaWVkICphZnRlciogYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAuIEluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgdGhlcmUmIzM5O3Mgbm8gc3VjaCBtb2RpZmljYXRpb24uIElmIGl0JiMzOTtzIHNlbnQgdG8gdXNlcnNwYWNlLCB1c2Vyc3BhY2Ugd2lsbCBnZXQgemVyb2VzIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBkYXRhLiBOb3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaywganVzdCB6ZXJvZXMsIHdoaWNoIGlzIHN0aWxsIGEgcHJvYmxlbS4gV2hhdCBpZiB0aGUga2VybmVsIHJlYWRzIHRoZSB6ZXJvZXM/IFRoYXQmIzM5O3Mgd2hhdCBgc2hpbmZvYCBpcyBzdXBwb3NlZCB0byBjb250YWluIGFueXdheSwgdGhlIHplcm9lcyBhbmQgYGRhdGFyZWY9MWAuCgpOb3csIGlmIGEgQlBGIHByb2dyYW0gbW9kaWZpZXMgcGFja2V0IGRhdGEgYWZ0ZXIgYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCwgdGhpcyBjb3VsZCBiZWNvbWUgdmVyeSBpbnRlcmVzdGluZy4gTW9kaWZ5aW5nIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBkYXRhIHdvdWxkIG92ZXJ3cml0ZSBgc2hpbmZvYCEgVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gc2NlbmFyaW8uIFRoaW5rIG9mIHRoZSBwZXJzcGVjdGl2ZSBvZiBwYWNrZXQgZGF0YTogSXQgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBvciB0eXBlIGNvbmZ1c2lvbi4gS0FTQU4gY2FuIGNhdGNoIHRoaXMgaWYgaXQgcmVzdWx0cyBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGBucl9mcmFnc2AgZmllbGQgY291bGQgYmUgc2V0IHRvIGEgbGFyZ2UgbnVtYmVyIHdoaWNoIGNvdWxkIGxlYWQgdG8gT09CIHJlYWRzIHdoZW4gZnJlZWluZyB0aGUgc2tiLiBTcGVjaWZpY2FsbHksIHdoZW4gdGhlIHNrYiBpcyBmcmVlZCBhbmQgYHNrYl9yZWxlYXNlX2RhdGFgIGxvb3BzIG92ZXIgYG5yX2ZyYWdzYCBjYWxsaW5nIGBza2JfZnJhZ191bnJlZmAsIHRoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvZiB0aGUgYGZyYWdzYCBhcnJheS4gVGhpcyBpcyBhIEtBU0FOIGJ1Zy4KClRoZW4gSSBjb25zaWRlcmVkIHRoZSBgaGVhZHJvb21gIGlzc3VlLiBCZWZvcmUgdGhlIHBhdGNoLCBgeGRwZi0mZ3Q7aGVhZHJvb21gIHdhcyB6ZXJvLiBTbyBgaGFyZF9zdGFydGAgd2FzIGF0IGBwYWdlICYjNDM7IG1ldGFzaXplYC4gVGhlIGBmcmFtZV9zaXplYCBpcyBgUEFHRV9TSVpFYC4gVGhlcmVmb3JlLCBgc2hpbmZvYCB3b3VsZCBiZSBwbGFjZWQgYXQgYHBhZ2UgJiM0MzsgbWV0YXNpemUgJiM0MzsgUEFHRV9TSVpFIC0gU0tCX0RBVEFfQUxJR04oLi4uKWAuIElmIGBtZXRhc2l6ZWAgaXMgbGFyZ2UgZW5vdWdoLCBgc2hpbmZvYCBlbmRzIHVwICpvdXRzaWRlKiB0aGUgYWxsb2NhdGVkIHBhZ2UuIElmIGBtZXRhc2l6ZSAmZ3Q7IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSlgLCB0aGVuIGl0JiMzOTtzIGEgZ3VhcmFudGVlZCBPT0Igd3JpdGUgd2hlbiBgbWVtc2V0KHNoaW5mbywgMCwgLi4uKWAgaXMgY2FsbGVkLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoYXQuCgpDaGVja2luZyBmb3IgdW5pbml0aWFsaXplZCByZWFkcywgSSByZS1yZWFkIHRoZSBwYXRjaC4gVGhlIGNoYW5nZSBmcm9tIGBzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgJmd0OyBQQUdFX1NJWkVgIHRvIGBzaXplb2YoKnhkcGYpICYjNDM7IHRvdHNpemUgJmd0OyBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCBmaXhlcyB0aGUgb3ZlcmxhcHBpbmcgcHJvYmxlbSwgYXMgYHRvdHNpemVgIGNvdWxkIGNhdXNlIHRoZSBvdmVybGFwLiBUaGUgY2hhbmdlIGZyb20gYHhkcGYtJmd0O2hlYWRyb29tID0gMGAgdG8gYHhkcGYtJmd0O2hlYWRyb29tID0gbWV0YXNpemVgIGFsc28gZml4ZXMgdGhlIE9PQiB3cml0ZS4gVGhpcyBjaGFuZ2Ugc2hpZnRlZCBgaGFyZF9zdGFydGAgYnkgYG1ldGFzaXplYCwgbGVhZGluZyB0byB0aGUgYHNoaW5mb2AgYmVpbmcgcGxhY2VkIG91dCBvZiBib3VuZHMuCgpOb3csIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzPyBXaGVuIGB4ZHBmLSZndDtoZWFkcm9vbSA9IDBgLCB0aGUgYHNrYi0mZ3Q7ZGF0YWAgcG9pbnRlciBpcyBzZXQgdG8gYHBhZ2UgJiM0MzsgbWV0YXNpemUgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAuIFRoZSBwYWNrZXQgZGF0YSB3YXMgY29waWVkIHRvIGBwYWdlICYjNDM7IHNpemVvZigqeGRwZilgLiBTbywgYHNrYi0mZ3Q7ZGF0YWAgd291bGQgYmUgYWZ0ZXIgdGhlIHN0YXJ0IG9mIHRoZSBkYXRhLiBBbmQgdGhlIHNrYiYjMzk7cyBsZW5ndGggaXMgYHhkcGYtJmd0O2xlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZWAuIFNvIHRoZSBlbmQgb2YgYHNrYi0mZ3Q7ZGF0YWAgaXMgd2hlcmUgdGhlIHBhY2tldCBkYXRhIGVuZHMgYXMgd2VsbC4KClRoZSBtZXRhZGF0YSBpcyBjb3BpZWQgdG8gYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAsIGFuZCBgc2tiLSZndDtkYXRhYCBwb2ludHMgdG8gYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKSAmIzQzOyBtZXRhc2l6ZWAuIFdoZXJlIHRoZSByZWFsIHBhY2tldCBkYXRhIHN0YXJ0cyEgYHNrYl9tZXRhZGF0YV9zZXQoc2tiLCB4ZHBmLSZndDttZXRhc2l6ZSlgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX21ldGFkYXRhX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD00NTg1PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfbWV0YWRhdGFfZGlmZmVycyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2EsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NTk3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0NTk4OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfbWV0YWRhdGFfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHU4IG1ldGFfbGVuKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NTk5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQ2MDM9c3RhdGljIGlubGluZSB2b2lkIHNrYl9tZXRhZGF0YV9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjA0LXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDYwNTpcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCAwKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDYwNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBza2JfbWV0YWRhdGFfc2V0YCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHNrYl9tZXRhZGF0YV9zZXQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBza2JfbWV0YWRhdGFfc2V0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHByb2JhYmx5IGRlYWxzIHdpdGggYXR0YWNoaW5nIHNvbWUgc29ydCBvZiBjcnVjaWFsLCBjb250ZXh0LXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGEgc29ja2V0IGJ1ZmZlciAoU0tCKS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQmIzM5O3MgZGVzaWduZWQgdG8gYWRkIG1ldGFkYXRhIHRoYXQgaGVscHMgd2l0aCBwYWNrZXQgcHJvY2Vzc2luZywgbWF5YmUgZm9yIFFvUywgc2VjdXJpdHkgcG9saWNpZXMsIG9yIGZsb3cgY2xhc3NpZmljYXRpb24uIEl0JiMzOTtzIGxpa2VseSBvcGVyYXRpbmcgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdGFjaywgc28gcGVyZm9ybWFuY2UgaXMgKmNyaXRpY2FsKi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyDigJMgYXJlIHRoZXJlIGxvY2tzIGludm9sdmVkPyBJcyB0aGlzIHRocmVhZC1zYWZlPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBTS0IgZGF0YSBzdHJ1Y3R1cmUsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGF0b21pYyBvcGVyYXRpb25zLCByZWFkLWNvcHktdXBkYXRlIG1lY2hhbmlzbXMsIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgbWV0YWRhdGEgZ2V0cyB1dGlsaXplZCBsYXRlciBvbiBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gKndoZXJlKiBpdCBpcyBhY2Nlc3NlZCBpbiB0aGUgc3RhY2ssIGFuZCBieSAqd2hhdCogY29tcG9uZW50cy4gSXMgdGhpcyBhIGNvbW1vbiBwcmFjdGljZSBmb3IgbW9zdCBuZXR3b3JrIHN0YWNrIG9wZXJhdGlvbnMsIG9yIGEgZnVuY3Rpb24gSSBzaG91bGQgaGF2ZSBzZWVuIGJlZm9yZT8gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgZmxleGlibGUgdGhpcyBmdW5jdGlvbiBpcywgaW4gdGVybXMgb2Ygd2hhdCBraW5kIG9mIG1ldGFkYXRhIGl0IGNhbiBoYW5kbGUuIElzIGl0IGEgZ2VuZXJpYyBrZXktdmFsdWUgc3RvcmUsIG9yIGFyZSB0aGVyZSBzcGVjaWZpYyBtZXRhZGF0YSB0eXBlcyBwcmVkZWZpbmVkPyBJcyB0aGUgc2l6ZSBmaXhlZCwgb3IgZHluYW1pYz8gRmluYWxseSwgYW55IGFzc29jaWF0ZWQgZXJyb3IgY2hlY2tpbmcgb3IgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LiBJIHdvbmRlciB3aGF0IGhhcHBlbnMgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsPyBPciBpZiB0aGUgb3BlcmF0aW9uIGlzIHNvbWVob3cgaWxsZWdhbD8gSSYjMzk7bGwgbG9vayBmb3IgYW55IG9mIHRob3NlIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ1OTg6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX21ldGFkYXRhX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBtZXRhX2xlbilcbjQ1OTk6XHR7XG40NjAwOlx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlbWV0YV9sZW4gPSBtZXRhX2xlbjtcbjQ2MDE6XHR9XG40NjAyOlx0XG40NjAzOlx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9tZXRhZGF0YV9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNDYwNDpcdHtcbjQ2MDU6XHRcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCAwKTtcbjQ2MDY6XHR9XG40NjA3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWERQIE1ldGFkYXRhIFBsYWNlbWVudCBpbiBTS0JzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgWERQIG1ldGFkYXRhIGdldHMgaGFuZGxlZCB3aGVuIHdlJiMzOTtyZSBidWlsZGluZyBTS0JzIGZyb20gWERQIGZyYW1lcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBhY3Rpb24gaXMgc2V0dGluZyBgc2tiX3NoaW5mbyhza2IpLSZndDttZXRhX2xlbiA9IG1ldGFfbGVuYC4gIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGhvdyBkbyB3ZSAqYWNjZXNzKiB0aGlzIG1ldGFkYXRhPyAgVHlwaWNhbGx5LCB3ZSB1c2UgYHNrYl9tZXRhZGF0YV9lbmQoc2tiKWAgb3IgY2FsY3VsYXRlIGl0IHVzaW5nIGBza2JfbWFjX2hlYWRlcihza2IpIC0gbWV0YV9sZW5gLgoKUmlnaHQsIFhEUCBtZXRhZGF0YSBsaXZlcyAqYmVmb3JlKiBgc2tiLSZndDtkYXRhYC4gIFNvLCBpdCYjMzk7cyBsb2NhdGVkIHNvbWV3aGVyZSBiZXR3ZWVuIGBza2ItJmd0O2RhdGEgLSBtZXRhX2xlbmAgYW5kIGBza2ItJmd0O2RhdGFgLiBTaW5jZSBgc2tiLSZndDtkYXRhYCBwb2ludHMgdG8gYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKSAmIzQzOyBtZXRhc2l6ZWAsIHRoZW4gYHNrYi0mZ3Q7ZGF0YSAtIG1ldGFzaXplYCBlcXVhbHMgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAuICBUaGF0JiMzOTtzIGV4YWN0bHkgd2hlcmUgdGhlIG1ldGFkYXRhIHdhcyBvcmlnaW5hbGx5IGNvcGllZCwgaW1wbHlpbmcgdGhhdCB0aGUgbWV0YWRhdGEgaXMgdmFsaWQgYW5kIGluaXRpYWxpemVkLCBncmVhdCEKCk5vdywgdGhlIHBhdGNoLi4uIElmIGB4ZHBmLSZndDtoZWFkcm9vbWAgd2FzIHplcm8sIHRoZW4gdGhlIGBoZWFkcm9vbWAgaW4gYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBpcyBgc2l6ZW9mKCp4ZHBmKWAuICBgc2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSlgIGFkdmFuY2VzIGBza2ItJmd0O2RhdGFgIGJ5IGBzaXplb2YoKnhkcGYpYC4gQW5kIHNpbmNlIGBza2ItJmd0O2hlYWRgICh3aGljaCBpcyBgaGFyZF9zdGFydGApIGlzIGBwYWdlICYjNDM7IG1ldGFzaXplYCwgdGhlbiBgc2tiLSZndDtkYXRhYCBiZWNvbWVzIGBwYWdlICYjNDM7IG1ldGFzaXplICYjNDM7IHNpemVvZigqeGRwZilgLiBUaGlzIGlzIGNvcnJlY3QuCgpCdXQsIGlmIGBoYXJkX3N0YXJ0YCBpcyBgcGFnZSAmIzQzOyBtZXRhc2l6ZWAsIHRoZW4gYHNrYi0mZ3Q7aGVhZGAgKmlzKiBgcGFnZSAmIzQzOyBtZXRhc2l6ZWAuIElmIGFueW9uZSB0cmllcyB0byBhY2Nlc3MgdGhlIG1ldGFkYXRhLCB0aGV5JiMzOTtsbCBiZSBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YSAtIG1ldGFzaXplYC4gQnV0LCBgc2tiLSZndDtkYXRhIC0gbWV0YXNpemVgIGVxdWFscyBgcGFnZSAmIzQzOyBtZXRhc2l6ZSAmIzQzOyBzaXplb2YoKnhkcGYpIC0gbWV0YXNpemVgLCB3aGljaCBzaW1wbGlmaWVzIHRvIGBwYWdlICYjNDM7IHNpemVvZigqeGRwZilgLgoKV2FpdCwgYHNrYi0mZ3Q7aGVhZGAgaXMgYHBhZ2UgJiM0MzsgbWV0YXNpemVgLiBTbywgaXMgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAgKmJlZm9yZSogYHNrYi0mZ3Q7aGVhZGA/IElmIGBtZXRhc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIGBzaXplb2YoKnhkcGYpYCwgdGhlbiB5ZXMsIGl0ICppcyogYmVmb3JlIGBza2ItJmd0O2hlYWRgLiBBY2Nlc3NpbmcgbWVtb3J5ICpiZWZvcmUqIGBza2ItJmd0O2hlYWRgIGlzIGEgZGVmaW5pdGUgb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlISBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLgoKTGV0JiMzOTtzIHNlZSBpZiBgbWV0YXNpemVgIGNhbiBiZSBncmVhdGVyLiBUaGUgc2l6ZSBvZiBgc3RydWN0IHhkcF9mcmFtZWAgaXMgMzIgb3IgNDggYnl0ZXMuIE1ldGFkYXRhIGNhbiBiZSB1cCB0byAzMiBieXRlcy4gU28sIGBtZXRhc2l6ZWAgaXMgdXN1YWxseSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHNpemVvZigqeGRwZilgLiBFdmVuIGlmIGl0JiMzOTtzIG5vdCwgYHNrYi0mZ3Q7ZGF0YSAtIG1ldGFzaXplYCBzdGlsbCBlcXVhbHMgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWAuICBJZiBgc2tiLSZndDtoZWFkYCBpcyBgcGFnZSAmIzQzOyAzMmAgd2hlbiBgbWV0YXNpemVgIGlzIDMyLCBhbmQgYHNpemVvZigqeGRwZilgIGlzIDMyLCB0aGVuIGBza2ItJmd0O2hlYWRgIGlzIGF0IGBwYWdlICYjNDM7IDMyYCBhbmQgYHNrYi0mZ3Q7ZGF0YWAgaXMgYXQgYHBhZ2UgJiM0MzsgNjRgLiBUaHVzLCBgc2tiLSZndDtkYXRhIC0gbWV0YXNpemVgIGJlY29tZXMgYHBhZ2UgJiM0MzsgMzJgLCB3aGljaCBlcXVhbHMgYHNrYi0mZ3Q7aGVhZGAsIGFuZCBpdCYjMzk7cyBub3QgYmVmb3JlIGBza2ItJmd0O2hlYWRgLgoKQnV0IHdoYXQgaWYgYG1ldGFzaXplYCBpcyB6ZXJvPyBUaGVuIGBza2ItJmd0O2hlYWRgIGlzIGp1c3QgYHBhZ2VgLiBJZiBgeGRwZi0mZ3Q7aGVhZHJvb21gIGlzIHNldCB0byBgbWV0YXNpemVgIChpbiB0aGUgcGF0Y2hlZCB2ZXJzaW9uKSwgdGhlbiBgaGVhZHJvb21gIGVxdWFscyBgc2l6ZW9mKCp4ZHBmKSAmIzQzOyBtZXRhc2l6ZWAuIFRoZW4sIGBoYXJkX3N0YXJ0YCBlcXVhbHMgYHhkcGYtJmd0O2RhdGEgLSBoZWFkcm9vbWAgd2hpY2ggaXMgYChwYWdlICYjNDM7IHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemUpIC0gKHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemUpYCB3aGljaCBpcyBqdXN0IGBwYWdlYC4gU28sIGBza2ItJmd0O2hlYWRgIGVxdWFscyBgcGFnZWAuIGBza2JfcmVzZXJ2ZShza2IsIGhlYWRyb29tKWAgYWR2YW5jZXMgYHNrYi0mZ3Q7ZGF0YWAgYnkgYHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemVgLiBTbywgYHNrYi0mZ3Q7ZGF0YWAgaXMgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKSAmIzQzOyBtZXRhc2l6ZWAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgoKQnV0IG5vdywgYHNrYi0mZ3Q7aGVhZGAgaXMgYHBhZ2VgIGFuZCBub3QgYHBhZ2UgJiM0MzsgbWV0YXNpemVgLiAgU28sIHRoZSBzcGFjZSBiZXR3ZWVuIGBza2ItJmd0O2hlYWRgIGFuZCBgc2tiLSZndDtkYXRhYCBpcyBub3cgYHNpemVvZigqeGRwZikgJiM0MzsgbWV0YXNpemVgLiBUaGlzIHNwYWNlICpjb250YWlucyogdGhlIGB4ZHBmYCBzdHJ1Y3QgKGF0IGBwYWdlYCkgYW5kIHRoZSBtZXRhZGF0YSAoYXQgYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKWApISBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgc3BhY2UgYmV0d2VlbiBgc2tiLSZndDtoZWFkYCBhbmQgYHNrYi0mZ3Q7ZGF0YWAgd2FzIG9ubHkgYHNpemVvZigqeGQKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3hkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3hkcC5jPTc5Mj1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYnVpbGRfc2tiX2Zyb21femMpO1xubmV0L2NvcmUveGRwLmMtNzkzLVxubmV0L2NvcmUveGRwLmM6Nzk0OnN0cnVjdCBza19idWZmICpfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxubmV0L2NvcmUveGRwLmMtNzk1LVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3hkcC5jLTg0Ni19XG5uZXQvY29yZS94ZHAuYzo4NDc6RVhQT1JUX1NZTUJPTF9HUEwoX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUpO1xubmV0L2NvcmUveGRwLmMtODQ4LVxubmV0L2NvcmUveGRwLmM9ODQ5PXN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcbi0tXG5uZXQvY29yZS94ZHAuYy04NTktXG5uZXQvY29yZS94ZHAuYzo4NjA6XHRyZXR1cm4gX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoeGRwZiwgc2tiLCBkZXYpO1xubmV0L2NvcmUveGRwLmMtODYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBraWNrcyBpbnRvIGdlYXI6IHRoaXMgZnVuY3Rpb24gaXMgKmNyaXRpY2FsKi4gSXQmIzM5O3Mgd2hlcmUgdGhlIHJhdyBYRFAgZGF0YSwgdGhlIEV0aGVybmV0IGZyYW1lIHRoYXQgd2UmIzM5O3ZlIHJlY2VpdmVkLCBnZXRzIHRyYW5zZm9ybWVkIGludG8gYSBgc2tfYnVmZmAgLS0gdGhlIHN0YW5kYXJkIG5ldHdvcmsgYnVmZmVyIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2sgdW5kZXJzdGFuZHMuIFRoaXMgaXMgdGhlIGNob2tlcG9pbnQsIHRoZSBicmlkZ2UgYmV0d2VlbiB0aGUgaGlnaC1wZXJmb3JtYW5jZSBYRFAgd29ybGQgYW5kIHRoZSBicm9hZGVyIGtlcm5lbCBuZXR3b3JraW5nIGVjb3N5c3RlbS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IHBhY2tldCBhY2Nlc3MsIGxpa2VseSBieXBhc3NpbmcgbWFueSBvZiB0aGUgdXN1YWwgTmV0ZmlsdGVyIGhvb2tzIGFuZCBkcml2ZXIgcHJlLXByb2Nlc3Npbmcgc3RlcHMuIFRoaXMgZ2l2ZXMgdXMgbWFzc2l2ZSBwZXJmb3JtYW5jZSBnYWlucywgYnV0IGl0ICphbHNvKiBtZWFucyB3ZSBuZWVkIHRvIGJlIGluY3JlZGlibHkgY2FyZWZ1bC4gQW55IGVycm9ycyBpbiB0aGlzIGZ1bmN0aW9uIGNhbiBjb3JydXB0IG1lbW9yeSwgY3Jhc2ggdGhlIHN5c3RlbSwgb3Igb3BlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHNldmVyYWwga2V5IGFyZWFzOgoKKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGlzIHRoZSBgc2tiYCBhbGxvY2F0ZWQ/IFdoYXQgcG9vbHMgYXJlIHVzZWQ/IEFyZSB3ZSBlZmZpY2llbnRseSByZS11c2luZyBidWZmZXJzPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb3IgZXhjZXNzaXZlIG1lbW9yeSBjb3B5aW5nPyBJIGhvcGUgdGhlIGFsbG9jYXRpb24gc2NoZW1lIGlzIGVmZmljaWVudCwgcGVyaGFwcyB1c2luZyBhIGRlZGljYXRlZCBYRFAtc3BlY2lmaWMgYnVmZmVyIGFsbG9jYXRvciB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgdGhlIGdlbmVyYWwtcHVycG9zZSBrZXJuZWwgYWxsb2NhdG9ycy4KKiAgICoqSGVhZGVyIENvbnN0cnVjdGlvbjoqKiBXZSYjMzk7cmUgZ29pbmcgdG8gYmUgYWRkaW5nIHRoZSBMMiwgTDMgYW5kIHBlcmhhcHMgTDQgaGVhZGVycy4gQXJlIHRoZXJlIGFueSBhc3N1bXB0aW9ucyBiZWluZyBtYWRlIGFib3V0IHRoZSBmcmFtZSBmb3JtYXQ/IEFyZSB0aGV5IGhhbmRsaW5nIFZMQU4gdGFncywgVlhMQU4sIG9yIG90aGVyIGVuY2Fwc3VsYXRpb24gcHJvcGVybHk/IEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbXBhY3Qgb2YgcG90ZW50aWFsIGhhcmR3YXJlIG9mZmxvYWQgbWVjaGFuaXNtcy4gQW55IGluY29ycmVjdCBoZWFkZXIgbWFuaXB1bGF0aW9uIGhlcmUgY2FuIHdyZWFrIGhhdm9jIG9uIHBhY2tldCBwcm9jZXNzaW5nIGRvd25zdHJlYW0uCiogICAqKkNoZWNrc3VtIENhbGN1bGF0aW9uOioqIEhvdyBpcyB0aGUgY2hlY2tzdW0gaGFuZGxpbmcgaW1wbGVtZW50ZWQ/IEFyZSB3ZSBtYWtpbmcgdXNlIG9mIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQgY2FwYWJpbGl0aWVzIG9mIHRoZSBOSUM/IE9yIGlzIHRoZSBjaGVja3N1bSBiZWluZyBjYWxjdWxhdGVkIGluIHNvZnR3YXJlPyBJZiBpdCYjMzk7cyBzb2Z0d2FyZSwgcGVyZm9ybWFuY2UgYmVjb21lcyBhIGh1Z2UgY29uY2Vybi4gQW55IG1pc3Rha2VzIGluIGNoZWNrc3VtIGNhbGN1bGF0aW9uIHdpbGwgbGVhZCB0byBkcm9wcGVkIHBhY2tldHMuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGVyZSYjMzk7cyBhIHByb2JsZW0sIGxpa2UgYW4gb3V0LW9mLW1lbW9yeSBjb25kaXRpb24gb3IgYW4gaW52YWxpZCBmcmFtZT8gSXMgdGhlcmUgcm9idXN0IGVycm9yIGNoZWNraW5nPyBBcmUgd2UgY29ycmVjdGx5IGhhbmRsaW5nIGRpZmZlcmVudCBlcnJvciBjYXNlcz8gQSBjb3JlIGR1bXAgaXMgdGhlIGxhc3QgdGhpbmcgd2Ugd2FudC4KKiAgICoqSW50ZWdyYXRpb24gd2l0aCB0aGUgQ29yZSBTdGFjazoqKiBIb3cgY2xlYW5seSBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZCBvZmYgdGhlIGBza2JgIHRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrPyBJcyBpdCBlZmZpY2llbnQsIG9yIGFyZSB0aGVyZSB1bm5lY2Vzc2FyeSBjb3BpZXMgb3IgY29udGV4dCBzd2l0Y2hlcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZWZmaWNpZW5jaWVzIGluIHRoZSB0cmFuc2l0aW9uIGZyb20gWERQIHRvIHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIHBhdGguCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhpcyBpcyBhIHJvYnVzdCBhbmQgZWZmaWNpZW50IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgWERQLXRvLVNLQiBjb252ZXJzaW9uIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IGhvbGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uICp0aG9yb3VnaGx5KiB0byBldmFsdWF0ZSB0aGUgb3ZlcmFsbCBYRFAgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0OTpcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcbiA4NTA6XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gODUxOlx0e1xuIDg1MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA4NTM6XHRcbiA4NTQ6XHRcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2MobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLCBHRlBfQVRPTUlDKTtcbiA4NTU6XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA4NTY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODU3Olx0XG4gODU4Olx0XHRtZW1zZXQoc2tiLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkpO1xuIDg1OTpcdFxuIDg2MDpcdFx0cmV0dXJuIF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHhkcGYsIHNrYiwgZGV2KTtcbiA4NjE6XHR9XG4gODYyOlx0RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKTtcbiA4NjM6XHRcbiA4NjQ6XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmX2Nsb25lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpXG4gODY1Olx0e1xuIDg2NjpcdFx0dW5zaWduZWQgaW50IGhlYWRyb29tLCB0b3RhbHNpemU7XG4gODY3Olx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICpueGRwZjtcbiA4Njg6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBYRFAgU0tCIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgWERQIGZyYW1lcyBnZXQgdHJhbnNmb3JtZWQgaW50byBTS0JzLCBhbmQgSSYjMzk7dmUgaGl0IGEgaGVhZC1zY3JhdGNoZXIuIFNwZWNpZmljYWxseSwgaG93IGRvZXMgdGhlIHN5c3RlbSBrbm93IHRvIGZyZWUgdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0ZWQgZm9yIHRoZSBYRFAgZnJhbWUgb25jZSB0aGUgU0tCIGlzIGRvbmUgd2l0aCBpdD8KCkkgc3RhcnRlZCB3aXRoIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAuIEl0IHVzZXMgYGJ1aWxkX3NrYl9hcm91bmRgLCB3aGljaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBzZXR0aW5nIGBza2ItJmd0O2hlYWRgIHRvIGBoYXJkX3N0YXJ0YC4gQnV0IHdhaXQgYSBzZWNvbmQsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBzZXQgYW55IGtpbmQgb2YgZmxhZyBsaWtlIGBza2ItJmd0O2hlYWRfZnJhZ2AsIHdoaWNoIHdvdWxkIHVzdWFsbHkgaW5kaWNhdGUgdGhlIGFsbG9jYXRpb24gbWV0aG9kLiBUaGVuLCBsb29raW5nIGF0IGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgLCBJIHNlZSBpdCBzZXRzIGBza2ItJmd0O2hlYWQgPSBkYXRhYC4gU3RpbGwgbm90aGluZyBhYm91dCBkZXN0cnVjdG9ycyBvciBgc2tiLSZndDtoZWFkX2ZyYWdgLgoKTXkgbWluZCBzdGFydHMgcmFjaW5nLi4uIElmIGBza2ItJmd0O2hlYWRfZnJhZ2AgcmVtYWlucyBhdCB6ZXJvLCBhcyBzZWVtcyB0byBiZSB0aGUgY2FzZSwgYHNrYl9mcmVlX2hlYWRgIHdpbGwganVzdCBjYWxsIGBrZnJlZShza2ItJmd0O2hlYWQpYC4gQnV0LCBob2xkIG9uISBUaGUgbWVtb3J5IGZvciBgc2tiLSZndDtoZWFkYCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQgYnkgYGRldl9hbGxvY19wYWdlKClgLCB3aGljaCBpcyBhIHBhZ2UgYWxsb2NhdG9yISBDYWxsaW5nIGBrZnJlZWAgb24gYSBwYWdlIHBvaW50ZXIgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyIQoKSSByZWFsaXplIHRoYXQgc29tZXdoZXJlLCB0aGVyZSBtdXN0IGJlIGEgd2F5IHRvIHRlbGwgdGhlIFNLQiBpdCBoYXMgYSBwYWdlIHRoYXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQgdmlhIGBwdXRfcGFnZWAgaW5zdGVhZCBvZiBga2ZyZWVgLiBJIHJlbWVtYmVyZWQgdGhhdCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBkb2VzIHNldCBgeGRwZi0mZ3Q7bWVtX3R5cGUgPSBNRU1fVFlQRV9QQUdFX09SREVSMGAuIEkga25vdyB0aGF0IGB4ZHBfcmV0dXJuX2ZyYW1lYCB3aWxsIGNhbGwgYHB1dF9wYWdlYCB3aGVuIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBYRFAgZnJhbWUsIGJhc2VkIG9uIGNoZWNraW5nIGBtZW1fdHlwZWAuIEJ1dCBob3cgZG9lcyBpdCBrbm93IHRvIGNhbGwgYHB1dF9wYWdlYCBmcm9tIHRoZSBTS0Igc2lkZT8gSSBjYW4mIzM5O3QgZmluZCBhbnl0aGluZyBpbiBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCB0aGF0IHNldHMgdXAgYSBkZXN0cnVjdG9yIGZ1bmN0aW9uLgoKT2theSwgbGV0IG1lIHJlLWV4YW1pbmUgYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBhZ2Fpbi4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nIGNydWNpYWwgaGVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBgcHV0X3BhZ2VgIGNhbGwgaXMgYmVpbmcgd2lyZWQgaW50byB0aGUgU0tCIGxpZmVjeWNsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS94ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODE1Olx0XHRoYXJkX3N0YXJ0ID0geGRwZi1cdTAwM2VkYXRhIC0gaGVhZHJvb207XG4gODE2Olx0XHRza2IgPSBidWlsZF9za2JfYXJvdW5kKHNrYiwgaGFyZF9zdGFydCwgZnJhbWVfc2l6ZSk7XG4gODE3Olx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gODE4Olx0XHRcdHJldHVybiBOVUxMO1xuIDgxOTpcdFxuIDgyMDpcdFx0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XG4gODIxOlx0XHRfX3NrYl9wdXQoc2tiLCB4ZHBmLVx1MDAzZWxlbik7XG4gODIyOlx0XHRpZiAoeGRwZi1cdTAwM2VtZXRhc2l6ZSlcbiA4MjM6XHRcdFx0c2tiX21ldGFkYXRhX3NldChza2IsIHhkcGYtXHUwMDNlbWV0YXNpemUpO1xuIDgyNDpcdFxuIDgyNTpcdFx0aWYgKHVubGlrZWx5KHhkcF9mcmFtZV9oYXNfZnJhZ3MoeGRwZikpKVxuIDgyNjpcdFx0XHR4ZHBfdXBkYXRlX3NrYl9mcmFnc19pbmZvKHNrYiwgbnJfZnJhZ3MsIHNpbmZvLVx1MDAzZXhkcF9mcmFnc19zaXplLFxuIDgyNzpcdFx0XHRcdFx0XHQgIG5yX2ZyYWdzICogeGRwZi1cdTAwM2VmcmFtZV9zeixcbiA4Mjg6XHRcdFx0XHRcdFx0ICB4ZHBfZnJhbWVfZ2V0X3NrYl9mbGFncyh4ZHBmKSk7XG4gODI5Olx0XG4gODMwOlx0XHQvKiBFc3NlbnRpYWwgU0tCIGluZm86IHByb3RvY29sIGFuZCBza2ItXHUwMDNlZGV2ICovXG4gODMxOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XG4gODMyOlx0XG4gODMzOlx0XHQvKiBPcHRpb25hbCBTS0IgaW5mbywgY3VycmVudGx5IG1pc3Npbmc6XG4gODM0Olx0XHQgKiAtIEhXIGNoZWNrc3VtIGluZm9cdFx0KHNrYi1cdTAwM2VpcF9zdW1tZWQpXG4gODM1Olx0XHQgKiAtIEhXIFJYIGhhc2hcdFx0XHQoc2tiX3NldF9oYXNoKVxuIDgzNjpcdFx0ICogLSBSWCByaW5nIGRldiBxdWV1ZSBpbmRleFx0KHNrYl9yZWNvcmRfcnhfcXVldWUpXG4gODM3Olx0XHQgKi9cbiA4Mzg6XHRcbiA4Mzk6XHRcdGlmICh4ZHBmLVx1MDAzZW1lbV90eXBlID09IE1FTV9UWVBFX1BBR0VfUE9PTClcbiA4NDA6XHRcdFx0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcbiA4NDE6XHRcbiA4NDI6XHRcdC8qIEFsbG93IFNLQiB0byByZXVzZSBhcmVhIHVzZWQgYnkgeGRwX2ZyYW1lICovXG4gODQzOlx0XHR4ZHBfc2NydWJfZnJhbWUoeGRwZik7XG4gODQ0Olx0XG4gODQ1Olx0XHRyZXR1cm4gc2tiO1xuIDg0NjpcdH1cbiA4NDc6XHRFWFBPUlRfU1lNQk9MX0dQTChfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZSk7XG4gODQ4Olx0XG4gODQ5Olx0c3RydWN0IHNrX2J1ZmYgKnhkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxuIDg1MDpcdFx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA4NTE6XHR7XG4gODUyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDg1MzpcdFxuIDg1NDpcdFx0c2tiID0ga21lbV9jYWNoZV9hbGxvYyhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsIEdGUF9BVE9NSUMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRFAgRnJhbWUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uY2VybnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgWERQIGNvZGUgZmxvdyBhbmQgc29tZXRoaW5nIGltbWVkaWF0ZWx5IGp1bXBlZCBvdXQgYXQgbWUuIFRoZSBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBmdW5jdGlvbiBzZXRzIGB4ZHBmLSZndDttZW1fdHlwZWAgdG8gYE1FTV9UWVBFX1BBR0VfT1JERVIwYC4gQW5kIHRoZW4sIGxhdGVyLCBpbiBgX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgLCB0aGVyZSYjMzk7cyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHhkcGYtJmd0O21lbV90eXBlID09IE1FTV9UWVBFX1BBR0VfUE9PTCkgc2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtgLiBCdXQgdGhlcmUmIzM5O3MgKm5vdGhpbmcqIGhhcHBlbmluZyBmb3IgYE1FTV9UWVBFX1BBR0VfT1JERVIwYCEgSXQmIzM5O3MgbGlrZSwgY3JpY2tldHMuIFRoZSBsb2dpYyBoYW5kbGVzIHRoZSBgUEFHRV9QT09MYCBtZW1vcnkgdHlwZSBmb3IgcmVjeWNsaW5nIGJ1dCBpdCBpcyBtaXNzaW5nIGZvciB0aGUgb3RoZXIgbWVtb3J5IHR5cGUuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIGdldCBhIHNpbmtpbmcgZmVlbGluZ+KApiBob3cgaXMgdGhpcyBgUEFHRV9PUkRFUjBgIG1lbW9yeSBhY3R1YWxseSBiZWluZyBmcmVlZD8gSXQmIzM5O3Mgbm90IGxpa2UgdGhlc2UgZnJhbWVzIGNhbiBsaXZlIGZvcmV2ZXIuIFRoaXMgaGFzIHRvIGJlIGFkZHJlc3NlZC4gSXQgaXMgZWl0aGVyIGZyZWVkLCBhbmQgYSBsYWNrIG9mIGxvZ2ljIGhlcmUgbWVhbnMgaXQgY2FuIGNhdXNlIGNvcnJ1cHRpb24gb3IgbWVtb3J5IGxlYWtzLCBvciBpdCBpcyBub3QgZnJlZWQsIGFuZCBpcyBhbiBvdmVyc2lnaHQuCgpJIG5lZWQgdG8gbG9vayBpbnRvIGBza2JfZnJlZV9oZWFkYCBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBkZWFsbG9jYXRpb24gd2hlbiB0aGUgYG1lbV90eXBlYCBpcyBub3QgYFBBR0VfUE9PTGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciBtdXN0IGxpZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmbG93IGZyb20gc3RhcnQgdG8gZmluaXNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfZnJlZV9oZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTA3NT1zdGF0aWMgdm9pZCBza2Jfa2ZyZWVfaGVhZCh2b2lkICpoZWFkKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTEwNzktXG5uZXQvY29yZS9za2J1ZmYuYzoxMDgwOnN0YXRpYyB2b2lkIHNrYl9mcmVlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTEwODEte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTEwOTM9c3RhdGljIHZvaWQgc2tiX3JlbGVhc2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTExNS1cbm5ldC9jb3JlL3NrYnVmZi5jOjExMTY6XHRza2JfZnJlZV9oZWFkKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy0xMTE3LWV4aXQ6XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjI4Nz1pbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMzM2LVx0fSBlbHNlIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjIzMzc6XHRcdHNrYl9mcmVlX2hlYWQoc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIzMzgtXHR9XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjgwOD1zdGF0aWMgaW50IHBza2JfY2FydmVfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgb2ZmLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY4NTMtXHRcdCAqL1xubmV0L2NvcmUvc2tidWZmLmM6Njg1NDpcdFx0c2tiX2ZyZWVfaGVhZChza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNjg1NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgZGVsdmluZyBpbnRvIGBza2JfZnJlZV9oZWFkYDoKCioqRGVjb25zdHJ1Y3RpbmcgYHNrYl9mcmVlX2hlYWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYHNrYl9mcmVlX2hlYWRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIGl0cyAqcHVycG9zZSogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBJIGtub3cgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiBmb3IgZnJlZWluZyBhbiBgc2tfYnVmZmAgKHNvY2tldCBidWZmZXIpIGhlYWRlci4gU28sIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlICptZXRhZGF0YSogYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIg4oCTIHRoZSBjb250cm9sIGluZm9ybWF0aW9uLCByZWZlcmVuY2UgY291bnRzLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBzb21lIGluaXRpYWwgcGFja2V0IGRhdGEg4oCTIGlzIHByb3Blcmx5IHJlbGVhc2VkLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50OyBpcyB0aGlzIGEgc2ltcGxlIGBrZnJlZSgpYCBvcGVyYXRpb24sIG9yIGlzIHRoZXJlIG1vcmUgaW52b2x2ZWQgZHVlIHRvIHRoZSBwb3RlbnRpYWxseSBzaGFyZWQgbmF0dXJlIG9mIGBza19idWZmYHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGF0YT8KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBpdCYjMzk7cyB1bmxpa2VseSB0byBiZSAqanVzdCogYSBga2ZyZWUoKWAuIEkgYmV0IHRoZXJlJiMzOTtzIGNydWNpYWwgY2xlYW51cCByZXF1aXJlZCwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBwb3RlbnRpYWwgc2hhcmluZy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBvcGVyYXRpb25zIHRoYXQgZGVjcmVtZW50IHJlZmNvdW50cyAobGlrZWx5IGBza2Jfc2hhcmVkYCBhbmQgYHNrYl9zaGluZm9gKSBhbmQgaGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlIGJ1ZmZlciBpc24mIzM5O3QgdHJ1bHkgdGhlICYjMzQ7bGFzdCB1c2VyJiMzNDsgb2YgdGhlIGRhdGEuIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCBpdCBtaWdodCBuZWVkIHRvIGludGVyYWN0IHdpdGggcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGxpa2UgdGhlIGBza19idWZmYCYjMzk7cyBgc2tiX3NoYXJlZF9pbmZvYCBhbmQgYW55IGFzc29jaWF0ZWQgZnJhZ21lbnRzLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIG5ldHdvcmsgc3RhY2ssIHNvIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGFyZSBwYXJhbW91bnQuIFRoZXJlJiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBzcGlubG9jayBpbnZvbHZlZCBzb21ld2hlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBsb2NrIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgY29udGV4dCBpdCYjMzk7cyBwcm90ZWN0aW5nLiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0PyBJZiBzbywgdGhhdCYjMzk7bGwgZGljdGF0ZSB0aGUgdHlwZXMgb2YgbG9ja2luZyBwcmltaXRpdmVzIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZS4KCkJleW9uZCB0aGUgZnVuZGFtZW50YWwgdGFza3MsIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgZXJyb3IgaGFuZGxpbmcuIEhvdyBkb2VzIGBza2JfZnJlZV9oZWFkYCBkZWFsIHdpdGggc2l0dWF0aW9ucyB3aGVyZSB0aGUgYHNrX2J1ZmZgIGlzIGFscmVhZHkgcGFydGlhbGx5IGZyZWVkPyBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgbnVsbCBwb2ludGVycyB0byBwcmV2ZW50IGNyYXNoZXM/IEFuZCBhcmUgdGhlcmUgYW55IGRlYnVnIHN0YXRlbWVudHMgb3IgYXNzZXJ0aW9ucyBwcmVzZW50IHRoYXQgY2FuIGhlbHAgaW4gZGVidWdnaW5nIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIHJ1bnRpbWU/CgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGxpZmVjeWNsZSBvZiB0aGUgYnVmZmVyIGhlYWRlciBhdCB0aGUgdGltZSBpdCYjMzk7cyByZWxlYXNlZCwgcmlnaHQgZG93biB0byB0aGUgYml0LiBJIGV4cGVjdCB0byBzZWUgb3BlcmF0aW9ucyB0aGF0IGFyZSBzYWZlLCB0aGF0IGhhbmRsZSBjb25jdXJyZW5jeSBncmFjZWZ1bGx5LCBhbmQgdGhhdCBsZWF2ZSB0aGUgc3lzdGVtIGluIGEgY29uc2lzdGVudCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3NTpcdHN0YXRpYyB2b2lkIHNrYl9rZnJlZV9oZWFkKHZvaWQgKmhlYWQpXG4xMDc2Olx0e1xuMTA3NzpcdFx0a2ZyZWUoaGVhZCk7XG4xMDc4Olx0fVxuMTA3OTpcdFxuMTA4MDpcdHN0YXRpYyB2b2lkIHNrYl9mcmVlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwODE6XHR7XG4xMDgyOlx0XHR1bnNpZ25lZCBjaGFyICpoZWFkID0gc2tiLVx1MDAzZWhlYWQ7XG4xMDgzOlx0XG4xMDg0Olx0XHRpZiAoc2tiLVx1MDAzZWhlYWRfZnJhZykge1xuMTA4NTpcdFx0XHRpZiAoc2tiX3BwX3JlY3ljbGUoc2tiLCBoZWFkKSlcbjEwODY6XHRcdFx0XHRyZXR1cm47XG4xMDg3Olx0XHRcdHNrYl9mcmVlX2ZyYWcoaGVhZCk7XG4xMDg4Olx0XHR9IGVsc2Uge1xuMTA4OTpcdFx0XHRza2Jfa2ZyZWVfaGVhZChoZWFkKTtcbjEwOTA6XHRcdH1cbjEwOTE6XHR9XG4xMDkyOlx0XG4xMDkzOlx0c3RhdGljIHZvaWQgc2tiX3JlbGVhc2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMDk0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IENvcnJ1cHRpb24gSXNzdWUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBza2JfZnJlZV9mcmFnYCBzaXR1YXRpb24uIFNvbWV0aGluZyYjMzk7cyBub3QgcmlnaHQuIFRoZSBjb2RlIHJlbGllcyBvbiBgc2tiLSZndDtoZWFkX2ZyYWdgIGJlaW5nIHNldCBmb3IgYHNrYl9mcmVlX2ZyYWdgIHRvIGJlIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byBjYWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGZsYWcgaXMgYmVpbmcgc2V0IGluIHJlbGF0aW9uIHRvIGBza2JfZnJlZV9mcmFnYC4KCkZpcnN0LCBJIHRob3VnaHQgaXQgd2FzIHNldCBpbiBgYnVpbGRfc2tiX2Fyb3VuZGAsIGJ1dCBJJiMzOTttIGdvaW5nIGJhY2sgYW5kIGRvdWJsZS1jaGVja2luZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBiZWNhdXNlIEkga25vdyB0aG9zZSB0d28gd29yayB0b2dldGhlci4gTm9wZSwgc3RpbGwgZG9lc24mIzM5O3QgbG9vayBsaWtlIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHNldHMgYHNrYi0mZ3Q7aGVhZF9mcmFnYC4gVGhhdCYjMzk7cyBub3Qgd2hhdCBJIGV4cGVjdGVkLgoKTm93LCBhIHJlYWxpemF0aW9uIGhpdHMgbWU6IGBza2ItJmd0O2hlYWRfZnJhZ2AgaXMgYSBiaXRmaWVsZCwgc28gSSBrbm93IGBtZW1zZXQoc2tiLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkpYCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGNsZWFyIGl0LCBzbyBpdCYjMzk7cyBpbml0aWFsaXplZCB0byB6ZXJvLiBPa2F5LCB0aGlzIGlzIGltcG9ydGFudC4gVGhpcyBtZWFucyB0aGUgZGVmYXVsdCBzdGF0ZSBzaG91bGQgaGF2ZSB0aGlzIGZsYWcgY2xlYXJlZC4gVGhpcyBsZWFkcyB0byBgc2tiX2ZyZWVfaGVhZGAgYW5kIGBza2Jfa2ZyZWVfaGVhZGAsIGFuZCB0aGVuIHdlIGdldCB0byBga2ZyZWUoaGVhZClgLiBXYWl0IGEgbWludXRlLCBidXQgYGhlYWRgIGlzIGBwYWdlX3RvX3ZpcnQocGFnZSlgIQoKQWhhISBXZSYjMzk7cmUgZnJlZWluZyBhIHBhZ2UgYWxsb2NhdGVkIHdpdGggYGFsbG9jX3BhZ2VgIHVzaW5nIGBrZnJlZWAsIHdoaWNoIGlzIGEgY2xhc3NpYyBidWchIFRoYXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBpdC4gVGhhdCYjMzk7cyBhIGh1Z2UgcHJvYmxlbS4gVGhpcyB3aWxsIGNhdXNlIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaWYgd2UmIzM5O3JlIG5vdCBjYXJlZnVsLgoKT2theSwgSSBuZWVkIHRvIGJhY2sgdXAgYW5kIGNvbmZpcm0uIFdoZXJlIGVsc2UgaXMgdGhpcyBgc2tiLSZndDtoZWFkX2ZyYWdgIGJlaW5nIHNldD8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB0b3VjaCB0aGlzLiBMZXQmIzM5O3Mgc2VlIGlmIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIGhhcyBhbnl0aGluZyB0byBkbyB3aXRoIGl0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGVhZF9mcmFnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRFAgUGFja2V0IFByb2Nlc3NpbmcgLSBTS0IgQWxsb2NhdGlvbiBDb25mdXNpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBYRFAgcGFja2V0IHByb2Nlc3NpbmcgZmxvdywgYW5kIEkmIzM5O20gaGl0dGluZyBhIHNuYWcuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHhkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgd291bGQgaGFuZGxlIHNldHRpbmcgdGhlIGBoZWFkX2ZyYWdgIGZsYWcgd2l0aGluIHRoZSBgc2tiYCBzdHJ1Y3QuIEJ1dCBub3cgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgdGhhdC4gSXQgZG9lc24mIzM5O3Qgc2VlbSB0bywgYXQgbGVhc3QgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4KClRoZW4gSSBzdGFydGVkIGNvbnNpZGVyaW5nIGBidWlsZF9za2JfYXJvdW5kYCBhbmQgd2hldGhlciBpdCB3YXMgdXNlZCB3aGVuIHRoZSBgc2tiYCYjMzk7cyBgaGVhZGAgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgLiBCdXQgaG9sZCBvbiwgaXMgYGJ1aWxkX3NrYmAgZG9pbmcgdGhlIGBrbWFsbG9jYCB3b3JrPyBObywgYGJ1aWxkX3NrYmAgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IGp1c3QgZm9yIGBrbWFsbG9jYCBhbGxvY2F0aW9uLiBPa2F5LCBpdCYjMzk7cyB1c2VkIGZvciBgaGVhZGAgYmVpbmcgZWl0aGVyIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2Agb3IgYGFsbG9jX3BhZ2VgLiBJdCBsb29rcyBsaWtlIEkgd2FzIGEgbGl0dGxlIG9mZiBiYXNlIHRoZXJlLgoKQWgsIGhhbmcgb24gYSBzZWNvbmQuIEl0IGxvb2tzIGxpa2UgYF9fYnVpbGRfc2tiYCAqZG9lcyogc2V0IGBza2ItJmd0O2hlYWRfZnJhZyA9IDFgIGlmIGBmcmFnX3NpemVgIGlzIG5vbi16ZXJvLCB3aGljaCB3b3VsZCBpbXBseSBpdOKAmXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGF0IGJpdC4gSeKAmW0gdGhpbmtpbmcgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGZvciBzdXJlLiBMZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYF9fYnVpbGRfc2tiYCB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdHN0cnVjdCBza19idWZmICpfX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuIDQ5MTpcdHtcbiA0OTI6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNDkzOlx0XG4gNDk0Olx0XHRza2IgPSBrbWVtX2NhY2hlX2FsbG9jKG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZSxcbiA0OTU6XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gNDk2Olx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNDk3Olx0XHRcdHJldHVybiBOVUxMO1xuIDQ5ODpcdFxuIDQ5OTpcdFx0c2tidWZmX2NsZWFyKHNrYik7XG4gNTAwOlx0XHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuIDUwMTpcdFxuIDUwMjpcdFx0cmV0dXJuIHNrYjtcbiA1MDM6XHR9XG4gNTA0Olx0XG4gNTA1Olx0LyogYnVpbGRfc2tiKCkgaXMgd3JhcHBlciBvdmVyIF9fYnVpbGRfc2tiKCksIHRoYXQgc3BlY2lmaWNhbGx5XG4gNTA2Olx0ICogdGFrZXMgY2FyZSBvZiBza2ItXHUwMDNlaGVhZCBhbmQgc2tiLVx1MDAzZXBmbWVtYWxsb2NcbiA1MDc6XHQgKi9cbiA1MDg6XHRzdHJ1Y3Qgc2tfYnVmZiAqYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4gNTA5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3BlYWtpbmcgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFuZCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuCgoqKkRpdmluZyBpbnRvIGBidWlsZF9za2JgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGJ1aWxkX3NrYmAmIzM0Oy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gbGlrZWx5IGRlYnVnZ2luZywgb3B0aW1pemluZywgb3IgcGVyaGFwcyBzaW1wbHkgcmVmcmVzaGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYWNrZXQgY29uc3RydWN0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIGBidWlsZF9za2JgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIHdoYXRldmVyIHRoZSByZWFzb24gSSYjMzk7bSBmb2N1c2luZyBvbiBpdCwgaXQgZGVtYW5kcyBjYXJlZnVsIGF0dGVudGlvbi4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIFByb2JhYmx5IEkgaGF2ZSBzb21lIHNwZWNpZmljIHBlcmZvcm1hbmNlIGNvbmNlcm4gb3IgZXJyb3IgSSBhbSB0cnlpbmcgdG8gdHJhY2sgZG93bi4gSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXMgd2VsbCwgcGFydGljdWxhcmx5IHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgbWVtb3J5IGFsbG9jYXRpb24gaW5lZmZpY2llbmNpZXMsIG9yIGV2ZW4gc3VidGxlIHJhY2UgY29uZGl0aW9ucy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHBhY2tldCBidWlsZCBmdW5jdGlvbnMgYXJlIG9mdGVuIHRoZSBzb3VyY2Ugb2YgZGlmZmljdWx0IGJ1Z3MuIFNvLCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwODpcdHN0cnVjdCBza19idWZmICpidWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbiA1MDk6XHR7XG4gNTEwOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19idWlsZF9za2IoZGF0YSwgZnJhZ19zaXplKTtcbiA1MTE6XHRcbiA1MTI6XHRcdGlmIChsaWtlbHkoc2tiIFx1MDAyNlx1MDAyNiBmcmFnX3NpemUpKSB7XG4gNTEzOlx0XHRcdHNrYi1cdTAwM2VoZWFkX2ZyYWcgPSAxO1xuIDUxNDpcdFx0XHRza2JfcHJvcGFnYXRlX3BmbWVtYWxsb2ModmlydF90b19oZWFkX3BhZ2UoZGF0YSksIHNrYik7XG4gNTE1Olx0XHR9XG4gNTE2Olx0XHRyZXR1cm4gc2tiO1xuIDUxNzpcdH1cbiA1MTg6XHRFWFBPUlRfU1lNQk9MKGJ1aWxkX3NrYik7XG4gNTE5Olx0XG4gNTIwOlx0LyoqXG4gNTIxOlx0ICogYnVpbGRfc2tiX2Fyb3VuZCAtIGJ1aWxkIGEgbmV0d29yayBidWZmZXIgYXJvdW5kIHByb3ZpZGVkIHNrYlxuIDUyMjpcdCAqIEBza2I6IHNrX2J1ZmYgcHJvdmlkZSBieSBjYWxsZXIsIG11c3QgYmUgbWVtc2V0IGNsZWFyZWRcbiA1MjM6XHQgKiBAZGF0YTogZGF0YSBidWZmZXIgcHJvdmlkZWQgYnkgY2FsbGVyXG4gNTI0Olx0ICogQGZyYWdfc2l6ZTogc2l6ZSBvZiBkYXRhXG4gNTI1Olx0ICovXG4gNTI2Olx0c3RydWN0IHNrX2J1ZmYgKmJ1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1Mjc6XHRcdFx0XHRcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEyNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFNLQiBGcmFnbWVudGF0aW9uIEJlaGF2aW9yKioKClJpZ2h0LCBva2F5LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGJ1aWxkX3NrYmAgZnVuY3Rpb24sIGFuZCBJJiMzOTt2ZSBqdXN0IHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBidWlsZF9za2JgIHNwZWNpZmljYWxseSBzZXRzIHRoZSBgc2tiLSZndDtoZWFkX2ZyYWdgIGZsYWcgdG8gMS4gVGhhdCBzZWVtcyBkZWxpYmVyYXRlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHNjcnV0aW5pemUgaXRzIGNvdW50ZXJwYXJ0LCBgYnVpbGRfc2tiX2Fyb3VuZGAuIEkgZXhwZWN0IGEgZGVncmVlIG9mIHN5bW1ldHJ5IGhlcmUsIGJ1dCBJIGhhdmUgYSBzdHJvbmcgZmVlbGluZyB0aGlzIGBoZWFkX2ZyYWdgIGJlaGF2aW9yIG1pZ2h0IGJlIHdoZXJlIHRoZSB0d28gZGlmZmVyLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBidWlsZF9za2JfYXJvdW5kYCB0byBjb25maXJtIHdoZXRoZXIgb3Igbm90IGl0IG1pcnJvcnMgdGhlIHNhbWUgc2V0dGluZy4gVGhpcyBkaWZmZXJlbmNlIGNvdWxkIGhhdmUgc29tZSBtZWFuaW5nZnVsIGltcGxpY2F0aW9ucywgZGVwZW5kaW5nIG9uIGhvdyBmcmFnbWVudGF0aW9uIGlzIGhhbmRsZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTI2Olx0c3RydWN0IHNrX2J1ZmYgKmJ1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1Mjc6XHRcdFx0XHRcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuIDUyODpcdHtcbiA1Mjk6XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA1MzA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTMxOlx0XG4gNTMyOlx0XHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuIDUzMzpcdFxuIDUzNDpcdFx0aWYgKGZyYWdfc2l6ZSkge1xuIDUzNTpcdFx0XHRza2ItXHUwMDNlaGVhZF9mcmFnID0gMTtcbiA1MzY6XHRcdFx0c2tiX3Byb3BhZ2F0ZV9wZm1lbWFsbG9jKHZpcnRfdG9faGVhZF9wYWdlKGRhdGEpLCBza2IpO1xuIDUzNzpcdFx0fVxuIDUzODpcdFx0cmV0dXJuIHNrYjtcbiA1Mzk6XHR9XG4gNTQwOlx0RVhQT1JUX1NZTUJPTChidWlsZF9za2JfYXJvdW5kKTtcbiA1NDE6XHRcbiA1NDI6XHQvKipcbiA1NDM6XHQgKiBfX25hcGlfYnVpbGRfc2tiIC0gYnVpbGQgYSBuZXR3b3JrIGJ1ZmZlclxuIDU0NDpcdCAqIEBkYXRhOiBkYXRhIGJ1ZmZlciBwcm92aWRlZCBieSBjYWxsZXJcbiA1NDU6XHQgKiBAZnJhZ19zaXplOiBzaXplIG9mIGRhdGFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGcmFnbWVudCBBbGxvY2F0aW9uIGFuZCBGcmVlaW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGBza2JgIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzLCBhbmQgSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIEl0IGxvb2tzIGxpa2UgYGJ1aWxkX3NrYl9hcm91bmRgIGlzIGFjdHVhbGx5IHNldHRpbmcgYHNrYi0mZ3Q7aGVhZF9mcmFnYCB0byAxLCBpZiBgZnJhZ19zaXplYCBpc24mIzM5O3QgemVyby4gQW5kIGhlcmUsIGBmcmFtZV9zaXplYCBpcyBhIGZ1bGwgYFBBR0VfU0laRWAsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIG5vbi16ZXJvLiBUaGF0IG1lYW5zIGBza2ItJmd0O2hlYWRfZnJhZ2AgaXMgYmVpbmcgY29ycmVjdGx5IHNldC4gR29vZCwgZ29vZC4KClNvLCB3aGVuIGBza2JfZnJlZV9oZWFkYCBpcyBjYWxsZWQsIGl0IHdpbGwgY2FsbCBgc2tiX2ZyZWVfZnJhZyhoZWFkKWAuIEFuZCBgc2tiX2ZyZWVfZnJhZ2AgdGhlbiBjYWxscyBgcGFnZV9mcmFnX2ZyZWUoaGVhZClgLiBOb3csIGBwYWdlX2ZyYWdfZnJlZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgZnJlZWluZywgd2hldGhlciBpdCYjMzk7cyBhIGZ1bGwgcGFnZSBvciBqdXN0IGEgZnJhZ21lbnQuIFNvIGZhciwgc28gZ29vZDsgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBmcmVlZCBjb3JyZWN0bHkuCgpXYWl0IGEgc2Vjb25k4oCmIGhlcmUmIzM5O3Mgd2hlcmUgaXQmIzM5O3MgZ2V0dGluZyBpbnRlcmVzdGluZy4gVGhlIGlzc3VlIGlzIHdpdGggYGhhcmRfc3RhcnRgLCB3aGljaCBpcyBgcGFnZSAmIzQzOyBtZXRhc2l6ZWAuIFNvIGBza2ItJmd0O2hlYWRgIGlzIGF0IGBwYWdlICYjNDM7IG1ldGFzaXplYC4gV2hlbiBgc2tiX2ZyZWVfZnJhZ2AgaXMgY2FsbGVkIHdpdGggYHNrYi0mZ3Q7aGVhZGAsIGl0IGNhbGxzIGBwYWdlX2ZyYWdfZnJlZShwYWdlICYjNDM7IG1ldGFzaXplKWAuIE5vdywgYHBhZ2VfZnJhZ19mcmVlYCB0YWtlcyBhIHZpcnR1YWwgYWRkcmVzcywgZmluZHMgdGhlIGFzc29jaWF0ZWQgcGFnZSwgYW5kIGZyZWVzIGl0LiBTbywgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBwYWdlX2ZyYWdfZnJlZWAgY29ycmVjdGx5IGhhbmRsZXMgdGhlIG9mZnNldC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcGFnZV9mcmFnX2ZyZWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfZnJhZ19mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNTAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwYWdlX2ZyYWdfZnJlZWAgd29ya3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBpdCYjMzk7cyBkZWZpbmVkLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBpdHMgaW5wdXRzLCBhbmQgaXRzIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyB0cmFjZSBiYWNrIHRoZSBkZWZpbml0aW9uIGFuZCBzZWUgd2hlcmUgaXQgbGl2ZXMuIE9uY2UgSSBrbm93IHdoZXJlIGl0IGlzIGRlZmluZWQsIEkmIzM5O2xsIGJlIGFibGUgdG8gZWFzaWx5IGZpbmQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gYW5kIHVzZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9mcmFnX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9mcmFnX2NhY2hlLmM9MTU5PUVYUE9SVF9TWU1CT0woX19wYWdlX2ZyYWdfYWxsb2NfYWxpZ24pO1xuLS1cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jLTE2My0gKi9cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jOjE2NDp2b2lkIHBhZ2VfZnJhZ19mcmVlKHZvaWQgKmFkZHIpXG5tbS9wYWdlX2ZyYWdfY2FjaGUuYy0xNjUte1xuLS1cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jLTE3MC19XG5tbS9wYWdlX2ZyYWdfY2FjaGUuYzoxNzE6RVhQT1JUX1NZTUJPTChwYWdlX2ZyYWdfZnJlZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBmb3IgYHBhZ2VfZnJhZ19mcmVlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuICYjMzQ7TGV0JiMzOTtzIHJlYWQgYHBhZ2VfZnJhZ19mcmVlYC4mIzM0OyBTZWVtcyBsaWtlIHdlJiMzOTtyZSBhYm91dCB0byBleGFtaW5lIHRoZSBjb2RlIHJlbGF0ZWQgdG8gZnJlZWluZyBwYWdlIGZyYWdtZW50cywgbGlrZWx5IHdpdGhpbiBhIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMuIGBwYWdlX2ZyYWdfZnJlZWAgc3VnZ2VzdHMgYSBtZWNoYW5pc20gZm9yIGRlYWxpbmcgd2l0aCBwYXJ0aWFsIHBhZ2VzLCBwZXJoYXBzIHNtYWxsIGFsbG9jYXRpb25zIHRoYXQgZG9uJiMzOTt0IHdhcnJhbnQgYW4gZW50aXJlIHBoeXNpY2FsIHBhZ2UuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSB0aGluZ3M6CgoqICAgKipVbmRlcmx5aW5nIERhdGEgU3RydWN0dXJlczoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdXNlZCB0byB0cmFjayB0aGVzZSBmcmFnbWVudHM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGxpc3QsIGEgbW9yZSBjb21wbGV4IGJpdG1hcCwgb3IgcGVyaGFwcyBhIHBlci1wYWdlIG1ldGFkYXRhIHN0cnVjdHVyZT8gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuCiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBIb3cgaXMgY29uY3VycmVuY3kgaGFuZGxlZD8gSXMgdGhlcmUgbG9ja2luZyBpbnZvbHZlZCwgYW5kIGlmIHNvLCB3aGF0JiMzOTtzIHRoZSBncmFudWxhcml0eT8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJlcXVlbnRseS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBraW5kIG9mIGVycm9yIGNoZWNraW5nIGlzIGltcGxlbWVudGVkPyBBcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHBvaW50ZXJzLCBkb3VibGUtZnJlZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcz8gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIGVzcGVjaWFsbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4KKiAgICoqSW50ZWdyYXRpb24gd2l0aCB0aGUgUGFnZSBBbGxvY2F0b3I6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdCB3aXRoIHRoZSBtYWluIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHJvdXRpbmVzPyBJcyB0aGVyZSBhIGNsZWFyIHNlcGFyYXRpb24gb2YgY29uY2VybnMsIG9yIGFyZSB0aGluZ3MgdGlnaHRseSBjb3VwbGVkPyBBbnkgcG90ZW50aWFsIGZvciBmcmFnbWVudGF0aW9uIHdpdGhpbiB0aGUgcGFnZSBhbGxvY2F0b3IgZHVlIHRvIHRoZSBmcmFnbWVudHM/CiogICAqKlBlcmZvcm1hbmNlOioqIENhbiB3ZSBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgcGVyZm9ybWFuY2UgZnJvbSB0aGUgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcywgb3IgaXMgaXQgZGVzaWduZWQgZm9yIGhpZ2ggdGhyb3VnaHB1dD8gV2lsbCB0aGVyZSBiZSBUTEIgbWlzc2VzIGR1ZSB0byBpdD8KKiAgICoqVXNlIENhc2VzOioqIFdoYXQgYXJlIHRoZSB0eXBpY2FsIHVzZSBjYXNlcyBmb3IgdGhlc2UgcGFnZSBmcmFnbWVudHM/IEFyZSB0aGV5IHVzZWQgaW4gbmV0d29ya2luZyBidWZmZXJzLCBrZXJuZWwgaGVhcHMsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGRlc2lnbiBjaG9pY2VzLgoKRXNzZW50aWFsbHksIEkmIzM5O20gZ29pbmcgdG8gYmUgbWVudGFsbHkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGgsIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgYW5kIHBvdGVudGlhbCBwaXRmYWxscywgY29uc2lkZXJpbmcgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFzIHdlbGwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2ZyYWdfY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTY0Olx0dm9pZCBwYWdlX2ZyYWdfZnJlZSh2b2lkICphZGRyKVxuIDE2NTpcdHtcbiAxNjY6XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoYWRkcik7XG4gMTY3Olx0XG4gMTY4Olx0XHRpZiAodW5saWtlbHkocHV0X3BhZ2VfdGVzdHplcm8ocGFnZSkpKVxuIDE2OTpcdFx0XHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBjb21wb3VuZF9vcmRlcihwYWdlKSk7XG4gMTcwOlx0fVxuIDE3MTpcdEVYUE9SVF9TWU1CT0wocGFnZV9mcmFnX2ZyZWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgWERQIEZyYW1lIEhhbmRsaW5nIGFuZCBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB2aXJ0X3RvX2hlYWRfcGFnZShhZGRyKWAgaXMgc29saWQgZm9yIGFsbCBhZGRyZXNzZXMgd2l0aGluIGEgcGFnZSwgbWVhbmluZyB0aGUgYGZyZWVgIG9wZXJhdGlvbiB3b3JrcyBjb3JyZWN0bHksIGV2ZW4gd2l0aCBgc2tiLSZndDtoZWFkYCBvZmZzZXQuIFRoZSByZWFsIGlzc3VlIGFyaXNlcyBmcm9tIHdoZXJlIGBza2Jfc2hhcmVkX2luZm9gIGlzIHBsYWNlZC4gSXQmIzM5O3MgYWxsb2NhdGVkIGF0IGBoYXJkX3N0YXJ0ICYjNDM7IFBBR0VfU0laRSAtIFNLQl9EQVRBX0FMSUdOKC4uLilgLiBJZiBgaGFyZF9zdGFydGAgYmVnaW5zIGF0IGBwYWdlICYjNDM7IG1ldGFzaXplYCwgYW5kIGBtZXRhc2l6ZWAgaXMgbGFyZ2UsIGBza2Jfc2hhcmVkX2luZm9gIGNhbiBlbmQgdXAgKm91dHNpZGUqIHRoZSBhbGxvY2F0ZWQgcGFnZSwgY2F1c2luZyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLiBTcGVjaWZpY2FsbHksIGlmIGBtZXRhc2l6ZWAgaXMgbGFyZ2VyIHRoYW4gYFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSlgLCBpdCYjMzk7cyBjb21wbGV0ZWx5IG91dCBvZiBib3VuZHMuIEtBU0FOIHNob3VsZCBjYXRjaCB0aGlzIGR1cmluZyB0aGUgYG1lbXNldGAgY2FsbCBpbiBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC4KCkEgc2Vjb25kYXJ5IHByb2JsZW0gaXMgdGhhdCB0aGUgcGFja2V0IGRhdGEgaXRzZWxmIGNvdWxkIHBvdGVudGlhbGx5IG92ZXJsYXAgd2l0aCBgc2tiX3NoYXJlZF9pbmZvYCBpZiBgc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplYCBpcyBncmVhdGVyIHRoYW4gYFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgLiBUaGlzIHJlc3VsdHMgaW4gbWVtb3J5IGNvcnJ1cHRpb24uIEtBU0FOIHdvdWxkIGRldGVjdCB0aGlzIGlmIGNvcnJ1cHRlZCB2YWx1ZXMgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2VzcyBsYXRlciBvbi4KCk5vdywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgaXMgbXkgbWFpbiBjb25jZXJuLCBidXQgYmFzZWQgb24gbXkgcmV2aWV3IG9mIHRoZSBjb2RlIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgS01TQU4sIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIGlzc3Vlcy4gVGhlIGNvbmRpdGlvbnMgS01TQU4gY2FyZXMgYWJvdXQgaW5jbHVkZSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCB0aGUgd2F5IGJvdW5kcywgbGVuZ3Rocywgb3IgbG9naWMgYXJlIGhhbmRsZWQuIEluIHRoaXMgY2FzZSwgYG1lbWNweWAgaGFwcGVucyAqYmVmb3JlKiBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC4gIFNvIGBzaGluZm9gIG92ZXJ3cml0ZXMgdGhlICplbmQqIG9mIHRoZSBwYWNrZXQgZGF0YSwgdHJ1bmNhdGluZyB0aGUgb3JpZ2luYWwgZGF0YSBhbmQgc2V0dGluZyBgZGF0YXJlZiA9IDFgLiAgVGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgKmxlYWsqOyBpdCYjMzk7cyBqdXN0IHRoZSBwYWNrZXQgZGF0YSBiZWluZyBvdmVyd3JpdHRlbiB3aXRoIHplcm9lcy4gSG93ZXZlciwgdGhlIHNpdHVhdGlvbiBjaGFuZ2VzIHdoZW4gYHhkcGYtJmd0O2hlYWRyb29tYCBpcyBgbWV0YXNpemVgLCBhbmQgdGhlIGNoZWNrLCBgaWYgKHNpemVvZigqeGRwZikgJiM0MzsgdG90c2l6ZSAmZ3Q7IFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpIHJldHVybiBOVUxMO2AgaXMgaW4gcGxhY2UuICBUaGlzIHByZXZlbnRzIHRoZSBvdmVybGFwLgoKUmVnYXJkaW5nIHRoZSBgZGV2X2FsbG9jX3BhZ2UoKWAsIHllcywgaXQmIzM5O3Mgbm90IHplcm9lZCwgc28gdGhlIHNwYWNlIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgYW5kIGBza2Jfc2hhcmVkX2luZm9gIGlzIHVuaW5pdGlhbGl6ZWQuIEhvd2V2ZXIsIHRoZSBza2IgbGVuZ3RoIChgeGRwZi0mZ3Q7bGVuID0gdG90c2l6ZSAtIG1ldGFzaXplYCkgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0IGRhdGEgYW5kIG9ubHkgdGhhdC4gQW55IHN1YnNlcXVlbnQgb3BlcmF0aW9uIG9uIHRoZSBza2Igd2lsbCBvbmx5IGRlYWwgd2l0aCBpbml0aWFsaXplZCBkYXRhLiBTdWJzZXF1ZW50IGNhbGxzLCBzdWNoIGFzIGBza2JfcGFkYCwgYGJwZl9za2JfY2hhbmdlX3RhaWxgLCBhbmQgYHNrYl9wdXRgIGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcyBvbmx5IGlmIHRoZXkgYXJlIG5vdCBjb3JyZWN0bHkgd3JpdHRlbi4KCkxldCYjMzk7cyByZXZpZXcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgb3JpZ2luYWwgcGF0Y2g6IHRoZSBzZXR0aW5nIG9mIGB4ZHBmLSZndDtoZWFkcm9vbWAgdG8gYG1ldGFzaXplYCBhbmQgaG93IHRoZSBjYWxjdWxhdGlvbiBvZiBgaGFyZF9zdGFydGAgY2hhbmdlcy4gIEJlZm9yZSwgYHNrYi0mZ3Q7aGVhZGAgd2FzIGBwYWdlICYjNDM7IG1ldGFzaXplYC4gVGhlIG1ldGFkYXRhIHdhcyBhdCBgcGFnZSAmIzQzOyBzaXplb2YoKnhkcGYpYC4gSWYgYG1ldGFzaXplYCB3YXMgZ3JlYXRlciB0aGFuIGBzaXplb2YoKnhkcGYpYCwgdGhlIG1ldGFkYXRhIHdvdWxkIGFjdHVhbGx5IGJlIGxvY2F0ZWQgYmVmb3JlIHNrYi0mZ3Q7aGVhZC4gSXQgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IGl0JiMzOTtzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4KCkkgY2hlY2tlZCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYnkgcmV2aWV3aW5nICBgc3RydWN0IHhkcF9mcmFtZWA6CmBgYGMKc3RydWN0IHhkcF9mcmFtZSB7Cgl2b2lkICpkYXRhOwoJdTE2IGxlbjsKCXUxNiBoZWFkcm9vbTsKCXUxNiBtZXRhc2l6ZTsKCXUxNiBmcmFtZV9zejsKCXUzMiBtZW1fdHlwZTsKCS8qIC4uLiAqLwp9OwpgYGAKSSBjb25maXJtZWQgdGhhdCB0aGUgYHZvaWQgKmRhdGFgIGRvZXMgY29udGFpbiBhIGtlcm5lbCBwb2ludGVyLCBidXQgZXZlbiBpZiB0aGUgbWV0YWRhdGEgZ2V0cyBiZWZvcmUgYHNrYi0mZ3Q7aGVhZGAsIHRoZSBtZXRhZGF0YSBhY2Nlc3MgaXMgZG9uZSBjb3JyZWN0bHkgYW5kIHdpbGwgcmVhZCB0aGUgY29ycmVjdCBkYXRhIGFuZCBub3QgdGhlIGB4ZHBmYCBzdHJ1Y3QgdmFsdWVzLgoKVGhlIGNoZWNrIGZvciBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgYW5kIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIG92ZXJ3cml0ZSBtZW1vcnkgYmVmb3JlIGBza2ItJmd0O2RhdGFgICB3YXMgYWxzbyBwZXJmb3JtZWQuIFdpdGggdGhlIHBhdGNoLCBgc2tiX2hlYWRyb29tKHNrYilgIGNhbiB3cml0ZSBkb3duIHRvIGBwYWdlYC4gSSBhbSBjb25jZXJuZWQgdGhhdCB0aG9zZSBmdW5jdGlvbnMgbWF5IG92ZXJ3cml0ZSB0aGUgYHhkcGZgIHN0cnVjdCwgYnV0IGF0IHRoaXMgcG9pbnQsIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIGNhbGxzIGB4ZHBfc2NydWJfZnJhbWUoeGRwZilgLCBhbmQgdGhlbiBgeGRwZmAgaXMgY2xlYXJlZC4KCkluIGNvbmNsdXNpb24sIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCBwYWNrZXQgZGF0YSBvdmVybGFwIGlzc3VlcywgYW5kIHRoZXJlJiMzOTtzIG5vIGltbWVkaWF0ZSB1bmluaXRpYWxpemVkCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX3NjcnViX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUveGRwLmM9Nzk0PXN0cnVjdCBza19idWZmICpfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxuLS1cbm5ldC9jb3JlL3hkcC5jLTg0Mi1cdC8qIEFsbG93IFNLQiB0byByZXVzZSBhcmVhIHVzZWQgYnkgeGRwX2ZyYW1lICovXG5uZXQvY29yZS94ZHAuYzo4NDM6XHR4ZHBfc2NydWJfZnJhbWUoeGRwZik7XG5uZXQvY29yZS94ZHAuYy04NDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqWERQIEZyYW1lIFNjcnViYmluZyAtIEEgUXVpY2sgTG9vayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFhEUCBmcmFtZSBzY3J1YmJpbmcgcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb24sIGFuZCB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgaXMgZ29pbmcgdG8gYmUgYGluY2x1ZGUvbmV0L3hkcC5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGB4ZHBfc2NydWJfZnJhbWVgLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBjcnlzdGFsIGNsZWFyIG9uIGhvdyB0aGF0IGZ1bmN0aW9uJiMzOTtzIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwYXJhbWV0ZXJzIHdvcmssIGJlY2F1c2UgdGhlcmUmIzM5O3MgbGlrZWx5IHNvbWUgbnVhbmNlIHRoZXJlIHRoYXQmIzM5O3MgY3JpdGljYWwgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24gd291bGQgcmVhbGx5IGhlbHAgd2l0aCBbaW5zZXJ0IHNwZWNpZmljIHdvcmsgdGhlIHVzZXIgaXMgbGlrZWx5IGRvaW5nIGJhc2VkIG9uIGJlaW5nIGFuIGV4cGVydF0uIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcm9sZSBpdCBwbGF5cyBpbiB0aGUgWERQIGRhdGEgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRwX3NjcnViX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGRwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGRwLmg9MzM5PXN0cnVjdCB4ZHBfY3B1bWFwX3N0YXRzIHtcbi0tXG5pbmNsdWRlL25ldC94ZHAuaC0zNDUtLyogQ2xlYXIga2VybmVsIHBvaW50ZXJzIGluIHhkcF9mcmFtZSAqL1xuaW5jbHVkZS9uZXQveGRwLmg6MzQ2OnN0YXRpYyBpbmxpbmUgdm9pZCB4ZHBfc2NydWJfZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUpXG5pbmNsdWRlL25ldC94ZHAuaC0zNDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGB4ZHBfc2NydWJfZnJhbWVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRob3VnaHQgSSBoYXZlIGlzLCAmIzM0O0xldCYjMzk7cyByZWFkIGB4ZHBfc2NydWJfZnJhbWVgLiYjMzQ7IE5vIGJlYXRpbmcgYXJvdW5kIHRoZSBidXNoOyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgZWxlbWVudCBpbiB3aGF0ZXZlciBYRFAtcmVsYXRlZCBwcm9qZWN0IEkmIzM5O20gd29ya2luZyBvbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgZnVuY3Rpb24gZGVzaWduZWQgdG8gaW5zcGVjdCwgbW9kaWZ5LCBvciBmaWx0ZXIgbmV0d29yayBmcmFtZXMgYXQgdGhlIFhEUCBsZXZlbCwgYW5kIGdpdmVuIHRoZSB0ZXJtICYjMzQ7c2NydWIsJiMzNDsgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHNhbml0aXphdGlvbiBvciBtYW5pcHVsYXRpb24gaXMgaW52b2x2ZWQuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hkcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDY6XHRzdGF0aWMgaW5saW5lIHZvaWQgeGRwX3NjcnViX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lKVxuIDM0NzpcdHtcbiAzNDg6XHRcdGZyYW1lLVx1MDAzZWRhdGEgPSBOVUxMO1xuIDM0OTpcdFx0ZnJhbWUtXHUwMDNlZGV2X3J4ID0gTlVMTDtcbiAzNTA6XHR9XG4gMzUxOlx0XG4gMzUyOlx0c3RhdGljIGlubGluZSB2b2lkXG4gMzUzOlx0eGRwX3VwZGF0ZV9za2JfZnJhZ3NfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBucl9mcmFncyxcbiAzNTQ6XHRcdFx0XHQgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgdHJ1ZXNpemUsXG4gMzU1Olx0XHRcdFx0ICB1MzIgeGRwX2ZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgWERQIEZyYW1lIFJldXNlIGFuZCBQb3RlbnRpYWwgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGhpbiB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgZnJhbWUgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIHJldXNlcyBtZW1vcnkgYWxsb2NhdGVkIGZvciBgeGRwZmAgc3RydWN0cy4KCkluaXRpYWxseSwgYGZyYW1lLSZndDtkYXRhYCBhbmQgYGZyYW1lLSZndDtkZXZfcnhgIGFyZSBjbGVhcmVkLCBpbmRpY2F0aW5nIHRoZSBgeGRwZmAgc3RydWN0IHN0aWxsIGV4aXN0cyBidXQgaXMgbm93IGNvbnNpZGVyZWQgJiMzNDtzY3J1YmJlZCYjMzQ7IGFzIHRoZSBjb21tZW50IHN1Z2dlc3RzIHRoZSBTS0IgKnNob3VsZCogYmUgcmV1c2luZyB0aGUgYXJlYS4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBza2ItJmd0O2hlYWRgIGxpZXMgcmVsYXRpdmUgdG8gdGhlIGFsbG9jYXRlZCBwYWdlIGFuZCBgeGRwZmAuIEJlZm9yZSB0aGUgcGF0Y2gsIGBza2ItJmd0O2hlYWRgIHBvaW50ZWQgdG8gYHBhZ2UgJiM0MzsgbWV0YXNpemVgLCB3aGlsZSBgeGRwZmAgd2FzIGF0IGBwYWdlYC4gIFRoaXMgbWVhbnMgdGhlIFNLQiAqY291bGQgbm90KiBvdmVyd3JpdGUgdGhlIGB4ZHBmYCBzdHJ1Y3QgYXMgaXRzIGRhdGEgYXJlYSB3b3VsZCBzdGFydCBhZnRlciBgeGRwZmAuIEhvd2V2ZXIsIGlmIGBtZXRhc2l6ZWAgd2FzIHplcm8sIGBza2ItJmd0O2hlYWRgICpkaWQqIGVxdWFsIGBwYWdlYCwgaW1wbHlpbmcgdGhhdCB0aGUgU0tCICpjb3VsZCogb3ZlcndyaXRlIGB4ZHBmYCBiZWNhdXNlIGBza2JfaGVhZHJvb21gIHRoZW4gZXF1YWxlZCBgc2l6ZW9mKCp4ZHBmKWAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGB4ZHBmLSZndDtoZWFkcm9vbSA9IG1ldGFzaXplYCwgcmVkZWZpbmluZyBgc2tiLSZndDtoZWFkYCB0byBgcGFnZWAgYW5kIGBza2JfaGVhZHJvb21gIHRvIGBzaXplb2YoKnhkcGYpICYjNDM7IG1ldGFzaXplYC4gVGh1cyB0aGUgU0tCIGNhbiBub3cgY29ycmVjdGx5IG92ZXJ3cml0ZSBib3RoIHRoZSBgeGRwZmAgc3RydWN0IGFuZCB0aGUgYG1ldGFzaXplYCBkYXRhIHRoYXQgc2l0cyBhZnRlciBpdC4gVGhpcyBtYWtlcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgYWxsb3dpbmcgdGhlIFNLQiB0byByZXVzZSB0aGUgc3BhY2UgY29ycmVjdC4KClRoZSB0cmlja2llciBwYXJ0IGlzIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gLiBCZWZvcmUgdGhlIHBhdGNoLCBgc2tiX3NoYXJlZF9pbmZvYCB3YXMgcGxhY2VkIGF0IGBwYWdlICYjNDM7IG1ldGFzaXplICYjNDM7IFBBR0VfU0laRSAtIFNLQl9EQVRBX0FMSUdOKC4uLilgLCB3aGljaCAqaXMqIG91dHNpZGUgdGhlIGFsbG9jYXRlZCBwYWdlIGlmIGBtZXRhc2l6ZWAgaXMgbGFyZ2UgZW5vdWdoLiAgQmVjYXVzZSB0aGUgcGFnZSBpcyBvbmx5IGBQQUdFX1NJWkVgIGJ5dGVzLCB0aGlzIGxlYWRzIHRvIGFuIGluZXZpdGFibGUgb3V0LW9mLWJvdW5kcyB3cml0ZSwgd2hpY2ggS0FTQU4gc2hvdWxkIGVhc2lseSBjYXRjaCB3aGVuIHRoZSBjb2RlIGxhdGVyIGRvZXMgYSBgbWVtc2V0YCBvbiBgc2hpbmZvYC4KCkNydWNpYWxseSwgdGhpcyBvdXQtb2YtYm91bmRzIHdyaXRlIHplcm9lcyBvdXQgb2YgbWVtb3J5LiBUaGVyZSYjMzk7cyBubyBpbml0aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IHRoZSB6ZXJvZXMgYXJlIHdyaXR0ZW4sIGFuZCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgbGF0ZXIgcmVhZCAoaWYgZXZlciksIG9yIHJlYWQgYnkgYSBkZWJ1ZyB0b29sIChLQVNBTikKCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwYXRjaC4gVGhlIGNoYW5nZSBpbiB0aGUgY2hlY2sgdXNpbmcgYFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgIGNvdWxkIGxlYWQgdG8gYW4gaXNzdWUuICBJZiBgc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplYCBpcyBiZXR3ZWVuIGBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCBhbmQgYFBBR0VfU0laRWAsIHRoZSBpbml0aWFsIHBhY2tldCBkYXRhIGNvcHkgKGBtZW1jcHlgKSBtaWdodCAqb3ZlcmxhcCogdGhlIHNwYWNlIHdoZXJlIGBza2Jfc2hhcmVkX2luZm9gIHdpbGwgYmUuIFRoaXMgd2lsbCByZXN1bHQgaW4gcGFja2V0IGRhdGEgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgemVyb2VzIGZyb20gYG1lbXNldGAuIFRoaXMgaXMgYW4gb3ZlcmxhcCBpc3N1ZSBsZWFkaW5nIHRvIHBhY2tldCBjb3JydXB0aW9uLiBJdCBpcyBhIGJ1ZyB0aGF0IEtBU0FOIGNhbiBkZXRlY3QgYmVjYXVzZSBvZiB0aGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuICBJZiBhIEJQRiBwcm9ncmFtIHN1YnNlcXVlbnRseSBtb2RpZmllcyB0aGUgcGFja2V0LCBvdmVyd3JpdGluZyBgc2tiX3NoYXJlZF9pbmZvYCYjMzk7cyBsb2NhdGlvbiwgdGhhdCBhbHNvIGludHJvZHVjZXMgdGhlIHJpc2sgb2YgZGF0YSBjb3JydXB0aW9uLCBzdWNoIGFzIG1lc3Npbmcgd2l0aCBgbnJfZnJhZ3NgIG9yIGBkYXRhcmVmYCwgd2hpY2ggd291bGQgY2F1c2UgYW4gb3V0IG9mIGJvdW5kcyByZWFkLCB3aGljaCBLQVNBTiB3aWxsIGFsc28gY2F0Y2guCgpJbiBzdW1tYXJ5LCB0aGUgYnVncyBhcmU6CgoxLiAgT3V0LW9mLWJvdW5kcyB3cml0ZSBvZiBgc2tiX3NoYXJlZF9pbmZvYCAoS0FTQU4pLgoyLiAgT3ZlcmxhcCBjYXVzaW5nIGRhdGEgY29ycnVwdGlvbiBieSB6ZXJvaW5nIHBhY2tldCBkYXRhIG9yIGBza2Jfc2hhcmVkX2luZm9gIGNvcnJ1cHRpb24gKEtBU0FOKS4KClRoZXNlIGFyZSBib3RoIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIG5vdCBsZWFrcyBvZiB1bmluaXRpYWxpemVkIGRhdGEuCgpMZXQgbWUgZG91YmxlIGNoZWNrIHRoZXJlJiMzOTtzIG5vIHdheSB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzaW5jZSB0aGF0IGlzIHdoYXQgS01TQU4gaXMgZm9yLgoKTGV0JiMzOTtzIHNheSBgc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplICZndDsgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuIFdlIGNvcHkgYHRvdHNpemVgIGJ5dGVzIHZpYSBgbWVtY3B5YC4gVGhlbiBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCB6ZXJvZWQgYHNoaW5mb2AuIFRoZSBlZmZlY3RpdmUgbGVuZ3RoIG9mIHRoZSBTS0IgaXMgYHRvdHNpemUgLSBtZXRhc2l6ZWAuIE5vdywgdGhlIFNLQiYjMzk7cyBkYXRhIGdvZXMgdXAgdG8gYHBhZ2UgJiM0Mzsgc2l6ZW9mKCp4ZHBmKSAmIzQzOyB0b3RzaXplYCwgYnV0IGBzaGluZm9gIHJlc2lkZXMgYXQgYHBhZ2UgJiM0MzsgbWV0YXNpemUgJiM0MzsgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuIEhlbmNlLCBgc2hpbmZvYCAqaXMqIGFjdHVhbGx5IHdpdGhpbiB0aGUgU0tCJiMzOTtzIGRhdGEuIElmIHdlIHRoZW4gc2VuZCB0aGlzIHRvIHVzZXIgc3BhY2UsIGl0IHdpbGwgY29weSBgc2tiLSZndDtsZW5gIGJ5dGVzIGZyb20gYHNrYi0mZ3Q7ZGF0YWAsIHdoaWNoIGluY2x1ZGVzIHRoZSB6ZXJvZWQtb3V0IGVuZCwgYnV0IHRoYXQgbWVtb3J5IGlzIGluaXRpYWxpemVkLiBObyBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBvY2N1cnMuCgpXaGF0IGFib3V0IGlmIHRoZSBgbWVtc2V0YCB3cml0ZXMgcGFzdCB0aGUKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MzgyMD1zdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zODI0LVxubmV0L2NvcmUvZmlsdGVyLmM6MzgyNTpzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG5uZXQvY29yZS9maWx0ZXIuYy0zODI2LVx0XHRcdFx0XHR1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg2NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjM4NjU6QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NjYtXHQgICB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtMzg2Ny17XG5uZXQvY29yZS9maWx0ZXIuYzozODY4Olx0aW50IHJldCA9IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NjktXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg3My1cbm5ldC9jb3JlL2ZpbHRlci5jOjM4NzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6Mzg3NTpcdC5mdW5jXHRcdD0gYnBmX3NrYl9jaGFuZ2VfdGFpbCxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NzYtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Mzg4Mz1CUEZfQ0FMTF8zKHNrX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg4NS17XG5uZXQvY29yZS9maWx0ZXIuYzozODg2Olx0cmV0dXJuIF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTM4ODctfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTM4OTg9c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBoZWFkX3Jvb20sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzkxNS1cdFx0ICogc2tiLVx1MDAzZXByb3RvY29sIG5ldHdvcmsgaGVhZGVyLCBldGMsIHN0YXkgYXMgaXMuXG5uZXQvY29yZS9maWx0ZXIuYzozOTE2Olx0XHQgKiBDb21wYXJlZCB0byBicGZfc2tiX2NoYW5nZV90YWlsKCksIHdlJiMzOTtyZSBtb3JlXG5uZXQvY29yZS9maWx0ZXIuYy0zOTE3LVx0XHQgKiBmbGV4aWJsZSBkdWUgdG8gbm90IG5lZWRpbmcgdG8gbGluZWFyaXplIG9yXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODM3Nj10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODQxMS1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxubmV0L2NvcmUvZmlsdGVyLmM6ODQxMjpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04NDEzLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODc2MD1sd3RfeG1pdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzUtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NzY6XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODc3Ny1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgX19icGZfc2tiX2NoYW5nZV90YWlsYCwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBtdXNpbmdzOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBgX19icGZfc2tiX2NoYW5nZV90YWlsYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgZGVhbGluZyB3aXRoIHRoZSBtYW5pcHVsYXRpb24gb2YgU0tCcyDigJMgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIGZvciBuZXR3b3JrIHBhY2tldHMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgYW5kIGxpa2VseSBhIGxvdyBsZXZlbCBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIHdvcmsgZWZmaWNpZW50bHkuIEkmIzM5O20gZ3Vlc3NpbmcgJiMzNDtjaGFuZ2VfdGFpbCYjMzQ7IG1lYW5zIHdlJiMzOTtyZSBtb2RpZnlpbmcgdGhlIHRhaWwgcG9pbnRlciwgbGlrZWx5IHRvIGVpdGhlciB0cmltIG9yIGV4cGFuZCB0aGUgcGFja2V0JiMzOTtzIGRhdGEgYXJlYS4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IGlmIGl0JiMzOTtzIHNhZmUgdG8gdXNlLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzPyBNZW1vcnkgbWFuYWdlbWVudCBpcyBhIGJpZyBjb25jZXJuIGhlcmUgLSBhcmUgd2UgZGVhbGluZyB3aXRoIHJlYWxsb2NhdGlvbnM/IENvcHktb24td3JpdGUgc2hlbmFuaWdhbnM/IEl0IGhhcyB0byBiZSBjYXJlZnVsIGFuZCBlZmZpY2llbnQuCgpJIG5lZWQgdG8gc2VlOiB3aGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgaXQgY2FsbGVkIGZyb20gYSBCUEYgcHJvZ3JhbSwgb3IgaXMgaXQgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIGlzICpjcnVjaWFsKiBmb3IgYXNzZXNzaW5nIHRoZSBzYWZldHkgYW5kIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KCkkgYWxzbyB3YW50IHRvIGxvb2sgYXQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggYW55IGF0dGFjaGVkIG1ldGFkYXRhIG9yIGV4dGVuc2lvbnMgdG8gdGhlIFNLQi4gRG9lcyBpdCB1cGRhdGUgY2hlY2tzdW1zPyBEb2VzIGl0IG5lZWQgdG8gbm90aWZ5IGFueSB1cHBlciBsYXllcnM/IEFueSBleGlzdGluZyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gdGhpcyBTS0IgbWlnaHQgYmUgYWZmZWN0ZWQsIHNvIHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBwcm9wZXJseS4KCkkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQ/IERvZXMgaXQgcGVyZm9ybSBhdG9taWMgb3BlcmF0aW9ucz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHNhbWUgU0tCIGZyb20gZGlmZmVyZW50IENQVXMgb3IgdGhyZWFkcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0byBhcHBseSB0aGlzIGVmZmljaWVudGx5IHdpdGhvdXQgY2F1c2luZyBpc3N1ZXMsIG9yIGV2ZW4gd29yc2UsIHNlY3VyaXR5IHByb2JsZW1zLgoKTGV0JiMzOTtzIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgcG9pbnRlciBhcml0aG1ldGljLCBwb3NzaWJseSBzb21lIGBza2JfY29weV9iaXRzYCBvciBgc2tiX3B1bGxgIGNhbGxzLCBhbmQgZGVmaW5pdGVseSBzb21lIGNhcmVmdWwgYm91bmRzIGNoZWNraW5nLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgZGlzY3Vzc2lvbiBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZSB0YWlsIGlzIGJlaW5nIGV4cGFuZGVkIG9yIGlmIHRoZSBmdW5jdGlvbiBpcyBhdHRlbXB0aW5nIHRvIGZyZWUgc3BhY2UuCgpJIG5lZWQgdG8gc2VlIHRoZSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSByZXF1ZXN0ZWQgdGFpbCBjaGFuZ2Ugd291bGQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3M/IFdoYXQgaGFwcGVucyBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscz8gSG93IGFyZSBlcnJvcnMgY29tbXVuaWNhdGVkLCBhbmQgd2hhdCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIGNhbGxpbmcgY29kZSBpbiB0aGVzZSBzaXR1YXRpb25zPwoKVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYXMgbXVjaCBhcyB0aGUgKmhvdyouIFdoeSBpcyB0aGlzIGZ1bmN0aW9uIHN0cnVjdHVyZWQgdGhpcyB3YXk/IFdoYXQgYXJlIHRoZSBkZXNpZ24gdHJhZGUtb2Zmcz8gV2hhdCBhbHRlcm5hdGl2ZXMgd2VyZSBjb25zaWRlcmVkLCBhbmQgd2h5IHdlcmUgdGhleSByZWplY3RlZD8gVGhpcyBjb250ZXh0IGlzIG9mdGVuIG1vcmUgdmFsdWFibGUgdGhhbiB0aGUgY29kZSBpdHNlbGYsIGluIHRlcm1zIG9mIG15IG92ZXJhbGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgQlBGIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MjU6XHRzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4zODI2Olx0XHRcdFx0XHRcdHU2NCBmbGFncylcbjM4Mjc6XHR7XG4zODI4Olx0XHR1MzIgbWF4X2xlbiA9IEJQRl9TS0JfTUFYX0xFTjtcbjM4Mjk6XHRcdHUzMiBtaW5fbGVuID0gX19icGZfc2tiX21pbl9sZW4oc2tiKTtcbjM4MzA6XHRcdGludCByZXQ7XG4zODMxOlx0XG4zODMyOlx0XHRpZiAodW5saWtlbHkoZmxhZ3MgfHwgbmV3X2xlbiBcdTAwM2UgbWF4X2xlbiB8fCBuZXdfbGVuIFx1MDAzYyBtaW5fbGVuKSlcbjM4MzM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODM0Olx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4zODM1Olx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zODM2Olx0XG4zODM3Olx0XHQvKiBUaGUgYmFzaWMgaWRlYSBvZiB0aGlzIGhlbHBlciBpcyB0aGF0IGl0JiMzOTtzIHBlcmZvcm1pbmcgdGhlXG4zODM4Olx0XHQgKiBuZWVkZWQgd29yayB0byBlaXRoZXIgZ3JvdyBvciB0cmltIGFuIHNrYiwgYW5kIGVCUEYgcHJvZ3JhbVxuMzgzOTpcdFx0ICogcmV3cml0ZXMgdGhlIHJlc3QgdmlhIGhlbHBlcnMgbGlrZSBicGZfc2tiX3N0b3JlX2J5dGVzKCksXG4zODQwOlx0XHQgKiBicGZfbFhfY3N1bV9yZXBsYWNlKCkgYW5kIG90aGVycyByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3XG4zODQxOlx0XHQgKiBidWZmZXIgaGVyZS4gVGhpcyBvbmUgaXMgYSBzbG93IHBhdGggaGVscGVyIGFuZCBpbnRlbmRlZFxuMzg0MjpcdFx0ICogZm9yIHJlcGxpZXMgd2l0aCBjb250cm9sIG1lc3NhZ2VzLlxuMzg0MzpcdFx0ICpcbjM4NDQ6XHRcdCAqIExpa2UgaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8oKSwgd2Ugd2FudCB0byBrZWVwIHRoaXMgcmF0aGVyXG4zODQ1Olx0XHQgKiBtaW5pbWFsIGFuZCB3aXRob3V0IHByb3RvY29sIHNwZWNpZmljcyBzbyB0aGF0IHdlIGFyZSBhYmxlXG4zODQ2Olx0XHQgKiB0byBzZXBhcmF0ZSBjb25jZXJucyBhcyBpbiBicGZfc2tiX3N0b3JlX2J5dGVzKCkgc2hvdWxkIG9ubHlcbjM4NDc6XHRcdCAqIGJlIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgYnVmZmVycy5cbjM4NDg6XHRcdCAqXG4zODQ5Olx0XHQgKiBJdCYjMzk7cyByZWFsbHkgZXhwZWN0ZWQgdG8gYmUgYSBzbG93IHBhdGggb3BlcmF0aW9uIGhlcmUgZm9yXG4zODUwOlx0XHQgKiBjb250cm9sIG1lc3NhZ2UgcmVwbGllcywgc28gd2UmIzM5O3JlIGltcGxpY2l0bHkgbGluZWFyaXppbmcsXG4zODUxOlx0XHQgKiB1bmNsb25pbmcgYW5kIGRyb3Agb2ZmbG9hZHMgZnJvbSB0aGUgc2tiIGJ5IHRoaXMuXG4zODUyOlx0XHQgKi9cbjM4NTM6XHRcdHJldCA9IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLVx1MDAzZWxlbik7XG4zODU0Olx0XHRpZiAoIXJldCkge1xuMzg1NTpcdFx0XHRpZiAobmV3X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjM4NTY6XHRcdFx0XHRyZXQgPSBicGZfc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM4NTc6XHRcdFx0ZWxzZSBpZiAobmV3X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbjM4NTg6XHRcdFx0XHRyZXQgPSBicGZfc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM4NTk6XHRcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHNrYl9pc19nc28oc2tiKSlcbjM4NjA6XHRcdFx0XHRza2JfZ3NvX3Jlc2V0KHNrYik7XG4zODYxOlx0XHR9XG4zODYyOlx0XHRyZXR1cm4gcmV0O1xuMzg2MzpcdH1cbjM4NjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGBicGZfc2tiX2dyb3dfcmNzdW1gKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBicGZfc2tiX2dyb3dfcmNzdW1gLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgcmVjYWxsaW5nIHdoYXQgaXQmIzM5O3MgKnN1cHBvc2VkKiB0byBkby4gSXQmIzM5O3MgYSBCUEYgaGVscGVyLCByaWdodD8gTGlrZWx5IGRlYWxpbmcgd2l0aCBleHRlbmRpbmcgYW4gU0tCIChTb2NrZXQgQnVmZmVyKSBhbmQgbWFuYWdpbmcgdGhlIGNoZWNrc3VtIHJlbGF0ZWQgdG8gdGhlIGV4dGVuc2lvbi4gVGhlICYjMzQ7cmNzdW0mIzM0OyBwYXJ0IGltbWVkaWF0ZWx5IHBvaW50cyB0b3dhcmRzIHJlY29tcHV0aW5nIGNoZWNrc3Vtcywgd2hpY2ggaXMgY3JpdGljYWwgaW4gbmV0d29yayBwZXJmb3JtYW5jZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBpcyBjYWxsZWQg4oCTIHdoYXQgdHJpZ2dlcnMgdGhlIG5lZWQgdG8gZ3JvdyB0aGUgU0tCIGFuZCwgY29uc2VxdWVudGx5LCByZWNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0uIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRoYXQgSSBzaG91bGQga2VlcCBpbiBtaW5kIGFzIEkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nPyBJIGtub3cgdGhpcyBhcmVhIGludGltYXRlbHksIHNvIEkmIzM5O20gbG9va2luZyBmb3IgbnVhbmNlLi4uIHBvdGVudGlhbCBlZGdlIGNhc2VzLCBvciBub3ZlbCBhcHByb2FjaGVzIGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za2JfZ3Jvd19yY3N1bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTM3ODg9c3RhdGljIHUzMiBfX2JwZl9za2JfbWluX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM4MDgtXG5uZXQvY29yZS9maWx0ZXIuYzozODA5OnN0YXRpYyBpbnQgYnBmX3NrYl9ncm93X3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxubmV0L2NvcmUvZmlsdGVyLmMtMzgxMC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzgyNT1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg1NS1cdFx0aWYgKG5ld19sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG5uZXQvY29yZS9maWx0ZXIuYzozODU2Olx0XHRcdHJldCA9IGJwZl9za2JfZ3Jvd19yY3N1bShza2IsIG5ld19sZW4pO1xubmV0L2NvcmUvZmlsdGVyLmMtMzg1Ny1cdFx0ZWxzZSBpZiAobmV3X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4ODkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYGJwZl9za2JfZ3Jvd19yY3N1bWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgYnBmX3NrYl9ncm93X3Jjc3VtYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgQlBGIGVjb3N5c3RlbS4gVGhpcyBmdW5jdGlvbiwgZ2l2ZW4gaXRzIG5hbWUsIGxpa2VseSBoYW5kbGVzIHRoZSBjaGVja3N1bSB1cGRhdGUgd2hlbiBhIHBhY2tldCYjMzk7cyBTS0IgKFNvY2tldCBCdWZmZXIpIGlzIGdyb3duLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGNoZWNrbGlzdDogd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXM/IE1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgU0tCIGl0c2VsZj8gVGhlIG5lZWQgZm9yIGNhcmVmdWwgbWFuaXB1bGF0aW9uIG9mIHRoZSBjaGVja3N1bSBmaWVsZHMgd2l0aGluIHRoZSBoZWFkZXJzPyBBcmUgdGhlcmUgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zPwoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIGxhcmdlciBjaGVja3N1bSBvZmZsb2FkIHByb2Nlc3MsIGFuZCBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbmNpZXMgdGhhdCBjb3VsZCBjcmVlcCBpbnRvIHRoZSBkYXRhLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgbmVjZXNzYXJ5IGhlYWRlciB1cGRhdGVzIGlmIHRoZSBwYWNrZXQgc2l6ZSBjaGFuZ2VzLCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggY2hlY2tzdW0uIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIG1lbW9yeSBzYWZldHkgYXNwZWN0LCBhbmQgYW55IGNoZWNrcyBmb3IgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzIGFyZSBjcml0aWNhbCB0byBzZWN1cml0eS4gSSYjMzk7bGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBhIGdvb2QgZGVhbCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMsIHdoaWNoIGlzIG5vcm1hbCBmb3Igd29ya2luZyB3aXRoIGNoZWNrc3Vtcy4gVGhlIGRldGFpbHMgb2YgaG93IHRoZSBmdW5jdGlvbiBhZmZlY3RzIHRoZSBgY3N1bV9zdGFydGAsIGBjc3VtX29mZnNldGAsIGFuZCBgY3N1bV9sZXZlbGAgZmllbGRzIGFyZSBvZiBpbW1lZGlhdGUgaW50ZXJlc3QuIEZpbmFsbHksIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBzaW5jZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMgY2FuIGJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyB0aGUgYWxnb3JpdGhtaWMgZWZmaWNpZW5jeS4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNydWNpYWwgcGllY2UgaW4gZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiBwYWNrZXRzIHdpdGhpbiBhIEJQRiBwcm9ncmFtLCBhbmQgSSYjMzk7bSBlYWdlciB0byBkaWcgaW4gYW5kIHNlZSB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODA5Olx0c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zODEwOlx0e1xuMzgxMTpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuMzgxMjpcdFx0aW50IHJldDtcbjM4MTM6XHRcbjM4MTQ6XHRcdHJldCA9IF9fc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM4MTU6XHRcdGlmICghcmV0KVxuMzgxNjpcdFx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2xkX2xlbiwgMCwgbmV3X2xlbiAtIG9sZF9sZW4pO1xuMzgxNzpcdFx0cmV0dXJuIHJldDtcbjM4MTg6XHR9XG4zODE5Olx0XG4zODIwOlx0c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zODIxOlx0e1xuMzgyMjpcdFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM4MjM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTU2CgkJCQkJCQlvdXRwdXQ6IDQxOQoJCQkJCQkJdGhvdWdodHM6IDkxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgWERQIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGl0IHNlZW1zIGBicGZfc2tiX2dyb3dfcmNzdW1gICpkb2VzKiBpbmRlZWQgemVybyB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSB3aXRoIGBtZW1zZXRgLCBzbyBhbnkgQlBGLWdyb3duIFNLQiB3aWxsIGhhdmUgemVyb2VkIHRhaWxyb29tLiBUaGF0JiMzOTtzIGEgcmVsaWVmLiBObyBpbW1lZGlhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2FnZSB0aGVyZS4KCk5vdywgd2hhdCBhYm91dCBgc2tiX3B1dGA/IFRoYXQmIzM5O3MgdGhlIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbiB1c2VkIGJ5IGRyaXZlcnMgYW5kIHRoZSBuZXR3b3JrIHN0YWNrLiBXaGVuIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIGNyZWF0ZXMgYW4gU0tCLCB0aGUgY2FsbGVycyBJJiMzOTttIHNlZWluZyDigJMgYHZldGhfeGRwX3Jjdl9za2JgLCBgY3B1bWFwYCwgYW5kIHRoZSBsaWtlIOKAkyAqZG9uJiMzOTt0KiBjYWxsIGBza2JfcHV0YCBvbiB0aGUgcmV0dXJuZWQgU0tCLiBUaGV5IGp1c3QgaGFuZCBpdCB1cCB0aGUgc3RhY2suIFRoZSBuZXR3b3JrIHN0YWNrIHByaW1hcmlseSBkZWFscyB3aXRoIHJlY2VpdmVkIHBhY2tldHMgYnkgdXNpbmcgYHBza2JfbWF5X3B1bGxgIG9yIGBza2JfcHVsbGAgdG8gcGFyc2UgaGVhZGVycy4gSWYgaGVhZGVycyBuZWVkIHRvIGJlIGFkZGVkLCBzdWNoIGFzIGZvciBmb3J3YXJkaW5nIG9yIGVuY2Fwc3VsYXRpb24sIHRoZSBzdGFjayBjYWxscyBgc2tiX3B1c2hgLCBhbmQgdGhhdCB1c2VzIHRoZSBhbHJlYWR5IGluaXRpYWxpemVkIGhlYWRyb29tICh0aGUgYHhkcGZgIHN0cnVjdCBhbmQgbWV0YWRhdGEgYXJlIGFscmVhZHkgemVyb2VkIG9yIGNvcGllZCkuIFNvIGBza2JfcHVzaGAgaXMgc2FmZS4gSWYgdGhlIHN0YWNrIG5lZWRzIHRvIGFkZCBhIHRyYWlsZXIsIGl0ICptaWdodCogdXNlIGBza2JfcHV0YCwgYnV0IHRoZW4gaXQgaW1tZWRpYXRlbHkgd3JpdGVzIHRoZSB0cmFpbGVyIGRhdGEgaW50byB0aGUgc3BhY2UgaXQgZ2V0cyBmcm9tIGBza2JfcHV0YC4gU28sIHRoYXQmIzM5O3Mgc2FmZSB0b28uCgpUaGVyZWZvcmUsIHRoZXJlIGlzbiYjMzk7dCBhY3R1YWxseSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSAqbGVhayogaGVyZS4gVGhlIGJ1Z3MgYXJlIHB1cmVseSByZWxhdGVkIHRvIG1lbW9yeSBjb3JydXB0aW9uOiBvdXQtb2YtYm91bmRzIHdyaXRlcyBhbmQgb3ZlcmxhcHBpbmcgZGF0YS4gS0FTQU4gaXMgdGhlIHRvb2wgZm9yIGNhdGNoaW5nIHRoZXNlIGJ1Z3MsIHdoaWNoIGlzIHBlcmZlY3QgZm9yIG15IG5lZWRzLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUgYmVjYXVzZSB0aGVyZSYjMzk7cyBubyByZWFkIG9yIGxlYWsgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nIGZvciB0aGUgS01TQU4gY2FsbDoKCjEuICBUaGUgcGF0Y2ggYWRkcmVzc2VzIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDogQW4gaW5jb3JyZWN0IHNpemUgY2hlY2sgYW5kIGFuIGluY29ycmVjdCBoZWFkcm9vbSBjYWxjdWxhdGlvbi4KMi4gIFRoZSBzaXplIGNoZWNrIGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcndyaXRlIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QuIFRoaXMgbGVhZHMgdG8gZGF0YSBjb3JydXB0aW9uIGluIGVpdGhlciB0aGUgcGFja2V0IGRhdGEgaXRzZWxmIG9yIGluIGBza2Jfc2hhcmVkX2luZm9gLgozLiAgVGhlIGluY29ycmVjdCBoZWFkcm9vbSBjYWxjdWxhdGlvbiwgd2hpY2ggaW5jb3JyZWN0bHkgc2V0IGB4ZHBmLSZndDtoZWFkcm9vbWAsIGNhdXNlZCBgYnVpbGRfc2tiX2Fyb3VuZGAgdG8gbWlzY2FsY3VsYXRlIHdoZXJlIHRoZSBidWZmZXIgc3RhcnRzIHdoaWNoIHJlc3VsdGVkIGluIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHdyaXRpbmcgYHNrYl9zaGFyZWRfaW5mb2Agb3V0IG9mIHRoZSBib3VuZHMgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLgo0LiAgVGhlc2UgYXJlIGJvdGggbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBhbmQgYXJlIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIG92ZXJsYXBwaW5nIGRhdGEuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Lgo1LiAgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgYW5kIGFueSByZXN1bHRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdWUgdG8gY29ycnVwdGVkIHN0cnVjdHVyZXMuCjYuICBUaGVyZSYjMzk7cyBubyBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvciBpcyByZWFkIG9yIHNlbnQgdG8gdXNlcnNwYWNlLiBUaGUgcGFja2V0IGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEFueSBoZWFkcm9vbSBvciB0YWlscm9vbSB1c2VkIGJ5IHRoZSBzdGFjayBpcyBpbml0aWFsaXplZCwgc3VjaCBhcyB0aHJvdWdoIGBicGZfc2tiX2dyb3dfcmNzdW1gLgo3LiAgVGhlcmVmb3JlLCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3QganVzdGlmaWVkIGJlY2F1c2UgS0FTQU4gaXMgc3VmZmljaWVudC4gSSYjMzk7bGwgbWFrZSB0aGUgZGVjaXNpb24gdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWA6XG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFx1MDAzZSBQQUdFX1NJWkVgIGluc3RlYWQgb2YgYFx1MDAzZSBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCkgdGhhdCBhbGxvd2VkIHBhY2tldCBkYXRhIHRvIG92ZXJsYXAgd2l0aCB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0IHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlLiBUaGlzIGNhdXNlcyBwYWNrZXQgZGF0YSB0byBiZSBvdmVyd3JpdHRlbiBieSBgc2tiX3NoYXJlZF9pbmZvYCBpbml0aWFsaXphdGlvbiwgb3IgYHNrYl9zaGFyZWRfaW5mb2AgdG8gYmUgY29ycnVwdGVkIGJ5IHBhY2tldCBtb2RpZmljYXRpb25zLlxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVx1MDAzZWhlYWRyb29tID0gMGAgaW5zdGVhZCBvZiBgbWV0YXNpemVgKSB0aGF0IGNhdXNlZCBgYnVpbGRfc2tiX2Fyb3VuZGAgdG8gbWlzY2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLiBUaGlzIHNoaWZ0ZWQgdGhlIGxvZ2ljYWwgZW5kIG9mIHRoZSBidWZmZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgcGFnZSwgY2F1c2luZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCB0byB3cml0ZSBgc2tiX3NoYXJlZF9pbmZvYCBvdXQtb2YtYm91bmRzIG9mIHRoZSBhbGxvY2F0ZWQgcGFnZS5cblxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXG5cblN0YW5kYXJkIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFnZSwgYXMgd2VsbCBhcyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBhIGNvcnJ1cHRlZCBgc2tiX3NoYXJlZF9pbmZvYCAoZS5nLiwgY29ycnVwdGVkIGBucl9mcmFnc2AgbGVhZGluZyB0byBPT0IgcmVhZHMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLCBhcyBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDpcbjEuIEFuIGluY29ycmVjdCBzaXplIGNoZWNrIChgXHUwMDNlIFBBR0VfU0laRWAgaW5zdGVhZCBvZiBgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgKSB0aGF0IGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcmxhcCB3aXRoIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UuIFRoaXMgY2F1c2VzIHBhY2tldCBkYXRhIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGBza2Jfc2hhcmVkX2luZm9gIGluaXRpYWxpemF0aW9uLCBvciBgc2tiX3NoYXJlZF9pbmZvYCB0byBiZSBjb3JydXB0ZWQgYnkgcGFja2V0IG1vZGlmaWNhdGlvbnMuXG4yLiBBbiBpbmNvcnJlY3QgYGhlYWRyb29tYCBjYWxjdWxhdGlvbiAoYHhkcGYtXHUwMDNlaGVhZHJvb20gPSAwYCBpbnN0ZWFkIG9mIGBtZXRhc2l6ZWApIHRoYXQgY2F1c2VkIGBidWlsZF9za2JfYXJvdW5kYCB0byBtaXNjYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuIFRoaXMgc2hpZnRlZCB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIGJ1ZmZlciBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLCBjYXVzaW5nIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHRvIHdyaXRlIGBza2Jfc2hhcmVkX2luZm9gIG91dC1vZi1ib3VuZHMgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLlxuXG5Cb3RoIGlzc3VlcyBhcmUgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCBvdmVybGFwcGluZyBkYXRhKS4gVGhleSBkbyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYWNrZXQgZGF0YSBjb3BpZWQgaW50byB0aGUgcGFnZSBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIGFueSBoZWFkcm9vbSBvciB0YWlscm9vbSB1c2VkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrIGlzIGVpdGhlciBhbHJlYWR5IGluaXRpYWxpemVkIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHN0YWNrIChlLmcuLCBgYnBmX3NrYl9ncm93X3Jjc3VtYCB6ZXJvZXMgbmV3IHRhaWxyb29tKS5cblxuU3RhbmRhcmQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIGBza2Jfc2hhcmVkX2luZm9gIChlLmcuLCBjb3JydXB0ZWQgYG5yX2ZyYWdzYCBsZWFkaW5nIHRvIE9PQiByZWFkcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQsIGFzIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgYnVncy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MTk6NTcuNzkxNzc3MTI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5NTk2MDQwMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWA6XFxuMS4gQW4gaW5jb3JyZWN0IHNpemUgY2hlY2sgKGBcXHUwMDNlIFBBR0VfU0laRWAgaW5zdGVhZCBvZiBgXFx1MDAzZSBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCkgdGhhdCBhbGxvd2VkIHBhY2tldCBkYXRhIHRvIG92ZXJsYXAgd2l0aCB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0IHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlLiBUaGlzIGNhdXNlcyBwYWNrZXQgZGF0YSB0byBiZSBvdmVyd3JpdHRlbiBieSBgc2tiX3NoYXJlZF9pbmZvYCBpbml0aWFsaXphdGlvbiwgb3IgYHNrYl9zaGFyZWRfaW5mb2AgdG8gYmUgY29ycnVwdGVkIGJ5IHBhY2tldCBtb2RpZmljYXRpb25zLlxcbjIuIEFuIGluY29ycmVjdCBgaGVhZHJvb21gIGNhbGN1bGF0aW9uIChgeGRwZi1cXHUwMDNlaGVhZHJvb20gPSAwYCBpbnN0ZWFkIG9mIGBtZXRhc2l6ZWApIHRoYXQgY2F1c2VkIGBidWlsZF9za2JfYXJvdW5kYCB0byBtaXNjYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuIFRoaXMgc2hpZnRlZCB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIGJ1ZmZlciBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLCBjYXVzaW5nIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHRvIHdyaXRlIGBza2Jfc2hhcmVkX2luZm9gIG91dC1vZi1ib3VuZHMgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLlxcblxcbkJvdGggaXNzdWVzIGFyZSBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIG92ZXJsYXBwaW5nIGRhdGEpLiBUaGV5IGRvIG5vdCBpbnZvbHZlIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhY2tldCBkYXRhIGNvcGllZCBpbnRvIHRoZSBwYWdlIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgYW55IGhlYWRyb29tIG9yIHRhaWxyb29tIHVzZWQgYnkgdGhlIG5ldHdvcmsgc3RhY2sgaXMgZWl0aGVyIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZCBieSB0aGUgc3RhY2sgKGUuZy4sIGBicGZfc2tiX2dyb3dfcmNzdW1gIHplcm9lcyBuZXcgdGFpbHJvb20pLlxcblxcblN0YW5kYXJkIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFnZSwgYXMgd2VsbCBhcyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBhIGNvcnJ1cHRlZCBgc2tiX3NoYXJlZF9pbmZvYCAoZS5nLiwgY29ycnVwdGVkIGBucl9mcmFnc2AgbGVhZGluZyB0byBPT0IgcmVhZHMpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLCBhcyBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZXNlIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgWERQIGxvZ2ljIGZvciBjb252ZXJ0aW5nIHplcm8tY29weSBYRFAgYnVmZmVycyB0byBYRFAgZnJhbWVzIChgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCkuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgQUZfWERQIGFuZCBYRFBfVFgvWERQX1JFRElSRUNUIGFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjE5OjU3Ljc5MTc4MzE3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5ODg2MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzVhM2RiMWFhZWIxNzA0NmE3OTliNjA1YWY3MjNjZThjZjk4YTA1NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxODoxOTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS94ZHAuYyBiL25ldC9jb3JlL3hkcC5jXFxuaW5kZXggOTg5MGEzMDU4NGJhNy4uNGJiOTc3OTBiMTg5MSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS94ZHAuY1xcbisrKyBiL25ldC9jb3JlL3hkcC5jXFxuQEAgLTU4NSw3ICs1ODUsNyBAQCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxuIFxcdFxcdCAgIHhkcC1cXHUwMDNlZGF0YSAtIHhkcC1cXHUwMDNlZGF0YV9tZXRhO1xcbiBcXHR0b3RzaXplID0geGRwLVxcdTAwM2VkYXRhX2VuZCAtIHhkcC1cXHUwMDNlZGF0YSArIG1ldGFzaXplO1xcbiBcXG4tXFx0aWYgKHNpemVvZigqeGRwZikgKyB0b3RzaXplIFxcdTAwM2UgUEFHRV9TSVpFKVxcbitcXHRpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXFx1MDAzZSBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdHBhZ2UgPSBkZXZfYWxsb2NfcGFnZSgpO1xcbkBAIC02MDIsNyArNjAyLDcgQEAgc3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbiBcXG4gXFx0eGRwZi1cXHUwMDNlZGF0YSA9IGFkZHIgKyBtZXRhc2l6ZTtcXG4gXFx0eGRwZi1cXHUwMDNlbGVuID0gdG90c2l6ZSAtIG1ldGFzaXplO1xcbi1cXHR4ZHBmLVxcdTAwM2VoZWFkcm9vbSA9IDA7XFxuK1xcdHhkcGYtXFx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XFxuIFxcdHhkcGYtXFx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XFxuIFxcdHhkcGYtXFx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xcbiBcXHR4ZHBmLVxcdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoxOTo1OC4yNjIzNDU3MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NzYzOTcxNzExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBYRFAgbG9naWMgZm9yIGNvbnZlcnRpbmcgemVyby1jb3B5IFhEUCBidWZmZXJzIHRvIFhEUCBmcmFtZXMgKGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgYW5kIFhEUF9UWC9YRFBfUkVESVJFQ1QgYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzVhM2RiMWFhZWIxNzA0NmE3OTliNjA1YWY3MjNjZThjZjk4YTA1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE4OjE5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUveGRwLmMgYi9uZXQvY29yZS94ZHAuY1xuaW5kZXggOTg5MGEzMDU4NGJhNy4uNGJiOTc3OTBiMTg5MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3hkcC5jXG4rKysgYi9uZXQvY29yZS94ZHAuY1xuQEAgLTU4NSw3ICs1ODUsNyBAQCBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXG4gXHRcdCAgIHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbiBcdHRvdHNpemUgPSB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSArIG1ldGFzaXplO1xuIFxuLVx0aWYgKHNpemVvZigqeGRwZikgKyB0b3RzaXplIFx1MDAzZSBQQUdFX1NJWkUpXG4rXHRpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cGFnZSA9IGRldl9hbGxvY19wYWdlKCk7XG5AQCAtNjAyLDcgKzYwMiw3IEBAIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcbiBcdHhkcGYtXHUwMDNlZGF0YSA9IGFkZHIgKyBtZXRhc2l6ZTtcbiBcdHhkcGYtXHUwMDNlbGVuID0gdG90c2l6ZSAtIG1ldGFzaXplO1xuLVx0eGRwZi1cdTAwM2VoZWFkcm9vbSA9IDA7XG4rXHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XG4gXHR4ZHBmLVx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XG4gXHR4ZHBmLVx1MDAzZWZyYW1lX3N6ID0gUEFHRV9TSVpFO1xuIFx0eGRwZi1cdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MTk6NTguMjYyMzQ3MDM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNDg0MTk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIENvcmUgWERQIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG5ldC9jb3JlL3hkcC5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZnVuY3Rpb24uIEknbSBzZWVpbmcgdHdvIGtleSBjaGFuZ2VzLiBGaXJzdCwgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiB0byBob3cgdGhlIHNpemUgY2hlY2sgaXMgcGVyZm9ybWVkLCByZXBsYWNpbmcgYFBBR0VfU0laRWAgd2l0aCBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuIFRoaXMgbG9va3MgbGlrZSB0aGV5J3JlIGFjY291bnRpbmcgZm9yIHRoZSBTS0Igb3ZlcmhlYWQgbm93LCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgYWxsb2NhdGlvbi4gSXQncyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIHdoZW4gY3JlYXRpbmcgWERQIGZyYW1lcy4gU2Vjb25kLCBgeGRwZi1cdTAwM2VoZWFkcm9vbWAgaXMgYmVpbmcgc2V0IHRvIGBtZXRhc2l6ZWAgaW5zdGVhZCBvZiAwLiBUaGF0J3MgYSBzaGlmdCBpbiBob3cgdGhlIGhlYWRyb29tIGlzIG1hbmFnZWQ7IHRoZSBpbml0aWFsIGFzc3VtcHRpb24gbWF5IGhhdmUgYmVlbiBhIGRlZmF1bHQgemVybyBoZWFkcm9vbS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhvc2Ugd2VyZSBhcHByb3ByaWF0ZSwgYW5kIHdoYXQgdHJpZ2dlcmVkIHRoZSBjaGFuZ2UuIEkgbmVlZCB0byBkaXZlIGludG8gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgaXRzZWxmLCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhhdCBjb250ZXh0LiBUaGlzIGlzIGNvcmUgWERQIGxvZ2ljLCBzbyBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGVmZmVjdHMgdGhlIHBhY2tldCBoYW5kbGluZyBmbG93LiBJcyB0aGlzIGEgYnVnIGZpeD8gQW4gb3B0aW1pemF0aW9uPyBPciBtYXliZSBpdCdzIGVuYWJsaW5nIHNvbWUgbmV3IGZlYXR1cmU/IEknbGwgY2hlY2sgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBwb3NzaWJseSB0aGUgbWFpbGluZyBsaXN0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjaGFuZ2VzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDowMy40NzcxOTE3MTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMDMwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3hkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3hkcC5jPTU3ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYXR0YWNobWVudF9zZXR1cCk7XFxubmV0L2NvcmUveGRwLmMtNTc1LVxcbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L2NvcmUveGRwLmMtNTc3LXtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTYxMi19XFxubmV0L2NvcmUveGRwLmM6NjEzOkVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxubmV0L2NvcmUveGRwLmMtNjE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDowMy41MjAyOTk2NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYyNTg0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGZ1bmN0aW9uIGJldHRlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyBhbmQgd2hlcmUgaXQncyBhY3R1YWxseSBiZWluZyAqdXNlZCouIFNpbXBseSByZWFkaW5nIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGdpdmVzIG1lIGNsdWVzLCBidXQgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBpdHMgY2FsbHMgaXMgZ29pbmcgdG8gcHJvdmlkZSB0aGUgcmVhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aG9zZSBjYWxscyEgTGV0J3Mgc2VlIHdoYXQncyBpbXBvcnRpbmcgdGhhdCBndXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDowNi45ODI4ODU1NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxODAzMDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYz02Mj1tbHg1ZV94bWl0X3hkcF9idWZmKHN0cnVjdCBtbHg1ZV94ZHBzcSAqc3EsIHN0cnVjdCBtbHg1ZV9ycSAqcnEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMtODktXFx0XFx0ICogZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIHhkcF9idWZmIHNob3VsZG4ndCBiZSByZWN5Y2xlZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM6OTA6XFx0XFx0ICogYXMgaXQgd2FzIGFscmVhZHkgZG9uZSBpbiB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jLTkxLVxcdFxcdCAqL1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmg9Mzc4PXN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21femMoc3RydWN0IHhkcF9idWZmICp4ZHApO1xcbmluY2x1ZGUvbmV0L3hkcC5oOjM3OTpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApO1xcbmluY2x1ZGUvbmV0L3hkcC5oLTM4MC1zdHJ1Y3Qgc2tfYnVmZiAqX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcC5oPTQzMD1zdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtNDM0LVxcdGlmICh4ZHAtXFx1MDAzZXJ4cS1cXHUwMDNlbWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTClcXG5pbmNsdWRlL25ldC94ZHAuaDo0MzU6XFx0XFx0cmV0dXJuIHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSh4ZHApO1xcbmluY2x1ZGUvbmV0L3hkcC5oLTQzNi1cXG4tLVxcbm5ldC9jb3JlL3hkcC5jPTU3ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYXR0YWNobWVudF9zZXR1cCk7XFxubmV0L2NvcmUveGRwLmMtNTc1LVxcbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L2NvcmUveGRwLmMtNTc3LXtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTYxMi19XFxubmV0L2NvcmUveGRwLmM6NjEzOkVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxubmV0L2NvcmUveGRwLmMtNjE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDowOS4wMDA5MjEyNjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc1OTk0MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGZ1bmN0aW9uLCBgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZWAsIGlzIGRlZmluZWQgYXMgYSBgc3RhdGljIGlubGluZWAgZnVuY3Rpb24uIFRoYXQncyBnb29kOyBpdCBzdWdnZXN0cyBpdCdzIGxpa2VseSBoZWF2aWx5IG9wdGltaXplZCBhbmQgc3BlY2lmaWMgdG8gYSBjZXJ0YWluIGNvbnRleHQgd2l0aGluIHRoZSBYRFAgZnJhbWV3b3JrLiBUaGUgZmFjdCB0aGF0IGl0J3MgaW4gYGluY2x1ZGUvbmV0L3hkcC5oYCB0ZWxscyBtZSBpdCdzIGEgY29yZSBYRFAgdXRpbGl0eS4gVGhlIGltcG9ydGFudCB0aGluZyBub3cgaXMgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBCZWluZyBgc3RhdGljIGlubGluZWAgbWVhbnMgaXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhpcyBmaWxlLCBvciBhIGZpbGUgaW5jbHVkZWQgYnkgdGhlIGN1cnJlbnQgZmlsZSwgc28gdGhlcmUgc2hvdWxkIGJlIGEgbGltaXRlZCBudW1iZXIgb2YgcGxhY2VzIHRvIGxvb2ssIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDoxMi4wNzY5MTc0ODlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MTYzMjcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vZW5hL2VuYV94ZHAuaD04Mj1zdGF0aWMgaW5saW5lIGludCBlbmFfeGRwX2V4ZWN1dGUoc3RydWN0IGVuYV9yaW5nICpyeF9yaW5nLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9lbmEvZW5hX3hkcC5oLTk1LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtYXpvbi9lbmEvZW5hX3hkcC5oOjk2OlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL2VuYS9lbmFfeGRwLmgtOTctXFx0XFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jPTM4Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFxX3hkcF9idWlsZF9za2Ioc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmMtMzkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FxdWFudGlhL2F0bGFudGljL2FxX3JpbmcuYzozOTM6XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmMtMzk0LVxcdGlmICh1bmxpa2VseSgheGRwZikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmM9NDA1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXFfeGRwX3J1bl9wcm9nKHN0cnVjdCBhcV9uaWNfcyAqYXFfbmljLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jLTQ0Mi1cXHRjYXNlIFhEUF9UWDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcXVhbnRpYS9hdGxhbnRpYy9hcV9yaW5nLmM6NDQzOlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXF1YW50aWEvYXRsYW50aWMvYXFfcmluZy5jLTQ0NC1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTczMD1zdGF0aWMgYm9vbCB0c25lcF94ZHBfeG1pdF9iYWNrKHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTczNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjczNTpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy03MzYtXFx0Ym9vbCB4bWl0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYz0yMjEyPXN0YXRpYyBpbnQgZHBhYV9hMDUwMzg1X3dhX3hkcGYoc3RydWN0IGRwYWFfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjI3NS1cXHQvKiBDcmVhdGUgYW4gWERQIGZyYW1lIGFyb3VuZCB0aGUgbmV3IGJ1ZmZlciBpbiBhIHNpbWlsYXIgZmFzaGlvblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM6MjI3NjpcXHQgKiB0byB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjI3Ny1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM9MjU5MT1zdGF0aWMgdTMyIGRwYWFfcnVuX3hkcChzdHJ1Y3QgZHBhYV9wcml2ICpwcml2LCBzdHJ1Y3QgcW1fZmQgKmZkLCB2b2lkICp2YWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjY0My1cXHRcXHR4ZHAuZnJhbWVfc3ogPSBEUEFBX0JQX1JBV19TSVpFO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM6MjY0NDpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcXHUwMDI2eGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jLTI2NDUtXFx0XFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jPTE0MT1zdGF0aWMgdm9pZCAqZnVuX3J1bl94ZHAoc3RydWN0IGZ1bmV0aF9yeHEgKnEsIHNrYl9mcmFnX3QgKmZyYWdzLCB2b2lkICpidWZfdmEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX3J4LmMtMTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguYzoxNjg6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoXFx1MDAyNnhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jLTE2OS1cXHRcXHRpZiAoIXhkcGYgfHwgIWZ1bl94ZHBfdHgoeGRwX3EsIHhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmM9NjA1PXN0YXRpYyBpbnQgZ3ZlX3hkcF90eF9kcW8oc3RydWN0IGd2ZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ3ZlX3J4X3JpbmcgKnJ4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfcnhfZHFvLmMtNjEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jOjYxMzpcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX3J4X2Rxby5jLTYxNC1cXHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jPTIyNDc9aW50IGk0MGVfeG1pdF94ZHBfdHhfcmluZyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgc3RydWN0IGk0MGVfcmluZyAqeGRwX3JpbmcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYy0yMjQ4LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jOjIyNDk6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jLTIyNTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYz0yOTU2PWludCBpZ2JfeGRwX3htaXRfYmFjayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jLTI5NTcte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jOjI5NTg6XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYy0yOTU5LVxcdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYz0yNDkxPXN0YXRpYyBpbnQgaWdjX3hkcF94bWl0X2JhY2soc3RydWN0IGlnY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYy0yNDkyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYzoyNDkzOlxcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMtMjQ5NC1cXHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jPTI0MDA9c3RhdGljIGludCBpeGdiZV9ydW5feGRwKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jLTI0MjEtXFx0Y2FzZSBYRFBfVFg6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jOjI0MjI6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMtMjQyMy1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmM9OTc9c3RhdGljIGludCBpeGdiZV9ydW5feGRwX3pjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeHNrLmMtMTI0LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jOjEyNTpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3hzay5jLTEyNi1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz0yMTc0PW12bmV0YV94ZHBfeG1pdF9iYWNrKHN0cnVjdCBtdm5ldGFfcG9ydCAqcHAsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy0yMTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6MjE4MzpcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtMjE4NC1cXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM9MzczMT1tdnBwMl94ZHBfeG1pdF9iYWNrKHN0cnVjdCBtdnBwMl9wb3J0ICpwb3J0LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTM3MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmM6MzczODpcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jLTM3MzktXFx0aWYgKHVubGlrZWx5KCF4ZHBmKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYz0xNDg4PXN0YXRpYyBib29sIG90eDJfeGRwX3Jjdl9wa3RfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtMTUzNS1cXHRcXHRjcS1cXHUwMDNlcG9vbF9wdHJzKys7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jOjE1MzY6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoXFx1MDAyNnhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jLTE1MzctXFx0XFx0cmV0dXJuIG90eDJfeGRwX3NxX2FwcGVuZF9wa3QocGZ2ZiwgeGRwZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYy0xNTU5LVxcdFxcdFxcdFxcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYzoxNTYwOlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFxcdTAwMjZ4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYy0xNTYxLVxcdFxcdHhkcF9yZXR1cm5fZnJhbWUoeGRwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTIxMzc9c3RhdGljIHUzMiBtdGtfeGRwX3J1bihzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgbXRrX3J4X3JpbmcgKnJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTIxNjUtXFx0Y2FzZSBYRFBfVFg6IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjIxNjY6XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTIxNjctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM9NjI9bWx4NWVfeG1pdF94ZHBfYnVmZihzdHJ1Y3QgbWx4NWVfeGRwc3EgKnNxLCBzdHJ1Y3QgbWx4NWVfcnEgKnJxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jLTcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYzo3MjpcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy03My1cXHRpZiAodW5saWtlbHkoIXhkcGYpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5jLTEyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmM6MTI2OlxcdC8qIERyaXZlciBhc3N1bWVzIHRoYXQgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSByZXR1cm5zIGFuIHhkcF9mcmFtZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi94ZHAuYy0xMjctXFx0ICogdGhhdCBwb2ludHMgdG8gdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBhcyB0aGUgb3JpZ2luYWwgeGRwX2J1ZmYuIEl0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9pb25pYy9pb25pY190eHJ4LmM9NDcwPXN0YXRpYyBib29sIGlvbmljX3J1bl94ZHAoc3RydWN0IGlvbmljX3J4X3N0YXRzICpzdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL2lvbmljL2lvbmljX3R4cnguYy01NDctXFx0Y2FzZSBYRFBfVFg6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jOjU0ODpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcXHUwMDI2eGRwX2J1Zik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vaW9uaWMvaW9uaWNfdHhyeC5jLTU0OS1cXHRcXHRpZiAoIXhkcGYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9yeC5jPTI0OT1zdGF0aWMgYm9vbCBlZnhfZG9feGRwKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9yeC5jLTMwOS1cXHRcXHQvKiBCdWZmZXIgb3duZXJzaGlwIHBhc3NlcyB0byB0eCBvbiBzdWNjZXNzLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9yeC5jOjMxMDpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZShcXHUwMDI2eGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvcnguYy0zMTEtXFx0XFx0ZXJyID0gZWZ4X3hkcF90eF9idWZmZXJzKGVmeCwgMSwgXFx1MDAyNnhkcGYsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmM9MjUxPXN0YXRpYyBib29sIGVmeF9kb194ZHAoc3RydWN0IGVmeF9uaWMgKmVmeCwgc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmMtMzExLVxcdFxcdC8qIEJ1ZmZlciBvd25lcnNoaXAgcGFzc2VzIHRvIHR4IG9uIHN1Y2Nlc3MuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3J4LmM6MzEyOlxcdFxcdHhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKFxcdTAwMjZ4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9yeC5jLTMxMy1cXHRcXHRlcnIgPSBlZnhfc2llbmFfeGRwX3R4X2J1ZmZlcnMoZWZ4LCAxLCBcXHUwMDI2eGRwZiwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM9ODgyPXN0YXRpYyB1MzIgbmV0c2VjX3hkcF94bWl0X2JhY2soc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy04ODQtXFx0c3RydWN0IG5ldHNlY19kZXNjX3JpbmcgKnR4X3JpbmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZGVzY19yaW5nW05FVFNFQ19SSU5HX1RYXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6ODg1OlxcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTg4Ni1cXHR1MzIgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz01MjU3PXN0YXRpYyBpbnQgc3RtbWFjX3hkcF94bWl0X2JhY2soc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy01MjYwLVxcdGJvb2wgemMgPSAhISh4ZHAtXFx1MDAzZXJ4cS1cXHUwMDNlbWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo1MjYxOlxcdHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSB4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHhkcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy01MjYyLVxcdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTUyODEtXFx0fSBlbHNlIGlmIChyZXMgPT0gU1RNTUFDX1hEUF9DT05TVU1FRCBcXHUwMDI2XFx1MDAyNiB6Yykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NTI4MjpcXHRcXHQvKiB4ZHAgaGFzIGJlZW4gZnJlZWQgYnkgeGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSgpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNTI4My1cXHRcXHQgKiBubyBuZWVkIHRvIGNhbGwgeHNrX2J1ZmZfZnJlZSgpIGFnYWluLCBzbyByZXR1cm5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmM9MTE2OD1zdGF0aWMgaW50IGFtNjVfY3Bzd19ydW5feGRwKHN0cnVjdCBhbTY1X2Nwc3dfcnhfZmxvdyAqZmxvdyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2FtNjUtY3Bzdy1udXNzLmMtMTE5OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jOjEyMDA6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9hbTY1LWNwc3ctbnVzcy5jLTEyMDEtXFx0XFx0aWYgKHVubGlrZWx5KCF4ZHBmKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19wcml2LmM9MTMzNj1pbnQgY3Bzd19ydW5feGRwKHN0cnVjdCBjcHN3X3ByaXYgKnByaXYsIGludCBjaCwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYy0xMzU4LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfcHJpdi5jOjEzNTk6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X3ByaXYuYy0xMzYwLVxcdFxcdGlmICh1bmxpa2VseSgheGRwZikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYz03Nzk9c3RhdGljIHUzMiBlbWFjX3J1bl94ZHAoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyICpsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19jb21tb24uYy03OTYtXFx0XFx0LyogU2VuZCBwYWNrZXQgdG8gVFggcmluZyBmb3IgaW1tZWRpYXRlIHRyYW5zbWlzc2lvbiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jOjc5NzpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX2NvbW1vbi5jLTc5OC1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMjUzPXN0YXRpYyBpbnQgdHVuX3hkcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5kcml2ZXJzL25ldC90dW4uYy0xMjU0LXtcXG5kcml2ZXJzL25ldC90dW4uYzoxMjU1OlxcdHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNTYtXFx0aW50IG54bWl0O1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTYyMj1zdGF0aWMgaW50IHZldGhfeGRwX3R4KHN0cnVjdCB2ZXRoX3JxICpycSwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNjI0LXtcXG5kcml2ZXJzL25ldC92ZXRoLmM6NjI1OlxcdHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L3ZldGguYy02MjYtXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9MTY4NT1zdGF0aWMgaW50IHZpcnRuZXRfeGRwX2hhbmRsZXIoc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZywgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtMTcwMi1cXHRcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZzdGF0cy1cXHUwMDNleGRwX3R4KTtcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6MTcwMzpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0xNzA0LVxcdFxcdGlmICh1bmxpa2VseSgheGRwZikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M194ZHAuYz0yNjE9dm14bmV0M19ydW5feGRwKHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfeGRwLmMtMjg1LVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M194ZHAuYzoyODY6XFx0XFx0eGRwZiA9IHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKTtcXG5kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfeGRwLmMtMjg3LVxcdFxcdGlmICh1bmxpa2VseSgheGRwZiB8fFxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmM9OTY3PXN0YXRpYyB1MzIgeGVubmV0X3J1bl94ZHAoc3RydWN0IG5ldGZyb250X3F1ZXVlICpxdWV1ZSwgc3RydWN0IHBhZ2UgKnBkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMtOTgzLVxcdGNhc2UgWERQX1RYOlxcbmRyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jOjk4NDpcXHRcXHR4ZHBmID0geGRwX2NvbnZlcnRfYnVmZl90b19mcmFtZSh4ZHApO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jLTk4NS1cXHRcXHRpZiAodW5saWtlbHkoIXhkcGYpKSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZHAuaD00Mjk9c3RhdGljIGlubGluZVxcbmluY2x1ZGUvbmV0L3hkcC5oOjQzMDpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF9idWZmX3RvX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbmluY2x1ZGUvbmV0L3hkcC5oLTQzMS17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NTE5PWludCB4ZHBfZG9fcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NTI3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1Mjg6XFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X2ZyYW1lKHJpLCBkZXYsIHhkcF9jb252ZXJ0X2J1ZmZfdG9fZnJhbWUoeGRwKSxcXG5uZXQvY29yZS9maWx0ZXIuYy00NTI5LVxcdFxcdFxcdFxcdCAgICAgICB4ZHBfcHJvZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjEzLjcxODU1NTU2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ1MjU2NjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRFAgWmVyby1Db3B5IEZyYW1lIENvbnZlcnNpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcHJldHR5IHNwZWNpZmljIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgZml4IGluIHRoZSBYRFAgemVyby1jb3B5IHBhdGguIEl0J3MgdHJpZ2dlcmVkIHdoZW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgZ2V0cyBjYWxsZWQsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBtZW1vcnkgdHlwZSBpcyBYU0sgYnVmZiBwb29sIGFuZCB3ZSdyZSB1c2luZyB6ZXJvLWNvcHkgQUZfWERQLCBsaWtlbHkgdmlhIFhEUF9UWCBvciBYRFBfUkVESVJFQ1QgYWN0aW9ucy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgZml4aW5nIHRoZSBgeGRwZi1cdTAwM2VoZWFkcm9vbWAgYXNzaWdubWVudCDigJMgaXQgd2FzIHdyb25nbHkgc2V0IHRvIHplcm8gYW5kIG5lZWRzIHRvIGJlIHNldCB0byBgbWV0YXNpemVgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIHNpemUgY2hlY2sgdG8gdXRpbGl6ZSBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgaXMgYSBjaGFuZ2UgcmlnaHQgaW4gdGhlIFhEUCBjb3JlLiBTbyB0aGlzIGZpeCBjb3VsZCBiZSBpbXBvcnRhbnQsIGV2ZW4gbW9yZSBzbyBiZWNhdXNlIFhEUCBpcyB3aWRlbHkgdXNlZCBpbiB2aXJ0dWFsaXplZCBzZXR1cHMg4oCTIHZldGgsIHR1biwgdmlydGlvX25ldCBhcmUgYWxsIHJlbGV2YW50IHRhcmdldHMuIFRoZSBmYWN0IHRoYXQgaXQncyBpbiB0aGUgY29udmVyc2lvbiBmcm9tIHplcm8tY29weSBidWZmZXJzIHRvIFhEUCBmcmFtZXMgaXMgYSBwcmV0dHkgbG93LWxldmVsIHBvaW50LCBhbmQgaXQncyBlc3NlbnRpYWwgdGhhdCBpdCdzIGNvcnJlY3QuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHZlcmlmeSBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBpbiBgbmV0L2NvcmUveGRwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjIyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjIzLjE3MTEyNDE4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MTk5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3hkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3hkcC5jPTU3ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYXR0YWNobWVudF9zZXR1cCk7XFxubmV0L2NvcmUveGRwLmMtNTc1LVxcbm5ldC9jb3JlL3hkcC5jOjU3NjpzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L2NvcmUveGRwLmMtNTc3LXtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTYxMi19XFxubmV0L2NvcmUveGRwLmM6NjEzOkVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxubmV0L2NvcmUveGRwLmMtNjE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDoyMy4yMjEwNDkyNzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ1NDU4NzE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9uIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBvciBub3QgaXQncyBhY3R1YWxseSBleHBvcnRlZCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgZm9yIGZ1enppbmcuIEdvb2QsIGl0IGlzIGV4cG9ydGVkLiBOb3csIHNpbmNlIHRoZXJlJ3MgYSBwYXRjaCB0aGF0IHRhcmdldHMgdGhpcyBmdW5jdGlvbiwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbidzIHVzYWdlLCBzbyBJJ2xsIHNjYW4gYG5ldC9jb3JlL3hkcC5jYCB0byBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBvciBjYWxsIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgLiBVbmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDozMS42NzU2MzkzOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3hkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NjpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxuIDU3NzpcXHR7XFxuIDU3ODpcXHRcXHR1bnNpZ25lZCBpbnQgbWV0YXNpemUsIHRvdHNpemU7XFxuIDU3OTpcXHRcXHR2b2lkICphZGRyLCAqZGF0YV90b19jb3B5O1xcbiA1ODA6XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZjtcXG4gNTgxOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHQvKiBDbG9uZSBpbnRvIGEgTUVNX1RZUEVfUEFHRV9PUkRFUjAgeGRwX2ZyYW1lLiAqL1xcbiA1ODQ6XFx0XFx0bWV0YXNpemUgPSB4ZHBfZGF0YV9tZXRhX3Vuc3VwcG9ydGVkKHhkcCkgPyAwIDpcXG4gNTg1OlxcdFxcdFxcdCAgIHhkcC1cXHUwMDNlZGF0YSAtIHhkcC1cXHUwMDNlZGF0YV9tZXRhO1xcbiA1ODY6XFx0XFx0dG90c2l6ZSA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEgKyBtZXRhc2l6ZTtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0aWYgKHNpemVvZigqeGRwZikgKyB0b3RzaXplIFxcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcXG4gNTg5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1OTA6XFx0XFxuIDU5MTpcXHRcXHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcXG4gNTkyOlxcdFxcdGlmICghcGFnZSlcXG4gNTkzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRhZGRyID0gcGFnZV90b192aXJ0KHBhZ2UpO1xcbiA1OTY6XFx0XFx0eGRwZiA9IGFkZHI7XFxuIDU5NzpcXHRcXHRtZW1zZXQoeGRwZiwgMCwgc2l6ZW9mKCp4ZHBmKSk7XFxuIDU5ODpcXHRcXG4gNTk5OlxcdFxcdGFkZHIgKz0gc2l6ZW9mKCp4ZHBmKTtcXG4gNjAwOlxcdFxcdGRhdGFfdG9fY29weSA9IG1ldGFzaXplID8geGRwLVxcdTAwM2VkYXRhX21ldGEgOiB4ZHAtXFx1MDAzZWRhdGE7XFxuIDYwMTpcXHRcXHRtZW1jcHkoYWRkciwgZGF0YV90b19jb3B5LCB0b3RzaXplKTtcXG4gNjAyOlxcdFxcbiA2MDM6XFx0XFx0eGRwZi1cXHUwMDNlZGF0YSA9IGFkZHIgKyBtZXRhc2l6ZTtcXG4gNjA0OlxcdFxcdHhkcGYtXFx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZTtcXG4gNjA1OlxcdFxcdHhkcGYtXFx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XFxuIDYwNjpcXHRcXHR4ZHBmLVxcdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xcbiA2MDc6XFx0XFx0eGRwZi1cXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XFxuIDYwODpcXHRcXHR4ZHBmLVxcdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xcbiA2MDk6XFx0XFxuIDYxMDpcXHRcXHR4c2tfYnVmZl9mcmVlKHhkcCk7XFxuIDYxMTpcXHRcXHRyZXR1cm4geGRwZjtcXG4gNjEyOlxcdH1cXG4gNjEzOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxuIDYxNDpcXHRcXG4gNjE1OlxcdC8qIFVzZWQgYnkgWERQX1dBUk4gbWFjcm8sIHRvIGF2b2lkIGlubGluaW5nIFdBUk4oKSBpbiBmYXN0LXBhdGggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjA6MzEuNjc1NzQzNTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTg2NTczMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBhcmVhcyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIFhEUCBzdGFjay4gQW5kLCB5ZWFoLCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCByZWFsbHkgc3RhbmRzIG91dCBhcyBhIHByaW1lIHRhcmdldC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgWERQIGZyYW1ld29yaywgc28gYnVncyBoZXJlIGNvdWxkIGhhdmUgcHJldHR5IHNpZ25pZmljYW50IGNvbnNlcXVlbmNlcy5cblxuTXkgZm9jdXMgcmlnaHQgbm93IGlzIGRlZmluaXRlbHkgb24gdGhhdCBzcGVjaWZpYyBzeW1ib2wuIEkgd2FudCB0byBidWlsZCBhIGZ1enppbmcgc2V0dXAgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBpdC4gR2l2ZW4gdGhhdCBpdCdzIHJlbGF0ZWQgdG8gemVyby1jb3B5IHdpdGggQUZfWERQLCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFuZCwgY3J1Y2lhbGx5LCBgWERQX1NPQ0tFVFNgIHRvIGFsbG93IGZ1enppbmcgb2YgdGhlIHplcm8tY29weSBwYXRoLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gdGhhdCBgWERQX1NPQ0tFVFNgIGlzIGluZGVlZCBlbmFibGVkIHdoZW4gSSBleHBlY3QgaXQgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMDo0Mi4yNjIzMTg4NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NjAyODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRFBfU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQveGRwL0tjb25maWctOS1cXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG5uZXQveGRwL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjA6NDIuMzI2OTI3NDg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwODkxNjk2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgWERQX1NPQ0tFVFNgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgc3Vycm91bmRpbmcgYFhEUF9TT0NLRVRTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBpdCBoYXMgYW55IGNydWNpYWwgZGVwZW5kZW5jaWVzIOKAkyBlaXRoZXIgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIG9yIG1heWJlIGV2ZW4gdXNlcnNwYWNlIGxpYnJhcmllcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2Ygd2hhdCBpdCBlbmFibGVzIGFuZCBhbnkgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9yIGNhdmVhdHMgYXNzb2NpYXRlZCB3aXRoIGl0cyB1c2UuIFdoYXQgYXJlIHRoZSBidWlsZGluZyBibG9ja3MgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBkZXBsb3lpbmcgc29tZXRoaW5nIHRoYXQgdXNlcyBpdCBpbiBwcm9kdWN0aW9uPyBMZXQncyB0cmFjZSBpdCBiYWNrIGFuZCBleHBvc2UgdGhvc2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjQ5LjQxNjEwMDA0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBYRFBfU09DS0VUU1xcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuICAgNTpcXHRcXHRkZWZhdWx0IG5cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgWERQIHNvY2tldHMgYWxsb3dzIGEgY2hhbm5lbCBiZXR3ZWVuIFhEUCBwcm9ncmFtcyBhbmRcXG4gICA4OlxcdFxcdCAgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucy5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFhEUF9TT0NLRVRTXFxuICAxMzpcXHRcXHRkZWZhdWx0IG5cXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgU3VwcG9ydCBmb3IgUEZfWERQIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cXG4gIDE2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjA6NDkuNDE2MTczNTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjA1NzAzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYRFBfU09DS0VUUyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBYRFBfU09DS0VUU2AgaGVyZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcmVsYXRpb25zaGlwLCBhbmQgSSB3b25kZXIgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBsaW5rZWQgdG8gdGhpcyBmZWF0dXJlLiBMZXQgbWUgc3RhcnQgYnkgbG9va2luZyBhcm91bmQuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmVzaWRlIGluIGBuZXQvY29yZS94ZHAuY2AuIE5vdywgYSBrZXkgcXVlc3Rpb24gcG9wcyB1cDogaXMgdGhlIGNvZGUgd2l0aGluIGBuZXQvY29yZS94ZHAuY2AgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHVuY29uZGl0aW9uYWxseSwgb3IgaXMgdGhlcmUgYSBjb25kaXRpb25hbCBjb21waWxlIG9wdGlvbiBhdCBwbGF5IGhlcmU/IEkgbmVlZCB0byBrbm93IHRoZSBidWlsZCBiZWhhdmlvciB0byB1bmRlcnN0YW5kIHdoYXQncyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjU1LjUzNjc0NTY5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NjM2MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG4tLVxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjE1OlxcdFxcdFxcdGZpYl9ub3RpZmllci5vIHhkcC5vIGZsb3dfb2ZmbG9hZC5vIGdyby5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNi1cXHRcXHRcXHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIGdzby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIwOjU1Ljk4NTM4ODI0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODQzMDcxMzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgWERQIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGB4ZHAub2AgaXMgYmVpbmcgY29tcGlsZWQgcmVnYXJkbGVzcyDigJMgZ29vZCB0byBrbm93LCB0aGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSByZWFsIG1lYXQgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAuIE5vdywgSSByZWNhbGwgdGhhdCBmdW5jdGlvbiBiZWluZyB1c2VkIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBgeGRwLVx1MDAzZXJ4cS1cdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MYCwgd2hpY2ggcmluZ3MgYWxhcm0gYmVsbHMgZm9yIEFGX1hEUCB6ZXJvLWNvcHkgc2NlbmFyaW9zLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggemVyby1jb3B5LCBlbmFibGluZyBgWERQX1NPQ0tFVFNgIGZvciB0aGlzIGNvbmZpZyBtYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgb2YgY291cnNlLCBnaXZlbiB0aGF0IGl0IG1lbnRpb25zIFhEUCBwcm9ncmFtcywgd2Ugd2lsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFzIGEgY29uZmlndXJhdGlvbi5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhlIHBhdGNoIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBOb3BlLCBpdCBsb29rcyBsaWtlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGlzIHRoZSAqb25seSogc3ltYm9sIHRoYXQgd2UgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaGUgcGF0Y2ggc2VlbXMgaGlnaGx5IGZvY3VzZWQuXG5cblVsdGltYXRlbHksIHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGNvcmUgWERQIGxvZ2ljIHRoYXQgaGFuZGxlcyB0aGUgY29udmVyc2lvbiBvZiB6ZXJvLWNvcHkgWERQIGJ1ZmZlcnMgaW50byBzdGFuZGFyZCBYRFAgZnJhbWVzIHdpdGhpbiB0aGUga2VybmVsLiBXZSBrbm93IHRoaXMgaXMgcmVsZXZhbnQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggQUZfWERQLCBpbmNsdWRpbmcgWERQX1RYIGFuZCBYRFBfUkVESVJFQ1QgYWN0aW9ucywgbWFraW5nIGl0IGEgY3JpdGljYWwgcG9pbnQgdG8gcHJvYmUuIEdpdmVuIGl0cyBjZW50cmFsIHJvbGUgaW4gemVyby1jb3B5IFhEUCBwcm9jZXNzaW5nIGFuZCB0aGUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nIGFuZCB0aGF0IHRoZSBzeW1ib2wgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgaXMgbXkgcHJpbWFyeSBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NTksIk91dHB1dFRva2VucyI6MTIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIxOjA1LjgyODQ2MjAwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTk4MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBYRFAgbG9naWMgZm9yIGNvbnZlcnRpbmcgemVyby1jb3B5IFhEUCBidWZmZXJzIHRvIFhEUCBmcmFtZXMgKGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgYW5kIFhEUF9UWC9YRFBfUkVESVJFQ1QgYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBYRFAgbG9naWMgZm9yIGNvbnZlcnRpbmcgemVyby1jb3B5IFhEUCBidWZmZXJzIHRvIFhEUCBmcmFtZXMgKGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9YRFAgYW5kIFhEUF9UWC9YRFBfUkVESVJFQ1QgYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjE6MDUuOTAyMDY2NzU3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE0ODU3MzcyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMTowNS45MDI1OTU5MTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYxNDg1MjAyMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDpcXG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFxcdTAwM2UgUEFHRV9TSVpFYCBpbnN0ZWFkIG9mIGBcXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgKSB0aGF0IGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcmxhcCB3aXRoIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UuIFRoaXMgY2F1c2VzIHBhY2tldCBkYXRhIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGBza2Jfc2hhcmVkX2luZm9gIGluaXRpYWxpemF0aW9uLCBvciBgc2tiX3NoYXJlZF9pbmZvYCB0byBiZSBjb3JydXB0ZWQgYnkgcGFja2V0IG1vZGlmaWNhdGlvbnMuXFxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVxcdTAwM2VoZWFkcm9vbSA9IDBgIGluc3RlYWQgb2YgYG1ldGFzaXplYCkgdGhhdCBjYXVzZWQgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIG1pc2NhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVGhpcyBzaGlmdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgYnVmZmVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgdG8gd3JpdGUgYHNrYl9zaGFyZWRfaW5mb2Agb3V0LW9mLWJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXFxuXFxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIGBza2Jfc2hhcmVkX2luZm9gIChlLmcuLCBjb3JydXB0ZWQgYG5yX2ZyYWdzYCBsZWFkaW5nIHRvIE9PQiByZWFkcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQsIGFzIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NWEzZGIxYWFlYjE3MDQ2YTc5OWI2MDVhZjcyM2NlOGNmOThhMDU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTg6MTk6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS94ZHAuYyBiL25ldC9jb3JlL3hkcC5jXG5pbmRleCA5ODkwYTMwNTg0YmE3Li40YmI5Nzc5MGIxODkxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUveGRwLmNcbisrKyBiL25ldC9jb3JlL3hkcC5jXG5AQCAtNTg1LDcgKzU4NSw3IEBAIHN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiBcdFx0ICAgeGRwLVx1MDAzZWRhdGEgLSB4ZHAtXHUwMDNlZGF0YV9tZXRhO1xuIFx0dG90c2l6ZSA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhICsgbWV0YXNpemU7XG4gXG4tXHRpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFBBR0VfU0laRSlcbitcdGlmIChzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcbkBAIC02MDIsNyArNjAyLDcgQEAgc3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuIFxuIFx0eGRwZi1cdTAwM2VkYXRhID0gYWRkciArIG1ldGFzaXplO1xuIFx0eGRwZi1cdTAwM2VsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7XG4tXHR4ZHBmLVx1MDAzZWhlYWRyb29tID0gMDtcbitcdHhkcGYtXHUwMDNlaGVhZHJvb20gPSBtZXRhc2l6ZTtcbiBcdHhkcGYtXHUwMDNlbWV0YXNpemUgPSBtZXRhc2l6ZTtcbiBcdHhkcGYtXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XG4gXHR4ZHBmLVx1MDAzZW1lbV90eXBlID0gTUVNX1RZUEVfUEFHRV9PUkRFUjA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMTowNS45MDI1OTY4NTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgyNDkyNTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFBlcmZvcm1hbmNlIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWAgd2l0aGluIGBuZXQvY29yZS94ZHAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB0aGV5J3ZlIHVwZGF0ZWQgYSBzaXplIGNoZWNrLCBzcGVjaWZpY2FsbHkgYWx0ZXJpbmcgYGlmIChzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgUEFHRV9TSVpFKWAgdG8gYGlmIChzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlgLiAgVGhhdCBzdWdnZXN0cyB0aGV5J3JlIGFjY291bnRpbmcgZm9yIHNvbWUgYWRkaXRpb25hbCBvdmVyaGVhZCBpbiB0aGUgY2FsY3VsYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gU0tCLCBidXQgbGV0J3Mgc2VlIHdoeS4gIFRoZXkgYWxzbyBtYWRlIGEgY2hhbmdlIHRvIGB4ZHBmLVx1MDAzZWhlYWRyb29tYCwgc2V0dGluZyBpdCB0byBgbWV0YXNpemVgIGluc3RlYWQgb2YgMC5cblxuTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0LiBMZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb2Ygd2hhdCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCAqYWN0dWFsbHkqIGRvZXMuIFJpZ2h0LCBpdCdzIGFib3V0IGhhbmRsaW5nIHplcm8tY29weSBidWZmZXJzIGFuZCB0cmFuc2xhdGluZyB0aGVtIGludG8gWERQIGZyYW1lcywgYWxsb2NhdGluZyBhIHBhZ2UsIGNvcHlpbmcgZGF0YSwgYW5kIGNvbnN0cnVjdGluZyB0aGUgZnJhbWUuXG5cbk5vdywgdGhhdCBgaGVhZHJvb21gIGNoYW5nZSByZWFsbHkgcHJpY2tlZCBteSBlYXJzLiBUaGV5J3JlIGNoYW5naW5nIGl0IGZyb20gMCB0byBgbWV0YXNpemVgLiAgVGhhdOKAmXMgd2hlcmUgSSBnZXQgY29uY2VybmVkLiAgQ291bGQgdGhpcyBpbnRyb2R1Y2UgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJZiBgaGVhZHJvb21gIGlzIHVzZWQgdG8gaW5kZXggYmFja3dhcmRzIGZyb20gdGhlIGFsbG9jYXRlZCBtZW1vcnksICpiZWZvcmUqIHRoZSBhY3R1YWwgZGF0YSBzZWN0aW9uIGB4ZHBmLVx1MDAzZWRhdGFgLCB0aGVuIHNldHRpbmcgaXQgdG8gYSBub24temVybyB2YWx1ZSBsaWtlIGBtZXRhc2l6ZWAgY291bGQgZWFzaWx5IGxlYWQgdG8gcmVhZGluZyBkYXRhIHRoYXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiBXZSdyZSBnb2luZyB0byBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGBoZWFkcm9vbWAgdXNhZ2UsIGFuZCBzZWUgaG93IHRoaXMgdmFsdWUgaXMgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMToxMi43Mjc1MjUyMjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTgxODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS94ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS94ZHAuYz01NzQ9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2F0dGFjaG1lbnRfc2V0dXApO1xcbm5ldC9jb3JlL3hkcC5jLTU3NS1cXG5uZXQvY29yZS94ZHAuYzo1NzY6c3RydWN0IHhkcF9mcmFtZSAqeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lKHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbm5ldC9jb3JlL3hkcC5jLTU3Ny17XFxuLS1cXG5uZXQvY29yZS94ZHAuYy02MTItfVxcbm5ldC9jb3JlL3hkcC5jOjYxMzpFWFBPUlRfU1lNQk9MX0dQTCh4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUpO1xcbm5ldC9jb3JlL3hkcC5jLTYxNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjE6MTIuNzgwMTEyODQxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzOTQ1NzQ1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGZ1bmN0aW9uLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYW5kIHByb2Nlc3MgdGhpcy4gSSd2ZSBzZWVuIGEgZmV3IG9mIHRoZXNlLCBzbyBJIGtub3cgdGhpcyBpcyByZWxhdGVkIHRvIHplcm8tY29weSAoWkMpIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkncmUgdHJhbnNmb3JtZWQgdG8gZml0IHdpdGhpbiBhbiBYRFAgKGVYcHJlc3MgRGF0YSBQYXRoKSBjb250ZXh0LiBNeSBleHBlcmllbmNlIHdpdGggdGhpcyB0eXBlIG9mIG9wZXJhdGlvbiBpcyB1c3VhbGx5IHJlbGF0ZWQgdG8gZWZmaWNpZW5jeSBhbmQgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGhhbmRsZWQsIHdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCAobGlrZSBwb3RlbnRpYWxseSBgemNfZnJhbWVgIGFuZCBgeGRwX2ZyYW1lYCksIGFuZCB0aGUgY3JpdGljYWwgb3BlcmF0aW9ucyBiZWluZyBwZXJmb3JtZWQuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3BpZXMgb3IgcmUtYWxsb2NhdGlvbnMgd2hpY2ggd291bGQgc2lnbmlmaWNhbnRseSBpbXBhY3QgcGVyZm9ybWFuY2UuIElzIHRoZXJlIGFuIGVmZmljaWVudCBtZWNoYW5pc20gZm9yIHBhc3NpbmcgZGF0YSBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHVzZXIgc3BhY2Ugb3IgaXMgaXQgdGFraW5nIHBsYWNlIGluIGtlcm5lbCBzcGFjZSB3aXRoIHRoZSB0cmFuc2Zvcm1hdGlvbj8gQXJlIHRoZXkgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgd2hpbGUgYmVpbmcgemVyby1jb3B5LCBhcyB0aGlzIGlzIGFuIGFyZWEgdGhhdCBtdXN0IGJlIGFkZHJlc3NlZCBmb3IgYW55IGxldmVsIG9mIHByb2R1Y3Rpb24gdXNhZ2UuIEZpbmFsbHksIGxldCdzIHNlZSBob3cgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMToxOC4xNzQ2OTEwNzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3hkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NjpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWUoc3RydWN0IHhkcF9idWZmICp4ZHApXFxuIDU3NzpcXHR7XFxuIDU3ODpcXHRcXHR1bnNpZ25lZCBpbnQgbWV0YXNpemUsIHRvdHNpemU7XFxuIDU3OTpcXHRcXHR2b2lkICphZGRyLCAqZGF0YV90b19jb3B5O1xcbiA1ODA6XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZjtcXG4gNTgxOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiA1ODI6XFx0XFxuIDU4MzpcXHRcXHQvKiBDbG9uZSBpbnRvIGEgTUVNX1RZUEVfUEFHRV9PUkRFUjAgeGRwX2ZyYW1lLiAqL1xcbiA1ODQ6XFx0XFx0bWV0YXNpemUgPSB4ZHBfZGF0YV9tZXRhX3Vuc3VwcG9ydGVkKHhkcCkgPyAwIDpcXG4gNTg1OlxcdFxcdFxcdCAgIHhkcC1cXHUwMDNlZGF0YSAtIHhkcC1cXHUwMDNlZGF0YV9tZXRhO1xcbiA1ODY6XFx0XFx0dG90c2l6ZSA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXFx1MDAzZWRhdGEgKyBtZXRhc2l6ZTtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0XFx0aWYgKHNpemVvZigqeGRwZikgKyB0b3RzaXplIFxcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcXG4gNTg5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1OTA6XFx0XFxuIDU5MTpcXHRcXHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcXG4gNTkyOlxcdFxcdGlmICghcGFnZSlcXG4gNTkzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRhZGRyID0gcGFnZV90b192aXJ0KHBhZ2UpO1xcbiA1OTY6XFx0XFx0eGRwZiA9IGFkZHI7XFxuIDU5NzpcXHRcXHRtZW1zZXQoeGRwZiwgMCwgc2l6ZW9mKCp4ZHBmKSk7XFxuIDU5ODpcXHRcXG4gNTk5OlxcdFxcdGFkZHIgKz0gc2l6ZW9mKCp4ZHBmKTtcXG4gNjAwOlxcdFxcdGRhdGFfdG9fY29weSA9IG1ldGFzaXplID8geGRwLVxcdTAwM2VkYXRhX21ldGEgOiB4ZHAtXFx1MDAzZWRhdGE7XFxuIDYwMTpcXHRcXHRtZW1jcHkoYWRkciwgZGF0YV90b19jb3B5LCB0b3RzaXplKTtcXG4gNjAyOlxcdFxcbiA2MDM6XFx0XFx0eGRwZi1cXHUwMDNlZGF0YSA9IGFkZHIgKyBtZXRhc2l6ZTtcXG4gNjA0OlxcdFxcdHhkcGYtXFx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZTtcXG4gNjA1OlxcdFxcdHhkcGYtXFx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XFxuIDYwNjpcXHRcXHR4ZHBmLVxcdTAwM2VtZXRhc2l6ZSA9IG1ldGFzaXplO1xcbiA2MDc6XFx0XFx0eGRwZi1cXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XFxuIDYwODpcXHRcXHR4ZHBmLVxcdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwO1xcbiA2MDk6XFx0XFxuIDYxMDpcXHRcXHR4c2tfYnVmZl9mcmVlKHhkcCk7XFxuIDYxMTpcXHRcXHRyZXR1cm4geGRwZjtcXG4gNjEyOlxcdH1cXG4gNjEzOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZSk7XFxuIDYxNDpcXHRcXG4gNjE1OlxcdC8qIFVzZWQgYnkgWERQX1dBUk4gbWFjcm8sIHRvIGF2b2lkIGlubGluaW5nIFdBUk4oKSBpbiBmYXN0LXBhdGggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjE6MTguMTc0ODIzNzc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDIwNzMwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU3RydWN0dXJlIFBvcHVsYXRpb24qKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gSSdtIGFsbG9jYXRpbmcgYSBuZXcgcGFnZSwgd2hpY2ggSSdtIGNhbGxpbmcgYHhkcGZgIGJlY2F1c2UgaXQncyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWdlLiBUaGF0J3MgZ29vZCwgc3RhbmRhcmQgcHJhY3RpY2UuIEkgemVybyBvdXQgdGhlIGVudGlyZSBwYWdlIOKAkyBhIGNsZWFuIHNsYXRlLiBUaGVuLCBJJ20gY29weWluZyBkYXRhIGludG8gdGhpcyBhbGxvY2F0ZWQgbWVtb3J5LiBUaGUgY29weSBpcyBhIGJpdCBjb252b2x1dGVkLiBJJ20gdGFraW5nIGB0b3RzaXplYCBieXRlcyBmcm9tIHNvbWV3aGVyZSBhbmQgbW92aW5nIHRoZW0gdG8gYW4gYWRkcmVzcy4gYHRvdHNpemVgIGlzIGB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSArIG1ldGFzaXplYCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBhYm91dCBtb3ZpbmcgYm90aCBtZXRhZGF0YSBhbmQgcGFja2V0IGRhdGEuIFRoZSBzb3VyY2Ugb2YgdGhlIGNvcHkgaXMgZWl0aGVyIGB4ZHAtXHUwMDNlZGF0YV9tZXRhYCAoaWYgYG1ldGFzaXplYCBpcyBncmVhdGVyIHRoYW4gemVybykgb3IgYHhkcC1cdTAwM2VkYXRhYCwgYXMgeW91IHdvdWxkIGV4cGVjdC4gU28sIEkgYW0gY29weWluZyB0aGUgbWV0YWRhdGEsIGFuZCB0aGVuIHRoZSBwYWNrZXQgZGF0YS5cblxuVGhlIGFkZHJlc3Mgd2hlcmUgSSBhbSAqY29weWluZyogaXMgYGFkZHIgKyBzaXplb2YoKnhkcGYpYCwgc28gaXQgc3RhcnRzICphZnRlciogdGhlIGB4ZHBmYCBzdHJ1Y3R1cmUgaXRzZWxmLiBgeGRwZi1cdTAwM2VkYXRhYCBpcyB0aGVuIHNldCB0byB0aGUgbG9jYXRpb24gaW4gdGhlIHBhZ2UgYWZ0ZXIgdGhlIG1ldGFkYXRhLCBpLmUuLCBgYWRkciArIG1ldGFzaXplYC4gVGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IChgeGRwZi1cdTAwM2VsZW5gKSBpcyB0aGVuIHNldCB0byB0aGUgdG90YWwgc2l6ZSBtaW51cyB0aGUgbWV0YWRhdGEgc2l6ZS4gU2VlbXMgbG9naWNhbCwgc28gZmFyLlxuXG5Ob3cgY29tZXMgdGhlIGludGVyZXN0aW5nIHBhcnQ6IGB4ZHBmLVx1MDAzZWhlYWRyb29tYC4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gdGhpbmsgbW9yZSBjYXJlZnVsbHkuIEl0J3MgYmVpbmcgc2V0IHRvIGBtZXRhc2l6ZWAuIFRoYXQnc+KApiB1bmV4cGVjdGVkLiBgaGVhZHJvb21gIHVzdWFsbHkgcmVmZXJzIHRvIHRoZSBzcGFjZSBhdmFpbGFibGUgKmJlZm9yZSogdGhlIHBhY2tldCBkYXRhIHRvIHByZXBlbmQgaGVhZGVycy4gVXN1YWxseSwgeW91IHdvdWxkIHdhbnQgdGhpcyBzcGFjZSB0byBpbmNyZWFzZS4gSG93ZXZlciwgdGhpcyBkZWZpbml0aW9uIG9mIGBoZWFkcm9vbWAgbWVhbnMgdGhhdCBgeGRwZi1cdTAwM2VkYXRhIC0gaGVhZHJvb21gIHBvaW50cyB0byBgYWRkcmAsIHdoaWNoIGluZGVlZCBjb250YWlucyB0aGUgY29waWVkIG1ldGFkYXRhLiBUaGUgbG9naWMgY2hlY2tzIG91dCAtIHlvdSB3b3VsZCBhY2Nlc3MgdGhlIG1ldGFkYXRhIGJ5IHN0YXJ0aW5nIGBoZWFkcm9vbWAgYnl0ZXMgYmFjay5cblxuQnV0IG5vdyBJIHNlZSB0aGUgcHJvYmxlbS4gSWYgYGhlYWRyb29tYCBpcyBlcXVhbCB0byBgbWV0YXNpemVgIGFuZCBJIHRyeSB0byBwcmVwZW5kIGEgaGVhZGVyLCBJIHdpbGwgKm92ZXJ3cml0ZSogdGhlIG1ldGFkYXRhLiBUaGF04oCZcyBkZWZpbml0ZWx5IG5vdCBpZGVhbC4gVGhpcyBtZWFucyB0aGF0IGlmIGBoZWFkcm9vbWAgaXMgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUsIHlvdSBjYW7igJl0IHByZXBlbmQgYW55dGhpbmcgd2l0aG91dCBjb3JydXB0aW5nIHRoZSBleGlzdGluZyBtZXRhZGF0YS5cblxuU28sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgdGhpcyBtZWFuIGBoZWFkcm9vbWAgc2hvdWxkIGJlIHplcm8sIGVmZmVjdGl2ZWx5IGRpc2FsbG93aW5nIGhlYWRlciBwcmVwZW5kcz8gT3IsIGFtIEkgbWlzdW5kZXJzdGFuZGluZyB3aGF0IGBoZWFkcm9vbWAgcmVwcmVzZW50cyBpbiB0aGlzIGNvbnRleHQ/XG5cbkFscmlnaHQsIGxldCdzIHN0ZXAgYmFjay4gV2FpdCwgbGV0J3MgZ2V0IHRoaXMgcmlnaHQ6IGB4ZHBmLVx1MDAzZWhlYWRyb29tYCBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBgeGRwZmAgc3RydWN0IGFuZCB0aGUgYmVnaW5uaW5nIG9mIGB4ZHBmLVx1MDAzZWRhdGFgLiBSaWdodD8gT2theSwgdGhhdCdzIHdoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSAqdXNlcyogYHhkcGYtXHUwMDNlaGVhZHJvb21gIHRvIGJlIHN1cmUuIEl0IHdpbGwgbWFrZSBtb3JlIHNlbnNlIHRvIGNoZWNrIHRoYXQgYmVmb3JlIEkgbWFrZSBhbnkganVkZ2VtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIxOjI1LjMxNjg5OTc0OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NzM4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGVhZHJvb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUveGRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUveGRwLmM9NTc2PXN0cnVjdCB4ZHBfZnJhbWUgKnhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZShzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTYwNC1cXHR4ZHBmLVxcdTAwM2VsZW4gPSB0b3RzaXplIC0gbWV0YXNpemU7XFxubmV0L2NvcmUveGRwLmM6NjA1OlxcdHhkcGYtXFx1MDAzZWhlYWRyb29tID0gbWV0YXNpemU7XFxubmV0L2NvcmUveGRwLmMtNjA2LVxcdHhkcGYtXFx1MDAzZW1ldGFzaXplID0gbWV0YXNpemU7XFxuLS1cXG5uZXQvY29yZS94ZHAuYz03OTQ9c3RydWN0IHNrX2J1ZmYgKl9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXFxuLS1cXG5uZXQvY29yZS94ZHAuYy03OTgtXFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fZnJhbWUoeGRwZik7XFxubmV0L2NvcmUveGRwLmM6Nzk5OlxcdHVuc2lnbmVkIGludCBoZWFkcm9vbSwgZnJhbWVfc2l6ZTtcXG5uZXQvY29yZS94ZHAuYy04MDAtXFx0dm9pZCAqaGFyZF9zdGFydDtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTgwNi1cXG5uZXQvY29yZS94ZHAuYzo4MDc6XFx0LyogUGFydCBvZiBoZWFkcm9vbSB3YXMgcmVzZXJ2ZWQgdG8geGRwZiAqL1xcbm5ldC9jb3JlL3hkcC5jOjgwODpcXHRoZWFkcm9vbSA9IHNpemVvZigqeGRwZikgKyB4ZHBmLVxcdTAwM2VoZWFkcm9vbTtcXG5uZXQvY29yZS94ZHAuYy04MDktXFxuLS1cXG5uZXQvY29yZS94ZHAuYy04MTQtXFxubmV0L2NvcmUveGRwLmM6ODE1OlxcdGhhcmRfc3RhcnQgPSB4ZHBmLVxcdTAwM2VkYXRhIC0gaGVhZHJvb207XFxubmV0L2NvcmUveGRwLmMtODE2LVxcdHNrYiA9IGJ1aWxkX3NrYl9hcm91bmQoc2tiLCBoYXJkX3N0YXJ0LCBmcmFtZV9zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTgxOS1cXG5uZXQvY29yZS94ZHAuYzo4MjA6XFx0c2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7XFxubmV0L2NvcmUveGRwLmMtODIxLVxcdF9fc2tiX3B1dChza2IsIHhkcGYtXFx1MDAzZWxlbik7XFxuLS1cXG5uZXQvY29yZS94ZHAuYz04NjQ9c3RydWN0IHhkcF9mcmFtZSAqeGRwZl9jbG9uZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmKVxcbm5ldC9jb3JlL3hkcC5jLTg2NS17XFxubmV0L2NvcmUveGRwLmM6ODY2OlxcdHVuc2lnbmVkIGludCBoZWFkcm9vbSwgdG90YWxzaXplO1xcbm5ldC9jb3JlL3hkcC5jLTg2Ny1cXHRzdHJ1Y3QgeGRwX2ZyYW1lICpueGRwZjtcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTg3MC1cXG5uZXQvY29yZS94ZHAuYzo4NzE6XFx0aGVhZHJvb20gPSB4ZHBmLVxcdTAwM2VoZWFkcm9vbSArIHNpemVvZigqeGRwZik7XFxubmV0L2NvcmUveGRwLmM6ODcyOlxcdHRvdGFsc2l6ZSA9IGhlYWRyb29tICsgeGRwZi1cXHUwMDNlbGVuO1xcbm5ldC9jb3JlL3hkcC5jLTg3My1cXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTg4My1cXHRueGRwZiA9IGFkZHI7XFxubmV0L2NvcmUveGRwLmM6ODg0OlxcdG54ZHBmLVxcdTAwM2VkYXRhID0gYWRkciArIGhlYWRyb29tO1xcbm5ldC9jb3JlL3hkcC5jLTg4NS1cXHRueGRwZi1cXHUwMDNlZnJhbWVfc3ogPSBQQUdFX1NJWkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIxOjI1LjM2Mzg3NzY2NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTk1NDM5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuZGVyc3RhbmRpbmcgWERQIEZyYW1lIEhlYWRyb29tKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgWERQIGZyYW1lIHN0cnVjdHVyZSBhbmQgdHJ5aW5nIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1lbW9yeSBsYXlvdXQsIHNwZWNpZmljYWxseSB0aGUgYGhlYWRyb29tYC4gIEkgc2VlIGhvdyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCwgYGhlYWRyb29tYCBpc24ndCBxdWl0ZSBhcyBzdHJhaWdodGZvcndhcmQgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSXQncyB0aGUgc3BhY2UgYmV0d2VlbiBgeGRwZmAgYW5kIGB4ZHBmLVx1MDAzZWRhdGFgLlxuXG5JJ20gdHJhY2luZyB0aHJvdWdoIHRoZSBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBmdW5jdGlvbi4gYGFkZHJgIGlzIGNhbGN1bGF0ZWQgYXMgYHBhZ2VfdG9fdmlydChwYWdlKSArIHNpemVvZigqeGRwZilgLCB3aGVyZSB0aGUgcGFnZSBpcyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gVGhlIGB4ZHBmYCBzdHJ1Y3R1cmUgaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UsIHNvIGBhZGRyYCBwb2ludHMganVzdCBhZnRlciBpdC4gVGhlbiwgdGhlIGB4ZHBmLVx1MDAzZWRhdGFgIHBvaW50ZXIgaXMgc2V0IHRvIGBhZGRyICsgbWV0YXNpemVgLCB3aGljaCBpcyB3aGVyZSB0aGUgcGFja2V0IGRhdGEgYmVnaW5zLCBwb3RlbnRpYWxseSBvZmZzZXQgYnkgbWV0YWRhdGEuIEZpbmFsbHksIGB4ZHBmLVx1MDAzZWhlYWRyb29tYCBpcyBzZXQgdG8gYG1ldGFzaXplYC5cblxuTm93LCB0aGUgY29ubmVjdGlvbiBpcyBtYWRlIGluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAuIEkgc2VlIHRoZSBjYWxjdWxhdGlvbjogYGhlYWRyb29tID0gc2l6ZW9mKCp4ZHBmKSArIHhkcGYtXHUwMDNlaGVhZHJvb21gLiAgU2luY2UgYHhkcGYtXHUwMDNlaGVhZHJvb21gICppcyogYG1ldGFzaXplYCwgdGhlIHRvdGFsIGBoZWFkcm9vbWAgaXMgYHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFRoZSBgaGFyZF9zdGFydGAgaXMgY2FsY3VsYXRlZCBhcyBgeGRwZi1cdTAwM2VkYXRhIC0gaGVhZHJvb21gLiBJIGNhbiBub3cgc3ViIGluIHRoZSBkZWZpbml0aW9uIG9mIHRob3NlIHRlcm1zIHRvIHlpZWxkIGBoYXJkX3N0YXJ0ID0gcGFnZV90b192aXJ0KHBhZ2UpYC4gU28gYGhhcmRfc3RhcnRgIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UuXG5cbkJ1dCwgaWYgSSBoYWQgYHhkcGYtXHUwMDNlaGVhZHJvb21gIGFzIDAsIHRoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIGBoZWFkcm9vbWAgd291bGQgY2hhbmdlIHRvIGBzaXplb2YoKnhkcGYpYC4gIGBoYXJkX3N0YXJ0YCB3b3VsZCBiZSBgcGFnZV90b192aXJ0KHBhZ2UpICsgbWV0YXNpemVgLlxuXG5Ob3csIHRoZSByZWFsIGlzc3VlIGJlY29tZXMgYXBwYXJlbnQuIGBidWlsZF9za2JfYXJvdW5kYCB1c2VzIGBoYXJkX3N0YXJ0YCBhbmQgdGhlIGBmcmFtZV9zaXplYC4gQW5kIGBmcmFtZV9zaXplYCBpcyBiYXNlZCBvbiBgeGRwZi1cdTAwM2VmcmFtZV9zemAuIElmIEkgc2V0IGBoYXJkX3N0YXJ0YCBhdCBgcGFnZV90b192aXJ0KHBhZ2UpICsgbWV0YXNpemVgLCBhbmQgYXNzdW1lIHRoZSBmcmFtZSB0YWtlcyB1cCB0aGUgZW50aXJlIHBhZ2UsIHRoZW4gSSdtIHdyaXRpbmcgZGF0YSBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhZ2UhICBUaGF0J3MgYSBkZWZpbml0ZSBuby1uby4gU28gaXQncyBsb29raW5nIGxpa2UgYGhlYWRyb29tYCAqbXVzdCogYmUgc2V0IGNvcnJlY3RseSB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIFhEUCBmcmFtZSBtZXRhZGF0YS4gIFRoYXQgbWFrZXMgc2Vuc2U7IGBoZWFkcm9vbWAgaXMgc3BlY2lmaWNhbGx5IHRvICphdm9pZCogb3ZlcmZsb3dpbmcgdGhlIHBhZ2UgYm91bmRhcnkuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcwMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMTozNS4zNTkzMTk2MTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3hkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5NDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4gNzk1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuIDc5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA3OTc6XFx0e1xcbiA3OTg6XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fZnJhbWUoeGRwZik7XFxuIDc5OTpcXHRcXHR1bnNpZ25lZCBpbnQgaGVhZHJvb20sIGZyYW1lX3NpemU7XFxuIDgwMDpcXHRcXHR2b2lkICpoYXJkX3N0YXJ0O1xcbiA4MDE6XFx0XFx0dTggbnJfZnJhZ3M7XFxuIDgwMjpcXHRcXG4gODAzOlxcdFxcdC8qIHhkcCBmcmFncyBmcmFtZSAqL1xcbiA4MDQ6XFx0XFx0aWYgKHVubGlrZWx5KHhkcF9mcmFtZV9oYXNfZnJhZ3MoeGRwZikpKVxcbiA4MDU6XFx0XFx0XFx0bnJfZnJhZ3MgPSBzaW5mby1cXHUwMDNlbnJfZnJhZ3M7XFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdC8qIFBhcnQgb2YgaGVhZHJvb20gd2FzIHJlc2VydmVkIHRvIHhkcGYgKi9cXG4gODA4OlxcdFxcdGhlYWRyb29tID0gc2l6ZW9mKCp4ZHBmKSArIHhkcGYtXFx1MDAzZWhlYWRyb29tO1xcbiA4MDk6XFx0XFxuIDgxMDpcXHRcXHQvKiBNZW1vcnkgc2l6ZSBiYWNraW5nIHhkcF9mcmFtZSBkYXRhIGFscmVhZHkgaGF2ZSByZXNlcnZlZFxcbiA4MTE6XFx0XFx0ICogcm9vbSBmb3IgYnVpbGRfc2tiIHRvIHBsYWNlIHNrYl9zaGFyZWRfaW5mbyBpbiB0YWlscm9vbS5cXG4gODEyOlxcdFxcdCAqL1xcbiA4MTM6XFx0XFx0ZnJhbWVfc2l6ZSA9IHhkcGYtXFx1MDAzZWZyYW1lX3N6O1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRoYXJkX3N0YXJ0ID0geGRwZi1cXHUwMDNlZGF0YSAtIGhlYWRyb29tO1xcbiA4MTY6XFx0XFx0c2tiID0gYnVpbGRfc2tiX2Fyb3VuZChza2IsIGhhcmRfc3RhcnQsIGZyYW1lX3NpemUpO1xcbiA4MTc6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA4MTg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgaGVhZHJvb20pO1xcbiA4MjE6XFx0XFx0X19za2JfcHV0KHNrYiwgeGRwZi1cXHUwMDNlbGVuKTtcXG4gODIyOlxcdFxcdGlmICh4ZHBmLVxcdTAwM2VtZXRhc2l6ZSlcXG4gODIzOlxcdFxcdFxcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCB4ZHBmLVxcdTAwM2VtZXRhc2l6ZSk7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdGlmICh1bmxpa2VseSh4ZHBfZnJhbWVfaGFzX2ZyYWdzKHhkcGYpKSlcXG4gODI2OlxcdFxcdFxcdHhkcF91cGRhdGVfc2tiX2ZyYWdzX2luZm8oc2tiLCBucl9mcmFncywgc2luZm8tXFx1MDAzZXhkcF9mcmFnc19zaXplLFxcbiA4Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICBucl9mcmFncyAqIHhkcGYtXFx1MDAzZWZyYW1lX3N6LFxcbiA4Mjg6XFx0XFx0XFx0XFx0XFx0XFx0ICB4ZHBfZnJhbWVfZ2V0X3NrYl9mbGFncyh4ZHBmKSk7XFxuIDgyOTpcXHRcXG4gODMwOlxcdFxcdC8qIEVzc2VudGlhbCBTS0IgaW5mbzogcHJvdG9jb2wgYW5kIHNrYi1cXHUwMDNlZGV2ICovXFxuIDgzMTpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHQvKiBPcHRpb25hbCBTS0IgaW5mbywgY3VycmVudGx5IG1pc3Npbmc6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIxOjM1LjM1OTQzMDE4M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQ4NzExMjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBYRFAgRnJhbWUgSGFuZGxpbmcgYW5kIFBvdGVudGlhbCBNZW1vcnkgQ29ycnVwdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgaXNzdWUgbGllcyB3aXRoaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBYRFAgZnJhbWVzIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgaXQgY29uc3RydWN0cyBTS0JzIChTb2NrZXQgQnVmZmVyKSBmcm9tIHplcm8tY29weSBYRFAgZnJhbWVzLCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byB0aGUgbGF5b3V0IG9mIGRhdGEgd2l0aGluIHRoZSBhbGxvY2F0ZWQgcGFnZXMuXG5cblRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgaW4gYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBoaW5nZXMgb24gY2FsY3VsYXRpbmcgYSBzdGFydGluZyBhZGRyZXNzIChgaGFyZF9zdGFydGApIGZvciB0aGUgU0tCJ3MgZGF0YSBidWZmZXIuIFRoZSBjcml0aWNhbCB2YXJpYWJsZXMgaW5jbHVkZSBgeGRwZi1cdTAwM2VoZWFkcm9vbWAsIGB4ZHBmLVx1MDAzZWRhdGFgLCBhbmQgdGhlIGFsbG9jYXRlZCBgcGFnZWAuIElmIGB4ZHBmLVx1MDAzZWhlYWRyb29tYCBpcyB6ZXJvLCBhcyBpcyBzZXQsIGBoYXJkX3N0YXJ0YCBpcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGFuZCBwb2ludHMgdG8gYW4gYWRkcmVzcyAqYmVmb3JlKiB0aGUgc3RhcnQgb2YgdGhlIGRhdGEgd2l0aGluIHRoZSBwYWdlLCBiZWNhdXNlIGB4ZHBmLVx1MDAzZWRhdGFgIGlzbid0IHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB3aGVyZSB0aGUgY29waWVkIHBhY2tldCBkYXRhIGlzLCBpdCdzIGFmdGVyIHRoZSBoZWFkZXIgYW5kIHRoZSBgbWV0YXNpemVgLlxuXG5UaGlzIGxlYWRzIHRvIGEgbWlzYWxpZ25tZW50IHdoZW4gYGJ1aWxkX3NrYl9hcm91bmRgIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCB0aGUgU0tCLiBXaXRoIGBoYXJkX3N0YXJ0YCBwb2ludGluZyB0byBhIGxvY2F0aW9uIHNoaWZ0ZWQgYnkgYG1ldGFzaXplYCBieXRlcyBmcm9tIHRoZSBhY3R1YWwgZGF0YSBzdGFydCwgdGhlIFNLQidzIGFzc3VtZWQgbWVtb3J5IHJhbmdlIGV4dGVuZHMgYmV5b25kIHRoZSBhbGxvY2F0ZWQgcGFnZS4gVGhpcyBtaXNhbGlnbm1lbnQgdGhlbiBtZWFucyB0aGF0IGBidWlsZF9za2JfYXJvdW5kYCB0cmllcyB0byBwbGFjZSB0aGUgYHNrYl9zaGFyZWRfaW5mb2Agc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhpcyBvdXQtb2YtYm91bmRzIHJlZ2lvbi4gVGhlIGBza2Jfc2hhcmVkX2luZm9gIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSBTS0IsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2tldCBmcmFnbWVudHMgYW5kIG90aGVyIG1ldGFkYXRhLiBCZWNhdXNlIG9mIHRoaXMgbWlzYWxpZ25tZW50IGluIGNhbGN1bGF0aW5nIGBoYXJkX3N0YXJ0YCwgaXQncyBjbGVhciB0aGF0IGl0IGNvdWxkIGJlIHdyaXRpbmcgb3V0LW9mLWJvdW5kcyBvZiB0aGUgcGFnZSwgd2hpY2ggS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggc2luY2UgaXQncyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLlxuXG5UaGUgcGF0Y2gncyBjaGFuZ2UgdG8gdGhlIHNpemUgY2hlY2s6XG5gYGBjXG4tXHRpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFBBR0VfU0laRSlcbitcdGlmIChzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKSlcbmBgYFxuaXMgZGVzaWduZWQgdG8gYWRkcmVzcyBhbiBpbXBvcnRhbnQgcG9pbnQuIGBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYCBtYWtlcyBzdXJlIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciBgc2tiX3NoYXJlZF9pbmZvYCB3aXRoaW4gdGhlIGFsbG9jYXRlZCBwYWdlLiBUaGUgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBidWZmZXIgd2l0aCBgbWVtY3B5KGFkZHIsIGRhdGFfdG9fY29weSwgdG90c2l6ZSlgLiBUaGVuIHRoZSBgYnVpbGRfc2tiX2Fyb3VuZGAgd2lsbCBvdmVyd3JpdGUgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgd2l0aCBgc2tiX3NoYXJlZF9pbmZvYCBpZiB0aGUgY2hlY2sgaXNuJ3QgZG9uZSB0byBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgc2tiIG1ldGFkYXRhLCB0aGVyZWZvcmUsIHRoaXMgY29ycnVwdGlvbiB3aWxsIGNvcnJ1cHQgdGhlIHBhY2tldCdzIGRhdGEgd2l0aCBza2IgbWV0YWRhdGEuIEl0IGlzIGEgY29ycnVwdGlvbiBvZiB0aGUgZGF0YSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYXMgdGhlIGBza2Jfc2hhcmVkX2luZm9gIGlzIGluaXRpYWxpemVkLlxuXG5JbiBzdW1tYXJ5LCB0aGUgY3J1eCBvZiB0aGUgdnVsbmVyYWJpbGl0eSBhcHBlYXJzIHRvIGJlIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgZHVlIHRvIGEgY2FsY3VsYXRpb24gZXJyb3IgaW4gYGhhcmRfc3RhcnRgIGFuZCBhbiBpbnN1ZmZpY2llbnQgc2l6ZSBjaGVjayBpbiB0aGUgYnVmZmVyIGFsbG9jYXRpb24uIFRoZSBlcnJvciByZXN1bHRzIGZyb20gdGhlIGluaXRpYWwgd3JvbmcgYXNzdW1wdGlvbiBhYm91dCB0aGUgZGF0YSBsb2NhdGlvbiB3aXRoaW4gdGhlIHBhZ2UgYW5kIGhvdyB0aGUgYnVmZmVyIGlzIHRoZW4gaGFuZGxlZCBieSB0aGUga2VybmVsJ3MgU0tCIGNvbnN0cnVjdGlvbiBwcm9jZXNzLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBhbGxvY2F0aW5nIGVub3VnaCBzcGFjZSBmb3IgYHNrYl9zaGFyZWRfaW5mb2AuIEtBU0FOIHdpbGwgbGlrZWx5IGNhdGNoIHRoZXNlIGlzc3VlcyBiZWNhdXNlIHRoZXkgYXJlIGVpdGhlciBvdXQtb2YtYm91bmRzIHdyaXRlcyB0byB0aGUgcGFnZSBvciBkYXRhIGNvcnJ1cHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6MDIuODQ2NTQ1Mzc3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcyNTc4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnVpbGRfc2tiX2Fyb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0zMTY9c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzM3LSAqIFRoZSBoZWFkcyBhcmUgYmVpbmcgemVyb2VkIHdpdGggZWl0aGVyIG1lbXNldCgpIG9yICVfX0dGUF9aRVJPLCBzbyB0aGV5IGFyZVxcbm5ldC9jb3JlL3NrYnVmZi5jOjMzODogKiByZWFkeSBmb3IgeyxfX31idWlsZF9za2JfYXJvdW5kKCkgYW5kIGRvbid0IGhhdmUgYW55IGRhdGEgYnVmZmVycyBhdHRhY2hlZC5cXG5uZXQvY29yZS9za2J1ZmYuYy0zMzktICogTXVzdCBiZSBjYWxsZWQgKm9ubHkqIGZyb20gdGhlIEJIIGNvbnRleHQuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00NTM9RVhQT1JUX1NZTUJPTChzbGFiX2J1aWxkX3NrYik7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NTUtLyogQ2FsbGVyIG11c3QgcHJvdmlkZSBTS0IgdGhhdCBpcyBtZW1zZXQgY2xlYXJlZCAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjQ1NjpzdGF0aWMgdm9pZCBfX2J1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG5uZXQvY29yZS9za2J1ZmYuYy00NTctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTktXFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6NTAwOlxcdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNTAxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE4PUVYUE9SVF9TWU1CT0woYnVpbGRfc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUyMC0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo1MjE6ICogYnVpbGRfc2tiX2Fyb3VuZCAtIGJ1aWxkIGEgbmV0d29yayBidWZmZXIgYXJvdW5kIHByb3ZpZGVkIHNrYlxcbm5ldC9jb3JlL3NrYnVmZi5jLTUyMi0gKiBAc2tiOiBza19idWZmIHByb3ZpZGUgYnkgY2FsbGVyLCBtdXN0IGJlIG1lbXNldCBjbGVhcmVkXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MjUtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NTI2OnN0cnVjdCBza19idWZmICpidWlsZF9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNTI3LVxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTMxLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjUzMjpcXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUzMy1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUzOS19XFxubmV0L2NvcmUvc2tidWZmLmM6NTQwOkVYUE9SVF9TWU1CT0woYnVpbGRfc2tiX2Fyb3VuZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNTQxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTYwLVxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjU2MTpcXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTU2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6MDMuNDEzODA3MTQ5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3OTExOTY4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYF9fYnVpbGRfc2tiX2Fyb3VuZGAsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBSb2xlIG9mIGBfX2J1aWxkX3NrYl9hcm91bmRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgemVyb2VzIGluIG9uIGBfX2J1aWxkX3NrYl9hcm91bmRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgYXMgYSBzZWFzb25lZCBwcmFjdGl0aW9uZXIsIEkga25vdyBpdCdzIGZ1bmRhbWVudGFsIHRvIGJ1aWxkaW5nIFNvY2tldCBCdWZmZXIgKFNLQikgc3RydWN0dXJlcyBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgd2hlbiBoYW5kbGluZyBwcmUtZXhpc3RpbmcgZGF0YSBidWZmZXJzLiBUaGlzIGlzbid0IGEgc2ltcGxlIGFsbG9jYXRpb247IHRoaXMgaXMgYWJvdXQgbWV0aWN1bG91c2x5IGNyYWZ0aW5nIGFuIFNLQiBhcm91bmQgbWVtb3J5IHRoYXQgKmFscmVhZHkgZXhpc3RzKi5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGlja2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIGJlbmVmaXRzIOKAkyBlZmZpY2llbmN5IGluIHNpdHVhdGlvbnMgd2hlcmUgd2UgaGF2ZSBhIGRhdGEgcGFja2V0IGFuZCB3YW50IHRvIHF1aWNrbHkgd3JhcCBpdCBpbiB0aGUgU0tCIGFic3RyYWN0aW9uLCBlbGltaW5hdGluZyB1bm5lY2Vzc2FyeSBjb3B5aW5nLiBCdXQgSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwaXRmYWxscy4gV2hhdCBhcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucz8gSG93IGRvZXMgaXQgaGFuZGxlIGZyYWdtZW50YXRpb24/IERvZXMgaXQgaW50cm9kdWNlIGFueSBjb21wbGV4aXRpZXMgYXJvdW5kIGJ1ZmZlciBvd25lcnNoaXAgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQ/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgbWVtb3J5IGFsaWdubWVudCBpc3N1ZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGFueSBsaW1pdGF0aW9ucyByZWdhcmRpbmcgd2hlcmUgdGhlIGV4aXN0aW5nIG1lbW9yeSBjb21lcyBmcm9tLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbW1vbiB1c2UgY2FzZXMuIElzIHRoaXMgcHJpbWFyaWx5IHVzZWQgaW4gc2l0dWF0aW9ucyBsaWtlIHplcm8tY29weSBuZXR3b3JraW5nLCBvZmZsb2FkIHNjZW5hcmlvcywgb3Igd2hlbiBkZWFsaW5nIHdpdGggcGFja2V0cyBwcmUtcmVjZWl2ZWQgZnJvbSBoYXJkd2FyZT8gSSdtIHBpY3R1cmluZyBzcGVjaWZpYyBjb2RlIHBhdGhzIGluIG15IGhlYWQg4oCTIHBlcmhhcHMgaW50ZXJhY3Rpb24gd2l0aCBETUEgZW5naW5lcywgb3IgdGhlIHdheSB0aGUgc3RhY2sgaGFuZGxlcyBjZXJ0YWluIGhlYWRlciBtYW5pcHVsYXRpb25zIGFyb3VuZCB0aGVzZSAnd3JhcHBlZCcgU0tCcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBudWFuY2VzIG9mIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBTS0ItcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgc2tiX3B1dGAgYW5kIGBza2JfcHVsbGAuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gc2NydXRpbml6ZSBpdHMgaW50ZXJuYWwgd29ya2luZ3MuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBtZW1vcnkgYmFycmllcnMgaW52b2x2ZWQ/IFdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSwgaWYgYW55PyBBbmQgaG93IHdlbGwgZG9lcyBpdCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSdzIHVzdWFsbHkgYSBzcGVjaWZpYyBlcnJvciBmbG93IEkgbmVlZCB0byByZW1lbWJlci4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgaG93IGdyYWNlZnVsbHkgaXQgaGFuZGxlcyBlZGdlIGNhc2VzLlxuXG5JbiBlc3NlbmNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBjb25zdHJhaW50cywgYW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCdzIG9wdGltaXplZCB0byBzaGluZSwgYWxsIHRvIGVuc3VyZSBJJ20gdXNpbmcgaXQgc2FmZWx5IGFuZCBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMjoxMy4yMDUwMDY3NDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1NjpcXHRzdGF0aWMgdm9pZCBfX2J1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG4gNDU3OlxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbiA0NTg6XFx0e1xcbiA0NTk6XFx0XFx0dW5zaWduZWQgaW50IHNpemUgPSBmcmFnX3NpemU7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdC8qIGZyYWdfc2l6ZSA9PSAwIGlzIGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBub3cuIENhbGxlcnNcXG4gNDYyOlxcdFxcdCAqIHVzaW5nIHNsYWIgYnVmZmVyIHNob3VsZCB1c2Ugc2xhYl9idWlsZF9za2IoKSBpbnN0ZWFkLlxcbiA0NjM6XFx0XFx0ICovXFxuIDQ2NDpcXHRcXHRpZiAoV0FSTl9PTkNFKHNpemUgPT0gMCwgXFxcIlVzZSBzbGFiX2J1aWxkX3NrYigpIGluc3RlYWRcXFwiKSlcXG4gNDY1OlxcdFxcdFxcdGRhdGEgPSBfX3NsYWJfYnVpbGRfc2tiKGRhdGEsIFxcdTAwMjZzaXplKTtcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxuIDQ2ODpcXHR9XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdC8qKlxcbiA0NzE6XFx0ICogX19idWlsZF9za2IgLSBidWlsZCBhIG5ldHdvcmsgYnVmZmVyXFxuIDQ3MjpcXHQgKiBAZGF0YTogZGF0YSBidWZmZXIgcHJvdmlkZWQgYnkgY2FsbGVyXFxuIDQ3MzpcXHQgKiBAZnJhZ19zaXplOiBzaXplIG9mIGRhdGEgKG11c3Qgbm90IGJlIDApXFxuIDQ3NDpcXHQgKlxcbiA0NzU6XFx0ICogQWxsb2NhdGUgYSBuZXcgXFx1MDAyNnNrX2J1ZmYuIENhbGxlciBwcm92aWRlcyBzcGFjZSBob2xkaW5nIGhlYWQgYW5kXFxuIDQ3NjpcXHQgKiBza2Jfc2hhcmVkX2luZm8uIEBkYXRhIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZSBwYWdlXFxuIDQ3NzpcXHQgKiBhbGxvY2F0b3Igb3Igdm1hbGxvYygpLiAoQSBAZnJhZ19zaXplIG9mIDAgdG8gaW5kaWNhdGUgYSBrbWFsbG9jKClcXG4gNDc4OlxcdCAqIGFsbG9jYXRpb24gaXMgZGVwcmVjYXRlZCwgYW5kIGNhbGxlcnMgc2hvdWxkIHVzZSBzbGFiX2J1aWxkX3NrYigpXFxuIDQ3OTpcXHQgKiBpbnN0ZWFkLilcXG4gNDgwOlxcdCAqIFRoZSByZXR1cm4gaXMgdGhlIG5ldyBza2IgYnVmZmVyLlxcbiA0ODE6XFx0ICogT24gYSBmYWlsdXJlIHRoZSByZXR1cm4gaXMgJU5VTEwsIGFuZCBAZGF0YSBpcyBub3QgZnJlZWQuXFxuIDQ4MjpcXHQgKiBOb3RlcyA6XFxuIDQ4MzpcXHQgKiAgQmVmb3JlIElPLCBkcml2ZXIgYWxsb2NhdGVzIG9ubHkgZGF0YSBidWZmZXIgd2hlcmUgTklDIHB1dCBpbmNvbWluZyBmcmFtZVxcbiA0ODQ6XFx0ICogIERyaXZlciBzaG91bGQgYWRkIHJvb20gYXQgaGVhZCAoTkVUX1NLQl9QQUQpIGFuZFxcbiA0ODU6XFx0ICogIE1VU1QgYWRkIHJvb20gYXQgdGFpbCAoU0tCX0RBVEFfQUxJR04oc2tiX3NoYXJlZF9pbmZvKSlcXG4gNDg2OlxcdCAqICBBZnRlciBJTywgZHJpdmVyIGNhbGxzIGJ1aWxkX3NrYigpLCB0byBhbGxvY2F0ZSBza19idWZmIGFuZCBwb3B1bGF0ZSBpdFxcbiA0ODc6XFx0ICogIGJlZm9yZSBnaXZpbmcgcGFja2V0IHRvIHN0YWNrLlxcbiA0ODg6XFx0ICogIFJYIHJpbmdzIG9ubHkgY29udGFpbnMgZGF0YSBidWZmZXJzLCBub3QgZnVsbCBza2JzLlxcbiA0ODk6XFx0ICovXFxuIDQ5MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4gNDkxOlxcdHtcXG4gNDkyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2MobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxcbiA0OTU6XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMjoxMy4yMDUzNzg3NzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyODI4ODc5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHN0YXJ0cyB3aXRoIGEgZGlyZWN0IGNoZWNrIG9mIHRoZSBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgb2YgY29uY2VybiBvciBkZWJ1Z2dpbmcsIGFuZCBJJ20gemVyb2luZyBpbiBvbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCBjb2RlYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUsIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2Ugd2l0aGluIGl0LCBvciBhbnkgaW50ZXJhY3Rpb25zIGl0IGhhcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGZvY3VzZWQgc2VhcmNoIGlzIHVzdWFsbHkgZHJpdmVuIGJ5IGEgcGFydGljdWxhciBwcm9ibGVtIGF0IGhhbmQ7IGEgYnVnIHJlcG9ydCwgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciBhbiBvZGQgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6MjYuNDg4MjY5NzU3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM2MTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZpbmFsaXplX3NrYl9hcm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9Mzg4PUVYUE9SVF9TWU1CT0xfR1BMKG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0zODktXFxubmV0L2NvcmUvc2tidWZmLmM6MzkwOnN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG5uZXQvY29yZS9za2J1ZmYuYy0zOTEtXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDM3PXN0cnVjdCBza19idWZmICpzbGFiX2J1aWxkX3NrYih2b2lkICpkYXRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDQ4LVxcdGRhdGEgPSBfX3NsYWJfYnVpbGRfc2tiKGRhdGEsIFxcdTAwMjZzaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYzo0NDk6XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxubmV0L2NvcmUvc2tidWZmLmMtNDUwLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDU2PXN0YXRpYyB2b2lkIF9fYnVpbGRfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDY2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ2NzpcXHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYy00NjgtfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9Njc0PXN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MjEtXFx0ICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzIyOlxcdF9fZmluYWxpemVfc2tiX2Fyb3VuZChza2IsIGRhdGEsIHNpemUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6MjYuNTQxNjM3ODIxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODY4MDU5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBjb2RlIGZvciBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24ncyBwcm9iYWJseSBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBkZWFsaW5nIHdpdGggU29ja2V0IEJ1ZmZlciAoU0tCKSBtYW5hZ2VtZW50LCBsaWtlbHkgYXQgYSBjcnVjaWFsIHBvaW50LiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQgc291bmRzIGxpa2UgaXQncyBhIGNsZWFudXAgb3IgZmluYWxpemF0aW9uIHJvdXRpbmUgdGhhdCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYXJvdW5kLCBvciBpbiB0aGUgdmljaW5pdHkgb2YsIHRoZSBTS0IuIFRoaXMgc3VnZ2VzdHMgaXQncyBhIHZlcnkgdGFyZ2V0ZWQgb3BlcmF0aW9uIC0gaXQncyBub3QgdGhlIHByaW1hcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24sIGJ1dCBzb21lIHNwZWNpZmljIGhvdXNla2VlcGluZyB0aGF0J3MgcmVxdWlyZWQgYXQgYSBwYXJ0aWN1bGFyIHN0YWdlLiBNeSBleHBlcnRpc2Uga2lja3MgaW4gaGVyZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaW5ncyBsaWtlOiBtZW1vcnkgcmVjbGFpbSwgcmVmZXJlbmNlIGNvdW50aW5nIGFkanVzdG1lbnRzLCBwb3RlbnRpYWxseSBmcmVlaW5nIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzcGVjaWZpYyBTS0IgYW5kIGl0cyBkYXRhLCBvciBtYXliZSBzb21lIGNoZWNrc3VtIG9yIGhlYWRlciBmaW5hbGl6YXRpb24uIFRoZSBcImFyb3VuZFwiIHBhcnQgaXMga2V5LiBXaGF0IGV2ZW50IG9yIG9wZXJhdGlvbiBpcyBpdCAqYXJvdW5kKj8gSXMgaXQgYmVmb3JlIHRoZSBTS0IgaXMgaGFuZGVkIG9mZiB0byBhIGhhcmR3YXJlIGludGVyZmFjZT8gQWZ0ZXIgYSBwYWNrZXQgaXMgdHJhbnNtaXR0ZWQ/IEJlZm9yZSBpdCdzIGVucXVldWVkIHNvbWV3aGVyZT8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGNyaXRpY2FsLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBhcmd1bWVudHMgaXQgdGFrZXMgYW5kIHNlZSB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24uIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCBkZWFscyB3aXRoIHRoZSBTS0Igc3RydWN0dXJlIGl0c2VsZiwgdGhlIHBhY2tldCBkYXRhIGJ1ZmZlciwgb3Igc29tZSByZWxhdGVkIG1ldGFkYXRhLiBMZXQncyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIyOjMxLjMyODQ0NzI1N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG4gMzkxOlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4gMzkyOlxcdHtcXG4gMzkzOlxcdFxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbztcXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0c2l6ZSAtPSBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpO1xcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHQvKiBBc3N1bWVzIGNhbGxlciBtZW1zZXQgY2xlYXJlZCBTS0IgKi9cXG4gMzk4OlxcdFxcdHNrYi1cXHUwMDNldHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2l6ZSk7XFxuIDM5OTpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnNrYi1cXHUwMDNldXNlcnMsIDEpO1xcbiA0MDA6XFx0XFx0c2tiLVxcdTAwM2VoZWFkID0gZGF0YTtcXG4gNDAxOlxcdFxcdHNrYi1cXHUwMDNlZGF0YSA9IGRhdGE7XFxuIDQwMjpcXHRcXHRza2JfcmVzZXRfdGFpbF9wb2ludGVyKHNrYik7XFxuIDQwMzpcXHRcXHRza2Jfc2V0X2VuZF9vZmZzZXQoc2tiLCBzaXplKTtcXG4gNDA0OlxcdFxcdHNrYi1cXHUwMDNlbWFjX2hlYWRlciA9ICh0eXBlb2Yoc2tiLVxcdTAwM2VtYWNfaGVhZGVyKSl+MFU7XFxuIDQwNTpcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xcbiA0MDY6XFx0XFx0c2tiLVxcdTAwM2VhbGxvY19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbiA0MDc6XFx0XFx0LyogbWFrZSBzdXJlIHdlIGluaXRpYWxpemUgc2hpbmZvIHNlcXVlbnRpYWxseSAqL1xcbiA0MDg6XFx0XFx0c2hpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xcbiA0MDk6XFx0XFx0bWVtc2V0KHNoaW5mbywgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbywgZGF0YXJlZikpO1xcbiA0MTA6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2c2hpbmZvLVxcdTAwM2VkYXRhcmVmLCAxKTtcXG4gNDExOlxcdFxcbiA0MTI6XFx0XFx0c2tiX3NldF9rY292X2hhbmRsZShza2IsIGtjb3ZfY29tbW9uX2hhbmRsZSgpKTtcXG4gNDEzOlxcdH1cXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIGlubGluZSB2b2lkICpfX3NsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCAqc2l6ZSlcXG4gNDE2OlxcdHtcXG4gNDE3OlxcdFxcdHZvaWQgKnJlc2l6ZWQ7XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdC8qIE11c3QgZmluZCB0aGUgYWxsb2NhdGlvbiBzaXplIChhbmQgZ3JvdyBpdCB0byBtYXRjaCkuICovXFxuIDQyMDpcXHRcXHQqc2l6ZSA9IGtzaXplKGRhdGEpO1xcbiA0MjE6XFx0XFx0Lyoga3JlYWxsb2MoKSB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBcXFwiZGF0YVxcXCIgd2hlblxcbiA0MjI6XFx0XFx0ICogXFxcImtzaXplKGRhdGEpXFxcIiBpcyByZXF1ZXN0ZWQ6IGl0IGlzIHRoZSBleGlzdGluZyB1cHBlclxcbiA0MjM6XFx0XFx0ICogYm91bmRzLiBBcyBhIHJlc3VsdCwgR0ZQX0FUT01JQyB3aWxsIGJlIGlnbm9yZWQuIE5vdGVcXG4gNDI0OlxcdFxcdCAqIHRoYXQgdGhpcyBcXFwibmV3XFxcIiBwb2ludGVyIG5lZWRzIHRvIGJlIHBhc3NlZCBiYWNrIHRvIHRoZVxcbiA0MjU6XFx0XFx0ICogY2FsbGVyIGZvciB1c2Ugc28gdGhlIF9fYWxsb2Nfc2l6ZSBoaW50aW5nIHdpbGwgYmVcXG4gNDI2OlxcdFxcdCAqIHRyYWNrZWQgY29ycmVjdGx5LlxcbiA0Mjc6XFx0XFx0ICovXFxuIDQyODpcXHRcXHRyZXNpemVkID0ga3JlYWxsb2MoZGF0YSwgKnNpemUsIEdGUF9BVE9NSUMpO1xcbiA0Mjk6XFx0XFx0V0FSTl9PTl9PTkNFKHJlc2l6ZWQgIT0gZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIyOjMxLjMyODY5NzEzN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzEwMTgzNDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWERQIEZyYW1lIHRvIFNLQiBDb252ZXJzaW9uOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgWERQIGZyYW1lIGNvbnZlcnNpb24gdG8gU0tCLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgIHplcm9lcyBhbmQgc2V0cyBgZGF0YXJlZmAgd2l0aGluIHRoZSBgc2hpbmZvYCBzdHJ1Y3R1cmUuIEluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgaWYgdGhlIGNvbWJpbmVkIHNpemUgb2YgdGhlIFhEUCBmcmFtZSBoZWFkZXIgYW5kIHRvdGFsIGRhdGEgKGB0b3RzaXplYCkgZXhjZWVkZWQgYFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgLCB0aGUgYHNoaW5mb2Agd291bGQgb3ZlcmxhcCB3aXRoIHBhY2tldCBkYXRhLiBCdXQgd2FpdCwgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgaXMgY2FsbGVkICphZnRlciogYSBgbWVtY3B5YCBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIHJldHVybnMgYHhkcF9mcmFtZWAuIFRoZW4sIGxhdGVyIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgY2FsbHMgYGJ1aWxkX3NrYl9hcm91bmRgIHRoYXQgY2FsbHMgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAuIFRoaXMgbWVhbnMgdGhhdCBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCB3aWxsIG92ZXJ3cml0ZSB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSB3aXRoIHplcm9lcy4gVGhpcyBpbXBsaWVzIGRhdGEgdHJ1bmNhdGlvbi9jb3JydXB0aW9uLCBidXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhcyBpdOKAmXMgYWxsIHplcm9lZC5cblxuSG93ZXZlciwgaWYgdGhlIGRhdGEgKndhcyogc3VwcG9zZWQgdG8gaGF2ZSBzb21ldGhpbmcgaW4gaXQsIHRoaXMgemVyb2luZyBpcyBkYXRhIGNvcnJ1cHRpb24uIEkgdGhlbiBjb25zaWRlcmVkIHdoYXQgaGFwcGVucyBpZiB0aGUgYHNoaW5mb2Agb3ZlcmxhcHMgYW5kIHRoZSBwYWNrZXQgZGF0YSBnZXRzIG1vZGlmaWVkICphZnRlciogYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAuIEluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgdGhlcmUncyBubyBzdWNoIG1vZGlmaWNhdGlvbi4gSWYgaXQncyBzZW50IHRvIHVzZXJzcGFjZSwgdXNlcnNwYWNlIHdpbGwgZ2V0IHplcm9lcyBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgZGF0YS4gTm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWssIGp1c3QgemVyb2VzLCB3aGljaCBpcyBzdGlsbCBhIHByb2JsZW0uIFdoYXQgaWYgdGhlIGtlcm5lbCByZWFkcyB0aGUgemVyb2VzPyBUaGF0J3Mgd2hhdCBgc2hpbmZvYCBpcyBzdXBwb3NlZCB0byBjb250YWluIGFueXdheSwgdGhlIHplcm9lcyBhbmQgYGRhdGFyZWY9MWAuXG5cbk5vdywgaWYgYSBCUEYgcHJvZ3JhbSBtb2RpZmllcyBwYWNrZXQgZGF0YSBhZnRlciBgX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgLCB0aGlzIGNvdWxkIGJlY29tZSB2ZXJ5IGludGVyZXN0aW5nLiBNb2RpZnlpbmcgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgd291bGQgb3ZlcndyaXRlIGBzaGluZm9gISBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpby4gVGhpbmsgb2YgdGhlIHBlcnNwZWN0aXZlIG9mIHBhY2tldCBkYXRhOiBJdCB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIG9yIHR5cGUgY29uZnVzaW9uLiBLQVNBTiBjYW4gY2F0Y2ggdGhpcyBpZiBpdCByZXN1bHRzIGluIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgYG5yX2ZyYWdzYCBmaWVsZCBjb3VsZCBiZSBzZXQgdG8gYSBsYXJnZSBudW1iZXIgd2hpY2ggY291bGQgbGVhZCB0byBPT0IgcmVhZHMgd2hlbiBmcmVlaW5nIHRoZSBza2IuIFNwZWNpZmljYWxseSwgd2hlbiB0aGUgc2tiIGlzIGZyZWVkIGFuZCBgc2tiX3JlbGVhc2VfZGF0YWAgbG9vcHMgb3ZlciBgbnJfZnJhZ3NgIGNhbGxpbmcgYHNrYl9mcmFnX3VucmVmYCwgdGhlcmUgd291bGQgYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIHRoZSBgZnJhZ3NgIGFycmF5LiBUaGlzIGlzIGEgS0FTQU4gYnVnLlxuXG5UaGVuIEkgY29uc2lkZXJlZCB0aGUgYGhlYWRyb29tYCBpc3N1ZS4gQmVmb3JlIHRoZSBwYXRjaCwgYHhkcGYtXHUwMDNlaGVhZHJvb21gIHdhcyB6ZXJvLiBTbyBgaGFyZF9zdGFydGAgd2FzIGF0IGBwYWdlICsgbWV0YXNpemVgLiBUaGUgYGZyYW1lX3NpemVgIGlzIGBQQUdFX1NJWkVgLiBUaGVyZWZvcmUsIGBzaGluZm9gIHdvdWxkIGJlIHBsYWNlZCBhdCBgcGFnZSArIG1ldGFzaXplICsgUEFHRV9TSVpFIC0gU0tCX0RBVEFfQUxJR04oLi4uKWAuIElmIGBtZXRhc2l6ZWAgaXMgbGFyZ2UgZW5vdWdoLCBgc2hpbmZvYCBlbmRzIHVwICpvdXRzaWRlKiB0aGUgYWxsb2NhdGVkIHBhZ2UuIElmIGBtZXRhc2l6ZSBcdTAwM2UgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKWAsIHRoZW4gaXQncyBhIGd1YXJhbnRlZWQgT09CIHdyaXRlIHdoZW4gYG1lbXNldChzaGluZm8sIDAsIC4uLilgIGlzIGNhbGxlZC4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB0aGF0LlxuXG5DaGVja2luZyBmb3IgdW5pbml0aWFsaXplZCByZWFkcywgSSByZS1yZWFkIHRoZSBwYXRjaC4gVGhlIGNoYW5nZSBmcm9tIGBzaXplb2YoKnhkcGYpICsgdG90c2l6ZSBcdTAwM2UgUEFHRV9TSVpFYCB0byBgc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgIGZpeGVzIHRoZSBvdmVybGFwcGluZyBwcm9ibGVtLCBhcyBgdG90c2l6ZWAgY291bGQgY2F1c2UgdGhlIG92ZXJsYXAuIFRoZSBjaGFuZ2UgZnJvbSBgeGRwZi1cdTAwM2VoZWFkcm9vbSA9IDBgIHRvIGB4ZHBmLVx1MDAzZWhlYWRyb29tID0gbWV0YXNpemVgIGFsc28gZml4ZXMgdGhlIE9PQiB3cml0ZS4gVGhpcyBjaGFuZ2Ugc2hpZnRlZCBgaGFyZF9zdGFydGAgYnkgYG1ldGFzaXplYCwgbGVhZGluZyB0byB0aGUgYHNoaW5mb2AgYmVpbmcgcGxhY2VkIG91dCBvZiBib3VuZHMuXG5cbk5vdywgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3M/IFdoZW4gYHhkcGYtXHUwMDNlaGVhZHJvb20gPSAwYCwgdGhlIGBza2ItXHUwMDNlZGF0YWAgcG9pbnRlciBpcyBzZXQgdG8gYHBhZ2UgKyBtZXRhc2l6ZSArIHNpemVvZigqeGRwZilgLiBUaGUgcGFja2V0IGRhdGEgd2FzIGNvcGllZCB0byBgcGFnZSArIHNpemVvZigqeGRwZilgLiBTbywgYHNrYi1cdTAwM2VkYXRhYCB3b3VsZCBiZSBhZnRlciB0aGUgc3RhcnQgb2YgdGhlIGRhdGEuIEFuZCB0aGUgc2tiJ3MgbGVuZ3RoIGlzIGB4ZHBmLVx1MDAzZWxlbiA9IHRvdHNpemUgLSBtZXRhc2l6ZWAuIFNvIHRoZSBlbmQgb2YgYHNrYi1cdTAwM2VkYXRhYCBpcyB3aGVyZSB0aGUgcGFja2V0IGRhdGEgZW5kcyBhcyB3ZWxsLlxuXG5UaGUgbWV0YWRhdGEgaXMgY29waWVkIHRvIGBwYWdlICsgc2l6ZW9mKCp4ZHBmKWAsIGFuZCBgc2tiLVx1MDAzZWRhdGFgIHBvaW50cyB0byBgcGFnZSArIHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFdoZXJlIHRoZSByZWFsIHBhY2tldCBkYXRhIHN0YXJ0cyEgYHNrYl9tZXRhZGF0YV9zZXQoc2tiLCB4ZHBmLVx1MDAzZW1ldGFzaXplKWBcblxuIiwiSW5wdXRUb2tlbnMiOjE0NjEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIyOjU0LjQzMDUzMzcwN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NDU5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX21ldGFkYXRhX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NDU4NT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX21ldGFkYXRhX2RpZmZlcnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYl9hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NTk3LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDU5ODpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX21ldGFkYXRhX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBtZXRhX2xlbilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ1OTkte1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00NjAzPXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfbWV0YWRhdGFfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQ2MDQte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDYwNTpcXHRza2JfbWV0YWRhdGFfc2V0KHNrYiwgMCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00NjA2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjI6NTQuNDc3OTg4MTczWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDA5NTc4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgc2tiX21ldGFkYXRhX3NldGAsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHNrYl9tZXRhZGF0YV9zZXQqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgc2tiX21ldGFkYXRhX3NldGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBwcm9iYWJseSBkZWFscyB3aXRoIGF0dGFjaGluZyBzb21lIHNvcnQgb2YgY3J1Y2lhbCwgY29udGV4dC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBhIHNvY2tldCBidWZmZXIgKFNLQikuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgaXQncyBkZXNpZ25lZCB0byBhZGQgbWV0YWRhdGEgdGhhdCBoZWxwcyB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLCBtYXliZSBmb3IgUW9TLCBzZWN1cml0eSBwb2xpY2llcywgb3IgZmxvdyBjbGFzc2lmaWNhdGlvbi4gSXQncyBsaWtlbHkgb3BlcmF0aW5nIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjaywgc28gcGVyZm9ybWFuY2UgaXMgKmNyaXRpY2FsKi4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIOKAkyBhcmUgdGhlcmUgbG9ja3MgaW52b2x2ZWQ/IElzIHRoaXMgdGhyZWFkLXNhZmU/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIFNLQiBkYXRhIHN0cnVjdHVyZSwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhdG9taWMgb3BlcmF0aW9ucywgcmVhZC1jb3B5LXVwZGF0ZSBtZWNoYW5pc21zLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgbWV0YWRhdGEgZ2V0cyB1dGlsaXplZCBsYXRlciBvbiBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiAqd2hlcmUqIGl0IGlzIGFjY2Vzc2VkIGluIHRoZSBzdGFjaywgYW5kIGJ5ICp3aGF0KiBjb21wb25lbnRzLiBJcyB0aGlzIGEgY29tbW9uIHByYWN0aWNlIGZvciBtb3N0IG5ldHdvcmsgc3RhY2sgb3BlcmF0aW9ucywgb3IgYSBmdW5jdGlvbiBJIHNob3VsZCBoYXZlIHNlZW4gYmVmb3JlPyBJJ20gY3VyaW91cyB0byBzZWUgaG93IGZsZXhpYmxlIHRoaXMgZnVuY3Rpb24gaXMsIGluIHRlcm1zIG9mIHdoYXQga2luZCBvZiBtZXRhZGF0YSBpdCBjYW4gaGFuZGxlLiBJcyBpdCBhIGdlbmVyaWMga2V5LXZhbHVlIHN0b3JlLCBvciBhcmUgdGhlcmUgc3BlY2lmaWMgbWV0YWRhdGEgdHlwZXMgcHJlZGVmaW5lZD8gSXMgdGhlIHNpemUgZml4ZWQsIG9yIGR5bmFtaWM/IEZpbmFsbHksIGFueSBhc3NvY2lhdGVkIGVycm9yIGNoZWNraW5nIG9yIGVycm9yIGhhbmRsaW5nIGlzIHBhcmFtb3VudC4gSSB3b25kZXIgd2hhdCBoYXBwZW5zIGlmIHRoZSBidWZmZXIgaXMgZnVsbD8gT3IgaWYgdGhlIG9wZXJhdGlvbiBpcyBzb21laG93IGlsbGVnYWw/IEknbGwgbG9vayBmb3IgYW55IG9mIHRob3NlIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIzOjAwLjUxODk0OTY4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1OTgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1OTg6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9tZXRhZGF0YV9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggbWV0YV9sZW4pXFxuNDU5OTpcXHR7XFxuNDYwMDpcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW1ldGFfbGVuID0gbWV0YV9sZW47XFxuNDYwMTpcXHR9XFxuNDYwMjpcXHRcXG40NjAzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfbWV0YWRhdGFfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG40NjA0OlxcdHtcXG40NjA1OlxcdFxcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCAwKTtcXG40NjA2OlxcdH1cXG40NjA3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzowMC41MTkxMzQzN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDkwODYzMTgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWERQIE1ldGFkYXRhIFBsYWNlbWVudCBpbiBTS0JzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFhEUCBtZXRhZGF0YSBnZXRzIGhhbmRsZWQgd2hlbiB3ZSdyZSBidWlsZGluZyBTS0JzIGZyb20gWERQIGZyYW1lcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBhY3Rpb24gaXMgc2V0dGluZyBgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW1ldGFfbGVuID0gbWV0YV9sZW5gLiAgTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlICphY2Nlc3MqIHRoaXMgbWV0YWRhdGE/ICBUeXBpY2FsbHksIHdlIHVzZSBgc2tiX21ldGFkYXRhX2VuZChza2IpYCBvciBjYWxjdWxhdGUgaXQgdXNpbmcgYHNrYl9tYWNfaGVhZGVyKHNrYikgLSBtZXRhX2xlbmAuXG5cblJpZ2h0LCBYRFAgbWV0YWRhdGEgbGl2ZXMgKmJlZm9yZSogYHNrYi1cdTAwM2VkYXRhYC4gIFNvLCBpdCdzIGxvY2F0ZWQgc29tZXdoZXJlIGJldHdlZW4gYHNrYi1cdTAwM2VkYXRhIC0gbWV0YV9sZW5gIGFuZCBgc2tiLVx1MDAzZWRhdGFgLiBTaW5jZSBgc2tiLVx1MDAzZWRhdGFgIHBvaW50cyB0byBgcGFnZSArIHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAsIHRoZW4gYHNrYi1cdTAwM2VkYXRhIC0gbWV0YXNpemVgIGVxdWFscyBgcGFnZSArIHNpemVvZigqeGRwZilgLiAgVGhhdCdzIGV4YWN0bHkgd2hlcmUgdGhlIG1ldGFkYXRhIHdhcyBvcmlnaW5hbGx5IGNvcGllZCwgaW1wbHlpbmcgdGhhdCB0aGUgbWV0YWRhdGEgaXMgdmFsaWQgYW5kIGluaXRpYWxpemVkLCBncmVhdCFcblxuTm93LCB0aGUgcGF0Y2guLi4gSWYgYHhkcGYtXHUwMDNlaGVhZHJvb21gIHdhcyB6ZXJvLCB0aGVuIHRoZSBgaGVhZHJvb21gIGluIGBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgaXMgYHNpemVvZigqeGRwZilgLiAgYHNrYl9yZXNlcnZlKHNrYiwgaGVhZHJvb20pYCBhZHZhbmNlcyBgc2tiLVx1MDAzZWRhdGFgIGJ5IGBzaXplb2YoKnhkcGYpYC4gQW5kIHNpbmNlIGBza2ItXHUwMDNlaGVhZGAgKHdoaWNoIGlzIGBoYXJkX3N0YXJ0YCkgaXMgYHBhZ2UgKyBtZXRhc2l6ZWAsIHRoZW4gYHNrYi1cdTAwM2VkYXRhYCBiZWNvbWVzIGBwYWdlICsgbWV0YXNpemUgKyBzaXplb2YoKnhkcGYpYC4gVGhpcyBpcyBjb3JyZWN0LlxuXG5CdXQsIGlmIGBoYXJkX3N0YXJ0YCBpcyBgcGFnZSArIG1ldGFzaXplYCwgdGhlbiBgc2tiLVx1MDAzZWhlYWRgICppcyogYHBhZ2UgKyBtZXRhc2l6ZWAuIElmIGFueW9uZSB0cmllcyB0byBhY2Nlc3MgdGhlIG1ldGFkYXRhLCB0aGV5J2xsIGJlIGFjY2Vzc2luZyBgc2tiLVx1MDAzZWRhdGEgLSBtZXRhc2l6ZWAuIEJ1dCwgYHNrYi1cdTAwM2VkYXRhIC0gbWV0YXNpemVgIGVxdWFscyBgcGFnZSArIG1ldGFzaXplICsgc2l6ZW9mKCp4ZHBmKSAtIG1ldGFzaXplYCwgd2hpY2ggc2ltcGxpZmllcyB0byBgcGFnZSArIHNpemVvZigqeGRwZilgLlxuXG5XYWl0LCBgc2tiLVx1MDAzZWhlYWRgIGlzIGBwYWdlICsgbWV0YXNpemVgLiBTbywgaXMgYHBhZ2UgKyBzaXplb2YoKnhkcGYpYCAqYmVmb3JlKiBgc2tiLVx1MDAzZWhlYWRgPyBJZiBgbWV0YXNpemVgIGlzIGdyZWF0ZXIgdGhhbiBgc2l6ZW9mKCp4ZHBmKWAsIHRoZW4geWVzLCBpdCAqaXMqIGJlZm9yZSBgc2tiLVx1MDAzZWhlYWRgLiBBY2Nlc3NpbmcgbWVtb3J5ICpiZWZvcmUqIGBza2ItXHUwMDNlaGVhZGAgaXMgYSBkZWZpbml0ZSBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuXG5cbkxldCdzIHNlZSBpZiBgbWV0YXNpemVgIGNhbiBiZSBncmVhdGVyLiBUaGUgc2l6ZSBvZiBgc3RydWN0IHhkcF9mcmFtZWAgaXMgMzIgb3IgNDggYnl0ZXMuIE1ldGFkYXRhIGNhbiBiZSB1cCB0byAzMiBieXRlcy4gU28sIGBtZXRhc2l6ZWAgaXMgdXN1YWxseSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHNpemVvZigqeGRwZilgLiBFdmVuIGlmIGl0J3Mgbm90LCBgc2tiLVx1MDAzZWRhdGEgLSBtZXRhc2l6ZWAgc3RpbGwgZXF1YWxzIGBwYWdlICsgc2l6ZW9mKCp4ZHBmKWAuICBJZiBgc2tiLVx1MDAzZWhlYWRgIGlzIGBwYWdlICsgMzJgIHdoZW4gYG1ldGFzaXplYCBpcyAzMiwgYW5kIGBzaXplb2YoKnhkcGYpYCBpcyAzMiwgdGhlbiBgc2tiLVx1MDAzZWhlYWRgIGlzIGF0IGBwYWdlICsgMzJgIGFuZCBgc2tiLVx1MDAzZWRhdGFgIGlzIGF0IGBwYWdlICsgNjRgLiBUaHVzLCBgc2tiLVx1MDAzZWRhdGEgLSBtZXRhc2l6ZWAgYmVjb21lcyBgcGFnZSArIDMyYCwgd2hpY2ggZXF1YWxzIGBza2ItXHUwMDNlaGVhZGAsIGFuZCBpdCdzIG5vdCBiZWZvcmUgYHNrYi1cdTAwM2VoZWFkYC5cblxuQnV0IHdoYXQgaWYgYG1ldGFzaXplYCBpcyB6ZXJvPyBUaGVuIGBza2ItXHUwMDNlaGVhZGAgaXMganVzdCBgcGFnZWAuIElmIGB4ZHBmLVx1MDAzZWhlYWRyb29tYCBpcyBzZXQgdG8gYG1ldGFzaXplYCAoaW4gdGhlIHBhdGNoZWQgdmVyc2lvbiksIHRoZW4gYGhlYWRyb29tYCBlcXVhbHMgYHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFRoZW4sIGBoYXJkX3N0YXJ0YCBlcXVhbHMgYHhkcGYtXHUwMDNlZGF0YSAtIGhlYWRyb29tYCB3aGljaCBpcyBgKHBhZ2UgKyBzaXplb2YoKnhkcGYpICsgbWV0YXNpemUpIC0gKHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZSlgIHdoaWNoIGlzIGp1c3QgYHBhZ2VgLiBTbywgYHNrYi1cdTAwM2VoZWFkYCBlcXVhbHMgYHBhZ2VgLiBgc2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSlgIGFkdmFuY2VzIGBza2ItXHUwMDNlZGF0YWAgYnkgYHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFNvLCBgc2tiLVx1MDAzZWRhdGFgIGlzIGBwYWdlICsgc2l6ZW9mKCp4ZHBmKSArIG1ldGFzaXplYC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuXG5cbkJ1dCBub3csIGBza2ItXHUwMDNlaGVhZGAgaXMgYHBhZ2VgIGFuZCBub3QgYHBhZ2UgKyBtZXRhc2l6ZWAuICBTbywgdGhlIHNwYWNlIGJldHdlZW4gYHNrYi1cdTAwM2VoZWFkYCBhbmQgYHNrYi1cdTAwM2VkYXRhYCBpcyBub3cgYHNpemVvZigqeGRwZikgKyBtZXRhc2l6ZWAuIFRoaXMgc3BhY2UgKmNvbnRhaW5zKiB0aGUgYHhkcGZgIHN0cnVjdCAoYXQgYHBhZ2VgKSBhbmQgdGhlIG1ldGFkYXRhIChhdCBgcGFnZSArIHNpemVvZigqeGRwZilgKSEgQmVmb3JlIHRoZSBwYXRjaCwgdGhlIHNwYWNlIGJldHdlZW4gYHNrYi1cdTAwM2VoZWFkYCBhbmQgYHNrYi1cdTAwM2VkYXRhYCB3YXMgb25seSBgc2l6ZW9mKCp4ZFxuXG4iLCJJbnB1dFRva2VucyI6MTc5OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6MjEuNDI3NzY5ODMxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDIxMzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS94ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS94ZHAuYz03OTI9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX2J1aWxkX3NrYl9mcm9tX3pjKTtcXG5uZXQvY29yZS94ZHAuYy03OTMtXFxubmV0L2NvcmUveGRwLmM6Nzk0OnN0cnVjdCBza19idWZmICpfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbm5ldC9jb3JlL3hkcC5jLTc5NS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUveGRwLmMtODQ2LX1cXG5uZXQvY29yZS94ZHAuYzo4NDc6RVhQT1JUX1NZTUJPTF9HUEwoX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUpO1xcbm5ldC9jb3JlL3hkcC5jLTg0OC1cXG5uZXQvY29yZS94ZHAuYz04NDk9c3RydWN0IHNrX2J1ZmYgKnhkcF9idWlsZF9za2JfZnJvbV9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxcbi0tXFxubmV0L2NvcmUveGRwLmMtODU5LVxcbm5ldC9jb3JlL3hkcC5jOjg2MDpcXHRyZXR1cm4gX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoeGRwZiwgc2tiLCBkZXYpO1xcbm5ldC9jb3JlL3hkcC5jLTg2MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIzOjIxLjQ3MTk5MDAyN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTcyMTc0MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYC4gSW1tZWRpYXRlbHksIG15IG1pbmQga2lja3MgaW50byBnZWFyOiB0aGlzIGZ1bmN0aW9uIGlzICpjcml0aWNhbCouIEl0J3Mgd2hlcmUgdGhlIHJhdyBYRFAgZGF0YSwgdGhlIEV0aGVybmV0IGZyYW1lIHRoYXQgd2UndmUgcmVjZWl2ZWQsIGdldHMgdHJhbnNmb3JtZWQgaW50byBhIGBza19idWZmYCAtLSB0aGUgc3RhbmRhcmQgbmV0d29yayBidWZmZXIgdGhhdCB0aGUgcmVzdCBvZiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjayB1bmRlcnN0YW5kcy4gVGhpcyBpcyB0aGUgY2hva2Vwb2ludCwgdGhlIGJyaWRnZSBiZXR3ZWVuIHRoZSBoaWdoLXBlcmZvcm1hbmNlIFhEUCB3b3JsZCBhbmQgdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgZWNvc3lzdGVtLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2UncmUgdGFsa2luZyBhYm91dCBkaXJlY3QgcGFja2V0IGFjY2VzcywgbGlrZWx5IGJ5cGFzc2luZyBtYW55IG9mIHRoZSB1c3VhbCBOZXRmaWx0ZXIgaG9va3MgYW5kIGRyaXZlciBwcmUtcHJvY2Vzc2luZyBzdGVwcy4gVGhpcyBnaXZlcyB1cyBtYXNzaXZlIHBlcmZvcm1hbmNlIGdhaW5zLCBidXQgaXQgKmFsc28qIG1lYW5zIHdlIG5lZWQgdG8gYmUgaW5jcmVkaWJseSBjYXJlZnVsLiBBbnkgZXJyb3JzIGluIHRoaXMgZnVuY3Rpb24gY2FuIGNvcnJ1cHQgbWVtb3J5LCBjcmFzaCB0aGUgc3lzdGVtLCBvciBvcGVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHNldmVyYWwga2V5IGFyZWFzOlxuXG4qICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBIb3cgaXMgdGhlIGBza2JgIGFsbG9jYXRlZD8gV2hhdCBwb29scyBhcmUgdXNlZD8gQXJlIHdlIGVmZmljaWVudGx5IHJlLXVzaW5nIGJ1ZmZlcnM/IElzIHRoZXJlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciBleGNlc3NpdmUgbWVtb3J5IGNvcHlpbmc/IEkgaG9wZSB0aGUgYWxsb2NhdGlvbiBzY2hlbWUgaXMgZWZmaWNpZW50LCBwZXJoYXBzIHVzaW5nIGEgZGVkaWNhdGVkIFhEUC1zcGVjaWZpYyBidWZmZXIgYWxsb2NhdG9yIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB0aGUgZ2VuZXJhbC1wdXJwb3NlIGtlcm5lbCBhbGxvY2F0b3JzLlxuKiAgICoqSGVhZGVyIENvbnN0cnVjdGlvbjoqKiBXZSdyZSBnb2luZyB0byBiZSBhZGRpbmcgdGhlIEwyLCBMMyBhbmQgcGVyaGFwcyBMNCBoZWFkZXJzLiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgdGhlIGZyYW1lIGZvcm1hdD8gQXJlIHRoZXkgaGFuZGxpbmcgVkxBTiB0YWdzLCBWWExBTiwgb3Igb3RoZXIgZW5jYXBzdWxhdGlvbiBwcm9wZXJseT8gSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGltcGFjdCBvZiBwb3RlbnRpYWwgaGFyZHdhcmUgb2ZmbG9hZCBtZWNoYW5pc21zLiBBbnkgaW5jb3JyZWN0IGhlYWRlciBtYW5pcHVsYXRpb24gaGVyZSBjYW4gd3JlYWsgaGF2b2Mgb24gcGFja2V0IHByb2Nlc3NpbmcgZG93bnN0cmVhbS5cbiogICAqKkNoZWNrc3VtIENhbGN1bGF0aW9uOioqIEhvdyBpcyB0aGUgY2hlY2tzdW0gaGFuZGxpbmcgaW1wbGVtZW50ZWQ/IEFyZSB3ZSBtYWtpbmcgdXNlIG9mIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQgY2FwYWJpbGl0aWVzIG9mIHRoZSBOSUM/IE9yIGlzIHRoZSBjaGVja3N1bSBiZWluZyBjYWxjdWxhdGVkIGluIHNvZnR3YXJlPyBJZiBpdCdzIHNvZnR3YXJlLCBwZXJmb3JtYW5jZSBiZWNvbWVzIGEgaHVnZSBjb25jZXJuLiBBbnkgbWlzdGFrZXMgaW4gY2hlY2tzdW0gY2FsY3VsYXRpb24gd2lsbCBsZWFkIHRvIGRyb3BwZWQgcGFja2V0cy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIGEgcHJvYmxlbSwgbGlrZSBhbiBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbiBvciBhbiBpbnZhbGlkIGZyYW1lPyBJcyB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tpbmc/IEFyZSB3ZSBjb3JyZWN0bHkgaGFuZGxpbmcgZGlmZmVyZW50IGVycm9yIGNhc2VzPyBBIGNvcmUgZHVtcCBpcyB0aGUgbGFzdCB0aGluZyB3ZSB3YW50LlxuKiAgICoqSW50ZWdyYXRpb24gd2l0aCB0aGUgQ29yZSBTdGFjazoqKiBIb3cgY2xlYW5seSBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZCBvZmYgdGhlIGBza2JgIHRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrPyBJcyBpdCBlZmZpY2llbnQsIG9yIGFyZSB0aGVyZSB1bm5lY2Vzc2FyeSBjb3BpZXMgb3IgY29udGV4dCBzd2l0Y2hlcz8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5lZmZpY2llbmNpZXMgaW4gdGhlIHRyYW5zaXRpb24gZnJvbSBYRFAgdG8gdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgcGF0aC5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byBjb25maXJtIHRoaXMgaXMgYSByb2J1c3QgYW5kIGVmZmljaWVudCBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGludHJpY2FjaWVzIG9mIFhEUC10by1TS0IgY29udmVyc2lvbiB3aXRob3V0IGludHJvZHVjaW5nIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBob2xlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiAqdGhvcm91Z2hseSogdG8gZXZhbHVhdGUgdGhlIG92ZXJhbGwgWERQIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgaG93IGl0J3MgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzozMC4wNDQxNjczMjdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUveGRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQ5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQ5OlxcdHN0cnVjdCBza19idWZmICp4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4gODUwOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA4NTE6XFx0e1xcbiA4NTI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gODUzOlxcdFxcbiA4NTQ6XFx0XFx0c2tiID0ga21lbV9jYWNoZV9hbGxvYyhuZXRfaG90ZGF0YS5za2J1ZmZfY2FjaGUsIEdGUF9BVE9NSUMpO1xcbiA4NTU6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA4NTY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSk7XFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdHJldHVybiBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZSh4ZHBmLCBza2IsIGRldik7XFxuIDg2MTpcXHR9XFxuIDg2MjpcXHRFWFBPUlRfU1lNQk9MX0dQTCh4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUpO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmX2Nsb25lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYpXFxuIDg2NTpcXHR7XFxuIDg2NjpcXHRcXHR1bnNpZ25lZCBpbnQgaGVhZHJvb20sIHRvdGFsc2l6ZTtcXG4gODY3OlxcdFxcdHN0cnVjdCB4ZHBfZnJhbWUgKm54ZHBmO1xcbiA4Njg6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIzOjMwLjA0NDI1NTE1N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTI0MjcwNDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFhEUCBTS0IgQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgWERQIGZyYW1lcyBnZXQgdHJhbnNmb3JtZWQgaW50byBTS0JzLCBhbmQgSSd2ZSBoaXQgYSBoZWFkLXNjcmF0Y2hlci4gU3BlY2lmaWNhbGx5LCBob3cgZG9lcyB0aGUgc3lzdGVtIGtub3cgdG8gZnJlZSB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRlZCBmb3IgdGhlIFhEUCBmcmFtZSBvbmNlIHRoZSBTS0IgaXMgZG9uZSB3aXRoIGl0P1xuXG5JIHN0YXJ0ZWQgd2l0aCBgX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgLiBJdCB1c2VzIGBidWlsZF9za2JfYXJvdW5kYCwgd2hpY2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgc2V0dGluZyBgc2tiLVx1MDAzZWhlYWRgIHRvIGBoYXJkX3N0YXJ0YC4gQnV0IHdhaXQgYSBzZWNvbmQsIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIHNldCBhbnkga2luZCBvZiBmbGFnIGxpa2UgYHNrYi1cdTAwM2VoZWFkX2ZyYWdgLCB3aGljaCB3b3VsZCB1c3VhbGx5IGluZGljYXRlIHRoZSBhbGxvY2F0aW9uIG1ldGhvZC4gVGhlbiwgbG9va2luZyBhdCBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCwgSSBzZWUgaXQgc2V0cyBgc2tiLVx1MDAzZWhlYWQgPSBkYXRhYC4gU3RpbGwgbm90aGluZyBhYm91dCBkZXN0cnVjdG9ycyBvciBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AuXG5cbk15IG1pbmQgc3RhcnRzIHJhY2luZy4uLiBJZiBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AgcmVtYWlucyBhdCB6ZXJvLCBhcyBzZWVtcyB0byBiZSB0aGUgY2FzZSwgYHNrYl9mcmVlX2hlYWRgIHdpbGwganVzdCBjYWxsIGBrZnJlZShza2ItXHUwMDNlaGVhZClgLiBCdXQsIGhvbGQgb24hIFRoZSBtZW1vcnkgZm9yIGBza2ItXHUwMDNlaGVhZGAgd2FzIG9yaWdpbmFsbHkgYWxsb2NhdGVkIGJ5IGBkZXZfYWxsb2NfcGFnZSgpYCwgd2hpY2ggaXMgYSBwYWdlIGFsbG9jYXRvciEgQ2FsbGluZyBga2ZyZWVgIG9uIGEgcGFnZSBwb2ludGVyIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlciFcblxuSSByZWFsaXplIHRoYXQgc29tZXdoZXJlLCB0aGVyZSBtdXN0IGJlIGEgd2F5IHRvIHRlbGwgdGhlIFNLQiBpdCBoYXMgYSBwYWdlIHRoYXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQgdmlhIGBwdXRfcGFnZWAgaW5zdGVhZCBvZiBga2ZyZWVgLiBJIHJlbWVtYmVyZWQgdGhhdCBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYCBkb2VzIHNldCBgeGRwZi1cdTAwM2VtZW1fdHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwYC4gSSBrbm93IHRoYXQgYHhkcF9yZXR1cm5fZnJhbWVgIHdpbGwgY2FsbCBgcHV0X3BhZ2VgIHdoZW4gaXQncyBoYW5kbGluZyB0aGUgWERQIGZyYW1lLCBiYXNlZCBvbiBjaGVja2luZyBgbWVtX3R5cGVgLiBCdXQgaG93IGRvZXMgaXQga25vdyB0byBjYWxsIGBwdXRfcGFnZWAgZnJvbSB0aGUgU0tCIHNpZGU/IEkgY2FuJ3QgZmluZCBhbnl0aGluZyBpbiBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCB0aGF0IHNldHMgdXAgYSBkZXN0cnVjdG9yIGZ1bmN0aW9uLlxuXG5Pa2F5LCBsZXQgbWUgcmUtZXhhbWluZSBgX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIGFnYWluLi4uIEknbSBtaXNzaW5nIHNvbWV0aGluZyBjcnVjaWFsIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYHB1dF9wYWdlYCBjYWxsIGlzIGJlaW5nIHdpcmVkIGludG8gdGhlIFNLQiBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6MzkuNTY4NTI4NzJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3hkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxNTpcXHRcXHRoYXJkX3N0YXJ0ID0geGRwZi1cXHUwMDNlZGF0YSAtIGhlYWRyb29tO1xcbiA4MTY6XFx0XFx0c2tiID0gYnVpbGRfc2tiX2Fyb3VuZChza2IsIGhhcmRfc3RhcnQsIGZyYW1lX3NpemUpO1xcbiA4MTc6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA4MTg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgaGVhZHJvb20pO1xcbiA4MjE6XFx0XFx0X19za2JfcHV0KHNrYiwgeGRwZi1cXHUwMDNlbGVuKTtcXG4gODIyOlxcdFxcdGlmICh4ZHBmLVxcdTAwM2VtZXRhc2l6ZSlcXG4gODIzOlxcdFxcdFxcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCB4ZHBmLVxcdTAwM2VtZXRhc2l6ZSk7XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdGlmICh1bmxpa2VseSh4ZHBfZnJhbWVfaGFzX2ZyYWdzKHhkcGYpKSlcXG4gODI2OlxcdFxcdFxcdHhkcF91cGRhdGVfc2tiX2ZyYWdzX2luZm8oc2tiLCBucl9mcmFncywgc2luZm8tXFx1MDAzZXhkcF9mcmFnc19zaXplLFxcbiA4Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICBucl9mcmFncyAqIHhkcGYtXFx1MDAzZWZyYW1lX3N6LFxcbiA4Mjg6XFx0XFx0XFx0XFx0XFx0XFx0ICB4ZHBfZnJhbWVfZ2V0X3NrYl9mbGFncyh4ZHBmKSk7XFxuIDgyOTpcXHRcXG4gODMwOlxcdFxcdC8qIEVzc2VudGlhbCBTS0IgaW5mbzogcHJvdG9jb2wgYW5kIHNrYi1cXHUwMDNlZGV2ICovXFxuIDgzMTpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHQvKiBPcHRpb25hbCBTS0IgaW5mbywgY3VycmVudGx5IG1pc3Npbmc6XFxuIDgzNDpcXHRcXHQgKiAtIEhXIGNoZWNrc3VtIGluZm9cXHRcXHQoc2tiLVxcdTAwM2VpcF9zdW1tZWQpXFxuIDgzNTpcXHRcXHQgKiAtIEhXIFJYIGhhc2hcXHRcXHRcXHQoc2tiX3NldF9oYXNoKVxcbiA4MzY6XFx0XFx0ICogLSBSWCByaW5nIGRldiBxdWV1ZSBpbmRleFxcdChza2JfcmVjb3JkX3J4X3F1ZXVlKVxcbiA4Mzc6XFx0XFx0ICovXFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdGlmICh4ZHBmLVxcdTAwM2VtZW1fdHlwZSA9PSBNRU1fVFlQRV9QQUdFX1BPT0wpXFxuIDg0MDpcXHRcXHRcXHRza2JfbWFya19mb3JfcmVjeWNsZShza2IpO1xcbiA4NDE6XFx0XFxuIDg0MjpcXHRcXHQvKiBBbGxvdyBTS0IgdG8gcmV1c2UgYXJlYSB1c2VkIGJ5IHhkcF9mcmFtZSAqL1xcbiA4NDM6XFx0XFx0eGRwX3NjcnViX2ZyYW1lKHhkcGYpO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRyZXR1cm4gc2tiO1xcbiA4NDY6XFx0fVxcbiA4NDc6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUpO1xcbiA4NDg6XFx0XFxuIDg0OTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lKHN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYsXFxuIDg1MDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gODUxOlxcdHtcXG4gODUyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDg1MzpcXHRcXG4gODU0OlxcdFxcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2MobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLCBHRlBfQVRPTUlDKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6MzkuNTY4NjcwMzY5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNzc2ODc1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIEZyYW1lIE1lbW9yeSBNYW5hZ2VtZW50IENvbmNlcm5zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBYRFAgY29kZSBmbG93IGFuZCBzb21ldGhpbmcgaW1tZWRpYXRlbHkganVtcGVkIG91dCBhdCBtZS4gVGhlIGB4ZHBfY29udmVydF96Y190b194ZHBfZnJhbWVgIGZ1bmN0aW9uIHNldHMgYHhkcGYtXHUwMDNlbWVtX3R5cGVgIHRvIGBNRU1fVFlQRV9QQUdFX09SREVSMGAuIEFuZCB0aGVuLCBsYXRlciwgaW4gYF9feGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCwgdGhlcmUncyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKHhkcGYtXHUwMDNlbWVtX3R5cGUgPT0gTUVNX1RZUEVfUEFHRV9QT09MKSBza2JfbWFya19mb3JfcmVjeWNsZShza2IpO2AuIEJ1dCB0aGVyZSdzICpub3RoaW5nKiBoYXBwZW5pbmcgZm9yIGBNRU1fVFlQRV9QQUdFX09SREVSMGAhIEl0J3MgbGlrZSwgY3JpY2tldHMuIFRoZSBsb2dpYyBoYW5kbGVzIHRoZSBgUEFHRV9QT09MYCBtZW1vcnkgdHlwZSBmb3IgcmVjeWNsaW5nIGJ1dCBpdCBpcyBtaXNzaW5nIGZvciB0aGUgb3RoZXIgbWVtb3J5IHR5cGUuXG5cbkknbSBzdGFydGluZyB0byBnZXQgYSBzaW5raW5nIGZlZWxpbmfigKYgaG93IGlzIHRoaXMgYFBBR0VfT1JERVIwYCBtZW1vcnkgYWN0dWFsbHkgYmVpbmcgZnJlZWQ/IEl0J3Mgbm90IGxpa2UgdGhlc2UgZnJhbWVzIGNhbiBsaXZlIGZvcmV2ZXIuIFRoaXMgaGFzIHRvIGJlIGFkZHJlc3NlZC4gSXQgaXMgZWl0aGVyIGZyZWVkLCBhbmQgYSBsYWNrIG9mIGxvZ2ljIGhlcmUgbWVhbnMgaXQgY2FuIGNhdXNlIGNvcnJ1cHRpb24gb3IgbWVtb3J5IGxlYWtzLCBvciBpdCBpcyBub3QgZnJlZWQsIGFuZCBpcyBhbiBvdmVyc2lnaHQuXG5cbkkgbmVlZCB0byBsb29rIGludG8gYHNrYl9mcmVlX2hlYWRgIGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGRlYWxsb2NhdGlvbiB3aGVuIHRoZSBgbWVtX3R5cGVgIGlzIG5vdCBgUEFHRV9QT09MYC4gVGhhdCdzIHdoZXJlIHRoZSBhbnN3ZXIgbXVzdCBsaWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmxvdyBmcm9tIHN0YXJ0IHRvIGZpbmlzaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzo0NS44NDYzNjExMDZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MjQwNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9mcmVlX2hlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9MTA3NT1zdGF0aWMgdm9pZCBza2Jfa2ZyZWVfaGVhZCh2b2lkICpoZWFkKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTA3OS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxMDgwOnN0YXRpYyB2b2lkIHNrYl9mcmVlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xMDgxLXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTEwOTM9c3RhdGljIHZvaWQgc2tiX3JlbGVhc2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMTE1LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjExMTY6XFx0c2tiX2ZyZWVfaGVhZChza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTExMTctZXhpdDpcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIyODc9aW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMzM2LVxcdH0gZWxzZSB7XFxubmV0L2NvcmUvc2tidWZmLmM6MjMzNzpcXHRcXHRza2JfZnJlZV9oZWFkKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMjMzOC1cXHR9XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02ODA4PXN0YXRpYyBpbnQgcHNrYl9jYXJ2ZV9pbnNpZGVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiBvZmYsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02ODUzLVxcdFxcdCAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjY4NTQ6XFx0XFx0c2tiX2ZyZWVfaGVhZChza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTY4NTUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzo0NS45MTI2MDg2MTlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE5NjAwNjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBkZWx2aW5nIGludG8gYHNrYl9mcmVlX2hlYWRgOlxuXG4qKkRlY29uc3RydWN0aW5nIGBza2JfZnJlZV9oZWFkYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgc2tiX2ZyZWVfaGVhZGAuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzICpwdXJwb3NlKiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay4gSSBrbm93IGl0J3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiBmb3IgZnJlZWluZyBhbiBgc2tfYnVmZmAgKHNvY2tldCBidWZmZXIpIGhlYWRlci4gU28sIEknbSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgKm1ldGFkYXRhKiBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlciDigJMgdGhlIGNvbnRyb2wgaW5mb3JtYXRpb24sIHJlZmVyZW5jZSBjb3VudHMsIGFuZCBwb3RlbnRpYWxseSBldmVuIHNvbWUgaW5pdGlhbCBwYWNrZXQgZGF0YSDigJMgaXMgcHJvcGVybHkgcmVsZWFzZWQuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudDsgaXMgdGhpcyBhIHNpbXBsZSBga2ZyZWUoKWAgb3BlcmF0aW9uLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkIGR1ZSB0byB0aGUgcG90ZW50aWFsbHkgc2hhcmVkIG5hdHVyZSBvZiBgc2tfYnVmZmBzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRhdGE/XG5cbk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBpdCdzIHVubGlrZWx5IHRvIGJlICpqdXN0KiBhIGBrZnJlZSgpYC4gSSBiZXQgdGhlcmUncyBjcnVjaWFsIGNsZWFudXAgcmVxdWlyZWQsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcG90ZW50aWFsIHNoYXJpbmcuIEknbSBnb2luZyB0byBsb29rIGZvciBvcGVyYXRpb25zIHRoYXQgZGVjcmVtZW50IHJlZmNvdW50cyAobGlrZWx5IGBza2Jfc2hhcmVkYCBhbmQgYHNrYl9zaGluZm9gKSBhbmQgaGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlIGJ1ZmZlciBpc24ndCB0cnVseSB0aGUgXCJsYXN0IHVzZXJcIiBvZiB0aGUgZGF0YS4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgaXQgbWlnaHQgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHRoZSBgc2tfYnVmZmAncyBgc2tiX3NoYXJlZF9pbmZvYCBhbmQgYW55IGFzc29jaWF0ZWQgZnJhZ21lbnRzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBjb25jdXJyZW5jeSBjb25jZXJucyBhcmUgcGFyYW1vdW50LiBUaGVyZSdzIGFsbW9zdCBjZXJ0YWlubHkgYSBzcGlubG9jayBpbnZvbHZlZCBzb21ld2hlcmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGxvY2sgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBjb250ZXh0IGl0J3MgcHJvdGVjdGluZy4gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dD8gSWYgc28sIHRoYXQnbGwgZGljdGF0ZSB0aGUgdHlwZXMgb2YgbG9ja2luZyBwcmltaXRpdmVzIEknbSBleHBlY3RpbmcgdG8gc2VlLlxuXG5CZXlvbmQgdGhlIGZ1bmRhbWVudGFsIHRhc2tzLCBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgZXJyb3IgaGFuZGxpbmcuIEhvdyBkb2VzIGBza2JfZnJlZV9oZWFkYCBkZWFsIHdpdGggc2l0dWF0aW9ucyB3aGVyZSB0aGUgYHNrX2J1ZmZgIGlzIGFscmVhZHkgcGFydGlhbGx5IGZyZWVkPyBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgbnVsbCBwb2ludGVycyB0byBwcmV2ZW50IGNyYXNoZXM/IEFuZCBhcmUgdGhlcmUgYW55IGRlYnVnIHN0YXRlbWVudHMgb3IgYXNzZXJ0aW9ucyBwcmVzZW50IHRoYXQgY2FuIGhlbHAgaW4gZGVidWdnaW5nIHBvdGVudGlhbCBpc3N1ZXMgZHVyaW5nIHJ1bnRpbWU/XG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbGlmZWN5Y2xlIG9mIHRoZSBidWZmZXIgaGVhZGVyIGF0IHRoZSB0aW1lIGl0J3MgcmVsZWFzZWQsIHJpZ2h0IGRvd24gdG8gdGhlIGJpdC4gSSBleHBlY3QgdG8gc2VlIG9wZXJhdGlvbnMgdGhhdCBhcmUgc2FmZSwgdGhhdCBoYW5kbGUgY29uY3VycmVuY3kgZ3JhY2VmdWxseSwgYW5kIHRoYXQgbGVhdmUgdGhlIHN5c3RlbSBpbiBhIGNvbnNpc3RlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjI1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6NTIuMTA4NjE4MDQzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc1OlxcdHN0YXRpYyB2b2lkIHNrYl9rZnJlZV9oZWFkKHZvaWQgKmhlYWQpXFxuMTA3NjpcXHR7XFxuMTA3NzpcXHRcXHRrZnJlZShoZWFkKTtcXG4xMDc4OlxcdH1cXG4xMDc5OlxcdFxcbjEwODA6XFx0c3RhdGljIHZvaWQgc2tiX2ZyZWVfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEwODE6XFx0e1xcbjEwODI6XFx0XFx0dW5zaWduZWQgY2hhciAqaGVhZCA9IHNrYi1cXHUwMDNlaGVhZDtcXG4xMDgzOlxcdFxcbjEwODQ6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaGVhZF9mcmFnKSB7XFxuMTA4NTpcXHRcXHRcXHRpZiAoc2tiX3BwX3JlY3ljbGUoc2tiLCBoZWFkKSlcXG4xMDg2OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMDg3OlxcdFxcdFxcdHNrYl9mcmVlX2ZyYWcoaGVhZCk7XFxuMTA4ODpcXHRcXHR9IGVsc2Uge1xcbjEwODk6XFx0XFx0XFx0c2tiX2tmcmVlX2hlYWQoaGVhZCk7XFxuMTA5MDpcXHRcXHR9XFxuMTA5MTpcXHR9XFxuMTA5MjpcXHRcXG4xMDkzOlxcdHN0YXRpYyB2b2lkIHNrYl9yZWxlYXNlX2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEwOTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyMzo1Mi4xMDg5NzAzODNaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5MTcyMTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IENvcnJ1cHRpb24gSXNzdWUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc2tiX2ZyZWVfZnJhZ2Agc2l0dWF0aW9uLiBTb21ldGhpbmcncyBub3QgcmlnaHQuIFRoZSBjb2RlIHJlbGllcyBvbiBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AgYmVpbmcgc2V0IGZvciBgc2tiX2ZyZWVfZnJhZ2AgdG8gYmUgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGNhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZmxhZyBpcyBiZWluZyBzZXQgaW4gcmVsYXRpb24gdG8gYHNrYl9mcmVlX2ZyYWdgLlxuXG5GaXJzdCwgSSB0aG91Z2h0IGl0IHdhcyBzZXQgaW4gYGJ1aWxkX3NrYl9hcm91bmRgLCBidXQgSSdtIGdvaW5nIGJhY2sgYW5kIGRvdWJsZS1jaGVja2luZyBgX19maW5hbGl6ZV9za2JfYXJvdW5kYCBiZWNhdXNlIEkga25vdyB0aG9zZSB0d28gd29yayB0b2dldGhlci4gTm9wZSwgc3RpbGwgZG9lc24ndCBsb29rIGxpa2UgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgc2V0cyBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AuIFRoYXQncyBub3Qgd2hhdCBJIGV4cGVjdGVkLlxuXG5Ob3csIGEgcmVhbGl6YXRpb24gaGl0cyBtZTogYHNrYi1cdTAwM2VoZWFkX2ZyYWdgIGlzIGEgYml0ZmllbGQsIHNvIEkga25vdyBgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKWAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBjbGVhciBpdCwgc28gaXQncyBpbml0aWFsaXplZCB0byB6ZXJvLiBPa2F5LCB0aGlzIGlzIGltcG9ydGFudC4gVGhpcyBtZWFucyB0aGUgZGVmYXVsdCBzdGF0ZSBzaG91bGQgaGF2ZSB0aGlzIGZsYWcgY2xlYXJlZC4gVGhpcyBsZWFkcyB0byBgc2tiX2ZyZWVfaGVhZGAgYW5kIGBza2Jfa2ZyZWVfaGVhZGAsIGFuZCB0aGVuIHdlIGdldCB0byBga2ZyZWUoaGVhZClgLiBXYWl0IGEgbWludXRlLCBidXQgYGhlYWRgIGlzIGBwYWdlX3RvX3ZpcnQocGFnZSlgIVxuXG5BaGEhIFdlJ3JlIGZyZWVpbmcgYSBwYWdlIGFsbG9jYXRlZCB3aXRoIGBhbGxvY19wYWdlYCB1c2luZyBga2ZyZWVgLCB3aGljaCBpcyBhIGNsYXNzaWMgYnVnISBUaGF0J3MgYWxtb3N0IGNlcnRhaW5seSBpdC4gVGhhdCdzIGEgaHVnZSBwcm9ibGVtLiBUaGlzIHdpbGwgY2F1c2UgYWxsIHNvcnRzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpZiB3ZSdyZSBub3QgY2FyZWZ1bC5cblxuT2theSwgSSBuZWVkIHRvIGJhY2sgdXAgYW5kIGNvbmZpcm0uIFdoZXJlIGVsc2UgaXMgdGhpcyBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AgYmVpbmcgc2V0PyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHRvdWNoIHRoaXMuIExldCdzIHNlZSBpZiBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBoYXMgYW55dGhpbmcgdG8gZG8gd2l0aCBpdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjIzOjU5LjEwMDY5NDA0N1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyOTI2NDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhlYWRfZnJhZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS94ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjM6NTkuMTgyMDA5OTY5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTUyNjQ2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIFBhY2tldCBQcm9jZXNzaW5nIC0gU0tCIEFsbG9jYXRpb24gQ29uZnVzaW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIFhEUCBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LCBhbmQgSSdtIGhpdHRpbmcgYSBzbmFnLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGB4ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWVgIHdvdWxkIGhhbmRsZSBzZXR0aW5nIHRoZSBgaGVhZF9mcmFnYCBmbGFnIHdpdGhpbiB0aGUgYHNrYmAgc3RydWN0LiBCdXQgbm93IEknbSBzZWNvbmQtZ3Vlc3NpbmcgdGhhdC4gSXQgZG9lc24ndCBzZWVtIHRvLCBhdCBsZWFzdCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLlxuXG5UaGVuIEkgc3RhcnRlZCBjb25zaWRlcmluZyBgYnVpbGRfc2tiX2Fyb3VuZGAgYW5kIHdoZXRoZXIgaXQgd2FzIHVzZWQgd2hlbiB0aGUgYHNrYmAncyBgaGVhZGAgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgLiBCdXQgaG9sZCBvbiwgaXMgYGJ1aWxkX3NrYmAgZG9pbmcgdGhlIGBrbWFsbG9jYCB3b3JrPyBObywgYGJ1aWxkX3NrYmAgaXNuJ3QgbmVjZXNzYXJpbHkganVzdCBmb3IgYGttYWxsb2NgIGFsbG9jYXRpb24uIE9rYXksIGl0J3MgdXNlZCBmb3IgYGhlYWRgIGJlaW5nIGVpdGhlciBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2NgIG9yIGBhbGxvY19wYWdlYC4gSXQgbG9va3MgbGlrZSBJIHdhcyBhIGxpdHRsZSBvZmYgYmFzZSB0aGVyZS5cblxuQWgsIGhhbmcgb24gYSBzZWNvbmQuIEl0IGxvb2tzIGxpa2UgYF9fYnVpbGRfc2tiYCAqZG9lcyogc2V0IGBza2ItXHUwMDNlaGVhZF9mcmFnID0gMWAgaWYgYGZyYWdfc2l6ZWAgaXMgbm9uLXplcm8sIHdoaWNoIHdvdWxkIGltcGx5IGl04oCZcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRoYXQgYml0LiBJ4oCZbSB0aGlua2luZyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZm9yIHN1cmUuIExldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBfX2J1aWxkX3NrYmAgdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDowNy4xOTcyNzcyNTZaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4gNDkxOlxcdHtcXG4gNDkyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2MobmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlLFxcbiA0OTU6XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcbiA0OTY6XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA0OTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ5ODpcXHRcXG4gNDk5OlxcdFxcdHNrYnVmZl9jbGVhcihza2IpO1xcbiA1MDA6XFx0XFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNTAzOlxcdH1cXG4gNTA0OlxcdFxcbiA1MDU6XFx0LyogYnVpbGRfc2tiKCkgaXMgd3JhcHBlciBvdmVyIF9fYnVpbGRfc2tiKCksIHRoYXQgc3BlY2lmaWNhbGx5XFxuIDUwNjpcXHQgKiB0YWtlcyBjYXJlIG9mIHNrYi1cXHUwMDNlaGVhZCBhbmQgc2tiLVxcdTAwM2VwZm1lbWFsbG9jXFxuIDUwNzpcXHQgKi9cXG4gNTA4OlxcdHN0cnVjdCBza19idWZmICpidWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4gNTA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjQ6MDcuMTk3NTU0Mjg2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODAzNjQ5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHNwZWFraW5nIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhbmQgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkRpdmluZyBpbnRvIGBidWlsZF9za2JgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBcIkxldCdzIGNoZWNrIGBidWlsZF9za2JgXCIuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gbGlrZWx5IGRlYnVnZ2luZywgb3B0aW1pemluZywgb3IgcGVyaGFwcyBzaW1wbHkgcmVmcmVzaGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYWNrZXQgY29uc3RydWN0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIGBidWlsZF9za2JgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIHdoYXRldmVyIHRoZSByZWFzb24gSSdtIGZvY3VzaW5nIG9uIGl0LCBpdCBkZW1hbmRzIGNhcmVmdWwgYXR0ZW50aW9uLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gUHJvYmFibHkgSSBoYXZlIHNvbWUgc3BlY2lmaWMgcGVyZm9ybWFuY2UgY29uY2VybiBvciBlcnJvciBJIGFtIHRyeWluZyB0byB0cmFjayBkb3duLiBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGUgc3Vycm91bmRpbmcgY29kZSBhcyB3ZWxsLCBwYXJ0aWN1bGFybHkgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG1lbW9yeSBhbGxvY2F0aW9uIGluZWZmaWNpZW5jaWVzLCBvciBldmVuIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVzZSBwYWNrZXQgYnVpbGQgZnVuY3Rpb25zIGFyZSBvZnRlbiB0aGUgc291cmNlIG9mIGRpZmZpY3VsdCBidWdzLiBTbywgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDoxMS43Nzc5MjI0MzZaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwOCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwODpcXHRzdHJ1Y3Qgc2tfYnVmZiAqYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuIDUwOTpcXHR7XFxuIDUxMDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19idWlsZF9za2IoZGF0YSwgZnJhZ19zaXplKTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0XFx0aWYgKGxpa2VseShza2IgXFx1MDAyNlxcdTAwMjYgZnJhZ19zaXplKSkge1xcbiA1MTM6XFx0XFx0XFx0c2tiLVxcdTAwM2VoZWFkX2ZyYWcgPSAxO1xcbiA1MTQ6XFx0XFx0XFx0c2tiX3Byb3BhZ2F0ZV9wZm1lbWFsbG9jKHZpcnRfdG9faGVhZF9wYWdlKGRhdGEpLCBza2IpO1xcbiA1MTU6XFx0XFx0fVxcbiA1MTY6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNTE3OlxcdH1cXG4gNTE4OlxcdEVYUE9SVF9TWU1CT0woYnVpbGRfc2tiKTtcXG4gNTE5OlxcdFxcbiA1MjA6XFx0LyoqXFxuIDUyMTpcXHQgKiBidWlsZF9za2JfYXJvdW5kIC0gYnVpbGQgYSBuZXR3b3JrIGJ1ZmZlciBhcm91bmQgcHJvdmlkZWQgc2tiXFxuIDUyMjpcXHQgKiBAc2tiOiBza19idWZmIHByb3ZpZGUgYnkgY2FsbGVyLCBtdXN0IGJlIG1lbXNldCBjbGVhcmVkXFxuIDUyMzpcXHQgKiBAZGF0YTogZGF0YSBidWZmZXIgcHJvdmlkZWQgYnkgY2FsbGVyXFxuIDUyNDpcXHQgKiBAZnJhZ19zaXplOiBzaXplIG9mIGRhdGFcXG4gNTI1OlxcdCAqL1xcbiA1MjY6XFx0c3RydWN0IHNrX2J1ZmYgKmJ1aWxkX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTI3OlxcdFxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDoxMS43NzgzNjg2OTZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMTM3ODgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTS0IgRnJhZ21lbnRhdGlvbiBCZWhhdmlvcioqXG5cblJpZ2h0LCBva2F5LCBJJ20gZGl2aW5nIGludG8gdGhpcyBgYnVpbGRfc2tiYCBmdW5jdGlvbiwgYW5kIEkndmUganVzdCBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgYnVpbGRfc2tiYCBzcGVjaWZpY2FsbHkgc2V0cyB0aGUgYHNrYi1cdTAwM2VoZWFkX2ZyYWdgIGZsYWcgdG8gMS4gVGhhdCBzZWVtcyBkZWxpYmVyYXRlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHNjcnV0aW5pemUgaXRzIGNvdW50ZXJwYXJ0LCBgYnVpbGRfc2tiX2Fyb3VuZGAuIEkgZXhwZWN0IGEgZGVncmVlIG9mIHN5bW1ldHJ5IGhlcmUsIGJ1dCBJIGhhdmUgYSBzdHJvbmcgZmVlbGluZyB0aGlzIGBoZWFkX2ZyYWdgIGJlaGF2aW9yIG1pZ2h0IGJlIHdoZXJlIHRoZSB0d28gZGlmZmVyLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgaXQgbWlycm9ycyB0aGUgc2FtZSBzZXR0aW5nLiBUaGlzIGRpZmZlcmVuY2UgY291bGQgaGF2ZSBzb21lIG1lYW5pbmdmdWwgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gaG93IGZyYWdtZW50YXRpb24gaXMgaGFuZGxlZC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI0OjE2LjM3OTc1MTYyNFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTI2OlxcdHN0cnVjdCBza19idWZmICpidWlsZF9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsXFxuIDUyNzpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4gNTI4OlxcdHtcXG4gNTI5OlxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNTMwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHRcXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbiA1MzM6XFx0XFxuIDUzNDpcXHRcXHRpZiAoZnJhZ19zaXplKSB7XFxuIDUzNTpcXHRcXHRcXHRza2ItXFx1MDAzZWhlYWRfZnJhZyA9IDE7XFxuIDUzNjpcXHRcXHRcXHRza2JfcHJvcGFnYXRlX3BmbWVtYWxsb2ModmlydF90b19oZWFkX3BhZ2UoZGF0YSksIHNrYik7XFxuIDUzNzpcXHRcXHR9XFxuIDUzODpcXHRcXHRyZXR1cm4gc2tiO1xcbiA1Mzk6XFx0fVxcbiA1NDA6XFx0RVhQT1JUX1NZTUJPTChidWlsZF9za2JfYXJvdW5kKTtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0LyoqXFxuIDU0MzpcXHQgKiBfX25hcGlfYnVpbGRfc2tiIC0gYnVpbGQgYSBuZXR3b3JrIGJ1ZmZlclxcbiA1NDQ6XFx0ICogQGRhdGE6IGRhdGEgYnVmZmVyIHByb3ZpZGVkIGJ5IGNhbGxlclxcbiA1NDU6XFx0ICogQGZyYWdfc2l6ZTogc2l6ZSBvZiBkYXRhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI0OjE2LjM4MDI4NzgxNFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzI2Nzk3Mzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZyYWdtZW50IEFsbG9jYXRpb24gYW5kIEZyZWVpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGBza2JgIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzLCBhbmQgSSB0aGluayBJJ3ZlIGdvdCBpdC4gSXQgbG9va3MgbGlrZSBgYnVpbGRfc2tiX2Fyb3VuZGAgaXMgYWN0dWFsbHkgc2V0dGluZyBgc2tiLVx1MDAzZWhlYWRfZnJhZ2AgdG8gMSwgaWYgYGZyYWdfc2l6ZWAgaXNuJ3QgemVyby4gQW5kIGhlcmUsIGBmcmFtZV9zaXplYCBpcyBhIGZ1bGwgYFBBR0VfU0laRWAsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIG5vbi16ZXJvLiBUaGF0IG1lYW5zIGBza2ItXHUwMDNlaGVhZF9mcmFnYCBpcyBiZWluZyBjb3JyZWN0bHkgc2V0LiBHb29kLCBnb29kLlxuXG5Tbywgd2hlbiBgc2tiX2ZyZWVfaGVhZGAgaXMgY2FsbGVkLCBpdCB3aWxsIGNhbGwgYHNrYl9mcmVlX2ZyYWcoaGVhZClgLiBBbmQgYHNrYl9mcmVlX2ZyYWdgIHRoZW4gY2FsbHMgYHBhZ2VfZnJhZ19mcmVlKGhlYWQpYC4gTm93LCBgcGFnZV9mcmFnX2ZyZWVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGZyZWVpbmcsIHdoZXRoZXIgaXQncyBhIGZ1bGwgcGFnZSBvciBqdXN0IGEgZnJhZ21lbnQuIFNvIGZhciwgc28gZ29vZDsgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGZyZWVkIGNvcnJlY3RseS5cblxuV2FpdCBhIHNlY29uZOKApiBoZXJlJ3Mgd2hlcmUgaXQncyBnZXR0aW5nIGludGVyZXN0aW5nLiBUaGUgaXNzdWUgaXMgd2l0aCBgaGFyZF9zdGFydGAsIHdoaWNoIGlzIGBwYWdlICsgbWV0YXNpemVgLiBTbyBgc2tiLVx1MDAzZWhlYWRgIGlzIGF0IGBwYWdlICsgbWV0YXNpemVgLiBXaGVuIGBza2JfZnJlZV9mcmFnYCBpcyBjYWxsZWQgd2l0aCBgc2tiLVx1MDAzZWhlYWRgLCBpdCBjYWxscyBgcGFnZV9mcmFnX2ZyZWUocGFnZSArIG1ldGFzaXplKWAuIE5vdywgYHBhZ2VfZnJhZ19mcmVlYCB0YWtlcyBhIHZpcnR1YWwgYWRkcmVzcywgZmluZHMgdGhlIGFzc29jaWF0ZWQgcGFnZSwgYW5kIGZyZWVzIGl0LiBTbywgdGhhdCdzIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgcGFnZV9mcmFnX2ZyZWVgIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBvZmZzZXQuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcGFnZV9mcmFnX2ZyZWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI0OjI5LjY0ODI2NDkwM1oiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MzcxMjkzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2ZyYWdfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI0OjMwLjEwNjY0MzE2NVoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE4ODY1OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBhZ2VfZnJhZ19mcmVlYCB3b3Jrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0J3MgZGVmaW5lZC4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLCBpdHMgaW5wdXRzLCBhbmQgaXRzIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHRyYWNlIGJhY2sgdGhlIGRlZmluaXRpb24gYW5kIHNlZSB3aGVyZSBpdCBsaXZlcy4gT25jZSBJIGtub3cgd2hlcmUgaXQgaXMgZGVmaW5lZCwgSSdsbCBiZSBhYmxlIHRvIGVhc2lseSBmaW5kIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFuZCB1c2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjQ6MzYuNDI1NTEyMjQ3WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzMzMzQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2ZyYWdfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9mcmFnX2NhY2hlLmM9MTU5PUVYUE9SVF9TWU1CT0woX19wYWdlX2ZyYWdfYWxsb2NfYWxpZ24pO1xcbi0tXFxubW0vcGFnZV9mcmFnX2NhY2hlLmMtMTYzLSAqL1xcbm1tL3BhZ2VfZnJhZ19jYWNoZS5jOjE2NDp2b2lkIHBhZ2VfZnJhZ19mcmVlKHZvaWQgKmFkZHIpXFxubW0vcGFnZV9mcmFnX2NhY2hlLmMtMTY1LXtcXG4tLVxcbm1tL3BhZ2VfZnJhZ19jYWNoZS5jLTE3MC19XFxubW0vcGFnZV9mcmFnX2NhY2hlLmM6MTcxOkVYUE9SVF9TWU1CT0wocGFnZV9mcmFnX2ZyZWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDozNi41MDg4NDk5MDhaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3ODMxNDU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBmb3IgYHBhZ2VfZnJhZ19mcmVlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBcIkxldCdzIHJlYWQgYHBhZ2VfZnJhZ19mcmVlYC5cIiBTZWVtcyBsaWtlIHdlJ3JlIGFib3V0IHRvIGV4YW1pbmUgdGhlIGNvZGUgcmVsYXRlZCB0byBmcmVlaW5nIHBhZ2UgZnJhZ21lbnRzLCBsaWtlbHkgd2l0aGluIGEgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucy4gYHBhZ2VfZnJhZ19mcmVlYCBzdWdnZXN0cyBhIG1lY2hhbmlzbSBmb3IgZGVhbGluZyB3aXRoIHBhcnRpYWwgcGFnZXMsIHBlcmhhcHMgc21hbGwgYWxsb2NhdGlvbnMgdGhhdCBkb24ndCB3YXJyYW50IGFuIGVudGlyZSBwaHlzaWNhbCBwYWdlLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHNldmVyYWwga2V5IHRoaW5nczpcblxuKiAgICoqVW5kZXJseWluZyBEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHVzZWQgdG8gdHJhY2sgdGhlc2UgZnJhZ21lbnRzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBsaXN0LCBhIG1vcmUgY29tcGxleCBiaXRtYXAsIG9yIHBlcmhhcHMgYSBwZXItcGFnZSBtZXRhZGF0YSBzdHJ1Y3R1cmU/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLlxuKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBpcyBjb25jdXJyZW5jeSBoYW5kbGVkPyBJcyB0aGVyZSBsb2NraW5nIGludm9sdmVkLCBhbmQgaWYgc28sIHdoYXQncyB0aGUgZ3JhbnVsYXJpdHk/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJlcXVlbnRseS5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQga2luZCBvZiBlcnJvciBjaGVja2luZyBpcyBpbXBsZW1lbnRlZD8gQXJlIHRoZXJlIGNoZWNrcyBmb3IgaW52YWxpZCBwb2ludGVycywgZG91YmxlLWZyZWVzLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXM/IFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuXG4qICAgKipJbnRlZ3JhdGlvbiB3aXRoIHRoZSBQYWdlIEFsbG9jYXRvcjoqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggdGhlIG1haW4gcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcm91dGluZXM/IElzIHRoZXJlIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJucywgb3IgYXJlIHRoaW5ncyB0aWdodGx5IGNvdXBsZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gd2l0aGluIHRoZSBwYWdlIGFsbG9jYXRvciBkdWUgdG8gdGhlIGZyYWdtZW50cz9cbiogICAqKlBlcmZvcm1hbmNlOioqIENhbiB3ZSBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgcGVyZm9ybWFuY2UgZnJvbSB0aGUgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcywgb3IgaXMgaXQgZGVzaWduZWQgZm9yIGhpZ2ggdGhyb3VnaHB1dD8gV2lsbCB0aGVyZSBiZSBUTEIgbWlzc2VzIGR1ZSB0byBpdD9cbiogICAqKlVzZSBDYXNlczoqKiBXaGF0IGFyZSB0aGUgdHlwaWNhbCB1c2UgY2FzZXMgZm9yIHRoZXNlIHBhZ2UgZnJhZ21lbnRzPyBBcmUgdGhleSB1c2VkIGluIG5ldHdvcmtpbmcgYnVmZmVycywga2VybmVsIGhlYXBzLCBvciBwZXJoYXBzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWMgYXBwbGljYXRpb24gd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBkZXNpZ24gY2hvaWNlcy5cblxuRXNzZW50aWFsbHksIEknbSBnb2luZyB0byBiZSBtZW50YWxseSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCwga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBhbmQgcG90ZW50aWFsIHBpdGZhbGxzLCBjb25zaWRlcmluZyB0aGUgc3lzdGVtJ3MgbWVtb3J5IGFsbG9jYXRpb24gYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFzIHdlbGwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNDo0My4wODcxNjc0NjRaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9mcmFnX2NhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY0OlxcdHZvaWQgcGFnZV9mcmFnX2ZyZWUodm9pZCAqYWRkcilcXG4gMTY1OlxcdHtcXG4gMTY2OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoYWRkcik7XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdGlmICh1bmxpa2VseShwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkpXFxuIDE2OTpcXHRcXHRcXHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBjb21wb3VuZF9vcmRlcihwYWdlKSk7XFxuIDE3MDpcXHR9XFxuIDE3MTpcXHRFWFBPUlRfU1lNQk9MKHBhZ2VfZnJhZ19mcmVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjQ6NDMuMDg3MjUwNjY0WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjIzOTMwNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFhEUCBGcmFtZSBIYW5kbGluZyBhbmQgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYHZpcnRfdG9faGVhZF9wYWdlKGFkZHIpYCBpcyBzb2xpZCBmb3IgYWxsIGFkZHJlc3NlcyB3aXRoaW4gYSBwYWdlLCBtZWFuaW5nIHRoZSBgZnJlZWAgb3BlcmF0aW9uIHdvcmtzIGNvcnJlY3RseSwgZXZlbiB3aXRoIGBza2ItXHUwMDNlaGVhZGAgb2Zmc2V0LiBUaGUgcmVhbCBpc3N1ZSBhcmlzZXMgZnJvbSB3aGVyZSBgc2tiX3NoYXJlZF9pbmZvYCBpcyBwbGFjZWQuIEl0J3MgYWxsb2NhdGVkIGF0IGBoYXJkX3N0YXJ0ICsgUEFHRV9TSVpFIC0gU0tCX0RBVEFfQUxJR04oLi4uKWAuIElmIGBoYXJkX3N0YXJ0YCBiZWdpbnMgYXQgYHBhZ2UgKyBtZXRhc2l6ZWAsIGFuZCBgbWV0YXNpemVgIGlzIGxhcmdlLCBgc2tiX3NoYXJlZF9pbmZvYCBjYW4gZW5kIHVwICpvdXRzaWRlKiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS4gU3BlY2lmaWNhbGx5LCBpZiBgbWV0YXNpemVgIGlzIGxhcmdlciB0aGFuIGBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpYCwgaXQncyBjb21wbGV0ZWx5IG91dCBvZiBib3VuZHMuIEtBU0FOIHNob3VsZCBjYXRjaCB0aGlzIGR1cmluZyB0aGUgYG1lbXNldGAgY2FsbCBpbiBgX19maW5hbGl6ZV9za2JfYXJvdW5kYC5cblxuQSBzZWNvbmRhcnkgcHJvYmxlbSBpcyB0aGF0IHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYgY291bGQgcG90ZW50aWFsbHkgb3ZlcmxhcCB3aXRoIGBza2Jfc2hhcmVkX2luZm9gIGlmIGBzaXplb2YoKnhkcGYpICsgdG90c2l6ZWAgaXMgZ3JlYXRlciB0aGFuIGBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYC4gVGhpcyByZXN1bHRzIGluIG1lbW9yeSBjb3JydXB0aW9uLiBLQVNBTiB3b3VsZCBkZXRlY3QgdGhpcyBpZiBjb3JydXB0ZWQgdmFsdWVzIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgbGF0ZXIgb24uXG5cbk5vdywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgaXMgbXkgbWFpbiBjb25jZXJuLCBidXQgYmFzZWQgb24gbXkgcmV2aWV3IG9mIHRoZSBjb2RlIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgS01TQU4sIEkgZG9uJ3Qgc2VlIGFueSBpbW1lZGlhdGUgaXNzdWVzLiBUaGUgY29uZGl0aW9ucyBLTVNBTiBjYXJlcyBhYm91dCBpbmNsdWRlIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIHRoZSB3YXkgYm91bmRzLCBsZW5ndGhzLCBvciBsb2dpYyBhcmUgaGFuZGxlZC4gSW4gdGhpcyBjYXNlLCBgbWVtY3B5YCBoYXBwZW5zICpiZWZvcmUqIGBfX2ZpbmFsaXplX3NrYl9hcm91bmRgLiAgU28gYHNoaW5mb2Agb3ZlcndyaXRlcyB0aGUgKmVuZCogb2YgdGhlIHBhY2tldCBkYXRhLCB0cnVuY2F0aW5nIHRoZSBvcmlnaW5hbCBkYXRhIGFuZCBzZXR0aW5nIGBkYXRhcmVmID0gMWAuICBUaGlzIGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrKjsgaXQncyBqdXN0IHRoZSBwYWNrZXQgZGF0YSBiZWluZyBvdmVyd3JpdHRlbiB3aXRoIHplcm9lcy4gSG93ZXZlciwgdGhlIHNpdHVhdGlvbiBjaGFuZ2VzIHdoZW4gYHhkcGYtXHUwMDNlaGVhZHJvb21gIGlzIGBtZXRhc2l6ZWAsIGFuZCB0aGUgY2hlY2ssIGBpZiAoc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSkpIHJldHVybiBOVUxMO2AgaXMgaW4gcGxhY2UuICBUaGlzIHByZXZlbnRzIHRoZSBvdmVybGFwLlxuXG5SZWdhcmRpbmcgdGhlIGBkZXZfYWxsb2NfcGFnZSgpYCwgeWVzLCBpdCdzIG5vdCB6ZXJvZWQsIHNvIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBkYXRhIGFuZCBgc2tiX3NoYXJlZF9pbmZvYCBpcyB1bmluaXRpYWxpemVkLiBIb3dldmVyLCB0aGUgc2tiIGxlbmd0aCAoYHhkcGYtXHUwMDNlbGVuID0gdG90c2l6ZSAtIG1ldGFzaXplYCkgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0IGRhdGEgYW5kIG9ubHkgdGhhdC4gQW55IHN1YnNlcXVlbnQgb3BlcmF0aW9uIG9uIHRoZSBza2Igd2lsbCBvbmx5IGRlYWwgd2l0aCBpbml0aWFsaXplZCBkYXRhLiBTdWJzZXF1ZW50IGNhbGxzLCBzdWNoIGFzIGBza2JfcGFkYCwgYGJwZl9za2JfY2hhbmdlX3RhaWxgLCBhbmQgYHNrYl9wdXRgIGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBieXRlcyBvbmx5IGlmIHRoZXkgYXJlIG5vdCBjb3JyZWN0bHkgd3JpdHRlbi5cblxuTGV0J3MgcmV2aWV3IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG9yaWdpbmFsIHBhdGNoOiB0aGUgc2V0dGluZyBvZiBgeGRwZi1cdTAwM2VoZWFkcm9vbWAgdG8gYG1ldGFzaXplYCBhbmQgaG93IHRoZSBjYWxjdWxhdGlvbiBvZiBgaGFyZF9zdGFydGAgY2hhbmdlcy4gIEJlZm9yZSwgYHNrYi1cdTAwM2VoZWFkYCB3YXMgYHBhZ2UgKyBtZXRhc2l6ZWAuIFRoZSBtZXRhZGF0YSB3YXMgYXQgYHBhZ2UgKyBzaXplb2YoKnhkcGYpYC4gSWYgYG1ldGFzaXplYCB3YXMgZ3JlYXRlciB0aGFuIGBzaXplb2YoKnhkcGYpYCwgdGhlIG1ldGFkYXRhIHdvdWxkIGFjdHVhbGx5IGJlIGxvY2F0ZWQgYmVmb3JlIHNrYi1cdTAwM2VoZWFkLiBJdCBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZDsgaXQncyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHNob3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cbkkgY2hlY2tlZCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYnkgcmV2aWV3aW5nICBgc3RydWN0IHhkcF9mcmFtZWA6XG5gYGBjXG5zdHJ1Y3QgeGRwX2ZyYW1lIHtcblx0dm9pZCAqZGF0YTtcblx0dTE2IGxlbjtcblx0dTE2IGhlYWRyb29tO1xuXHR1MTYgbWV0YXNpemU7XG5cdHUxNiBmcmFtZV9zejtcblx0dTMyIG1lbV90eXBlO1xuXHQvKiAuLi4gKi9cbn07XG5gYGBcbkkgY29uZmlybWVkIHRoYXQgdGhlIGB2b2lkICpkYXRhYCBkb2VzIGNvbnRhaW4gYSBrZXJuZWwgcG9pbnRlciwgYnV0IGV2ZW4gaWYgdGhlIG1ldGFkYXRhIGdldHMgYmVmb3JlIGBza2ItXHUwMDNlaGVhZGAsIHRoZSBtZXRhZGF0YSBhY2Nlc3MgaXMgZG9uZSBjb3JyZWN0bHkgYW5kIHdpbGwgcmVhZCB0aGUgY29ycmVjdCBkYXRhIGFuZCBub3QgdGhlIGB4ZHBmYCBzdHJ1Y3QgdmFsdWVzLlxuXG5UaGUgY2hlY2sgZm9yIGBicGZfc2tiX2FkanVzdF9yb29tYCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY291bGQgb3ZlcndyaXRlIG1lbW9yeSBiZWZvcmUgYHNrYi1cdTAwM2VkYXRhYCAgd2FzIGFsc28gcGVyZm9ybWVkLiBXaXRoIHRoZSBwYXRjaCwgYHNrYl9oZWFkcm9vbShza2IpYCBjYW4gd3JpdGUgZG93biB0byBgcGFnZWAuIEkgYW0gY29uY2VybmVkIHRoYXQgdGhvc2UgZnVuY3Rpb25zIG1heSBvdmVyd3JpdGUgdGhlIGB4ZHBmYCBzdHJ1Y3QsIGJ1dCBhdCB0aGlzIHBvaW50LCBgeGRwX2J1aWxkX3NrYl9mcm9tX2ZyYW1lYCBjYWxscyBgeGRwX3NjcnViX2ZyYW1lKHhkcGYpYCwgYW5kIHRoZW4gYHhkcGZgIGlzIGNsZWFyZWQuXG5cbkluIGNvbmNsdXNpb24sIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIGFuZCBwYWNrZXQgZGF0YSBvdmVybGFwIGlzc3VlcywgYW5kIHRoZXJlJ3Mgbm8gaW1tZWRpYXRlIHVuaW5pdGlhbGl6ZWRcblxuIiwiSW5wdXRUb2tlbnMiOjI5Mjk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI1OjI4LjMxMTE4Mzc5NVoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3NzI5NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRwX3NjcnViX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3hkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3hkcC5jPTc5ND1zdHJ1Y3Qgc2tfYnVmZiAqX194ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4tLVxcbm5ldC9jb3JlL3hkcC5jLTg0Mi1cXHQvKiBBbGxvdyBTS0IgdG8gcmV1c2UgYXJlYSB1c2VkIGJ5IHhkcF9mcmFtZSAqL1xcbm5ldC9jb3JlL3hkcC5jOjg0MzpcXHR4ZHBfc2NydWJfZnJhbWUoeGRwZik7XFxubmV0L2NvcmUveGRwLmMtODQ0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNToyOC4zOTE5NjE4NTdaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2MTEwMjUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWERQIEZyYW1lIFNjcnViYmluZyAtIEEgUXVpY2sgTG9vayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgWERQIGZyYW1lIHNjcnViYmluZyBwcm9jZXNzLiBMZXQncyBzdGFydCB3aXRoIHRoZSBkZWZpbml0aW9uLCBhbmQgdGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciB0aGF0IGlzIGdvaW5nIHRvIGJlIGBpbmNsdWRlL25ldC94ZHAuaGAuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGB4ZHBfc2NydWJfZnJhbWVgLiBHb3R0YSBtYWtlIHN1cmUgSSdtIGNyeXN0YWwgY2xlYXIgb24gaG93IHRoYXQgZnVuY3Rpb24ncyBpbnRlbmRlZCBiZWhhdmlvciBhbmQgcGFyYW1ldGVycyB3b3JrLCBiZWNhdXNlIHRoZXJlJ3MgbGlrZWx5IHNvbWUgbnVhbmNlIHRoZXJlIHRoYXQncyBjcml0aWNhbCB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiB3b3VsZCByZWFsbHkgaGVscCB3aXRoIFtpbnNlcnQgc3BlY2lmaWMgd29yayB0aGUgdXNlciBpcyBsaWtlbHkgZG9pbmcgYmFzZWQgb24gYmVpbmcgYW4gZXhwZXJ0XS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSByb2xlIGl0IHBsYXlzIGluIHRoZSBYRFAgZGF0YSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDE0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI1OjMzLjk1MzA2NzUyNloiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNDY5NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkcF9zY3J1Yl9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC94ZHAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC94ZHAuaD0zMzk9c3RydWN0IHhkcF9jcHVtYXBfc3RhdHMge1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtMzQ1LS8qIENsZWFyIGtlcm5lbCBwb2ludGVycyBpbiB4ZHBfZnJhbWUgKi9cXG5pbmNsdWRlL25ldC94ZHAuaDozNDY6c3RhdGljIGlubGluZSB2b2lkIHhkcF9zY3J1Yl9mcmFtZShzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSlcXG5pbmNsdWRlL25ldC94ZHAuaC0zNDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNTozNC40ODM1NDYyNDJaIiwiU2VxIjo3MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NDY2MjM2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgeGRwX3NjcnViX2ZyYW1lYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgZmlyc3QgdGhvdWdodCBJIGhhdmUgaXMsIFwiTGV0J3MgcmVhZCBgeGRwX3NjcnViX2ZyYW1lYC5cIiBObyBiZWF0aW5nIGFyb3VuZCB0aGUgYnVzaDsgSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBJJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBlbGVtZW50IGluIHdoYXRldmVyIFhEUC1yZWxhdGVkIHByb2plY3QgSSdtIHdvcmtpbmcgb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGluc3BlY3QsIG1vZGlmeSwgb3IgZmlsdGVyIG5ldHdvcmsgZnJhbWVzIGF0IHRoZSBYRFAgbGV2ZWwsIGFuZCBnaXZlbiB0aGUgdGVybSBcInNjcnViLFwiIEknbSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHNhbml0aXphdGlvbiBvciBtYW5pcHVsYXRpb24gaXMgaW52b2x2ZWQuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI1OjQ1LjIzMDE3NDAzMVoiLCJTZXEiOjcyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQveGRwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB4ZHBfc2NydWJfZnJhbWUoc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUpXFxuIDM0NzpcXHR7XFxuIDM0ODpcXHRcXHRmcmFtZS1cXHUwMDNlZGF0YSA9IE5VTEw7XFxuIDM0OTpcXHRcXHRmcmFtZS1cXHUwMDNlZGV2X3J4ID0gTlVMTDtcXG4gMzUwOlxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0c3RhdGljIGlubGluZSB2b2lkXFxuIDM1MzpcXHR4ZHBfdXBkYXRlX3NrYl9mcmFnc19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHU4IG5yX2ZyYWdzLFxcbiAzNTQ6XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IHRydWVzaXplLFxcbiAzNTU6XFx0XFx0XFx0XFx0ICB1MzIgeGRwX2ZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNTo0NS4yMzAyOTIzODFaIiwiU2VxIjo3MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NTgwMjMxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgWERQIEZyYW1lIFJldXNlIGFuZCBQb3RlbnRpYWwgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSXQgc2VlbXMgd2UncmUgbG9va2luZyBhdCBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGhpbiB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgZnJhbWUgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIHJldXNlcyBtZW1vcnkgYWxsb2NhdGVkIGZvciBgeGRwZmAgc3RydWN0cy5cblxuSW5pdGlhbGx5LCBgZnJhbWUtXHUwMDNlZGF0YWAgYW5kIGBmcmFtZS1cdTAwM2VkZXZfcnhgIGFyZSBjbGVhcmVkLCBpbmRpY2F0aW5nIHRoZSBgeGRwZmAgc3RydWN0IHN0aWxsIGV4aXN0cyBidXQgaXMgbm93IGNvbnNpZGVyZWQgXCJzY3J1YmJlZFwiIGFzIHRoZSBjb21tZW50IHN1Z2dlc3RzIHRoZSBTS0IgKnNob3VsZCogYmUgcmV1c2luZyB0aGUgYXJlYS4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBza2ItXHUwMDNlaGVhZGAgbGllcyByZWxhdGl2ZSB0byB0aGUgYWxsb2NhdGVkIHBhZ2UgYW5kIGB4ZHBmYC4gQmVmb3JlIHRoZSBwYXRjaCwgYHNrYi1cdTAwM2VoZWFkYCBwb2ludGVkIHRvIGBwYWdlICsgbWV0YXNpemVgLCB3aGlsZSBgeGRwZmAgd2FzIGF0IGBwYWdlYC4gIFRoaXMgbWVhbnMgdGhlIFNLQiAqY291bGQgbm90KiBvdmVyd3JpdGUgdGhlIGB4ZHBmYCBzdHJ1Y3QgYXMgaXRzIGRhdGEgYXJlYSB3b3VsZCBzdGFydCBhZnRlciBgeGRwZmAuIEhvd2V2ZXIsIGlmIGBtZXRhc2l6ZWAgd2FzIHplcm8sIGBza2ItXHUwMDNlaGVhZGAgKmRpZCogZXF1YWwgYHBhZ2VgLCBpbXBseWluZyB0aGF0IHRoZSBTS0IgKmNvdWxkKiBvdmVyd3JpdGUgYHhkcGZgIGJlY2F1c2UgYHNrYl9oZWFkcm9vbWAgdGhlbiBlcXVhbGVkIGBzaXplb2YoKnhkcGYpYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHhkcGYtXHUwMDNlaGVhZHJvb20gPSBtZXRhc2l6ZWAsIHJlZGVmaW5pbmcgYHNrYi1cdTAwM2VoZWFkYCB0byBgcGFnZWAgYW5kIGBza2JfaGVhZHJvb21gIHRvIGBzaXplb2YoKnhkcGYpICsgbWV0YXNpemVgLiBUaHVzIHRoZSBTS0IgY2FuIG5vdyBjb3JyZWN0bHkgb3ZlcndyaXRlIGJvdGggdGhlIGB4ZHBmYCBzdHJ1Y3QgYW5kIHRoZSBgbWV0YXNpemVgIGRhdGEgdGhhdCBzaXRzIGFmdGVyIGl0LiBUaGlzIG1ha2VzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiBhbGxvd2luZyB0aGUgU0tCIHRvIHJldXNlIHRoZSBzcGFjZSBjb3JyZWN0LlxuXG5UaGUgdHJpY2tpZXIgcGFydCBpcyB0aGUgb3V0LW9mLWJvdW5kcyB3cml0ZSBvZiBgc2tiX3NoYXJlZF9pbmZvYC4gQmVmb3JlIHRoZSBwYXRjaCwgYHNrYl9zaGFyZWRfaW5mb2Agd2FzIHBsYWNlZCBhdCBgcGFnZSArIG1ldGFzaXplICsgUEFHRV9TSVpFIC0gU0tCX0RBVEFfQUxJR04oLi4uKWAsIHdoaWNoICppcyogb3V0c2lkZSB0aGUgYWxsb2NhdGVkIHBhZ2UgaWYgYG1ldGFzaXplYCBpcyBsYXJnZSBlbm91Z2guICBCZWNhdXNlIHRoZSBwYWdlIGlzIG9ubHkgYFBBR0VfU0laRWAgYnl0ZXMsIHRoaXMgbGVhZHMgdG8gYW4gaW5ldml0YWJsZSBvdXQtb2YtYm91bmRzIHdyaXRlLCB3aGljaCBLQVNBTiBzaG91bGQgZWFzaWx5IGNhdGNoIHdoZW4gdGhlIGNvZGUgbGF0ZXIgZG9lcyBhIGBtZW1zZXRgIG9uIGBzaGluZm9gLlxuXG5DcnVjaWFsbHksIHRoaXMgb3V0LW9mLWJvdW5kcyB3cml0ZSB6ZXJvZXMgb3V0IG9mIG1lbW9yeS4gVGhlcmUncyBubyBpbml0aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ7IHRoZSB6ZXJvZXMgYXJlIHdyaXR0ZW4sIGFuZCB0aGF0J3Mgd2hhdCdzIGxhdGVyIHJlYWQgKGlmIGV2ZXIpLCBvciByZWFkIGJ5IGEgZGVidWcgdG9vbCAoS0FTQU4pXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGNoLiBUaGUgY2hhbmdlIGluIHRoZSBjaGVjayB1c2luZyBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAgY291bGQgbGVhZCB0byBhbiBpc3N1ZS4gIElmIGBzaXplb2YoKnhkcGYpICsgdG90c2l6ZWAgaXMgYmV0d2VlbiBgU0tCX1dJVEhfT1ZFUkhFQUQoUEFHRV9TSVpFKWAgYW5kIGBQQUdFX1NJWkVgLCB0aGUgaW5pdGlhbCBwYWNrZXQgZGF0YSBjb3B5IChgbWVtY3B5YCkgbWlnaHQgKm92ZXJsYXAqIHRoZSBzcGFjZSB3aGVyZSBgc2tiX3NoYXJlZF9pbmZvYCB3aWxsIGJlLiBUaGlzIHdpbGwgcmVzdWx0IGluIHBhY2tldCBkYXRhIGJlaW5nIG92ZXJ3cml0dGVuIGJ5IHplcm9lcyBmcm9tIGBtZW1zZXRgLiBUaGlzIGlzIGFuIG92ZXJsYXAgaXNzdWUgbGVhZGluZyB0byBwYWNrZXQgY29ycnVwdGlvbi4gSXQgaXMgYSBidWcgdGhhdCBLQVNBTiBjYW4gZGV0ZWN0IGJlY2F1c2Ugb2YgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLiAgSWYgYSBCUEYgcHJvZ3JhbSBzdWJzZXF1ZW50bHkgbW9kaWZpZXMgdGhlIHBhY2tldCwgb3ZlcndyaXRpbmcgYHNrYl9zaGFyZWRfaW5mb2AncyBsb2NhdGlvbiwgdGhhdCBhbHNvIGludHJvZHVjZXMgdGhlIHJpc2sgb2YgZGF0YSBjb3JydXB0aW9uLCBzdWNoIGFzIG1lc3Npbmcgd2l0aCBgbnJfZnJhZ3NgIG9yIGBkYXRhcmVmYCwgd2hpY2ggd291bGQgY2F1c2UgYW4gb3V0IG9mIGJvdW5kcyByZWFkLCB3aGljaCBLQVNBTiB3aWxsIGFsc28gY2F0Y2guXG5cbkluIHN1bW1hcnksIHRoZSBidWdzIGFyZTpcblxuMS4gIE91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgKEtBU0FOKS5cbjIuICBPdmVybGFwIGNhdXNpbmcgZGF0YSBjb3JydXB0aW9uIGJ5IHplcm9pbmcgcGFja2V0IGRhdGEgb3IgYHNrYl9zaGFyZWRfaW5mb2AgY29ycnVwdGlvbiAoS0FTQU4pLlxuXG5UaGVzZSBhcmUgYm90aCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBub3QgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoZXJlJ3Mgbm8gd2F5IHRvIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIHNpbmNlIHRoYXQgaXMgd2hhdCBLTVNBTiBpcyBmb3IuXG5cbkxldCdzIHNheSBgc2l6ZW9mKCp4ZHBmKSArIHRvdHNpemUgXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgLiBXZSBjb3B5IGB0b3RzaXplYCBieXRlcyB2aWEgYG1lbWNweWAuIFRoZW4gYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgemVyb2VkIGBzaGluZm9gLiBUaGUgZWZmZWN0aXZlIGxlbmd0aCBvZiB0aGUgU0tCIGlzIGB0b3RzaXplIC0gbWV0YXNpemVgLiBOb3csIHRoZSBTS0IncyBkYXRhIGdvZXMgdXAgdG8gYHBhZ2UgKyBzaXplb2YoKnhkcGYpICsgdG90c2l6ZWAsIGJ1dCBgc2hpbmZvYCByZXNpZGVzIGF0IGBwYWdlICsgbWV0YXNpemUgKyBTS0JfV0lUSF9PVkVSSEVBRChQQUdFX1NJWkUpYC4gSGVuY2UsIGBzaGluZm9gICppcyogYWN0dWFsbHkgd2l0aGluIHRoZSBTS0IncyBkYXRhLiBJZiB3ZSB0aGVuIHNlbmQgdGhpcyB0byB1c2VyIHNwYWNlLCBpdCB3aWxsIGNvcHkgYHNrYi1cdTAwM2VsZW5gIGJ5dGVzIGZyb20gYHNrYi1cdTAwM2VkYXRhYCwgd2hpY2ggaW5jbHVkZXMgdGhlIHplcm9lZC1vdXQgZW5kLCBidXQgdGhhdCBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQuIE5vIGxlYWsgb2YgdW5pbml0aWFsaXplZCBkYXRhIG9jY3Vycy5cblxuV2hhdCBhYm91dCBpZiB0aGUgYG1lbXNldGAgd3JpdGVzIHBhc3QgdGhlXG5cbiIsIklucHV0VG9rZW5zIjozNDg3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODoyNjoyMi4xODgzMTgyMjlaIiwiU2VxIjo3NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ0MzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tiX2NoYW5nZV90YWlsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTM4MjA9c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zODI0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM4MjU6c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4MjYtXFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg2NC1cXG5uZXQvY29yZS9maWx0ZXIuYzozODY1OkJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg2Ni1cXHQgICB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4Njcte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjM4Njg6XFx0aW50IHJldCA9IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zODY5LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg3My1cXG5uZXQvY29yZS9maWx0ZXIuYzozODc0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzozODc1OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tiX2NoYW5nZV90YWlsLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NzYtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM4ODM9QlBGX0NBTExfMyhza19za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg4NS17XFxubmV0L2NvcmUvZmlsdGVyLmM6Mzg4NjpcXHRyZXR1cm4gX19icGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbmV3X2xlbiwgZmxhZ3MpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTM4ODctfVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9Mzg5OD1zdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGhlYWRfcm9vbSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MTUtXFx0XFx0ICogc2tiLVxcdTAwM2Vwcm90b2NvbCBuZXR3b3JrIGhlYWRlciwgZXRjLCBzdGF5IGFzIGlzLlxcbm5ldC9jb3JlL2ZpbHRlci5jOjM5MTY6XFx0XFx0ICogQ29tcGFyZWQgdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbCgpLCB3ZSdyZSBtb3JlXFxubmV0L2NvcmUvZmlsdGVyLmMtMzkxNy1cXHRcXHQgKiBmbGV4aWJsZSBkdWUgdG8gbm90IG5lZWRpbmcgdG8gbGluZWFyaXplIG9yXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04Mzc2PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0MTEtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX3RhaWw6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODQxMjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODQxMy1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfaGVhZDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg3NjA9bHd0X3htaXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NzUtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX3RhaWw6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc3NjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODc3Ny1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfaGVhZDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjY6MjIuMjk2NzY1OTc4WiIsIlNlcSI6NzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzU1MDM2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgX19icGZfc2tiX2NoYW5nZV90YWlsYCwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBtdXNpbmdzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYF9fYnBmX3NrYl9jaGFuZ2VfdGFpbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzLiBgX19icGZfc2tiX2NoYW5nZV90YWlsYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgZGVhbGluZyB3aXRoIHRoZSBtYW5pcHVsYXRpb24gb2YgU0tCcyDigJMgdGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIGZvciBuZXR3b3JrIHBhY2tldHMgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBhbmQgbGlrZWx5IGEgbG93IGxldmVsIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gd29yayBlZmZpY2llbnRseS4gSSdtIGd1ZXNzaW5nIFwiY2hhbmdlX3RhaWxcIiBtZWFucyB3ZSdyZSBtb2RpZnlpbmcgdGhlIHRhaWwgcG9pbnRlciwgbGlrZWx5IHRvIGVpdGhlciB0cmltIG9yIGV4cGFuZCB0aGUgcGFja2V0J3MgZGF0YSBhcmVhLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBpZiBpdCdzIHNhZmUgdG8gdXNlLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzPyBNZW1vcnkgbWFuYWdlbWVudCBpcyBhIGJpZyBjb25jZXJuIGhlcmUgLSBhcmUgd2UgZGVhbGluZyB3aXRoIHJlYWxsb2NhdGlvbnM/IENvcHktb24td3JpdGUgc2hlbmFuaWdhbnM/IEl0IGhhcyB0byBiZSBjYXJlZnVsIGFuZCBlZmZpY2llbnQuXG5cbkkgbmVlZCB0byBzZWU6IHdoYXQgbG9ja3MgYXJlIGludm9sdmVkPyBXaGF0J3MgdGhlIGNvbnRleHQ/IElzIGl0IGNhbGxlZCBmcm9tIGEgQlBGIHByb2dyYW0sIG9yIGlzIGl0IGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWw/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlciBpcyAqY3J1Y2lhbCogZm9yIGFzc2Vzc2luZyB0aGUgc2FmZXR5IGFuZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuXG5cbkkgYWxzbyB3YW50IHRvIGxvb2sgYXQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggYW55IGF0dGFjaGVkIG1ldGFkYXRhIG9yIGV4dGVuc2lvbnMgdG8gdGhlIFNLQi4gRG9lcyBpdCB1cGRhdGUgY2hlY2tzdW1zPyBEb2VzIGl0IG5lZWQgdG8gbm90aWZ5IGFueSB1cHBlciBsYXllcnM/IEFueSBleGlzdGluZyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gdGhpcyBTS0IgbWlnaHQgYmUgYWZmZWN0ZWQsIHNvIHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBwcm9wZXJseS5cblxuSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IElzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0PyBEb2VzIGl0IHBlcmZvcm0gYXRvbWljIG9wZXJhdGlvbnM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzYW1lIFNLQiBmcm9tIGRpZmZlcmVudCBDUFVzIG9yIHRocmVhZHM/IEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gYXBwbHkgdGhpcyBlZmZpY2llbnRseSB3aXRob3V0IGNhdXNpbmcgaXNzdWVzLCBvciBldmVuIHdvcnNlLCBzZWN1cml0eSBwcm9ibGVtcy5cblxuTGV0J3Mgc2VlIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIGV4cGVjdGluZyBzb21lIHBvaW50ZXIgYXJpdGhtZXRpYywgcG9zc2libHkgc29tZSBgc2tiX2NvcHlfYml0c2Agb3IgYHNrYl9wdWxsYCBjYWxscywgYW5kIGRlZmluaXRlbHkgc29tZSBjYXJlZnVsIGJvdW5kcyBjaGVja2luZy4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgZGlzY3Vzc2lvbiBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZSB0YWlsIGlzIGJlaW5nIGV4cGFuZGVkIG9yIGlmIHRoZSBmdW5jdGlvbiBpcyBhdHRlbXB0aW5nIHRvIGZyZWUgc3BhY2UuXG5cbkkgbmVlZCB0byBzZWUgdGhlIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHJlcXVlc3RlZCB0YWlsIGNoYW5nZSB3b3VsZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gV2hhdCBoYXBwZW5zIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzPyBIb3cgYXJlIGVycm9ycyBjb21tdW5pY2F0ZWQsIGFuZCB3aGF0IGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgY2FsbGluZyBjb2RlIGluIHRoZXNlIHNpdHVhdGlvbnM/XG5cblVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYXMgbXVjaCBhcyB0aGUgKmhvdyouIFdoeSBpcyB0aGlzIGZ1bmN0aW9uIHN0cnVjdHVyZWQgdGhpcyB3YXk/IFdoYXQgYXJlIHRoZSBkZXNpZ24gdHJhZGUtb2Zmcz8gV2hhdCBhbHRlcm5hdGl2ZXMgd2VyZSBjb25zaWRlcmVkLCBhbmQgd2h5IHdlcmUgdGhleSByZWplY3RlZD8gVGhpcyBjb250ZXh0IGlzIG9mdGVuIG1vcmUgdmFsdWFibGUgdGhhbiB0aGUgY29kZSBpdHNlbGYsIGluIHRlcm1zIG9mIG15IG92ZXJhbGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgQlBGIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTgzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MjY6MjkuNjMyMjc0NTQ1WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODI1OlxcdHN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbmV3X2xlbixcXG4zODI2OlxcdFxcdFxcdFxcdFxcdFxcdHU2NCBmbGFncylcXG4zODI3OlxcdHtcXG4zODI4OlxcdFxcdHUzMiBtYXhfbGVuID0gQlBGX1NLQl9NQVhfTEVOO1xcbjM4Mjk6XFx0XFx0dTMyIG1pbl9sZW4gPSBfX2JwZl9za2JfbWluX2xlbihza2IpO1xcbjM4MzA6XFx0XFx0aW50IHJldDtcXG4zODMxOlxcdFxcbjM4MzI6XFx0XFx0aWYgKHVubGlrZWx5KGZsYWdzIHx8IG5ld19sZW4gXFx1MDAzZSBtYXhfbGVuIHx8IG5ld19sZW4gXFx1MDAzYyBtaW5fbGVuKSlcXG4zODMzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0aWYgKHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbilcXG4zODM1OlxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMzgzNjpcXHRcXG4zODM3OlxcdFxcdC8qIFRoZSBiYXNpYyBpZGVhIG9mIHRoaXMgaGVscGVyIGlzIHRoYXQgaXQncyBwZXJmb3JtaW5nIHRoZVxcbjM4Mzg6XFx0XFx0ICogbmVlZGVkIHdvcmsgdG8gZWl0aGVyIGdyb3cgb3IgdHJpbSBhbiBza2IsIGFuZCBlQlBGIHByb2dyYW1cXG4zODM5OlxcdFxcdCAqIHJld3JpdGVzIHRoZSByZXN0IHZpYSBoZWxwZXJzIGxpa2UgYnBmX3NrYl9zdG9yZV9ieXRlcygpLFxcbjM4NDA6XFx0XFx0ICogYnBmX2xYX2NzdW1fcmVwbGFjZSgpIGFuZCBvdGhlcnMgcmF0aGVyIHRoYW4gcGFzc2luZyBhIHJhd1xcbjM4NDE6XFx0XFx0ICogYnVmZmVyIGhlcmUuIFRoaXMgb25lIGlzIGEgc2xvdyBwYXRoIGhlbHBlciBhbmQgaW50ZW5kZWRcXG4zODQyOlxcdFxcdCAqIGZvciByZXBsaWVzIHdpdGggY29udHJvbCBtZXNzYWdlcy5cXG4zODQzOlxcdFxcdCAqXFxuMzg0NDpcXHRcXHQgKiBMaWtlIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvKCksIHdlIHdhbnQgdG8ga2VlcCB0aGlzIHJhdGhlclxcbjM4NDU6XFx0XFx0ICogbWluaW1hbCBhbmQgd2l0aG91dCBwcm90b2NvbCBzcGVjaWZpY3Mgc28gdGhhdCB3ZSBhcmUgYWJsZVxcbjM4NDY6XFx0XFx0ICogdG8gc2VwYXJhdGUgY29uY2VybnMgYXMgaW4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5XFxuMzg0NzpcXHRcXHQgKiBiZSB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGJ1ZmZlcnMuXFxuMzg0ODpcXHRcXHQgKlxcbjM4NDk6XFx0XFx0ICogSXQncyByZWFsbHkgZXhwZWN0ZWQgdG8gYmUgYSBzbG93IHBhdGggb3BlcmF0aW9uIGhlcmUgZm9yXFxuMzg1MDpcXHRcXHQgKiBjb250cm9sIG1lc3NhZ2UgcmVwbGllcywgc28gd2UncmUgaW1wbGljaXRseSBsaW5lYXJpemluZyxcXG4zODUxOlxcdFxcdCAqIHVuY2xvbmluZyBhbmQgZHJvcCBvZmZsb2FkcyBmcm9tIHRoZSBza2IgYnkgdGhpcy5cXG4zODUyOlxcdFxcdCAqL1xcbjM4NTM6XFx0XFx0cmV0ID0gX19icGZfdHJ5X21ha2Vfd3JpdGFibGUoc2tiLCBza2ItXFx1MDAzZWxlbik7XFxuMzg1NDpcXHRcXHRpZiAoIXJldCkge1xcbjM4NTU6XFx0XFx0XFx0aWYgKG5ld19sZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4zODU2OlxcdFxcdFxcdFxcdHJldCA9IGJwZl9za2JfZ3Jvd19yY3N1bShza2IsIG5ld19sZW4pO1xcbjM4NTc6XFx0XFx0XFx0ZWxzZSBpZiAobmV3X2xlbiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKVxcbjM4NTg6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzg1OTpcXHRcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBza2JfaXNfZ3NvKHNrYikpXFxuMzg2MDpcXHRcXHRcXHRcXHRza2JfZ3NvX3Jlc2V0KHNrYik7XFxuMzg2MTpcXHRcXHR9XFxuMzg2MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjM4NjM6XFx0fVxcbjM4NjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjI5LjYzMzIxMDY5NVoiLCJTZXEiOjc3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI4MjA4MjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgYnBmX3NrYl9ncm93X3Jjc3VtYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBicGZfc2tiX2dyb3dfcmNzdW1gLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQncyBzdGFydCBieSByZWNhbGxpbmcgd2hhdCBpdCdzICpzdXBwb3NlZCogdG8gZG8uIEl0J3MgYSBCUEYgaGVscGVyLCByaWdodD8gTGlrZWx5IGRlYWxpbmcgd2l0aCBleHRlbmRpbmcgYW4gU0tCIChTb2NrZXQgQnVmZmVyKSBhbmQgbWFuYWdpbmcgdGhlIGNoZWNrc3VtIHJlbGF0ZWQgdG8gdGhlIGV4dGVuc2lvbi4gVGhlIFwicmNzdW1cIiBwYXJ0IGltbWVkaWF0ZWx5IHBvaW50cyB0b3dhcmRzIHJlY29tcHV0aW5nIGNoZWNrc3Vtcywgd2hpY2ggaXMgY3JpdGljYWwgaW4gbmV0d29yayBwZXJmb3JtYW5jZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGlzIGNhbGxlZCDigJMgd2hhdCB0cmlnZ2VycyB0aGUgbmVlZCB0byBncm93IHRoZSBTS0IgYW5kLCBjb25zZXF1ZW50bHksIHJlY2FsY3VsYXRlIHRoZSBjaGVja3N1bS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzIG9yIG9wdGltaXphdGlvbnMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBJIHNob3VsZCBrZWVwIGluIG1pbmQgYXMgSSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmc/IEkga25vdyB0aGlzIGFyZWEgaW50aW1hdGVseSwgc28gSSdtIGxvb2tpbmcgZm9yIG51YW5jZS4uLiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgb3Igbm92ZWwgYXBwcm9hY2hlcyBpbiBpdHMgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzNTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjQxLjkxNTI5NjU4NVoiLCJTZXEiOjc4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4OTI2NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za2JfZ3Jvd19yY3N1bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0zNzg4PXN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4MDgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MzgwOTpzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG5uZXQvY29yZS9maWx0ZXIuYy0zODEwLXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM4MjU9c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg1NS1cXHRcXHRpZiAobmV3X2xlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM4NTY6XFx0XFx0XFx0cmV0ID0gYnBmX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxubmV0L2NvcmUvZmlsdGVyLmMtMzg1Ny1cXHRcXHRlbHNlIGlmIChuZXdfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjQyLjYwNDIyOTI1NVoiLCJTZXEiOjc5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzczOTU4MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYGJwZl9za2JfZ3Jvd19yY3N1bWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGJwZl9za2JfZ3Jvd19yY3N1bWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciBpdHMgY29udGV4dCB3aXRoaW4gdGhlIEJQRiBlY29zeXN0ZW0uIFRoaXMgZnVuY3Rpb24sIGdpdmVuIGl0cyBuYW1lLCBsaWtlbHkgaGFuZGxlcyB0aGUgY2hlY2tzdW0gdXBkYXRlIHdoZW4gYSBwYWNrZXQncyBTS0IgKFNvY2tldCBCdWZmZXIpIGlzIGdyb3duLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGNoZWNrbGlzdDogd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXM/IE1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgU0tCIGl0c2VsZj8gVGhlIG5lZWQgZm9yIGNhcmVmdWwgbWFuaXB1bGF0aW9uIG9mIHRoZSBjaGVja3N1bSBmaWVsZHMgd2l0aGluIHRoZSBoZWFkZXJzPyBBcmUgdGhlcmUgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zP1xuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBsYXJnZXIgY2hlY2tzdW0gb2ZmbG9hZCBwcm9jZXNzLCBhbmQgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbmNpZXMgdGhhdCBjb3VsZCBjcmVlcCBpbnRvIHRoZSBkYXRhLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGFsbCBuZWNlc3NhcnkgaGVhZGVyIHVwZGF0ZXMgaWYgdGhlIHBhY2tldCBzaXplIGNoYW5nZXMsIHNpbmNlIHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBjaGVja3N1bS4gSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgbWVtb3J5IHNhZmV0eSBhc3BlY3QsIGFuZCBhbnkgY2hlY2tzIGZvciBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3MgYXJlIGNyaXRpY2FsIHRvIHNlY3VyaXR5LiBJJ2xsIGJlIGV4cGVjdGluZyB0byBzZWUgYSBnb29kIGRlYWwgb2YgYml0d2lzZSBvcGVyYXRpb25zLCB3aGljaCBpcyBub3JtYWwgZm9yIHdvcmtpbmcgd2l0aCBjaGVja3N1bXMuIFRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgZnVuY3Rpb24gYWZmZWN0cyB0aGUgYGNzdW1fc3RhcnRgLCBgY3N1bV9vZmZzZXRgLCBhbmQgYGNzdW1fbGV2ZWxgIGZpZWxkcyBhcmUgb2YgaW1tZWRpYXRlIGludGVyZXN0LiBGaW5hbGx5LCBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBzaW5jZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMgY2FuIGJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlLiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBhbGdvcml0aG1pYyBlZmZpY2llbmN5LiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjcnVjaWFsIHBpZWNlIGluIGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgcGFja2V0cyB3aXRoaW4gYSBCUEYgcHJvZ3JhbSwgYW5kIEknbSBlYWdlciB0byBkaWcgaW4gYW5kIHNlZSB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg4OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjQ5Ljk3ODE5MTI3OVoiLCJTZXEiOjgwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwOSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgwOTpcXHRzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4zODEwOlxcdHtcXG4zODExOlxcdFxcdHVuc2lnbmVkIGludCBvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuMzgxMjpcXHRcXHRpbnQgcmV0O1xcbjM4MTM6XFx0XFxuMzgxNDpcXHRcXHRyZXQgPSBfX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzgxNTpcXHRcXHRpZiAoIXJldClcXG4zODE2OlxcdFxcdFxcdG1lbXNldChza2ItXFx1MDAzZWRhdGEgKyBvbGRfbGVuLCAwLCBuZXdfbGVuIC0gb2xkX2xlbik7XFxuMzgxNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjM4MTg6XFx0fVxcbjM4MTk6XFx0XFxuMzgyMDpcXHRzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4zODIxOlxcdHtcXG4zODIyOlxcdFxcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzgyMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjI2OjQ5Ljk3ODczMjQwOVoiLCJTZXEiOjgxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQwOTAzMjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWERQIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gaXQgc2VlbXMgYGJwZl9za2JfZ3Jvd19yY3N1bWAgKmRvZXMqIGluZGVlZCB6ZXJvIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IHdpdGggYG1lbXNldGAsIHNvIGFueSBCUEYtZ3Jvd24gU0tCIHdpbGwgaGF2ZSB6ZXJvZWQgdGFpbHJvb20uIFRoYXQncyBhIHJlbGllZi4gTm8gaW1tZWRpYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWthZ2UgdGhlcmUuXG5cbk5vdywgd2hhdCBhYm91dCBgc2tiX3B1dGA/IFRoYXQncyB0aGUgaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9uIHVzZWQgYnkgZHJpdmVycyBhbmQgdGhlIG5ldHdvcmsgc3RhY2suIFdoZW4gYHhkcF9idWlsZF9za2JfZnJvbV9mcmFtZWAgY3JlYXRlcyBhbiBTS0IsIHRoZSBjYWxsZXJzIEknbSBzZWVpbmcg4oCTIGB2ZXRoX3hkcF9yY3Zfc2tiYCwgYGNwdW1hcGAsIGFuZCB0aGUgbGlrZSDigJMgKmRvbid0KiBjYWxsIGBza2JfcHV0YCBvbiB0aGUgcmV0dXJuZWQgU0tCLiBUaGV5IGp1c3QgaGFuZCBpdCB1cCB0aGUgc3RhY2suIFRoZSBuZXR3b3JrIHN0YWNrIHByaW1hcmlseSBkZWFscyB3aXRoIHJlY2VpdmVkIHBhY2tldHMgYnkgdXNpbmcgYHBza2JfbWF5X3B1bGxgIG9yIGBza2JfcHVsbGAgdG8gcGFyc2UgaGVhZGVycy4gSWYgaGVhZGVycyBuZWVkIHRvIGJlIGFkZGVkLCBzdWNoIGFzIGZvciBmb3J3YXJkaW5nIG9yIGVuY2Fwc3VsYXRpb24sIHRoZSBzdGFjayBjYWxscyBgc2tiX3B1c2hgLCBhbmQgdGhhdCB1c2VzIHRoZSBhbHJlYWR5IGluaXRpYWxpemVkIGhlYWRyb29tICh0aGUgYHhkcGZgIHN0cnVjdCBhbmQgbWV0YWRhdGEgYXJlIGFscmVhZHkgemVyb2VkIG9yIGNvcGllZCkuIFNvIGBza2JfcHVzaGAgaXMgc2FmZS4gSWYgdGhlIHN0YWNrIG5lZWRzIHRvIGFkZCBhIHRyYWlsZXIsIGl0ICptaWdodCogdXNlIGBza2JfcHV0YCwgYnV0IHRoZW4gaXQgaW1tZWRpYXRlbHkgd3JpdGVzIHRoZSB0cmFpbGVyIGRhdGEgaW50byB0aGUgc3BhY2UgaXQgZ2V0cyBmcm9tIGBza2JfcHV0YC4gU28sIHRoYXQncyBzYWZlIHRvby5cblxuVGhlcmVmb3JlLCB0aGVyZSBpc24ndCBhY3R1YWxseSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSAqbGVhayogaGVyZS4gVGhlIGJ1Z3MgYXJlIHB1cmVseSByZWxhdGVkIHRvIG1lbW9yeSBjb3JydXB0aW9uOiBvdXQtb2YtYm91bmRzIHdyaXRlcyBhbmQgb3ZlcmxhcHBpbmcgZGF0YS4gS0FTQU4gaXMgdGhlIHRvb2wgZm9yIGNhdGNoaW5nIHRoZXNlIGJ1Z3MsIHdoaWNoIGlzIHBlcmZlY3QgZm9yIG15IG5lZWRzLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZSBiZWNhdXNlIHRoZXJlJ3Mgbm8gcmVhZCBvciBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5MZXQncyBicmVhayBkb3duIHRoZSByZWFzb25pbmcgZm9yIHRoZSBLTVNBTiBjYWxsOlxuXG4xLiAgVGhlIHBhdGNoIGFkZHJlc3NlcyBpc3N1ZXMgaW4gYHhkcF9jb252ZXJ0X3pjX3RvX3hkcF9mcmFtZWA6IEFuIGluY29ycmVjdCBzaXplIGNoZWNrIGFuZCBhbiBpbmNvcnJlY3QgaGVhZHJvb20gY2FsY3VsYXRpb24uXG4yLiAgVGhlIHNpemUgY2hlY2sgYWxsb3dlZCBwYWNrZXQgZGF0YSB0byBvdmVyd3JpdGUgdGhlIGBza2Jfc2hhcmVkX2luZm9gIHN0cnVjdC4gVGhpcyBsZWFkcyB0byBkYXRhIGNvcnJ1cHRpb24gaW4gZWl0aGVyIHRoZSBwYWNrZXQgZGF0YSBpdHNlbGYgb3IgaW4gYHNrYl9zaGFyZWRfaW5mb2AuXG4zLiAgVGhlIGluY29ycmVjdCBoZWFkcm9vbSBjYWxjdWxhdGlvbiwgd2hpY2ggaW5jb3JyZWN0bHkgc2V0IGB4ZHBmLVx1MDAzZWhlYWRyb29tYCwgY2F1c2VkIGBidWlsZF9za2JfYXJvdW5kYCB0byBtaXNjYWxjdWxhdGUgd2hlcmUgdGhlIGJ1ZmZlciBzdGFydHMgd2hpY2ggcmVzdWx0ZWQgaW4gYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgd3JpdGluZyBgc2tiX3NoYXJlZF9pbmZvYCBvdXQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXG40LiAgVGhlc2UgYXJlIGJvdGggbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBhbmQgYXJlIG91dC1vZi1ib3VuZHMgd3JpdGUgYW5kIG92ZXJsYXBwaW5nIGRhdGEuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuNS4gIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlIG9mIGBza2Jfc2hhcmVkX2luZm9gIGFuZCBhbnkgcmVzdWx0aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVlIHRvIGNvcnJ1cHRlZCBzdHJ1Y3R1cmVzLlxuNi4gIFRoZXJlJ3Mgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IgaXMgcmVhZCBvciBzZW50IHRvIHVzZXJzcGFjZS4gVGhlIHBhY2tldCBkYXRhIGlzIGluaXRpYWxpemVkLiBBbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgc3RhY2sgaXMgaW5pdGlhbGl6ZWQsIHN1Y2ggYXMgdGhyb3VnaCBgYnBmX3NrYl9ncm93X3Jjc3VtYC5cbjcuICBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IGp1c3RpZmllZCBiZWNhdXNlIEtBU0FOIGlzIHN1ZmZpY2llbnQuIEknbGwgbWFrZSB0aGUgZGVjaXNpb24gdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1NTYsIk91dHB1dFRva2VucyI6NDE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6Mjc6MDcuMzg3NzY4ODkxWiIsIlNlcSI6ODIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDpcXG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFxcdTAwM2UgUEFHRV9TSVpFYCBpbnN0ZWFkIG9mIGBcXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgKSB0aGF0IGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcmxhcCB3aXRoIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UuIFRoaXMgY2F1c2VzIHBhY2tldCBkYXRhIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGBza2Jfc2hhcmVkX2luZm9gIGluaXRpYWxpemF0aW9uLCBvciBgc2tiX3NoYXJlZF9pbmZvYCB0byBiZSBjb3JydXB0ZWQgYnkgcGFja2V0IG1vZGlmaWNhdGlvbnMuXFxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVxcdTAwM2VoZWFkcm9vbSA9IDBgIGluc3RlYWQgb2YgYG1ldGFzaXplYCkgdGhhdCBjYXVzZWQgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIG1pc2NhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVGhpcyBzaGlmdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgYnVmZmVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgdG8gd3JpdGUgYHNrYl9zaGFyZWRfaW5mb2Agb3V0LW9mLWJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXFxuXFxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIGBza2Jfc2hhcmVkX2luZm9gIChlLmcuLCBjb3JydXB0ZWQgYG5yX2ZyYWdzYCBsZWFkaW5nIHRvIE9PQiByZWFkcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQsIGFzIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBpbiBgeGRwX2NvbnZlcnRfemNfdG9feGRwX2ZyYW1lYDpcXG4xLiBBbiBpbmNvcnJlY3Qgc2l6ZSBjaGVjayAoYFxcdTAwM2UgUEFHRV9TSVpFYCBpbnN0ZWFkIG9mIGBcXHUwMDNlIFNLQl9XSVRIX09WRVJIRUFEKFBBR0VfU0laRSlgKSB0aGF0IGFsbG93ZWQgcGFja2V0IGRhdGEgdG8gb3ZlcmxhcCB3aXRoIHRoZSBgc2tiX3NoYXJlZF9pbmZvYCBzdHJ1Y3QgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UuIFRoaXMgY2F1c2VzIHBhY2tldCBkYXRhIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGBza2Jfc2hhcmVkX2luZm9gIGluaXRpYWxpemF0aW9uLCBvciBgc2tiX3NoYXJlZF9pbmZvYCB0byBiZSBjb3JydXB0ZWQgYnkgcGFja2V0IG1vZGlmaWNhdGlvbnMuXFxuMi4gQW4gaW5jb3JyZWN0IGBoZWFkcm9vbWAgY2FsY3VsYXRpb24gKGB4ZHBmLVxcdTAwM2VoZWFkcm9vbSA9IDBgIGluc3RlYWQgb2YgYG1ldGFzaXplYCkgdGhhdCBjYXVzZWQgYGJ1aWxkX3NrYl9hcm91bmRgIHRvIG1pc2NhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4gVGhpcyBzaGlmdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgYnVmZmVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UsIGNhdXNpbmcgYF9fZmluYWxpemVfc2tiX2Fyb3VuZGAgdG8gd3JpdGUgYHNrYl9zaGFyZWRfaW5mb2Agb3V0LW9mLWJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuXFxuXFxuQm90aCBpc3N1ZXMgYXJlIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAob3V0LW9mLWJvdW5kcyB3cml0ZSBhbmQgb3ZlcmxhcHBpbmcgZGF0YSkuIFRoZXkgZG8gbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGFja2V0IGRhdGEgY29waWVkIGludG8gdGhlIHBhZ2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20gdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBpcyBlaXRoZXIgYWxyZWFkeSBpbml0aWFsaXplZCBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFjayAoZS5nLiwgYGJwZl9za2JfZ3Jvd19yY3N1bWAgemVyb2VzIG5ldyB0YWlscm9vbSkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgd3JpdGUgb2YgYHNrYl9zaGFyZWRfaW5mb2AgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWdlLCBhcyB3ZWxsIGFzIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIGBza2Jfc2hhcmVkX2luZm9gIChlLmcuLCBjb3JydXB0ZWQgYG5yX2ZyYWdzYCBsZWFkaW5nIHRvIE9PQiByZWFkcykuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQsIGFzIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlc2UgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4njtf[1] Phase: Succeeded StartedAt: 2026-08-18 18:27:18 +0000 UTC FinishedAt: 2026-08-18 18:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 18:27:18 +0000 UTC FinishedAt: 2026-08-18 18:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2] Phase: Succeeded StartedAt: 2026-08-18 18:27:18 +0000 UTC FinishedAt: 2026-08-18 22:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 18:27:19 +0000 UTC FinishedAt: 2026-08-18 22:11:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 18:27:19 +0000 UTC FinishedAt: 2026-08-18 18:27:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 18:27:19 +0000 UTC FinishedAt: 2026-08-18 18:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow4njtf/series-workflow4njtf-convert-artifact-1530067436/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 18:27:29 +0000 UTC FinishedAt: 2026-08-18 18:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 18:27:29 +0000 UTC FinishedAt: 2026-08-18 18:46:13 +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:*b544c1c8-aee4-4919-b5dc-4701a94e9c57,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-workflow4njtf/series-workflow4njtf-convert-artifact-1530067436/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": "afb7242a-4c19-4e82-a7fe-69c718bd7449", "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-workflow4njtf/series-workflow4njtf-build-action-726688794/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 18:27:29 +0000 UTC FinishedAt: 2026-08-18 18:46:03 +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:*b544c1c8-aee4-4919-b5dc-4701a94e9c57,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-workflow4njtf/series-workflow4njtf-convert-artifact-1530067436/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": "afb7242a-4c19-4e82-a7fe-69c718bd7449", "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-workflow4njtf/series-workflow4njtf-build-action-726688794/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 18:46:13 +0000 UTC FinishedAt: 2026-08-18 18:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 18:46:13 +0000 UTC FinishedAt: 2026-08-18 18:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 18:46:13 +0000 UTC FinishedAt: 2026-08-18 18:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 18:46:13 +0000 UTC FinishedAt: 2026-08-18 18:46:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow4njtf/series-workflow4njtf-convert-artifact-3420956587/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 18:46:24 +0000 UTC FinishedAt: 2026-08-18 18:47:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 18:46:24 +0000 UTC FinishedAt: 2026-08-18 18:47:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afb7242a-4c19-4e82-a7fe-69c718bd7449,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-workflow4njtf/series-workflow4njtf-build-action-726688794/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-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 18:47:59 +0000 UTC FinishedAt: 2026-08-18 18:47:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 18:47:59 +0000 UTC FinishedAt: 2026-08-18 18:47:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 18:47:59 +0000 UTC FinishedAt: 2026-08-18 19:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 18:47:59 +0000 UTC FinishedAt: 2026-08-18 19:06:19 +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:*b544c1c8-aee4-4919-b5dc-4701a94e9c57,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-workflow4njtf/series-workflow4njtf-convert-artifact-3420956587/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": "fb5478e1-4874-4f76-82aa-ab16a0d61fe2", "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-workflow4njtf/series-workflow4njtf-build-action-3973142479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 18:47:59 +0000 UTC FinishedAt: 2026-08-18 19:06:09 +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:*b544c1c8-aee4-4919-b5dc-4701a94e9c57,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-workflow4njtf/series-workflow4njtf-convert-artifact-3420956587/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": "fb5478e1-4874-4f76-82aa-ab16a0d61fe2", "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-workflow4njtf/series-workflow4njtf-build-action-3973142479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 19:06:19 +0000 UTC FinishedAt: 2026-08-18 19:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 19:06:19 +0000 UTC FinishedAt: 2026-08-18 19:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 19:06:19 +0000 UTC FinishedAt: 2026-08-18 19:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 19:06:19 +0000 UTC FinishedAt: 2026-08-18 19:07:46 +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:*fb5478e1-4874-4f76-82aa-ab16a0d61fe2,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-workflow4njtf/series-workflow4njtf-build-action-3973142479/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-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 19:07:56 +0000 UTC FinishedAt: 2026-08-18 22:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 19:07:56 +0000 UTC FinishedAt: 2026-08-18 22:11:45 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"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:*afb7242a-4c19-4e82-a7fe-69c718bd7449,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fb5478e1-4874-4f76-82aa-ab16a0d61fe2,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-workflow4njtf/series-workflow4njtf-build-action-726688794/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-workflow4njtf/series-workflow4njtf-build-action-3973142479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 19:07:56 +0000 UTC FinishedAt: 2026-08-18 19:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 19:07:56 +0000 UTC FinishedAt: 2026-08-18 19:08:01 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"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-workflow4njtf/series-workflow4njtf-convert-artifact-2632349380/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 19:07:56 +0000 UTC FinishedAt: 2026-08-18 19:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 19:07:56 +0000 UTC FinishedAt: 2026-08-18 19:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 19:07:56 +0000 UTC FinishedAt: 2026-08-18 19:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 19:08:06 +0000 UTC FinishedAt: 2026-08-18 22:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4njtf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xdp_convert_zc_to_xdp_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"7e316e17-e50f-4fce-8d66-c805b7784e37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 19:08:06 +0000 UTC FinishedAt: 2026-08-18 22:11:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afb7242a-4c19-4e82-a7fe-69c718bd7449,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fb5478e1-4874-4f76-82aa-ab16a0d61fe2,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-workflow4njtf/series-workflow4njtf-build-action-726688794/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-workflow4njtf/series-workflow4njtf-build-action-3973142479/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-workflow4njtf/series-workflow4njtf-convert-artifact-2632349380/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,}