Name: series-workflowzg9w7 Phase: Succeeded StartedAt: 2026-08-04 05:53:34 +0000 UTC FinishedAt: 2026-08-04 09:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[0] Phase: Succeeded StartedAt: 2026-08-04 05:53:34 +0000 UTC FinishedAt: 2026-08-04 06:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 05:53:34 +0000 UTC FinishedAt: 2026-08-04 06:12:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d1000fd7995e51deec872d154e0a40d82f7a539f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VETH", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d1000fd7995e51deec872d154e0a40d82f7a539f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VETH", "BPF_SYSCALL" ], "series_id": "4f65f384-3203-4e57-a3b9-11ebad1901e6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_prog_run_generic_xdp" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZFVEgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gaG93IHNrYi1cdTAwM2VsZW4gYW5kIHNrYi1cdTAwM2VkYXRhX2xlbiBhcmUgc3luY2hyb25pemVkIHdpdGggeGRwIGRhdGEgYWZ0ZXIgcnVubmluZyBhbiBYRFAgcHJvZ3JhbSB0aGF0IGFkanVzdHMgdGhlIHBhY2tldCB0YWlsIChlLmcuLCBicGZfeGRwX2FkanVzdF90YWlsKS4gVGhpcyBhZmZlY3RzIGJvdGggdGhlIGdlbmVyaWMgWERQIHBhdGggaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXImIzM5O3MgWERQIHJlY2VpdmUgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0MzQwMzEzYWUwMTNlMWViZDhkY2NiMTg1MGVkM2U0MmQzZGUwYTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA2OjEwOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuaW5kZXggMDBlMzRhZmQ4NThlNy4uZjgwZjY1ODRhNmZmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtODY1LDE4ICYjNDM7ODY1LDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4gXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFxuLVx0LyogY2hlY2sgaWYgYnBmX3hkcF9hZGp1c3RfdGFpbCB3YXMgdXNlZCAqL1xuLVx0b2ZmID0geGRwLVx1MDAzZWRhdGFfZW5kIC0gb3JpZ19kYXRhX2VuZDtcbi1cdGlmIChvZmYgIT0gMClcbi1cdFx0X19za2JfcHV0KHNrYiwgb2ZmKTsgLyogcG9zaXRpdmUgb24gZ3JvdywgbmVnYXRpdmUgb24gc2hyaW5rICovXG4tXG4gXHQvKiBYRFAgZnJhZyBtZXRhZGF0YSAoZS5nLiBucl9mcmFncykgYXJlIHVwZGF0ZWQgaW4gZUJQRiBoZWxwZXJzXG4tXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cbiYjNDM7XHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKS4gUmVtb3ZlIHRoZSBvbGQgZnJhZ21lbnQgY29udHJpYnV0aW9uXG4mIzQzO1x0ICogZnJvbSBza2ItXHUwMDNlbGVuIGJlZm9yZSB1cGRhdGluZyBkYXRhX2xlbiwgdGhlbiBhZGQgdGhlIG5ldyBvbmUgYmFjay5cbiBcdCAqL1xuLVx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxuJiM0MztcdHNrYi1cdTAwM2VsZW4gLT0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuJiM0MztcdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkge1xuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemU7XG4tXHRlbHNlXG4mIzQzO1x0XHRza2ItXHUwMDNlbGVuICYjNDM7PSBza2ItXHUwMDNlZGF0YV9sZW47XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN5bmNocm9uaXplIHRoZSBza2IgdGFpbCB3aXRoIFhEUCYjMzk7cyB1cGRhdGVkIGxpbmVhciBhcmVhLiAqL1xuJiM0MztcdG9mZiA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIG9yaWdfZGF0YV9lbmQ7XG4mIzQzO1x0aWYgKG9mZiAhPSAwKSB7XG4mIzQzO1x0XHRza2Jfc2V0X3RhaWxfcG9pbnRlcihza2IsIHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhKTtcbiYjNDM7XHRcdHNrYi1cdTAwM2VsZW4gJiM0Mzs9IG9mZjsgLyogcG9zaXRpdmUgb24gZ3JvdywgbmVnYXRpdmUgb24gc2hyaW5rICovXG4mIzQzO1x0fVxuIFxuIFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBycS1cdTAwM2VkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDU5MzNjNWRhYjA5ZWUuLjVjMzdjZjZjNGFhMTAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTE3LDEyICYjNDM7NTUxNywxNiBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuIFx0fVxuIFxuIFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xuLVx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXG4mIzQzO1x0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFJlbW92ZSB0aGUgb2xkIGZyYWdtZW50IGNvbnRyaWJ1dGlvblxuJiM0MztcdCAqIGZyb20gc2tiLVx1MDAzZWxlbiBiZWZvcmUgdXBkYXRpbmcgZGF0YV9sZW4sIHRoZW4gYWRkIHRoZSBuZXcgb25lIGJhY2suXG4gXHQgKi9cbi1cdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSlcbiYjNDM7XHRza2ItXHUwMDNlbGVuIC09IHNrYi1cdTAwM2VkYXRhX2xlbjtcbiYjNDM7XHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpIHtcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplO1xuLVx0ZWxzZVxuJiM0MztcdFx0c2tiLVx1MDAzZWxlbiAmIzQzOz0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IDA7XG4mIzQzO1x0fVxuIFxuIFx0LyogY2hlY2sgaWYgWERQIGNoYW5nZWQgZXRoIGhkciBzdWNoIFNLQiBuZWVkcyB1cGRhdGUgKi9cbiBcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVx1MDAzZWRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZFVEgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gaG93IHNrYi1cdTAwM2VsZW4gYW5kIHNrYi1cdTAwM2VkYXRhX2xlbiBhcmUgc3luY2hyb25pemVkIHdpdGggeGRwIGRhdGEgYWZ0ZXIgcnVubmluZyBhbiBYRFAgcHJvZ3JhbSB0aGF0IGFkanVzdHMgdGhlIHBhY2tldCB0YWlsIChlLmcuLCBicGZfeGRwX2FkanVzdF90YWlsKS4gVGhpcyBhZmZlY3RzIGJvdGggdGhlIGdlbmVyaWMgWERQIHBhdGggaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXImIzM5O3MgWERQIHJlY2VpdmUgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0MzQwMzEzYWUwMTNlMWViZDhkY2NiMTg1MGVkM2U0MmQzZGUwYTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDA2OjEwOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDAwZTM0YWZkODU4ZTcuLmY4MGY2NTg0YTZmZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTg2NSwxOCAmIzQzOzg2NSwyNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLAogCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAotCS8qIGNoZWNrIGlmIGJwZl94ZHBfYWRqdXN0X3RhaWwgd2FzIHVzZWQgKi8KLQlvZmYgPSB4ZHAtJmd0O2RhdGFfZW5kIC0gb3JpZ19kYXRhX2VuZDsKLQlpZiAob2ZmICE9IDApCi0JCV9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqLwotCiAJLyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVycwotCSAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLCB3ZSBuZWVkIHRvIHVwZGF0ZSBkYXRhX2xlbiBoZXJlLgomIzQzOwkgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKS4gUmVtb3ZlIHRoZSBvbGQgZnJhZ21lbnQgY29udHJpYnV0aW9uCiYjNDM7CSAqIGZyb20gc2tiLSZndDtsZW4gYmVmb3JlIHVwZGF0aW5nIGRhdGFfbGVuLCB0aGVuIGFkZCB0aGUgbmV3IG9uZSBiYWNrLgogCSAqLwotCWlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkKJiM0MzsJc2tiLSZndDtsZW4gLT0gc2tiLSZndDtkYXRhX2xlbjsKJiM0MzsJaWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7CiAJCXNrYi0mZ3Q7ZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktJmd0O3hkcF9mcmFnc19zaXplOwotCWVsc2UKJiM0MzsJCXNrYi0mZ3Q7bGVuICYjNDM7PSBza2ItJmd0O2RhdGFfbGVuOwomIzQzOwl9IGVsc2UgewogCQlza2ItJmd0O2RhdGFfbGVuID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTeW5jaHJvbml6ZSB0aGUgc2tiIHRhaWwgd2l0aCBYRFAmIzM5O3MgdXBkYXRlZCBsaW5lYXIgYXJlYS4gKi8KJiM0MzsJb2ZmID0geGRwLSZndDtkYXRhX2VuZCAtIG9yaWdfZGF0YV9lbmQ7CiYjNDM7CWlmIChvZmYgIT0gMCkgewomIzQzOwkJc2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCB4ZHAtJmd0O2RhdGFfZW5kIC0geGRwLSZndDtkYXRhKTsKJiM0MzsJCXNrYi0mZ3Q7bGVuICYjNDM7PSBvZmY7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqLwomIzQzOwl9CiAKIAlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBycS0mZ3Q7ZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlLi41YzM3Y2Y2YzRhYTEwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNTUxNywxMiAmIzQzOzU1MTcsMTYgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwKIAl9CiAKIAkvKiBYRFAgZnJhZyBtZXRhZGF0YSAoZS5nLiBucl9mcmFncykgYXJlIHVwZGF0ZWQgaW4gZUJQRiBoZWxwZXJzCi0JICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuCiYjNDM7CSAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBSZW1vdmUgdGhlIG9sZCBmcmFnbWVudCBjb250cmlidXRpb24KJiM0MzsJICogZnJvbSBza2ItJmd0O2xlbiBiZWZvcmUgdXBkYXRpbmcgZGF0YV9sZW4sIHRoZW4gYWRkIHRoZSBuZXcgb25lIGJhY2suCiAJICovCi0JaWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKQomIzQzOwlza2ItJmd0O2xlbiAtPSBza2ItJmd0O2RhdGFfbGVuOwomIzQzOwlpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpIHsKIAkJc2tiLSZndDtkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS0mZ3Q7eGRwX2ZyYWdzX3NpemU7Ci0JZWxzZQomIzQzOwkJc2tiLSZndDtsZW4gJiM0Mzs9IHNrYi0mZ3Q7ZGF0YV9sZW47CiYjNDM7CX0gZWxzZSB7CiAJCXNrYi0mZ3Q7ZGF0YV9sZW4gPSAwOwomIzQzOwl9CiAKIAkvKiBjaGVjayBpZiBYRFAgY2hhbmdlZCBldGggaGRyIHN1Y2ggU0tCIG5lZWRzIHVwZGF0ZSAqLwogCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLSZndDtkYXRhOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IE5ldHdvcmsgQ29yZSBhbmQgVmV0aCBEcml2ZXIgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBib3RoIGBkcml2ZXJzL25ldC92ZXRoLmNgIGFuZCBgbmV0L2NvcmUvZGV2LmNgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBteSBleWVicm93cy4gQW55dGltZSB3ZSYjMzk7cmUgbWVzc2luZyB3aXRoIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBob3cgYHNrYi0mZ3Q7bGVuYCBhbmQgYHNrYi0mZ3Q7ZGF0YV9sZW5gIGFyZSBoYW5kbGVkIHdpdGggWERQIGRhdGEgYWZ0ZXIgYW4gWERQIHByb2dyYW0gcnVucy4gU3luY2hyb25pemF0aW9uIGhlcmUgaXMgY3JpdGljYWwsIGVzcGVjaWFsbHkgd2hlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIHR3byBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHZldGhfeGRwX3Jjdl9za2JgIGluIGBkcml2ZXJzL25ldC92ZXRoLmNgIGlzIHVwZGF0ZWQsIGFuZCB0aGVuIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGluIGBuZXQvY29yZS9kZXYuY2AgYWxzbyBnZXRzIGEgbG9vay4gVGhvc2UgYXJlIGZ1bmN0aW9uIGNoYW5nZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgb24gdGhlIHJhZGFyLiBCb3RoIG9mIHRoZXNlIGFyZSBpbiBjcml0aWNhbCBwYXRocyBmb3IgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgbWlzc3RlcHMgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHkgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aG9zZSBjb25maWcgb3B0aW9ucy4gYGRyaXZlcnMvbmV0L3ZldGguY2AgbmVlZHMgYENPTkZJR19WRVRIYCB0byBiZSBlbmFibGVkLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQuIGBuZXQvY29yZS9kZXYuY2AsIGFzIGEgY29yZSBjb21wb25lbnQsIGlzIGFsd2F5cyBjb21waWxlZC4gWERQIGZ1bmN0aW9uYWxpdHksIHRoYXQgaXMgYSB3aG9sZSBhbm90aGVyIGJlYXN0LCBhbmQgY291bGQgZGVwZW5kIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIG9yIHNvbWUgb3RoZXIgQlBGLXJlbGF0ZWQgY29uZmlnLCBidXQgdGhlIGJhc2UgdmV0aCBhbmQgZGV2IGNvZGUgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQuCgpUaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBzZWFyY2hpbmcgZm9yIHRoZSBmdW5jdGlvbiBuYW1lcywgYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgaW1wYWN0cyBhbmQgaWRlbnRpZnkgYXJlYXMgdGhhdCBuZWVkIHBhcnRpY3VsYXJseSBjbG9zZSBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXRoX3hkcF9yY3Zfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYz03NTE9c3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxuZHJpdmVycy9uZXQvdmV0aC5jOjc5MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9OTA3PXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM5LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5NDA6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTk0MS1cdFx0XHRpZiAoc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBmdW5jdGlvbiBhbmQgaG93IGl0IHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggaXQgaW4gbWluZCwgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IGVCUEYgcHJvZ3JhbXMgcnVuIGluIFhEUCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGFsbCB0aGUgbnVhbmNlcyBvZiBlQlBGIHByb2dyYW1zLCBYRFAgKGFuZCBpdHMgc3BlY2lmaWMgaW1wbGljYXRpb25zKSwgYW5kIGV4YWN0bHkgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIEJQRiBWTSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGdlbmVyYWwgY2FzZXMsIHRoZSBvbmVzIHRoYXQgYXJlbiYjMzk7dCBzcGVjaWZpYyB0byBhIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uOyB0aGF0IGNvdWxkIHBvaW50IHRvIHRoZSBwbGFjZXMgd2hlcmUgdGhleSBoYW5kbGUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZvcndhcmRpbmcuIEkgZXhwZWN0IHRoZXJlJiMzOTtsbCBiZSBhIGxvb3AsIGxpa2VseSBpbnRlcnByZXRpbmcgYW5kIGV4ZWN1dGluZyB0aGUgQlBGIGluc3RydWN0aW9ucy4gUHJvYmFibHkgY2hlY2tzIGFyb3VuZCB0aGUgdmFsaWRpdHkgb2YgdGhlIHBhY2tldHMsIGFuZCBob3cgdG8gcmVwb3J0IGFueSBlcnJvci4gTGV0JiMzOTtzIHNlZSBpZiBteSBtZW50YWwgbW9kZWwgaG9sZHMgdHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfY29uc3VtZV9za2JfYW55KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAwLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo0MzAxOnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDItXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTEzOT1zdGF0aWMgdTMyIGNwdV9tYXBfYnBmX3Byb2dfcnVuX3NrYihzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKnJjcHUsXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy0xNDktXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjE1MDpcdFx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHNrYiwgXHUwMDI2eGRwLCByY3B1LVx1MDAzZXByb2cpO1xua2VybmVsL2JwZi9jcHVtYXAuYy0xNTEtXHRcdHN3aXRjaCAoYWN0KSB7XG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz01MTU9c3RhdGljIHUzMiBkZXZfbWFwX2JwZl9wcm9nX3J1bl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9kdGFiX25ldGRldiAqZHN0KVxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmMtNTI2LVxua2VybmVsL2JwZi9kZXZtYXAuYzo1Mjc6XHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc2tiLCBcdTAwMjZ4ZHAsIGRzdC1cdTAwM2V4ZHBfcHJvZyk7XG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyOC1cdHN3aXRjaCAoYWN0KSB7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01NDU3LVxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXG4tLVxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2MTctXG5uZXQvY29yZS9kZXYuYzo1NjE4Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKCpwc2tiLCB4ZHAsIHhkcF9wcm9nKTtcbm5ldC9jb3JlL2Rldi5jLTU2MTktXHRzd2l0Y2ggKGFjdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWERQIFRhaWwgQWRqdXN0bWVudHMgJmFtcDsgVmV0aCBEcml2ZXIgRml4IC0gRnV6emluZyBPcHBvcnR1bml0eSEqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGNydWNpYWwgaXNzdWU6IGhvdyBgc2tiLSZndDtsZW5gICh0aGUgbGVuZ3RoIG9mIHRoZSBza19idWZmKSBpcyB1cGRhdGVkIHdoZW4gWERQIHByb2dyYW1zIGFyZSBtYW5pcHVsYXRpbmcgdGhlIHRhaWwgZW5kIG9mIHBhY2tldHMuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNvcmUgbmV0d29ya2luZyB0aGluZyBhbmQgdG91Y2hlcyB0aGUgdmV0aCBkcml2ZXIgc3BlY2lmaWNhbGx5LiBUaGlzIHNvdW5kcyBsaWtlIHByaW1lIHRlcnJpdG9yeSBmb3Igc29tZSByaWdvcm91cyBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbHMuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBgdmV0aF94ZHBfcmN2X3NrYmAsIGJ1dCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIHRoYXQgbWlnaHQgYmUgdHJpY2t5IHRvIHRhcmdldCBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIEluc3RlYWQgb2YgYHZldGhfeGRwX3Jjdl9za2JgLCBteSBmaXJzdCBmb2N1cyBzaG91bGQgYmUgb24gYHZldGhfeGRwX3JjdmAgYW5kIGB2ZXRoX3BvbGxgIGFzIGVudHJ5IHBvaW50cy4gSSBiZXQgaWYgSSBleHBsb3JlIGhvdyB0aG9zZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBhZGp1c3RlZCBsZW5ndGhzIGFmdGVyIFhEUCBtb2RpZmljYXRpb25zLCBJJiMzOTtsbCBmaW5kIHRoZSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB0aGUgcGF0Y2ggaXMgZml4aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZldGhfeGRwX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9NjIyPXN0YXRpYyBpbnQgdmV0aF94ZHBfdHgoc3RydWN0IHZldGhfcnEgKnJxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM3LVxuZHJpdmVycy9uZXQvdmV0aC5jOjYzODpzdGF0aWMgc3RydWN0IHhkcF9mcmFtZSAqdmV0aF94ZHBfcmN2X29uZShzdHJ1Y3QgdmV0aF9ycSAqcnEsXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM5LVx0XHRcdFx0XHQgIHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy03MDgtLyogZnJhbWVzIGFycmF5IGNvbnRhaW5zIFZFVEhfWERQX0JBVENIIGF0IG1vc3QgKi9cbmRyaXZlcnMvbmV0L3ZldGguYzo3MDk6c3RhdGljIHZvaWQgdmV0aF94ZHBfcmN2X2J1bGtfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSwgdm9pZCAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L3ZldGguYy03MTAtXHRcdFx0XHQgIGludCBuX3hkcGYsIHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTc1MT1zdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy03ODktXG5kcml2ZXJzL25ldC92ZXRoLmM6NzkwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG5kcml2ZXJzL25ldC92ZXRoLmMtNzkxLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy05MDYtXG5kcml2ZXJzL25ldC92ZXRoLmM6OTA3OnN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbmRyaXZlcnMvbmV0L3ZldGguYy05MDgtXHRcdFx0c3RydWN0IHZldGhfeGRwX3R4X2JxICpicSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI0LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0geGRwX2dldF9mcmFtZV9sZW4oZnJhbWUpO1xuZHJpdmVycy9uZXQvdmV0aC5jOjkyNTpcdFx0XHRmcmFtZSA9IHZldGhfeGRwX3Jjdl9vbmUocnEsIGZyYW1lLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTkyNi1cdFx0XHRpZiAoZnJhbWUpIHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI5LVx0XHRcdFx0aWYgKG5feGRwZiA9PSBWRVRIX1hEUF9CQVRDSCkge1xuZHJpdmVycy9uZXQvdmV0aC5jOjkzMDpcdFx0XHRcdFx0dmV0aF94ZHBfcmN2X2J1bGtfc2tiKHJxLCB4ZHBmLCBuX3hkcGYsXG5kcml2ZXJzL25ldC92ZXRoLmMtOTMxLVx0XHRcdFx0XHRcdFx0ICAgICAgYnEsIHN0YXRzKTtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM5LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5NDA6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTk0MS1cdFx0XHRpZiAoc2tiKSB7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTk1MS1cdGlmIChuX3hkcGYpXG5kcml2ZXJzL25ldC92ZXRoLmM6OTUyOlx0XHR2ZXRoX3hkcF9yY3ZfYnVsa19za2IocnEsIHhkcGYsIG5feGRwZiwgYnEsIHN0YXRzKTtcbmRyaXZlcnMvbmV0L3ZldGguYy05NTMtXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTk2NT1zdGF0aWMgaW50IHZldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTk4NC1cdHhkcF9zZXRfcmV0dXJuX2ZyYW1lX25vX2RpcmVjdCgpO1xuZHJpdmVycy9uZXQvdmV0aC5jOjk4NTpcdGRvbmUgPSB2ZXRoX3hkcF9yY3YocnEsIGJ1ZGdldCwgXHUwMDI2YnEsIFx1MDAyNnN0YXRzKTtcbmRyaXZlcnMvbmV0L3ZldGguYy05ODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWERQIEV4ZWN1dGlvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgWERQIHByb2dyYW1zIGFyZSBleGVjdXRlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBJIHNlZSB0aGF0IGB2ZXRoX3hkcF9yY3ZgIGFuZCBgdmV0aF9wb2xsYCBhcmUgYm90aCBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBzdXJwcmlzaW5nLCB0aGV5JiMzOTtyZSBwcm9iYWJseSBpbnRlcm5hbCB0byB0aGUgdmV0aCBkcml2ZXIuIEJ1dCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgZXhwb3J0ZWQg4oCTIGl0JiMzOTtzIGdsb2JhbCwgYXZhaWxhYmxlIG91dHNpZGUgdGhlIHZldGggbW9kdWxlLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnZW5lcmljIFhEUCBwcm9ncmFtIGV4ZWN1dGlvbiBmbG93LiBOb3cgSSYjMzk7bGwgbmVlZCB0byBnbyBhbmQgZmluZCB3aGVyZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBkZWZpbmVkLiBJJiMzOTtsbCBjaGVjayBgbmV0L2NvcmUvZGV2LmNgLiBJIGhhdmUgYSBnb29kIGZlZWxpbmcgdGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgZmluZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2NvbnN1bWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDMwMTp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYz0xMzk9c3RhdGljIHUzMiBjcHVfbWFwX2JwZl9wcm9nX3J1bl9za2Ioc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtMTQ5LVxua2VybmVsL2JwZi9jcHVtYXAuYzoxNTA6XHRcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFx1MDAyNnhkcCwgcmNwdS1cdTAwM2Vwcm9nKTtcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTUxLVx0XHRzd2l0Y2ggKGFjdCkge1xuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9NTE1PXN0YXRpYyB1MzIgZGV2X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfZHRhYl9uZXRkZXYgKmRzdClcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyNi1cbmtlcm5lbC9icGYvZGV2bWFwLmM6NTI3Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHNrYiwgXHUwMDI2eGRwLCBkc3QtXHUwMDNleGRwX3Byb2cpO1xua2VybmVsL2JwZi9kZXZtYXAuYy01MjgtXHRzd2l0Y2ggKGFjdCkge1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTU1OTA9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy01NjE3LVxubmV0L2NvcmUvZGV2LmM6NTYxODpcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XG5uZXQvY29yZS9kZXYuYy01NjE5LVx0c3dpdGNoIChhY3QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkyOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgWERQIGFuZCBQb3RlbnRpYWwgSW5saW5pbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgY29kZSBoZXJlLiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgdGhhdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbiwgYSBjb21tb24gZW50cnkgcG9pbnQuIEhvd2V2ZXIsIGB2ZXRoX3hkcF9yY3Zfc2tiYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gR2l2ZW4gdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uIGxhbmRzY2FwZSwgYSBmdW5jdGlvbiBkZWZpbmVkIGFzIHN0YXRpYyAqY291bGQqIGJlIGEgY2FuZGlkYXRlIGZvciBpbmxpbmluZyBieSB0aGUgY29tcGlsZXIgZHVyaW5nIG9wdGltaXphdGlvbi4gSSB3b25kZXIsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSwgaGFzIHRoZSBjb21waWxlciBvcHRpbWl6ZWQgYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBpbmxpbmVkIGl0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXRoX3hkcF9yY3Zfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYz03NTE9c3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxuZHJpdmVycy9uZXQvdmV0aC5jOjc5MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9OTA3PXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM5LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5NDA6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTk0MS1cdFx0XHRpZiAoc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBYRFAgUHJvZ3JhbSBFeGVjdXRpb24gaW4gdGhlIHZldGggRHJpdmVyKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgWERQIGV4ZWN1dGlvbiBwYXRoIGluIHRoZSB2ZXRoIGRyaXZlci4gVGhlIGNvZGUmIzM5O3Mgc3RhdGljIOKAkyBtZWFuaW5nLCBJIGNhbiYjMzk7dCBkaXJlY3RseSBpbmxpbmUgaXQsIGJ1dCBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBpbmxpbmUgZWl0aGVyLiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIHRyYWNpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1c2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgYXMgYSBsaWtlbHksIGtleSBzeW1ib2wgdG8gdHJhY2UgaW50byB0aGUgWERQIGV4ZWN1dGlvbi4gVGhlIGB2ZXRoYCBkcml2ZXIgaXMgb2Z0ZW4gY3JpdGljYWwsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgYmVzdCBlbnRyeSBwb2ludHMuCgpJIHRoZW4gc3RhcnRlZCB0byB0aGluayBhYm91dCBgdmV0aF94ZHBfcmN2YC4gSXQgdG9vIGlzIHN0YXRpYywgYW5kIHRoYXQgcG9zZXMgYSBzaW1pbGFyIGNoYWxsZW5nZS4gSXMgdGhlcmUgYW55IHdheSB0aGF0IHRoZSBleGVjdXRpb24gZ2V0cyB0aGVyZSBmcm9tIHNvbWV0aGluZyB0aGF0JiMzOTtzIG5vdCBzdGF0aWM/IEkgbmVlZCB0byBmaW5kIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYHZldGguY2AgdGhhdCAqY2FsbHMqIGB2ZXRoX3hkcF9yY3ZgLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGxpbmsgSSYjMzk7bSB0cnlpbmcgdG8gZXN0YWJsaXNoLiBJZiBJIGNhbiBmaW5kIHRoYXQgbm9uLXN0YXRpYyBjYWxsZXIsIEkmIzM5O3ZlIGdvdCBhIG11Y2ggbW9yZSBhY2Nlc3NpYmxlIHBvaW50IGZvciBhbmFseXNpcyBhbmQgaW5zdHJ1bWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgZnVuY3Rpb24gY2FsbHMgd2l0aGluIHRoZSB2ZXRoIGRyaXZlciB0byBuYWlsIHRoaXMgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmV0aF9wb2xsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9NTA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmlibXZldGhfcnhxX2dldF9idWZmZXIoc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTUyOC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzo1Mjk6ICogQ29udGV4dDogY2FsbGVkIGZyb20gaWJtdmV0aF9wb2xsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTUzMC0gKlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9MTM3OT1zdGF0aWMgdm9pZCBpYm12ZXRoX3J4X2NzdW1faGVscGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNDQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxNDQ4OnN0YXRpYyBpbnQgaWJtdmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTQ0OS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYz0xNjM5PXN0YXRpYyBpbnQgaWJtdmV0aF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTY4My0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM6MTY4NDpzdGF0aWMgdm9pZCBpYm12ZXRoX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNjg1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jPTE3ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpYm12ZXRoX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNzkyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxNzkzOlx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gaWJtdmV0aF9wb2xsX2NvbnRyb2xsZXIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE3OTQtI2VuZGlmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYz0xNzk3PXN0YXRpYyBpbnQgaWJtdmV0aF9wcm9iZShzdHJ1Y3QgdmlvX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgdmlvX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xODQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxODQ3Olx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0KG5ldGRldiwgXHUwMDI2YWRhcHRlci1cdTAwM2VuYXBpLCBpYm12ZXRoX3BvbGwsIDE2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTg0OC1cbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9OTA3PXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTY0LVxuZHJpdmVycy9uZXQvdmV0aC5jOjk2NTpzdGF0aWMgaW50IHZldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG5kcml2ZXJzL25ldC92ZXRoLmMtOTY2LXtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTExNz1zdGF0aWMgaW50IHZldGhfZW5hYmxlX3hkcF9yYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RhcnQsIGludCBlbmQsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTExMjYtXHRcdGlmICghbmFwaV9hbHJlYWR5X29uKVxuZHJpdmVycy9uZXQvdmV0aC5jOjExMjc6XHRcdFx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZycS1cdTAwM2V4ZHBfbmFwaSwgdmV0aF9wb2xsKTtcbmRyaXZlcnMvbmV0L3ZldGguYy0xMTI4LVx0XHRlcnIgPSB4ZHBfcnhxX2luZm9fcmVnKFx1MDAyNnJxLVx1MDAzZXhkcF9yeHEsIGRldiwgaSwgcnEtXHUwMDNleGRwX25hcGkubmFwaV9pZCk7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTEyMTg9c3RhdGljIGludCB2ZXRoX25hcGlfZW5hYmxlX3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGFydCwgaW50IGVuZClcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTIyNS1cbmRyaXZlcnMvbmV0L3ZldGguYzoxMjI2Olx0XHRuZXRpZl9uYXBpX2FkZChkZXYsIFx1MDAyNnJxLVx1MDAzZXhkcF9uYXBpLCB2ZXRoX3BvbGwpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTEyMjctXHR9XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTE0NzI9c3RhdGljIHZvaWQgdmV0aF9kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy0xNDc3LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvdmV0aC5jOjE0Nzg6c3RhdGljIHZvaWQgdmV0aF9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3ZldGguYy0xNDc5LXtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTcwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZldGhfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcxNy0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L3ZldGguYzoxNzE4Olx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gdmV0aF9wb2xsX2NvbnRyb2xsZXIsXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcxOS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipUaGlua2luZyBUaHJvdWdoIHZldGggRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gYHZldGhfcG9sbGAgaXMgYWxzbyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUmIzM5O3MgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbiB0aGF0IG1pZ2h0IGJlIHVzYWJsZSBvciByZWxldmFudCB0byB0aGUgdmV0aCBpbnRlcmZhY2UgaW4gc29tZSB3YXkuIFdlJiMzOTtyZSBsb29raW5nIGZvciBmbGV4aWJpbGl0eSBoZXJlLCBzbyBhIHN0YXRpYyBmdW5jdGlvbiBpcyBsaW1pdGluZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9yIGV4dGVybmFsIHVzZS4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IGB2ZXRoX3hkcF94bWl0YD8gVGhhdCBtaWdodCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgZm9yIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHdlIGNhbiBhcHBseS4gUGVyaGFwcyBpdCBpcyBhIHJlbGF0ZWQgZnVuY3Rpb24sIHdpdGggYSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgd2UgY2FuIGNoYW5nZSwgb3IgYXQgbGVhc3QgYSBjYWxsIHRoYXQgbWlnaHQgYmUgaW50ZXJjZXB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmV0aF94ZHBfeG1pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9NDk1PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqdmV0aF9wZWVyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01MDItXG5kcml2ZXJzL25ldC92ZXRoLmM6NTAzOnN0YXRpYyBpbnQgdmV0aF94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbixcbmRyaXZlcnMvbmV0L3ZldGguYy01MDQtXHRcdFx0IHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTU2MD1zdGF0aWMgaW50IHZldGhfbmRvX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01NjQtXG5kcml2ZXJzL25ldC92ZXRoLmM6NTY1Olx0ZXJyID0gdmV0aF94ZHBfeG1pdChkZXYsIG4sIGZyYW1lcywgZmxhZ3MsIHRydWUpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTU2Ni1cdGlmIChlcnIgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9NTc1PXN0YXRpYyB2b2lkIHZldGhfeGRwX2ZsdXNoX2JxKHN0cnVjdCB2ZXRoX3JxICpycSwgc3RydWN0IHZldGhfeGRwX3R4X2JxICpicSlcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNTc4LVxuZHJpdmVycy9uZXQvdmV0aC5jOjU3OTpcdHNlbnQgPSB2ZXRoX3hkcF94bWl0KHJxLVx1MDAzZWRldiwgYnEtXHUwMDNlY291bnQsIGJxLVx1MDAzZXEsIDAsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3ZldGguYy01ODAtXHRpZiAoc2VudCBcdTAwM2MgMCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kb19yZWRpcmVjdC5jPTk3PXZvaWQgdGVzdF94ZHBfZG9fcmVkaXJlY3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYy0xNTEtXHQgKiByZWd1bGFyIGZvcndhcmRpbmcgcGF0aCB3aWxsIGVuZCB1cCBnb2luZyB0aHJvdWdoIHRoZSBzYW1lXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYzoxNTI6XHQgKiB2ZXRoX3hkcF94bWl0KCkgY2FsbCBhcyB0aGUgWERQX1JFRElSRUNUIGNvZGUsIHdoaWNoIGNhbiBjYXVzZSBhXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYy0xNTMtXHQgKiBkZWFkbG9jayBpZiBpdCBoYXBwZW5zIG9uIHRoZSBzYW1lIENQVS4gVGhlcmUmIzM5O3MgYSBsb2NhbF9iaF9kaXNhYmxlKClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg1MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWERQIFRyYW5zbWlzc2lvbiBpbiB0aGUgVkVUSCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBYRFAgdHJhbnNtaXNzaW9uIGlzIGhhbmRsZWQgaW4gdGhlIFZFVEggZHJpdmVyLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgc2VlIHRoYXQgYHZldGhfeGRwX3htaXRgLCBgdmV0aF9uZG9feGRwX3htaXRgLCBhbmQgYHZldGhfeG1pdGAgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIGRpZ2dpbmcgYSBiaXQgdG91Z2hlciwgYnV0IG5vIHN1cnByaXNlLCBkcml2ZXIgZnVuY3Rpb25zIG9mdGVuIGZvbGxvdyB0aGF0IHBhdHRlcm4gYW5kIGFyZSByZWdpc3RlcmVkIHdpdGggYG5ldF9kZXZpY2Vfb3BzYC4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCB3aGljaCAqaXMqIGV4cG9ydGVkLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBYRFAsIEkmIzM5O20gdGhpbmtpbmcgdGhhdCYjMzk7cyB0aGUgc3ltYm9sIHRvIGZvY3VzIG9uLiBMb29rcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQuIE5vdywgaXMgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgc3VmZmljaWVudCBvbiBpdHMgb3duIHRvIGRlc2NyaWJlIHRoZSB0cmFuc21pc3Npb24gZmxvdz8gWWVwLCBzZWVtcyBsaWtlIGl0LiBJJiMzOTttIGNvbmZpZGVudCBpbiBzdGFydGluZyB0aGVyZSB0byBnZXQgdGhlIGJpZyBwaWN0dXJlLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGtub3cgYENPTkZJR19WRVRIYCBpcyBvYnZpb3VzbHkgcmVxdWlyZWQgZm9yIHRoZSBWRVRIIG1vZHVsZSBpdHNlbGYuIEFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgZm9yIFhEUCB0byB3b3JrLCBJJiMzOTtkIGV4cGVjdCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgbGV0IG1lIGNyb3NzLXJlZmVyZW5jZSB0aGUgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgZnVuY3Rpb24gd2l0aCBgbmV0L2NvcmUvZGV2LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2NvbnN1bWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDMwMTp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYz0xMzk9c3RhdGljIHUzMiBjcHVfbWFwX2JwZl9wcm9nX3J1bl9za2Ioc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtMTQ5LVxua2VybmVsL2JwZi9jcHVtYXAuYzoxNTA6XHRcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFx1MDAyNnhkcCwgcmNwdS1cdTAwM2Vwcm9nKTtcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTUxLVx0XHRzd2l0Y2ggKGFjdCkge1xuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9NTE1PXN0YXRpYyB1MzIgZGV2X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfZHRhYl9uZXRkZXYgKmRzdClcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyNi1cbmtlcm5lbC9icGYvZGV2bWFwLmM6NTI3Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHNrYiwgXHUwMDI2eGRwLCBkc3QtXHUwMDNleGRwX3Byb2cpO1xua2VybmVsL2JwZi9kZXZtYXAuYy01MjgtXHRzd2l0Y2ggKGFjdCkge1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTU1OTA9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy01NjE3LVxubmV0L2NvcmUvZGV2LmM6NTYxODpcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XG5uZXQvY29yZS9kZXYuYy01NjE5LVx0c3dpdGNoIChhY3QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHdlbGwtdmVyc2VkIGluIGVCUEYgYW5kIFhEUDoKCioqRGlnZ2luZyBpbnRvIHRoZSBYRFAgRXhlY3V0aW9uIFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBwaW5wb2ludCBleGFjdGx5IGhvdyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEZpcnN0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3Igbm90LiBJJiMzOTt2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIG5lc3RsZWQgd2l0aGluIGFueSBwcmVwcm9jZXNzb3IgYCNpZmRlZmAgYmxvY2tzLiBUaGF0IGluZm9ybWF0aW9uIHdpbGwgdGVsbCBtZSBpZiBpdCYjMzk7cyBhbHdheXMgcGFydCBvZiB0aGUgWERQIGV4ZWN1dGlvbiwgb3Igb25seSBlbmFibGVkIHVuZGVyIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBidWlsZCBvcHRpb25zLiBLbm93aW5nIHRoYXQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIGFuZCBob3cgcG9ydGFibGUgb3IgY29uZmlndXJhYmxlIGl0cyBiZWhhdmlvciBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01NDU3LVxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXG4tLVxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2MTctXG5uZXQvY29yZS9kZXYuYzo1NjE4Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKCpwc2tiLCB4ZHAsIHhkcF9wcm9nKTtcbm5ldC9jb3JlL2Rldi5jLTU2MTktXHRzd2l0Y2ggKGFjdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGxpbmUgb2YgdGhpbmtpbmc6CgoqKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIERyaXZlciBJc3N1ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBuZXQvY29yZS9kZXYuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNTQ1OC4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIHdoZXJlIHRoZSBidWcgSSYjMzk7bSBodW50aW5nIGlzIG5lc3RlZC4gSXQmIzM5O3Mgb2Z0ZW4gdGhhdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgaW52b2x2ZSBhIHByb2JsZW0gaW4gdGhlIG5ldHdvcmtpbmcgY29yZSwgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGlzIGZpbGUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBhcmVhIGlzIHBvdGVudGlhbGx5IGNydWNpYWwgZm9yIHRoZSBkZXZpY2UmIzM5O3MgYmVoYXZpb3IuIEkgd2lsbCBsb29rIGZvciBhbnkgY2x1ZXMgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQ0MDpcdFx0cnhxdWV1ZSA9IGRldi1cdTAwM2Vfcng7XG41NDQxOlx0XG41NDQyOlx0XHRpZiAoc2tiX3J4X3F1ZXVlX3JlY29yZGVkKHNrYikpIHtcbjU0NDM6XHRcdFx0dTE2IGluZGV4ID0gc2tiX2dldF9yeF9xdWV1ZShza2IpO1xuNTQ0NDpcdFxuNTQ0NTpcdFx0XHRpZiAodW5saWtlbHkoaW5kZXggXHUwMDNlPSBkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSkge1xuNTQ0NjpcdFx0XHRcdFdBUk5fT05DRShkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzIFx1MDAzZSAxLFxuNTQ0NzpcdFx0XHRcdFx0ICBcJiMzNDslcyByZWNlaXZlZCBwYWNrZXQgb24gcXVldWUgJXUsIGJ1dCBudW1iZXIgXCYjMzQ7XG41NDQ4Olx0XHRcdFx0XHQgIFwmIzM0O29mIFJYIHF1ZXVlcyBpcyAldVxcblwmIzM0OyxcbjU0NDk6XHRcdFx0XHRcdCAgZGV2LVx1MDAzZW5hbWUsIGluZGV4LCBkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKTtcbjU0NTA6XHRcbjU0NTE6XHRcdFx0XHRyZXR1cm4gcnhxdWV1ZTsgLyogUmV0dXJuIGZpcnN0IHJ4cXVldWUgKi9cbjU0NTI6XHRcdFx0fVxuNTQ1MzpcdFx0XHRyeHF1ZXVlICYjNDM7PSBpbmRleDtcbjU0NTQ6XHRcdH1cbjU0NTU6XHRcdHJldHVybiByeHF1ZXVlO1xuNTQ1NjpcdH1cbjU0NTc6XHRcbjU0NTg6XHR1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuNTQ1OTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcbjU0NjA6XHR7XG41NDYxOlx0XHR2b2lkICpvcmlnX2RhdGEsICpvcmlnX2RhdGFfZW5kLCAqaGFyZF9zdGFydDtcbjU0NjI6XHRcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cXVldWU7XG41NDYzOlx0XHRib29sIG9yaWdfYmNhc3QsIG9yaWdfaG9zdDtcbjU0NjQ6XHRcdHUzMiBtYWNfbGVuLCBmcmFtZV9zejtcbjU0NjU6XHRcdF9fYmUxNiBvcmlnX2V0aF90eXBlO1xuNTQ2NjpcdFx0c3RydWN0IGV0aGhkciAqZXRoO1xuNTQ2NzpcdFx0dTMyIG1ldGFsZW4sIGFjdDtcbjU0Njg6XHRcdGludCBvZmY7XG41NDY5Olx0XG41NDcwOlx0XHQvKiBUaGUgWERQIHByb2dyYW0gd2FudHMgdG8gc2VlIHRoZSBwYWNrZXQgc3RhcnRpbmcgYXQgdGhlIE1BQ1xuNTQ3MTpcdFx0ICogaGVhZGVyLlxuNTQ3MjpcdFx0ICovXG41NDczOlx0XHRtYWNfbGVuID0gc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xuNTQ3NDpcdFx0aGFyZF9zdGFydCA9IHNrYi1cdTAwM2VkYXRhIC0gc2tiX2hlYWRyb29tKHNrYik7XG41NDc1Olx0XG41NDc2Olx0XHQvKiBTS0IgXCYjMzQ7aGVhZFwmIzM0OyBhcmVhIGFsd2F5cyBoYXZlIHRhaWxyb29tIGZvciBza2Jfc2hhcmVkX2luZm8gKi9cbjU0Nzc6XHRcdGZyYW1lX3N6ID0gKHZvaWQgKilza2JfZW5kX3BvaW50ZXIoc2tiKSAtIGhhcmRfc3RhcnQ7XG41NDc4Olx0XHRmcmFtZV9zeiAmIzQzOz0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTtcbjU0Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgdmV0aF94ZHBfcmN2X3NrYmAqKgoKQWxyaWdodCwgc28gdGhlIGlzc3VlIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3QgaGlkZGVuIGJlaGluZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFjcm8sIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBtZWFucyBJIGNhbiBsb29rIGF0IHRoZSBjb2RlIGRpcmVjdGx5IHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGltbWVkaWF0ZWx5LgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHZldGhfeGRwX3Jjdl9za2JgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBmYWlybHkgY2VydGFpbiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHdpdGhpbiBgZHJpdmVycy9uZXQvdmV0aC5jYC4gVGhlIGB2ZXRoYCBkcml2ZXIgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgaGFuZGxpbmcgb2YgVmlydHVhbCBFdGhlcm5ldCBkZXZpY2VzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW50ZXJhY3Rpb25zIGlzIGltcG9ydGFudC4gSeKAmW0gZ29pbmcgdG8gZ28gc3RyYWlnaHQgdG8gdGhhdCBmaWxlIHRvIGludmVzdGlnYXRlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBmdW5jdGlvbiYjMzk7cyBicm9hZGVyIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODA6XHRcdCpwc2tiID0gc2tiO1xuIDc4MTpcdFxuIDc4MjpcdFx0cmV0dXJuIDA7XG4gNzgzOlx0ZHJvcDpcbiA3ODQ6XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gNzg1Olx0XHQqcHNrYiA9IE5VTEw7XG4gNzg2Olx0XG4gNzg3Olx0XHRyZXR1cm4gLUVOT01FTTtcbiA3ODg6XHR9XG4gNzg5Olx0XG4gNzkwOlx0c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcbiA3OTE6XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbiA3OTI6XHRcdFx0XHRcdFx0c3RydWN0IHZldGhfeGRwX3R4X2JxICpicSxcbiA3OTM6XHRcdFx0XHRcdFx0c3RydWN0IHZldGhfc3RhdHMgKnN0YXRzKVxuIDc5NDpcdHtcbiA3OTU6XHRcdHZvaWQgKm9yaWdfZGF0YSwgKm9yaWdfZGF0YV9lbmQ7XG4gNzk2Olx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIDc5NzpcdFx0c3RydWN0IHZldGhfeGRwX2J1ZmYgdnhidWY7XG4gNzk4Olx0XHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCA9IFx1MDAyNnZ4YnVmLnhkcDtcbiA3OTk6XHRcdHUzMiBhY3QsIG1ldGFsZW47XG4gODAwOlx0XHRpbnQgb2ZmO1xuIDgwMTpcdFxuIDgwMjpcdFx0c2tiX3ByZXBhcmVfZm9yX2dybyhza2IpO1xuIDgwMzpcdFxuIDgwNDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDgwNTpcdFx0eGRwX3Byb2cgPSByY3VfZGVyZWZlcmVuY2UocnEtXHUwMDNleGRwX3Byb2cpO1xuIDgwNjpcdFx0aWYgKHVubGlrZWx5KCF4ZHBfcHJvZykpIHtcbiA4MDc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gODA4Olx0XHRcdGdvdG8gb3V0O1xuIDgwOTpcdFx0fVxuIDgxMDpcdFxuIDgxMTpcdFx0X19za2JfcHVzaChza2IsIHNrYi1cdTAwM2VkYXRhIC0gc2tiX21hY19oZWFkZXIoc2tiKSk7XG4gODEyOlx0XHRpZiAodmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihycSwgeGRwLCBcdTAwMjZza2IpKVxuIDgxMzpcdFx0XHRnb3RvIGRyb3A7XG4gODE0Olx0XHR2eGJ1Zi5za2IgPSBza2I7XG4gODE1Olx0XG4gODE2Olx0XHRvcmlnX2RhdGEgPSB4ZHAtXHUwMDNlZGF0YTtcbiA4MTc6XHRcdG9yaWdfZGF0YV9lbmQgPSB4ZHAtXHUwMDNlZGF0YV9lbmQ7XG4gODE4Olx0XG4gODE5Olx0XHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHhkcF9wcm9nLCB4ZHApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QgZ2F0ZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIOKAkyB0aGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBJdCBzZWVtcyB0byBkaXJlY3RseSBtb2RpZnkgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB0b3VjaGluZyB0aGUgdmV0aCBkcml2ZXIgYW5kIG90aGVyIG5ldHdvcmtpbmcgY29kZS4gR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBjb3JlIGZ1bmN0aW9uYWxpdHksIGZ1enppbmcgaXMgYWJzb2x1dGVseSB0aGUgcmlnaHQgYXBwcm9hY2ggaGVyZS4gV2UgbmVlZCB0byBzdWJqZWN0IHRoaXMgdG8gcmlnb3JvdXMgdGVzdGluZy4KCk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IG5lZWRzIHRvIGJlIG9uIHRoZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBzeW1ib2wuIEnigJltIHRoaW5raW5nIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIGNvbnRyb2wgZmxvdyBwb2ludCB3aXRoaW4gdGhlIHBhdGNoLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byBmb2N1c2luZyBvdXIgZnV6emluZyBlZmZvcnRzLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBJIHNlZSBpdCByZWxpZXMgb24gYFZFVEhgIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGVuYWJsaW5nIG9yIGNvbnRyb2xsaW5nIHRoZSBYRFAgZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gYmUgc3VyZSB3ZSYjMzk7cmUgdGVzdGluZyB0aGUgY29ycmVjdCBjb2RlIHBhdGhzLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcxMQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgQlBGIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gTmF0dXJhbGx5LCBJIGltbWVkaWF0ZWx5IHRoaW5rLCAqeWVzLCBgQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24ga25vYiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dC4qIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZnVuZGFtZW50YWwgZW5hYmxlciBmb3IgQlBGIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IHNwcmluZ3MgdG8gbWluZC4KCkJ1dCB0aGVuIG15IG1pbmQgYXV0b21hdGljYWxseSBqdW1wcyB0byB0aGUgbnVhbmNlcy4gSSYjMzk7bSB3b25kZXJpbmcsICppcyBgQlBGX1NZU0NBTExgIHRoZSAqb25seSogdGhpbmcgd2UgbmVlZCB0byBjb25zaWRlciwgb3IgYXJlIHRoZXJlIHNwZWNpZmljLCBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXksIHBhcnRpY3VsYXJseSB3aGVuIGZvY3VzaW5nIG9uIFhEUCBwcm9ncmFtcz8qICBXZSBhbGwga25vdyBYRFAgaGFzIGl0cyBvd24gcGVjdWxpYXJpdGllcywgaXRzIG93biBwZXJmb3JtYW5jZSBwcm9maWxlLCBhbmQgaXRzIG93biB1c2UtY2FzZXMg4oCTIGl0cyBub3QgbWVyZWx5IEJQRiwgaXQmIzM5O3MgYSBzcGVjaWFsaXplZCBleGVjdXRpb24gcGF0aC4gIFNvLCBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhIHNwZWNpZmljLCBYRFAtY2VudHJpYyBjb25maWcgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLCBvciBpZiBpdCYjMzk7cyBhbGwgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgYEJQRl9TWVNDQUxMYCBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLCBhbmQgaG93IFhEUCBpcyBhY3R1YWxseSAqZW5hYmxlZCogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWERQIEVudHJ5cG9pbnQgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBYRFAgYW5kIGhvdyB0byBiZXN0IHRhcmdldCBpdCBmb3Igd2hhdGV2ZXIgSSYjMzk7bSBkb2luZy4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgWERQIGlzIGF2YWlsYWJsZSB3aGVuZXZlciBCUEYgaXMgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBkaWcgaW50byBgbmV0L2NvcmUvZGV2LmNgIHRvIGxvb2sgYXQgaG93IHRoaXMgYWxsIHRpZXMgdG9nZXRoZXIuIFRoZSBpbW1lZGlhdGUgc3ltYm9sIHRoYXQganVtcHMgb3V0IGlzIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgOyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEFuZCBzaW5jZSBJJiMzOTttIHRyeWluZyB0byBmaW5kIGFuIGVudHJ5IHBvaW50LCBgVkVUSGAgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIGNvbmZpZ3VyYXRpb24gdG8gd29yayB3aXRoLgoKTm93LCBhIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIHRoZSAqb25seSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnZvbHZlZCBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgZmV3IG90aGVyIFhEUC1yZWxhdGVkIGZ1bmN0aW9ucyBpbiBgdmV0aC5jYCwgYnV0IHRoZXkmIzM5O3JlIGFsbCAqc3RhdGljKjogYHZldGhfeGRwX3Jjdl9za2JgLCBgdmV0aF94ZHBfcmN2YCwgYHZldGhfcG9sbGAsIGB2ZXRoX3hkcF94bWl0YCwgYHZldGhfbmRvX3hkcF94bWl0YC4gUmlnaHQsIHRoYXQmIzM5O3MgdHlwaWNhbDsgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBrZXB0IHN0YXRpYy4gU28gaXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCAqaXMqIHRoZSB3YXkgdG8gZ28uCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYHZldGhfeGRwX3Jjdl9za2JgIGlzIGlubGluZWQuIElmIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBzeXprYWxsZXIgY291bGQgdGhlb3JldGljYWxseSB0cmFjZSBpdCBpZiBpdCYjMzk7cyBpbiB0aGUgc3ltYm9sIHRhYmxlLiBIb3dldmVyLCB0aGUgZ3VpZGVsaW5lIHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLiBTbyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBzdGlsbCB0aGUgYmVzdCBwaWNrLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhcm91bmQgYG5ldC9jb3JlL2Rldi5jYCBmb3IgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIE9rYXksIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGV4cG9ydGVkIGl0c2VsZiwgYnV0IGxvb2tpbmcgYXQgaXRzIGNhbGwgZ3JhcGguLi4gaXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBjYWxsZWQgYnkgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLCB3aGljaCBpcyBzdGF0aWMuIFRoYXQsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgZG9feGRwX2dlbmVyaWNgLCB3aGljaCBpcyBhbHNvIHN0YXRpYy4gQW5kIGBkb194ZHBfZ2VuZXJpY2AgaXMgY2FsbGVkIGJ5IGBfX25ldGlmX3JlY2VpdmVfc2tiX2NvcmVgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCBmaW5hbGx5LCBgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlYCBpcyBjYWxsZWQgYnkgYF9fbmV0aWZfcmVjZWl2ZV9za2Jfb25lX2NvcmVgLCB3aGljaCAqaXMqIGV4cG9ydGVkLiBTbywgdGhlIHBhdGggaXM6IGBfX25ldGlmX3JlY2VpdmVfc2tiX29uZV9jb3JlYCAtJmd0OyBgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlYCAtJmd0OyBgZG9feGRwX2dlbmVyaWNgIC0mZ3Q7IGBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwYCAtJmd0OyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gU28gdGhlIGNvbmNsdXNpb24gaXMsIHRoYXQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgc3RpbGwgYSBnb29kIGVudHJ5cG9pbnQgZm9yIHRoZSBYRFAgZnVuY3Rpb25hbGl0eS4KCkFscmlnaHQsIHRoYXQgc2V0dGxlcyBpdDsgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGEgRnVuY3Rpb24qKgoKSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQmIzM5O3MgKm5vdCogZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGNsdWUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpdCYjMzk7cyBhbHNvICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbXBsaWVzIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgY29tcGlsYXRpb24gdW5pdCwgcmlnaHQ/IFRoZSBsaW5rZXIgc2hvdWxkIGJlIGFibGUgdG8gc2VlIGl0LCB3aGljaCBzdWdnZXN0cyBwb3RlbnRpYWwgdXNlIGVsc2V3aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCBtb2R1bGUgb3IgZXZlbiBsaW5rZWQgZXh0ZXJuYWxseS4gT2theSwgSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZmlndXJlIG91dCB0aGUgaW50ZW5kZWQgdmlzaWJpbGl0eS4KCkxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gSSYjMzk7bGwgaGVhZCBiYWNrIG92ZXIgdG8gYG5ldC9jb3JlL2Rldi5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0JiMzOTtzIHRoZSBwbGFjZSB0aGlzIGlzIGRlZmluZWQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgc2VlIGV4YWN0bHkgKmhvdyogYW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVybmVzcyBoZXJlIHRoYXQgSSBtaXNzZWQgdGhlIGZpcnN0IHRpbWUgYXJvdW5kLiBUaW1lIHRvIGNvbmZpcm0gaWYgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgb3IgbmVlZCB0byBleHBhbmQgdGhlIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQyOTY9c3RhdGljIGlubGluZSB2b2lkIGRldl9jb25zdW1lX3NrYl9hbnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDAtXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQzMDE6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMi1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA1OAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdmV0aF94ZHBfcmN2X3NrYmAqKgoKUmlnaHQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdsb2JhbCBjb25jZXJuLiBJIG5lZWQgdG8gZmlndXJlIG91dCBqdXN0IGhvdyBmYXIgdGhpcyByZWFjaGVzLiBMZXQmIzM5O3Mgc2VlLi4uICp0aGlua3MgYmFjayB0byB0aGUgY29kZSogLi4ub2theSwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgdmV0aF94ZHBfcmN2X3NrYmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFllcywgdGhhdCYjMzk7cyBpdC4gQ29uZmlybWVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogZ2xvYmFsIGZ1bmN0aW9ucyBsdXJraW5nIGluIGB2ZXRoLmNgIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGFuZCBjaGVjay4gVGhhdCYjMzk7cyB0aGUgcmVhbCB0ZXN0IG9mIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIHZldGhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYy00Mi1cbmRyaXZlcnMvbmV0L3ZldGguYzo0MzpzdHJ1Y3QgdmV0aF9zdGF0cyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNDQtXHR1NjRcdHJ4X2Ryb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01NS1cbmRyaXZlcnMvbmV0L3ZldGguYzo1NjpzdHJ1Y3QgdmV0aF9ycV9zdGF0cyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNTctXHRzdHJ1Y3QgdmV0aF9zdGF0c1x0dnM7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTYwLVxuZHJpdmVycy9uZXQvdmV0aC5jOjYxOnN0cnVjdCB2ZXRoX3JxIHtcbmRyaXZlcnMvbmV0L3ZldGguYy02Mi1cdHN0cnVjdCBuYXBpX3N0cnVjdFx0eGRwX25hcGk7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTczLVxuZHJpdmVycy9uZXQvdmV0aC5jOjc0OnN0cnVjdCB2ZXRoX3ByaXYge1xuZHJpdmVycy9uZXQvdmV0aC5jLTc1LVx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3VcdCpwZWVyO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy04MS1cbmRyaXZlcnMvbmV0L3ZldGguYzo4MjpzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEge1xuZHJpdmVycy9uZXQvdmV0aC5jLTgzLVx0c3RydWN0IHhkcF9mcmFtZSAqcVtWRVRIX1hEUF9UWF9CVUxLX1NJWkVdO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy05MC1cbmRyaXZlcnMvbmV0L3ZldGguYzo5MTpzdHJ1Y3QgdmV0aF9xX3N0YXRfZGVzYyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtOTItXHRjaGFyXHRkZXNjW0VUSF9HU1RSSU5HX0xFTl07XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTExNz1zdGF0aWMgc3RydWN0IHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTIyLVxuZHJpdmVycy9uZXQvdmV0aC5jOjEyMzpzdHJ1Y3QgdmV0aF94ZHBfYnVmZiB7XG5kcml2ZXJzL25ldC92ZXRoLmMtMTI0LVx0c3RydWN0IHhkcF9idWZmIHhkcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NzEKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFhEUCBQYWNrZXQgVGFpbCBBZGp1c3RtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIGJ1ZyByZWxhdGVkIHRvIGhvdyBgc2tiLSZndDtsZW5gIGFuZCBgc2tiLSZndDtkYXRhX2xlbmAgYXJlIGhhbmRsZWQgYWZ0ZXIgYW4gWERQIHByb2dyYW0gbW9kaWZpZXMgdGhlIHBhY2tldCB0YWlsLCBzcGVjaWZpY2FsbHkgd2l0aCBzb21ldGhpbmcgbGlrZSBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIFRoaXMgYXBwZWFycyB0byBiZSByZWxldmFudCBpbiBib3RoIHRoZSBnZW5lcmljIFhEUCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQsIGNyaXRpY2FsbHksIHRoZSB2ZXRoIGRyaXZlciYjMzk7cyBYRFAgcmVjZWl2ZSBwYXRoLiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQgZ2l2ZXMgbWUgbW9yZSBzdXJmYWNlIGFyZWEuCgpHaXZlbiB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIGluIGB2ZXRoLmNgIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgdGhhdCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS4gTXkgcHJpbWFyeSBzeW1ib2wgb2YgaW50ZXJlc3QgaGFzIHRvIGJlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzIHRvIGZpbmQgdGhlIGJ1Zy4gSXQgd2lsbCBoaXQgdGhvc2UgZnVuY3Rpb25zLCBJJiMzOTttIGd1ZXNzaW5nLgoKRnJvbSB0aGUgY29uZmlnIHBlcnNwZWN0aXZlLCBgVkVUSGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIHRoZSBrZXkgY29uZmlncyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBpc3N1ZS4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIG9idmlvdXNseS4KClRoaXMgZml4IGlzIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycy4gVGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgZnV6emluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIHRoYXQgdGFyZ2V0ZWQgZnV6emluZyBjb3VsZCBiZSB2ZXJ5IGVmZmVjdGl2ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byB0YXJnZXQgYm90aCBnZW5lcmljIFhEUCBhbmQgdGhlIHZldGggZHJpdmVyIHNwZWNpZmljYWxseS4gVGhpcyB3aWxsIGJlIGFuIGltcG9ydGFudCBhbmQgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXQuIExldCYjMzk7cyBnZXQgdG8gd29yayBhbmQgc2V0IHVwIG15IGZ1enppbmcgaGFybmVzc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkVUSCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBob3cgc2tiLVx1MDAzZWxlbiBhbmQgc2tiLVx1MDAzZWRhdGFfbGVuIGFyZSBzeW5jaHJvbml6ZWQgd2l0aCB4ZHAgZGF0YSBhZnRlciBydW5uaW5nIGFuIFhEUCBwcm9ncmFtIHRoYXQgYWRqdXN0cyB0aGUgcGFja2V0IHRhaWwgKGUuZy4sIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBUaGlzIGFmZmVjdHMgYm90aCB0aGUgZ2VuZXJpYyBYRFAgcGF0aCBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSB2ZXRoIGRyaXZlciYjMzk7cyBYRFAgcmVjZWl2ZSBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRVRIJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGhvdyBza2ItXHUwMDNlbGVuIGFuZCBza2ItXHUwMDNlZGF0YV9sZW4gYXJlIHN5bmNocm9uaXplZCB3aXRoIHhkcCBkYXRhIGFmdGVyIHJ1bm5pbmcgYW4gWERQIHByb2dyYW0gdGhhdCBhZGp1c3RzIHRoZSBwYWNrZXQgdGFpbCAoZS5nLiwgYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBnZW5lcmljIFhEUCBwYXRoIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyJiMzOTtzIFhEUCByZWNlaXZlIHBhdGguIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMDoyNC43NjI4NzM5NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEwODM4ODc2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkVUSFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBob3cgc2tiLVxcdTAwM2VsZW4gYW5kIHNrYi1cXHUwMDNlZGF0YV9sZW4gYXJlIHN5bmNocm9uaXplZCB3aXRoIHhkcCBkYXRhIGFmdGVyIHJ1bm5pbmcgYW4gWERQIHByb2dyYW0gdGhhdCBhZGp1c3RzIHRoZSBwYWNrZXQgdGFpbCAoZS5nLiwgYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBnZW5lcmljIFhEUCBwYXRoIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyJ3MgWERQIHJlY2VpdmUgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6MjQuNzYyODc5OTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYxODc2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNDM0MDMxM2FlMDEzZTFlYmQ4ZGNjYjE4NTBlZDNlNDJkM2RlMGEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDY6MTA6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXFxuaW5kZXggMDBlMzRhZmQ4NThlNy4uZjgwZjY1ODRhNmZmOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcXG4rKysgYi9kcml2ZXJzL25ldC92ZXRoLmNcXG5AQCAtODY1LDE4ICs4NjUsMjQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuIFxcbi1cXHQvKiBjaGVjayBpZiBicGZfeGRwX2FkanVzdF90YWlsIHdhcyB1c2VkICovXFxuLVxcdG9mZiA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgLSBvcmlnX2RhdGFfZW5kO1xcbi1cXHRpZiAob2ZmICE9IDApXFxuLVxcdFxcdF9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqL1xcbi1cXG4gXFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xcbi1cXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cXG4rXFx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFJlbW92ZSB0aGUgb2xkIGZyYWdtZW50IGNvbnRyaWJ1dGlvblxcbitcXHQgKiBmcm9tIHNrYi1cXHUwMDNlbGVuIGJlZm9yZSB1cGRhdGluZyBkYXRhX2xlbiwgdGhlbiBhZGQgdGhlIG5ldyBvbmUgYmFjay5cXG4gXFx0ICovXFxuLVxcdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSlcXG4rXFx0c2tiLVxcdTAwM2VsZW4gLT0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4rXFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZXhkcF9mcmFnc19zaXplO1xcbi1cXHRlbHNlXFxuK1xcdFxcdHNrYi1cXHUwMDNlbGVuICs9IHNrYi1cXHUwMDNlZGF0YV9sZW47XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGF0YV9sZW4gPSAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTeW5jaHJvbml6ZSB0aGUgc2tiIHRhaWwgd2l0aCBYRFAncyB1cGRhdGVkIGxpbmVhciBhcmVhLiAqL1xcbitcXHRvZmYgPSB4ZHAtXFx1MDAzZWRhdGFfZW5kIC0gb3JpZ19kYXRhX2VuZDtcXG4rXFx0aWYgKG9mZiAhPSAwKSB7XFxuK1xcdFxcdHNrYl9zZXRfdGFpbF9wb2ludGVyKHNrYiwgeGRwLVxcdTAwM2VkYXRhX2VuZCAtIHhkcC1cXHUwMDNlZGF0YSk7XFxuK1xcdFxcdHNrYi1cXHUwMDNlbGVuICs9IG9mZjsgLyogcG9zaXRpdmUgb24gZ3JvdywgbmVnYXRpdmUgb24gc2hyaW5rICovXFxuK1xcdH1cXG4gXFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJxLVxcdTAwM2VkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDU5MzNjNWRhYjA5ZWUuLjVjMzdjZjZjNGFhMTAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC01NTE3LDEyICs1NTE3LDE2IEBAIHUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFhEUCBmcmFnIG1ldGFkYXRhIChlLmcuIG5yX2ZyYWdzKSBhcmUgdXBkYXRlZCBpbiBlQlBGIGhlbHBlcnNcXG4tXFx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXFxuK1xcdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBSZW1vdmUgdGhlIG9sZCBmcmFnbWVudCBjb250cmlidXRpb25cXG4rXFx0ICogZnJvbSBza2ItXFx1MDAzZWxlbiBiZWZvcmUgdXBkYXRpbmcgZGF0YV9sZW4sIHRoZW4gYWRkIHRoZSBuZXcgb25lIGJhY2suXFxuIFxcdCAqL1xcbi1cXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpXFxuK1xcdHNrYi1cXHUwMDNlbGVuIC09IHNrYi1cXHUwMDNlZGF0YV9sZW47XFxuK1xcdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkge1xcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcXG4tXFx0ZWxzZVxcbitcXHRcXHRza2ItXFx1MDAzZWxlbiArPSBza2ItXFx1MDAzZWRhdGFfbGVuO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogY2hlY2sgaWYgWERQIGNoYW5nZWQgZXRoIGhkciBzdWNoIFNLQiBuZWVkcyB1cGRhdGUgKi9cXG4gXFx0ZXRoID0gKHN0cnVjdCBldGhoZHIgKil4ZHAtXFx1MDAzZWRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEwOjI1LjE5OTg0MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzA2NDY5MDkwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkVUSFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBob3cgc2tiLVxcdTAwM2VsZW4gYW5kIHNrYi1cXHUwMDNlZGF0YV9sZW4gYXJlIHN5bmNocm9uaXplZCB3aXRoIHhkcCBkYXRhIGFmdGVyIHJ1bm5pbmcgYW4gWERQIHByb2dyYW0gdGhhdCBhZGp1c3RzIHRoZSBwYWNrZXQgdGFpbCAoZS5nLiwgYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBnZW5lcmljIFhEUCBwYXRoIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyJ3MgWERQIHJlY2VpdmUgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjQzNDAzMTNhZTAxM2UxZWJkOGRjY2IxODUwZWQzZTQyZDNkZTBhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMDY6MTA6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmNcbmluZGV4IDAwZTM0YWZkODU4ZTcuLmY4MGY2NTg0YTZmZjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuQEAgLTg2NSwxOCArODY1LDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4gXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFxuLVx0LyogY2hlY2sgaWYgYnBmX3hkcF9hZGp1c3RfdGFpbCB3YXMgdXNlZCAqL1xuLVx0b2ZmID0geGRwLVx1MDAzZWRhdGFfZW5kIC0gb3JpZ19kYXRhX2VuZDtcbi1cdGlmIChvZmYgIT0gMClcbi1cdFx0X19za2JfcHV0KHNrYiwgb2ZmKTsgLyogcG9zaXRpdmUgb24gZ3JvdywgbmVnYXRpdmUgb24gc2hyaW5rICovXG4tXG4gXHQvKiBYRFAgZnJhZyBtZXRhZGF0YSAoZS5nLiBucl9mcmFncykgYXJlIHVwZGF0ZWQgaW4gZUJQRiBoZWxwZXJzXG4tXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cbitcdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBSZW1vdmUgdGhlIG9sZCBmcmFnbWVudCBjb250cmlidXRpb25cbitcdCAqIGZyb20gc2tiLVx1MDAzZWxlbiBiZWZvcmUgdXBkYXRpbmcgZGF0YV9sZW4sIHRoZW4gYWRkIHRoZSBuZXcgb25lIGJhY2suXG4gXHQgKi9cbi1cdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSlcbitcdHNrYi1cdTAwM2VsZW4gLT0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuK1x0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7XG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcbi1cdGVsc2VcbitcdFx0c2tiLVx1MDAzZWxlbiArPSBza2ItXHUwMDNlZGF0YV9sZW47XG4rXHR9IGVsc2Uge1xuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSAwO1xuK1x0fVxuK1xuK1x0LyogU3luY2hyb25pemUgdGhlIHNrYiB0YWlsIHdpdGggWERQJ3MgdXBkYXRlZCBsaW5lYXIgYXJlYS4gKi9cbitcdG9mZiA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIG9yaWdfZGF0YV9lbmQ7XG4rXHRpZiAob2ZmICE9IDApIHtcbitcdFx0c2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSk7XG4rXHRcdHNrYi1cdTAwM2VsZW4gKz0gb2ZmOyAvKiBwb3NpdGl2ZSBvbiBncm93LCBuZWdhdGl2ZSBvbiBzaHJpbmsgKi9cbitcdH1cbiBcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcnEtXHUwMDNlZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlLi41YzM3Y2Y2YzRhYTEwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTUxNywxMiArNTUxNywxNiBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuIFx0fVxuIFxuIFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xuLVx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXG4rXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKS4gUmVtb3ZlIHRoZSBvbGQgZnJhZ21lbnQgY29udHJpYnV0aW9uXG4rXHQgKiBmcm9tIHNrYi1cdTAwM2VsZW4gYmVmb3JlIHVwZGF0aW5nIGRhdGFfbGVuLCB0aGVuIGFkZCB0aGUgbmV3IG9uZSBiYWNrLlxuIFx0ICovXG4tXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpXG4rXHRza2ItXHUwMDNlbGVuIC09IHNrYi1cdTAwM2VkYXRhX2xlbjtcbitcdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkge1xuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemU7XG4tXHRlbHNlXG4rXHRcdHNrYi1cdTAwM2VsZW4gKz0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuK1x0fSBlbHNlIHtcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gMDtcbitcdH1cbiBcbiBcdC8qIGNoZWNrIGlmIFhEUCBjaGFuZ2VkIGV0aCBoZHIgc3VjaCBTS0IgbmVlZHMgdXBkYXRlICovXG4gXHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cdTAwM2VkYXRhO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6MjUuMTk5ODQ1MDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk4MzI5MDYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBOZXR3b3JrIENvcmUgYW5kIFZldGggRHJpdmVyIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgdG91Y2hpbmcgYm90aCBgZHJpdmVycy9uZXQvdmV0aC5jYCBhbmQgYG5ldC9jb3JlL2Rldi5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgbXkgZXllYnJvd3MuIEFueXRpbWUgd2UncmUgbWVzc2luZyB3aXRoIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBob3cgYHNrYi1cdTAwM2VsZW5gIGFuZCBgc2tiLVx1MDAzZWRhdGFfbGVuYCBhcmUgaGFuZGxlZCB3aXRoIFhEUCBkYXRhIGFmdGVyIGFuIFhEUCBwcm9ncmFtIHJ1bnMuIFN5bmNocm9uaXphdGlvbiBoZXJlIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCB0d28gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHZldGhfeGRwX3Jjdl9za2JgIGluIGBkcml2ZXJzL25ldC92ZXRoLmNgIGlzIHVwZGF0ZWQsIGFuZCB0aGVuIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGluIGBuZXQvY29yZS9kZXYuY2AgYWxzbyBnZXRzIGEgbG9vay4gVGhvc2UgYXJlIGZ1bmN0aW9uIGNoYW5nZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgb24gdGhlIHJhZGFyLiBCb3RoIG9mIHRoZXNlIGFyZSBpbiBjcml0aWNhbCBwYXRocyBmb3IgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgbWlzc3RlcHMgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHkgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGlzc3Vlcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgY29uZmlnIG9wdGlvbnMuIGBkcml2ZXJzL25ldC92ZXRoLmNgIG5lZWRzIGBDT05GSUdfVkVUSGAgdG8gYmUgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBgbmV0L2NvcmUvZGV2LmNgLCBhcyBhIGNvcmUgY29tcG9uZW50LCBpcyBhbHdheXMgY29tcGlsZWQuIFhEUCBmdW5jdGlvbmFsaXR5LCB0aGF0IGlzIGEgd2hvbGUgYW5vdGhlciBiZWFzdCwgYW5kIGNvdWxkIGRlcGVuZCBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBzb21lIG90aGVyIEJQRi1yZWxhdGVkIGNvbmZpZywgYnV0IHRoZSBiYXNlIHZldGggYW5kIGRldiBjb2RlIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5UaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHNlYXJjaGluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVzLCBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBpbXBhY3RzIGFuZCBpZGVudGlmeSBhcmVhcyB0aGF0IG5lZWQgcGFydGljdWxhcmx5IGNsb3NlIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6MzcuMTgzMTM3NjY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTAyNTEwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmV0aF94ZHBfcmN2X3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92ZXRoLmM9NzUxPXN0YXRpYyBpbnQgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo3OTA6c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG5kcml2ZXJzL25ldC92ZXRoLmMtNzkxLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9OTA3PXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05MzktXFx0XFx0XFx0c3RhdHMtXFx1MDAzZXhkcF9ieXRlcyArPSBza2ItXFx1MDAzZWxlbjtcXG5kcml2ZXJzL25ldC92ZXRoLmM6OTQwOlxcdFxcdFxcdHNrYiA9IHZldGhfeGRwX3Jjdl9za2IocnEsIHNrYiwgYnEsIHN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTQxLVxcdFxcdFxcdGlmIChza2IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6MzguODkzMzkzMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQ4ODg1NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBmdW5jdGlvbiBhbmQgaG93IGl0IHdvcmtzLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBpdCBpbiBtaW5kLCBhcyBpdCdzIHRoZSBjb3JlIG9mIGhvdyBlQlBGIHByb2dyYW1zIHJ1biBpbiBYRFAgY29udGV4dC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGFsbCB0aGUgbnVhbmNlcyBvZiBlQlBGIHByb2dyYW1zLCBYRFAgKGFuZCBpdHMgc3BlY2lmaWMgaW1wbGljYXRpb25zKSwgYW5kIGV4YWN0bHkgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIEJQRiBWTSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBoYW5kbGluZyB0aGUgZ2VuZXJhbCBjYXNlcywgdGhlIG9uZXMgdGhhdCBhcmVuJ3Qgc3BlY2lmaWMgdG8gYSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbjsgdGhhdCBjb3VsZCBwb2ludCB0byB0aGUgcGxhY2VzIHdoZXJlIHRoZXkgaGFuZGxlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBmb3J3YXJkaW5nLiBJIGV4cGVjdCB0aGVyZSdsbCBiZSBhIGxvb3AsIGxpa2VseSBpbnRlcnByZXRpbmcgYW5kIGV4ZWN1dGluZyB0aGUgQlBGIGluc3RydWN0aW9ucy4gUHJvYmFibHkgY2hlY2tzIGFyb3VuZCB0aGUgdmFsaWRpdHkgb2YgdGhlIHBhY2tldHMsIGFuZCBob3cgdG8gcmVwb3J0IGFueSBlcnJvci4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBob2xkcyB0cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6NDQuOTQyMjgwODk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTczMzM5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2NvbnN1bWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAwLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDMwMTp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMi1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpO1xcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz0xMzk9c3RhdGljIHUzMiBjcHVfbWFwX2JwZl9wcm9nX3J1bl9za2Ioc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0xNDktXFxua2VybmVsL2JwZi9jcHVtYXAuYzoxNTA6XFx0XFx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHNrYiwgXFx1MDAyNnhkcCwgcmNwdS1cXHUwMDNlcHJvZyk7XFxua2VybmVsL2JwZi9jcHVtYXAuYy0xNTEtXFx0XFx0c3dpdGNoIChhY3QpIHtcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9NTE1PXN0YXRpYyB1MzIgZGV2X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfZHRhYl9uZXRkZXYgKmRzdClcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtNTI2LVxcbmtlcm5lbC9icGYvZGV2bWFwLmM6NTI3OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFxcdTAwMjZ4ZHAsIGRzdC1cXHUwMDNleGRwX3Byb2cpO1xcbmtlcm5lbC9icGYvZGV2bWFwLmMtNTI4LVxcdHN3aXRjaCAoYWN0KSB7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpuZXRpZl9nZXRfcnhxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cXG5uZXQvY29yZS9kZXYuYzo1NDU4OnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NTkwPXN0YXRpYyB1MzIgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NjE3LVxcbm5ldC9jb3JlL2Rldi5jOjU2MTg6XFx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKCpwc2tiLCB4ZHAsIHhkcF9wcm9nKTtcXG5uZXQvY29yZS9kZXYuYy01NjE5LVxcdHN3aXRjaCAoYWN0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEwOjQ2Ljg1OTYyMjA5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNDIxMzIyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIFRhaWwgQWRqdXN0bWVudHMgXHUwMDI2IFZldGggRHJpdmVyIEZpeCAtIEZ1enppbmcgT3Bwb3J0dW5pdHkhKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGNydWNpYWwgaXNzdWU6IGhvdyBgc2tiLVx1MDAzZWxlbmAgKHRoZSBsZW5ndGggb2YgdGhlIHNrX2J1ZmYpIGlzIHVwZGF0ZWQgd2hlbiBYRFAgcHJvZ3JhbXMgYXJlIG1hbmlwdWxhdGluZyB0aGUgdGFpbCBlbmQgb2YgcGFja2V0cy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY29yZSBuZXR3b3JraW5nIHRoaW5nIGFuZCB0b3VjaGVzIHRoZSB2ZXRoIGRyaXZlciBzcGVjaWZpY2FsbHkuIFRoaXMgc291bmRzIGxpa2UgcHJpbWUgdGVycml0b3J5IGZvciBzb21lIHJpZ29yb3VzIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYHZldGhfeGRwX3Jjdl9za2JgLCBidXQgc2luY2UgaXQncyBzdGF0aWMsIHRoYXQgbWlnaHQgYmUgdHJpY2t5IHRvIHRhcmdldCBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cy4gTGV0J3MgZGlnIGRlZXBlci4gSW5zdGVhZCBvZiBgdmV0aF94ZHBfcmN2X3NrYmAsIG15IGZpcnN0IGZvY3VzIHNob3VsZCBiZSBvbiBgdmV0aF94ZHBfcmN2YCBhbmQgYHZldGhfcG9sbGAgYXMgZW50cnkgcG9pbnRzLiBJIGJldCBpZiBJIGV4cGxvcmUgaG93IHRob3NlIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGFkanVzdGVkIGxlbmd0aHMgYWZ0ZXIgWERQIG1vZGlmaWNhdGlvbnMsIEknbGwgZmluZCB0aGUgdnVsbmVyYWJpbGl0aWVzIHRoYXQgdGhlIHBhdGNoIGlzIGZpeGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMDo1My45MDE3NTY0ODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0OTA5NzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXRoX3hkcF9yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jPTYyMj1zdGF0aWMgaW50IHZldGhfeGRwX3R4KHN0cnVjdCB2ZXRoX3JxICpycSwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM3LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo2Mzg6c3RhdGljIHN0cnVjdCB4ZHBfZnJhbWUgKnZldGhfeGRwX3Jjdl9vbmUoc3RydWN0IHZldGhfcnEgKnJxLFxcbmRyaXZlcnMvbmV0L3ZldGguYy02MzktXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy03MDgtLyogZnJhbWVzIGFycmF5IGNvbnRhaW5zIFZFVEhfWERQX0JBVENIIGF0IG1vc3QgKi9cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzA5OnN0YXRpYyB2b2lkIHZldGhfeGRwX3Jjdl9idWxrX3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsIHZvaWQgKipmcmFtZXMsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTcxMC1cXHRcXHRcXHRcXHQgIGludCBuX3hkcGYsIHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9NzUxPXN0YXRpYyBpbnQgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo3OTA6c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG5kcml2ZXJzL25ldC92ZXRoLmMtNzkxLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTA2LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo5MDc6c3RhdGljIGludCB2ZXRoX3hkcF9yY3Yoc3RydWN0IHZldGhfcnEgKnJxLCBpbnQgYnVkZ2V0LFxcbmRyaXZlcnMvbmV0L3ZldGguYy05MDgtXFx0XFx0XFx0c3RydWN0IHZldGhfeGRwX3R4X2JxICpicSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05MjQtXFx0XFx0XFx0c3RhdHMtXFx1MDAzZXhkcF9ieXRlcyArPSB4ZHBfZ2V0X2ZyYW1lX2xlbihmcmFtZSk7XFxuZHJpdmVycy9uZXQvdmV0aC5jOjkyNTpcXHRcXHRcXHRmcmFtZSA9IHZldGhfeGRwX3Jjdl9vbmUocnEsIGZyYW1lLCBicSwgc3RhdHMpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy05MjYtXFx0XFx0XFx0aWYgKGZyYW1lKSB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI5LVxcdFxcdFxcdFxcdGlmIChuX3hkcGYgPT0gVkVUSF9YRFBfQkFUQ0gpIHtcXG5kcml2ZXJzL25ldC92ZXRoLmM6OTMwOlxcdFxcdFxcdFxcdFxcdHZldGhfeGRwX3Jjdl9idWxrX3NrYihycSwgeGRwZiwgbl94ZHBmLFxcbmRyaXZlcnMvbmV0L3ZldGguYy05MzEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYnEsIHN0YXRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05MzktXFx0XFx0XFx0c3RhdHMtXFx1MDAzZXhkcF9ieXRlcyArPSBza2ItXFx1MDAzZWxlbjtcXG5kcml2ZXJzL25ldC92ZXRoLmM6OTQwOlxcdFxcdFxcdHNrYiA9IHZldGhfeGRwX3Jjdl9za2IocnEsIHNrYiwgYnEsIHN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTQxLVxcdFxcdFxcdGlmIChza2IpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05NTEtXFx0aWYgKG5feGRwZilcXG5kcml2ZXJzL25ldC92ZXRoLmM6OTUyOlxcdFxcdHZldGhfeGRwX3Jjdl9idWxrX3NrYihycSwgeGRwZiwgbl94ZHBmLCBicSwgc3RhdHMpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy05NTMtXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9OTY1PXN0YXRpYyBpbnQgdmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05ODQtXFx0eGRwX3NldF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KCk7XFxuZHJpdmVycy9uZXQvdmV0aC5jOjk4NTpcXHRkb25lID0gdmV0aF94ZHBfcmN2KHJxLCBidWRnZXQsIFxcdTAwMjZicSwgXFx1MDAyNnN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMDo1NS41NTA4NjAxMzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAwOTY4NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgWERQIEV4ZWN1dGlvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFhEUCBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBJIHNlZSB0aGF0IGB2ZXRoX3hkcF9yY3ZgIGFuZCBgdmV0aF9wb2xsYCBhcmUgYm90aCBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0J3Mgbm90IGltbWVkaWF0ZWx5IHN1cnByaXNpbmcsIHRoZXkncmUgcHJvYmFibHkgaW50ZXJuYWwgdG8gdGhlIHZldGggZHJpdmVyLiBCdXQsIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGV4cG9ydGVkIOKAkyBpdCdzIGdsb2JhbCwgYXZhaWxhYmxlIG91dHNpZGUgdGhlIHZldGggbW9kdWxlLiBUaGF0J3MgdGhlIGtleS4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyaWMgWERQIHByb2dyYW0gZXhlY3V0aW9uIGZsb3cuIE5vdyBJJ2xsIG5lZWQgdG8gZ28gYW5kIGZpbmQgd2hlcmUgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgZGVmaW5lZC4gSSdsbCBjaGVjayBgbmV0L2NvcmUvZGV2LmNgLiBJIGhhdmUgYSBnb29kIGZlZWxpbmcgdGhhdCdzIHdoZXJlIEkgd2lsbCBmaW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTg0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MDAuODUxODMyMDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MjUwNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQyOTY9c3RhdGljIGlubGluZSB2b2lkIGRldl9jb25zdW1lX3NrYl9hbnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQzMDE6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDItXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM9MTM5PXN0YXRpYyB1MzIgY3B1X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBicGZfY3B1X21hcF9lbnRyeSAqcmNwdSxcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTQ5LVxcbmtlcm5lbC9icGYvY3B1bWFwLmM6MTUwOlxcdFxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFxcdTAwMjZ4ZHAsIHJjcHUtXFx1MDAzZXByb2cpO1xcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTUxLVxcdFxcdHN3aXRjaCAoYWN0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTUxNT1zdGF0aWMgdTMyIGRldl9tYXBfYnBmX3Byb2dfcnVuX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX2R0YWJfbmV0ZGV2ICpkc3QpXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyNi1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjUyNzpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc2tiLCBcXHUwMDI2eGRwLCBkc3QtXFx1MDAzZXhkcF9wcm9nKTtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyOC1cXHRzd2l0Y2ggKGFjdCkge1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NTctXFxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYxNy1cXG5uZXQvY29yZS9kZXYuYzo1NjE4OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtNTYxOS1cXHRzd2l0Y2ggKGFjdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTowMi40OTgwOTA4NjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTIyNjY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBYRFAgYW5kIFBvdGVudGlhbCBJbmxpbmluZyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgY29kZSBoZXJlLiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgdGhhdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uLCBhIGNvbW1vbiBlbnRyeSBwb2ludC4gSG93ZXZlciwgYHZldGhfeGRwX3Jjdl9za2JgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBHaXZlbiB0aGUgY3VycmVudCBvcHRpbWl6YXRpb24gbGFuZHNjYXBlLCBhIGZ1bmN0aW9uIGRlZmluZWQgYXMgc3RhdGljICpjb3VsZCogYmUgYSBjYW5kaWRhdGUgZm9yIGlubGluaW5nIGJ5IHRoZSBjb21waWxlciBkdXJpbmcgb3B0aW1pemF0aW9uLiBJIHdvbmRlciwgbGV0J3MganVzdCBtYWtlIHN1cmUsIGhhcyB0aGUgY29tcGlsZXIgb3B0aW1pemVkIGB2ZXRoX3hkcF9yY3Zfc2tiYCBhbmQgaW5saW5lZCBpdD9cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjA2LjE2OTMyMDIzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjYzOTYwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXRoX3hkcF9yY3Zfc2tiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3ZldGguYz03NTE9c3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy03ODktXFxuZHJpdmVycy9uZXQvdmV0aC5jOjc5MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxcbmRyaXZlcnMvbmV0L3ZldGguYy03OTEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz05MDc9c3RhdGljIGludCB2ZXRoX3hkcF9yY3Yoc3RydWN0IHZldGhfcnEgKnJxLCBpbnQgYnVkZ2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTkzOS1cXHRcXHRcXHRzdGF0cy1cXHUwMDNleGRwX2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbmRyaXZlcnMvbmV0L3ZldGguYzo5NDA6XFx0XFx0XFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy05NDEtXFx0XFx0XFx0aWYgKHNrYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTowNy44NTE5NjQ5MDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MzQ0NDczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgWERQIFByb2dyYW0gRXhlY3V0aW9uIGluIHRoZSB2ZXRoIERyaXZlcioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBYRFAgZXhlY3V0aW9uIHBhdGggaW4gdGhlIHZldGggZHJpdmVyLiBUaGUgY29kZSdzIHN0YXRpYyDigJMgbWVhbmluZywgSSBjYW4ndCBkaXJlY3RseSBpbmxpbmUgaXQsIGJ1dCBpdCdzIG5vdCBleHBsaWNpdGx5IGlubGluZSBlaXRoZXIuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciB0cmFjaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdXNlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGFzIGEgbGlrZWx5LCBrZXkgc3ltYm9sIHRvIHRyYWNlIGludG8gdGhlIFhEUCBleGVjdXRpb24uIFRoZSBgdmV0aGAgZHJpdmVyIGlzIG9mdGVuIGNyaXRpY2FsLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGJlc3QgZW50cnkgcG9pbnRzLlxuXG5JIHRoZW4gc3RhcnRlZCB0byB0aGluayBhYm91dCBgdmV0aF94ZHBfcmN2YC4gSXQgdG9vIGlzIHN0YXRpYywgYW5kIHRoYXQgcG9zZXMgYSBzaW1pbGFyIGNoYWxsZW5nZS4gSXMgdGhlcmUgYW55IHdheSB0aGF0IHRoZSBleGVjdXRpb24gZ2V0cyB0aGVyZSBmcm9tIHNvbWV0aGluZyB0aGF0J3Mgbm90IHN0YXRpYz8gSSBuZWVkIHRvIGZpbmQgYSBub24tc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgdmV0aC5jYCB0aGF0ICpjYWxscyogYHZldGhfeGRwX3JjdmAuIFRoYXQncyB0aGUgY3J1Y2lhbCBsaW5rIEknbSB0cnlpbmcgdG8gZXN0YWJsaXNoLiBJZiBJIGNhbiBmaW5kIHRoYXQgbm9uLXN0YXRpYyBjYWxsZXIsIEkndmUgZ290IGEgbXVjaCBtb3JlIGFjY2Vzc2libGUgcG9pbnQgZm9yIGFuYWx5c2lzIGFuZCBpbnN0cnVtZW50YXRpb24uIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNyb3NzLXJlZmVyZW5jZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGUgdmV0aCBkcml2ZXIgdG8gbmFpbCB0aGlzIGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MjIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMToxMS44MzU0MTIzOTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ0MDQwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmV0aF9wb2xsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9NTA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmlibXZldGhfcnhxX2dldF9idWZmZXIoc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtNTI4LSAqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzo1Mjk6ICogQ29udGV4dDogY2FsbGVkIGZyb20gaWJtdmV0aF9wb2xsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy01MzAtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9MTM3OT1zdGF0aWMgdm9pZCBpYm12ZXRoX3J4X2NzdW1faGVscGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE0NDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxNDQ4OnN0YXRpYyBpbnQgaWJtdmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE0NDkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYz0xNjM5PXN0YXRpYyBpbnQgaWJtdmV0aF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNjgzLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM6MTY4NDpzdGF0aWMgdm9pZCBpYm12ZXRoX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTY4NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jPTE3ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpYm12ZXRoX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE3OTItI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxNzkzOlxcdC5uZG9fcG9sbF9jb250cm9sbGVyXFx0PSBpYm12ZXRoX3BvbGxfY29udHJvbGxlcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE3OTQtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jPTE3OTc9c3RhdGljIGludCBpYm12ZXRoX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCB2aW9fZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTg0Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jOjE4NDc6XFx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0KG5ldGRldiwgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGksIGlibXZldGhfcG9sbCwgMTYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTg0OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz05MDc9c3RhdGljIGludCB2ZXRoX3hkcF9yY3Yoc3RydWN0IHZldGhfcnEgKnJxLCBpbnQgYnVkZ2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTk2NC1cXG5kcml2ZXJzL25ldC92ZXRoLmM6OTY1OnN0YXRpYyBpbnQgdmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz0xMTE3PXN0YXRpYyBpbnQgdmV0aF9lbmFibGVfeGRwX3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGFydCwgaW50IGVuZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy0xMTI2LVxcdFxcdGlmICghbmFwaV9hbHJlYWR5X29uKVxcbmRyaXZlcnMvbmV0L3ZldGguYzoxMTI3OlxcdFxcdFxcdG5ldGlmX25hcGlfYWRkKGRldiwgXFx1MDAyNnJxLVxcdTAwM2V4ZHBfbmFwaSwgdmV0aF9wb2xsKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtMTEyOC1cXHRcXHRlcnIgPSB4ZHBfcnhxX2luZm9fcmVnKFxcdTAwMjZycS1cXHUwMDNleGRwX3J4cSwgZGV2LCBpLCBycS1cXHUwMDNleGRwX25hcGkubmFwaV9pZCk7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9MTIxOD1zdGF0aWMgaW50IHZldGhfbmFwaV9lbmFibGVfcmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXJ0LCBpbnQgZW5kKVxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTEyMjUtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjEyMjY6XFx0XFx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcXHUwMDI2cnEtXFx1MDAzZXhkcF9uYXBpLCB2ZXRoX3BvbGwpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy0xMjI3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz0xNDcyPXN0YXRpYyB2b2lkIHZldGhfZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy0xNDc3LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L3ZldGguYzoxNDc4OnN0YXRpYyB2b2lkIHZldGhfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE0Nzkte1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTE3MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcxNy0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC92ZXRoLmM6MTcxODpcXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gdmV0aF9wb2xsX2NvbnRyb2xsZXIsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MTktI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjEzLjQ3OTgyMjkyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ3Mjg5MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCB2ZXRoIEZ1bmN0aW9uYWxpdHkqKlxuXG5SaWdodCwgc28gYHZldGhfcG9sbGAgaXMgYWxzbyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb24gdGhhdCBtaWdodCBiZSB1c2FibGUgb3IgcmVsZXZhbnQgdG8gdGhlIHZldGggaW50ZXJmYWNlIGluIHNvbWUgd2F5LiBXZSdyZSBsb29raW5nIGZvciBmbGV4aWJpbGl0eSBoZXJlLCBzbyBhIHN0YXRpYyBmdW5jdGlvbiBpcyBsaW1pdGluZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9yIGV4dGVybmFsIHVzZS4gTGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgYHZldGhfeGRwX3htaXRgPyBUaGF0IG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBmb3IgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgd2UgY2FuIGFwcGx5LiBQZXJoYXBzIGl0IGlzIGEgcmVsYXRlZCBmdW5jdGlvbiwgd2l0aCBhIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCB3ZSBjYW4gY2hhbmdlLCBvciBhdCBsZWFzdCBhIGNhbGwgdGhhdCBtaWdodCBiZSBpbnRlcmNlcHRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDY3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MTYuNzI3MTE0Mzc4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxNzExMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZldGhfeGRwX3htaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jPTQ5NT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnZldGhfcGVlcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy01MDItXFxuZHJpdmVycy9uZXQvdmV0aC5jOjUwMzpzdGF0aWMgaW50IHZldGhfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sXFxuZHJpdmVycy9uZXQvdmV0aC5jLTUwNC1cXHRcXHRcXHQgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz01NjA9c3RhdGljIGludCB2ZXRoX25kb194ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy01NjQtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjU2NTpcXHRlcnIgPSB2ZXRoX3hkcF94bWl0KGRldiwgbiwgZnJhbWVzLCBmbGFncywgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTU2Ni1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTU3NT1zdGF0aWMgdm9pZCB2ZXRoX3hkcF9mbHVzaF9icShzdHJ1Y3QgdmV0aF9ycSAqcnEsIHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEpXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNTc4LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo1Nzk6XFx0c2VudCA9IHZldGhfeGRwX3htaXQocnEtXFx1MDAzZWRldiwgYnEtXFx1MDAzZWNvdW50LCBicS1cXHUwMDNlcSwgMCwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy01ODAtXFx0aWYgKHNlbnQgXFx1MDAzYyAwKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYz05Nz12b2lkIHRlc3RfeGRwX2RvX3JlZGlyZWN0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYy0xNTEtXFx0ICogcmVndWxhciBmb3J3YXJkaW5nIHBhdGggd2lsbCBlbmQgdXAgZ29pbmcgdGhyb3VnaCB0aGUgc2FtZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kb19yZWRpcmVjdC5jOjE1MjpcXHQgKiB2ZXRoX3hkcF94bWl0KCkgY2FsbCBhcyB0aGUgWERQX1JFRElSRUNUIGNvZGUsIHdoaWNoIGNhbiBjYXVzZSBhXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2RvX3JlZGlyZWN0LmMtMTUzLVxcdCAqIGRlYWRsb2NrIGlmIGl0IGhhcHBlbnMgb24gdGhlIHNhbWUgQ1BVLiBUaGVyZSdzIGEgbG9jYWxfYmhfZGlzYWJsZSgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjE4LjM0ODgzMDg4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk1ODQ1NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBYRFAgVHJhbnNtaXNzaW9uIGluIHRoZSBWRVRIIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBYRFAgdHJhbnNtaXNzaW9uIGlzIGhhbmRsZWQgaW4gdGhlIFZFVEggZHJpdmVyLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgc2VlIHRoYXQgYHZldGhfeGRwX3htaXRgLCBgdmV0aF9uZG9feGRwX3htaXRgLCBhbmQgYHZldGhfeG1pdGAgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIGRpZ2dpbmcgYSBiaXQgdG91Z2hlciwgYnV0IG5vIHN1cnByaXNlLCBkcml2ZXIgZnVuY3Rpb25zIG9mdGVuIGZvbGxvdyB0aGF0IHBhdHRlcm4gYW5kIGFyZSByZWdpc3RlcmVkIHdpdGggYG5ldF9kZXZpY2Vfb3BzYC4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCB3aGljaCAqaXMqIGV4cG9ydGVkLlxuXG5HaXZlbiB0aGF0IGl0J3MgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gZm9yIGdlbmVyaWMgWERQLCBJJ20gdGhpbmtpbmcgdGhhdCdzIHRoZSBzeW1ib2wgdG8gZm9jdXMgb24uIExvb2tzIGxpa2UgYSBzb2xpZCBlbnRyeSBwb2ludC4gTm93LCBpcyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBzdWZmaWNpZW50IG9uIGl0cyBvd24gdG8gZGVzY3JpYmUgdGhlIHRyYW5zbWlzc2lvbiBmbG93PyBZZXAsIHNlZW1zIGxpa2UgaXQuIEknbSBjb25maWRlbnQgaW4gc3RhcnRpbmcgdGhlcmUgdG8gZ2V0IHRoZSBiaWcgcGljdHVyZS5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGtub3cgYENPTkZJR19WRVRIYCBpcyBvYnZpb3VzbHkgcmVxdWlyZWQgZm9yIHRoZSBWRVRIIG1vZHVsZSBpdHNlbGYuIEFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgZm9yIFhEUCB0byB3b3JrLCBJJ2QgZXhwZWN0IHRoYXQncyBhIGdpdmVuLiBOb3csIGxldCBtZSBjcm9zcy1yZWZlcmVuY2UgdGhlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGZ1bmN0aW9uIHdpdGggYG5ldC9jb3JlL2Rldi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MjQuMTQ0Njc4NDc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3MjI4MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQyOTY9c3RhdGljIGlubGluZSB2b2lkIGRldl9jb25zdW1lX3NrYl9hbnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQzMDE6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDItXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM9MTM5PXN0YXRpYyB1MzIgY3B1X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBicGZfY3B1X21hcF9lbnRyeSAqcmNwdSxcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTQ5LVxcbmtlcm5lbC9icGYvY3B1bWFwLmM6MTUwOlxcdFxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFxcdTAwMjZ4ZHAsIHJjcHUtXFx1MDAzZXByb2cpO1xcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTUxLVxcdFxcdHN3aXRjaCAoYWN0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTUxNT1zdGF0aWMgdTMyIGRldl9tYXBfYnBmX3Byb2dfcnVuX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX2R0YWJfbmV0ZGV2ICpkc3QpXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyNi1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjUyNzpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc2tiLCBcXHUwMDI2eGRwLCBkc3QtXFx1MDAzZXhkcF9wcm9nKTtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyOC1cXHRzd2l0Y2ggKGFjdCkge1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NTctXFxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYxNy1cXG5uZXQvY29yZS9kZXYuYzo1NjE4OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtNTYxOS1cXHRzd2l0Y2ggKGFjdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMToyNS45NzE5MTI2MjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2OTU5NzMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGZyYW1lZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBlQlBGIGFuZCBYRFA6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBYRFAgRXhlY3V0aW9uIFBhdGgqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgcGlucG9pbnQgZXhhY3RseSBob3cgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBGaXJzdCwgSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG5vdC4gSSd2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgbmVzdGxlZCB3aXRoaW4gYW55IHByZXByb2Nlc3NvciBgI2lmZGVmYCBibG9ja3MuIFRoYXQgaW5mb3JtYXRpb24gd2lsbCB0ZWxsIG1lIGlmIGl0J3MgYWx3YXlzIHBhcnQgb2YgdGhlIFhEUCBleGVjdXRpb24sIG9yIG9ubHkgZW5hYmxlZCB1bmRlciBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgYnVpbGQgb3B0aW9ucy4gS25vd2luZyB0aGF0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cyBhbmQgaG93IHBvcnRhYmxlIG9yIGNvbmZpZ3VyYWJsZSBpdHMgYmVoYXZpb3IgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MzAuNjQxNTEzMDczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA5Nzc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NTctXFxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYxNy1cXG5uZXQvY29yZS9kZXYuYzo1NjE4OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtNTYxOS1cXHRzd2l0Y2ggKGFjdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTozMC42ODc2MTczMjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NzQxOTI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGxpbmUgb2YgdGhpbmtpbmc6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgRHJpdmVyIElzc3VlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNTQ1OC4gVGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gd2hlcmUgdGhlIGJ1ZyBJJ20gaHVudGluZyBpcyBuZXN0ZWQuIEl0J3Mgb2Z0ZW4gdGhhdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgaW52b2x2ZSBhIHByb2JsZW0gaW4gdGhlIG5ldHdvcmtpbmcgY29yZSwgc28gSSdsbCBzdGFydCB3aXRoIHRoaXMgZmlsZS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGFyZWEgaXMgcG90ZW50aWFsbHkgY3J1Y2lhbCBmb3IgdGhlIGRldmljZSdzIGJlaGF2aW9yLiBJIHdpbGwgbG9vayBmb3IgYW55IGNsdWVzIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjMzLjc0NTAzODg4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQ0MDpcXHRcXHRyeHF1ZXVlID0gZGV2LVxcdTAwM2Vfcng7XFxuNTQ0MTpcXHRcXG41NDQyOlxcdFxcdGlmIChza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSkge1xcbjU0NDM6XFx0XFx0XFx0dTE2IGluZGV4ID0gc2tiX2dldF9yeF9xdWV1ZShza2IpO1xcbjU0NDQ6XFx0XFxuNTQ0NTpcXHRcXHRcXHRpZiAodW5saWtlbHkoaW5kZXggXFx1MDAzZT0gZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpKSB7XFxuNTQ0NjpcXHRcXHRcXHRcXHRXQVJOX09OQ0UoZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMgXFx1MDAzZSAxLFxcbjU0NDc6XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXMgcmVjZWl2ZWQgcGFja2V0IG9uIHF1ZXVlICV1LCBidXQgbnVtYmVyIFxcXCJcXG41NDQ4OlxcdFxcdFxcdFxcdFxcdCAgXFxcIm9mIFJYIHF1ZXVlcyBpcyAldVxcXFxuXFxcIixcXG41NDQ5OlxcdFxcdFxcdFxcdFxcdCAgZGV2LVxcdTAwM2VuYW1lLCBpbmRleCwgZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpO1xcbjU0NTA6XFx0XFxuNTQ1MTpcXHRcXHRcXHRcXHRyZXR1cm4gcnhxdWV1ZTsgLyogUmV0dXJuIGZpcnN0IHJ4cXVldWUgKi9cXG41NDUyOlxcdFxcdFxcdH1cXG41NDUzOlxcdFxcdFxcdHJ4cXVldWUgKz0gaW5kZXg7XFxuNTQ1NDpcXHRcXHR9XFxuNTQ1NTpcXHRcXHRyZXR1cm4gcnhxdWV1ZTtcXG41NDU2OlxcdH1cXG41NDU3OlxcdFxcbjU0NTg6XFx0dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG41NDU5OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG41NDYwOlxcdHtcXG41NDYxOlxcdFxcdHZvaWQgKm9yaWdfZGF0YSwgKm9yaWdfZGF0YV9lbmQsICpoYXJkX3N0YXJ0O1xcbjU0NjI6XFx0XFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxdWV1ZTtcXG41NDYzOlxcdFxcdGJvb2wgb3JpZ19iY2FzdCwgb3JpZ19ob3N0O1xcbjU0NjQ6XFx0XFx0dTMyIG1hY19sZW4sIGZyYW1lX3N6O1xcbjU0NjU6XFx0XFx0X19iZTE2IG9yaWdfZXRoX3R5cGU7XFxuNTQ2NjpcXHRcXHRzdHJ1Y3QgZXRoaGRyICpldGg7XFxuNTQ2NzpcXHRcXHR1MzIgbWV0YWxlbiwgYWN0O1xcbjU0Njg6XFx0XFx0aW50IG9mZjtcXG41NDY5OlxcdFxcbjU0NzA6XFx0XFx0LyogVGhlIFhEUCBwcm9ncmFtIHdhbnRzIHRvIHNlZSB0aGUgcGFja2V0IHN0YXJ0aW5nIGF0IHRoZSBNQUNcXG41NDcxOlxcdFxcdCAqIGhlYWRlci5cXG41NDcyOlxcdFxcdCAqL1xcbjU0NzM6XFx0XFx0bWFjX2xlbiA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuNTQ3NDpcXHRcXHRoYXJkX3N0YXJ0ID0gc2tiLVxcdTAwM2VkYXRhIC0gc2tiX2hlYWRyb29tKHNrYik7XFxuNTQ3NTpcXHRcXG41NDc2OlxcdFxcdC8qIFNLQiBcXFwiaGVhZFxcXCIgYXJlYSBhbHdheXMgaGF2ZSB0YWlscm9vbSBmb3Igc2tiX3NoYXJlZF9pbmZvICovXFxuNTQ3NzpcXHRcXHRmcmFtZV9zeiA9ICh2b2lkICopc2tiX2VuZF9wb2ludGVyKHNrYikgLSBoYXJkX3N0YXJ0O1xcbjU0Nzg6XFx0XFx0ZnJhbWVfc3ogKz0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTtcXG41NDc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTozMy43NDU2OTAwNjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMjI1OTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgdmV0aF94ZHBfcmN2X3NrYmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaXNzdWUgSSdtIGxvb2tpbmcgYXQgaXNuJ3QgaGlkZGVuIGJlaGluZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFjcm8sIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBtZWFucyBJIGNhbiBsb29rIGF0IHRoZSBjb2RlIGRpcmVjdGx5IHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGltbWVkaWF0ZWx5LlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgdmV0aF94ZHBfcmN2X3NrYmAgZnVuY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBsaXZlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3ZldGguY2AuIFRoZSBgdmV0aGAgZHJpdmVyIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgaGFuZGxpbmcgb2YgVmlydHVhbCBFdGhlcm5ldCBkZXZpY2VzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW50ZXJhY3Rpb25zIGlzIGltcG9ydGFudC4gSeKAmW0gZ29pbmcgdG8gZ28gc3RyYWlnaHQgdG8gdGhhdCBmaWxlIHRvIGludmVzdGlnYXRlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGZ1bmN0aW9uJ3MgYnJvYWRlciBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MzcuNTY3OTUxOTI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92ZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzgwOlxcdFxcdCpwc2tiID0gc2tiO1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRcXHRyZXR1cm4gMDtcXG4gNzgzOlxcdGRyb3A6XFxuIDc4NDpcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiA3ODU6XFx0XFx0KnBza2IgPSBOVUxMO1xcbiA3ODY6XFx0XFxuIDc4NzpcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzg4OlxcdH1cXG4gNzg5OlxcdFxcbiA3OTA6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG4gNzkxOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuIDc5MjpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEgKmJxLFxcbiA3OTM6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZldGhfc3RhdHMgKnN0YXRzKVxcbiA3OTQ6XFx0e1xcbiA3OTU6XFx0XFx0dm9pZCAqb3JpZ19kYXRhLCAqb3JpZ19kYXRhX2VuZDtcXG4gNzk2OlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7XFxuIDc5NzpcXHRcXHRzdHJ1Y3QgdmV0aF94ZHBfYnVmZiB2eGJ1ZjtcXG4gNzk4OlxcdFxcdHN0cnVjdCB4ZHBfYnVmZiAqeGRwID0gXFx1MDAyNnZ4YnVmLnhkcDtcXG4gNzk5OlxcdFxcdHUzMiBhY3QsIG1ldGFsZW47XFxuIDgwMDpcXHRcXHRpbnQgb2ZmO1xcbiA4MDE6XFx0XFxuIDgwMjpcXHRcXHRza2JfcHJlcGFyZV9mb3JfZ3JvKHNrYik7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gODA1OlxcdFxcdHhkcF9wcm9nID0gcmN1X2RlcmVmZXJlbmNlKHJxLVxcdTAwM2V4ZHBfcHJvZyk7XFxuIDgwNjpcXHRcXHRpZiAodW5saWtlbHkoIXhkcF9wcm9nKSkge1xcbiA4MDc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDgwODpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODA5OlxcdFxcdH1cXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0X19za2JfcHVzaChza2IsIHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYikpO1xcbiA4MTI6XFx0XFx0aWYgKHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYocnEsIHhkcCwgXFx1MDAyNnNrYikpXFxuIDgxMzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDgxNDpcXHRcXHR2eGJ1Zi5za2IgPSBza2I7XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdG9yaWdfZGF0YSA9IHhkcC1cXHUwMDNlZGF0YTtcXG4gODE3OlxcdFxcdG9yaWdfZGF0YV9lbmQgPSB4ZHAtXFx1MDAzZWRhdGFfZW5kO1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHhkcF9wcm9nLCB4ZHApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTozNy41NjgwNjU3MTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ0OTY4NTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXNuJ3QgZ2F0ZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIOKAkyB0aGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIEl0IHNlZW1zIHRvIGRpcmVjdGx5IG1vZGlmeSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIHRoZSB2ZXRoIGRyaXZlciBhbmQgb3RoZXIgbmV0d29ya2luZyBjb2RlLiBHaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvcmUgZnVuY3Rpb25hbGl0eSwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHRoZSByaWdodCBhcHByb2FjaCBoZXJlLiBXZSBuZWVkIHRvIHN1YmplY3QgdGhpcyB0byByaWdvcm91cyB0ZXN0aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBuZWVkcyB0byBiZSBvbiB0aGUgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgc3ltYm9sLiBJ4oCZbSB0aGlua2luZyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBvciBjb250cm9sIGZsb3cgcG9pbnQgd2l0aGluIHRoZSBwYXRjaC4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gZm9jdXNpbmcgb3VyIGZ1enppbmcgZWZmb3J0cy5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBJIHNlZSBpdCByZWxpZXMgb24gYFZFVEhgIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGVuYWJsaW5nIG9yIGNvbnRyb2xsaW5nIHRoZSBYRFAgZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gYmUgc3VyZSB3ZSdyZSB0ZXN0aW5nIHRoZSBjb3JyZWN0IGNvZGUgcGF0aHMuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6NDUuMDE3NzUzNzEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMzQzNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjQ2LjgzOTEwMjc2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk1NTY5OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkJQRiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgQlBGIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGl0J3MgaGFuZGxlZCBhdCB0aGUga2VybmVsIGxldmVsLiBOYXR1cmFsbHksIEkgaW1tZWRpYXRlbHkgdGhpbmssICp5ZXMsIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBrbm9iIHdlJ3JlIHRhbGtpbmcgYWJvdXQuKiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZnVuZGFtZW50YWwgZW5hYmxlciBmb3IgQlBGIGZ1bmN0aW9uYWxpdHksIHNvIGl0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQgc3ByaW5ncyB0byBtaW5kLlxuXG5CdXQgdGhlbiBteSBtaW5kIGF1dG9tYXRpY2FsbHkganVtcHMgdG8gdGhlIG51YW5jZXMuIEknbSB3b25kZXJpbmcsICppcyBgQlBGX1NZU0NBTExgIHRoZSAqb25seSogdGhpbmcgd2UgbmVlZCB0byBjb25zaWRlciwgb3IgYXJlIHRoZXJlIHNwZWNpZmljLCBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXksIHBhcnRpY3VsYXJseSB3aGVuIGZvY3VzaW5nIG9uIFhEUCBwcm9ncmFtcz8qICBXZSBhbGwga25vdyBYRFAgaGFzIGl0cyBvd24gcGVjdWxpYXJpdGllcywgaXRzIG93biBwZXJmb3JtYW5jZSBwcm9maWxlLCBhbmQgaXRzIG93biB1c2UtY2FzZXMg4oCTIGl0cyBub3QgbWVyZWx5IEJQRiwgaXQncyBhIHNwZWNpYWxpemVkIGV4ZWN1dGlvbiBwYXRoLiAgU28sIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYSBzcGVjaWZpYywgWERQLWNlbnRyaWMgY29uZmlnIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZywgb3IgaWYgaXQncyBhbGwgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgYEJQRl9TWVNDQUxMYCBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLCBhbmQgaG93IFhEUCBpcyBhY3R1YWxseSAqZW5hYmxlZCogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzExLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6NTEuOTM0Njc1MTA1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2MjMzMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRFBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQveGRwL0tjb25maWctOS1cXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG5uZXQveGRwL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6NTMuNTkwOTEzNzQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NzMxOTc2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIEVudHJ5cG9pbnQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgWERQIGFuZCBob3cgdG8gYmVzdCB0YXJnZXQgaXQgZm9yIHdoYXRldmVyIEknbSBkb2luZy4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgWERQIGlzIGF2YWlsYWJsZSB3aGVuZXZlciBCUEYgaXMgZW5hYmxlZCDigJMgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZGlnIGludG8gYG5ldC9jb3JlL2Rldi5jYCB0byBsb29rIGF0IGhvdyB0aGlzIGFsbCB0aWVzIHRvZ2V0aGVyLiBUaGUgaW1tZWRpYXRlIHN5bWJvbCB0aGF0IGp1bXBzIG91dCBpcyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYDsgbGV0J3Mgc3RhcnQgdGhlcmUuIEFuZCBzaW5jZSBJJ20gdHJ5aW5nIHRvIGZpbmQgYW4gZW50cnkgcG9pbnQsIGBWRVRIYCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgY29uZmlndXJhdGlvbiB0byB3b3JrIHdpdGguXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyB0aGUgKm9ubHkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW52b2x2ZWQgaGVyZS4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgZmV3IG90aGVyIFhEUC1yZWxhdGVkIGZ1bmN0aW9ucyBpbiBgdmV0aC5jYCwgYnV0IHRoZXkncmUgYWxsICpzdGF0aWMqOiBgdmV0aF94ZHBfcmN2X3NrYmAsIGB2ZXRoX3hkcF9yY3ZgLCBgdmV0aF9wb2xsYCwgYHZldGhfeGRwX3htaXRgLCBgdmV0aF9uZG9feGRwX3htaXRgLiBSaWdodCwgdGhhdCdzIHR5cGljYWw7IGRyaXZlciBmdW5jdGlvbnMgYXJlIHVzdWFsbHkga2VwdCBzdGF0aWMuIFNvIGl0IGxvb2tzIGxpa2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgKmlzKiB0aGUgd2F5IHRvIGdvLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYHZldGhfeGRwX3Jjdl9za2JgIGlzIGlubGluZWQuIElmIGl0J3Mgbm90IGlubGluZWQsIHN5emthbGxlciBjb3VsZCB0aGVvcmV0aWNhbGx5IHRyYWNlIGl0IGlmIGl0J3MgaW4gdGhlIHN5bWJvbCB0YWJsZS4gSG93ZXZlciwgdGhlIGd1aWRlbGluZSBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50cy4gU28gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgc3RpbGwgdGhlIGJlc3QgcGljay5cblxuTm93LCBsZXQncyBsb29rIGFyb3VuZCBgbmV0L2NvcmUvZGV2LmNgIGZvciBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gT2theSwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgZXhwb3J0ZWQgaXRzZWxmLCBidXQgbG9va2luZyBhdCBpdHMgY2FsbCBncmFwaC4uLiBpdCBsb29rcyBsaWtlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGNhbGxlZCBieSBgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcGAsIHdoaWNoIGlzIHN0YXRpYy4gVGhhdCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBkb194ZHBfZ2VuZXJpY2AsIHdoaWNoIGlzIGFsc28gc3RhdGljLiBBbmQgYGRvX3hkcF9nZW5lcmljYCBpcyBjYWxsZWQgYnkgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIGZpbmFsbHksIGBfX25ldGlmX3JlY2VpdmVfc2tiX2NvcmVgIGlzIGNhbGxlZCBieSBgX19uZXRpZl9yZWNlaXZlX3NrYl9vbmVfY29yZWAsIHdoaWNoICppcyogZXhwb3J0ZWQuIFNvLCB0aGUgcGF0aCBpczogYF9fbmV0aWZfcmVjZWl2ZV9za2Jfb25lX2NvcmVgIC1cdTAwM2UgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAgLVx1MDAzZSBgZG9feGRwX2dlbmVyaWNgIC1cdTAwM2UgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgIC1cdTAwM2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFNvIHRoZSBjb25jbHVzaW9uIGlzLCB0aGF0IGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIHN0aWxsIGEgZ29vZCBlbnRyeXBvaW50IGZvciB0aGUgWERQIGZ1bmN0aW9uYWxpdHkuXG5cbkFscmlnaHQsIHRoYXQgc2V0dGxlcyBpdDsgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjAzLjA2NDExNDM0M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMDIzNTI1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMjowNS4yODQzNTcyODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1NzA1OTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYSBGdW5jdGlvbioqXG5cbkhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQncyAqbm90KiBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYC4gVGhhdCdzIHRoZSBmaXJzdCBjbHVlLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gaXQncyBhbHNvICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbXBsaWVzIGl0J3MgaW50ZW5kZWQgdG8gYmUgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBjb21waWxhdGlvbiB1bml0LCByaWdodD8gVGhlIGxpbmtlciBzaG91bGQgYmUgYWJsZSB0byBzZWUgaXQsIHdoaWNoIHN1Z2dlc3RzIHBvdGVudGlhbCB1c2UgZWxzZXdoZXJlIHdpdGhpbiB0aGUga2VybmVsIG1vZHVsZSBvciBldmVuIGxpbmtlZCBleHRlcm5hbGx5LiBPa2F5LCBJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCBmaWd1cmUgb3V0IHRoZSBpbnRlbmRlZCB2aXNpYmlsaXR5LlxuXG5MZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gSSdsbCBoZWFkIGJhY2sgb3ZlciB0byBgbmV0L2NvcmUvZGV2LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQncyB0aGUgcGxhY2UgdGhpcyBpcyBkZWZpbmVkLiBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgc2VlIGV4YWN0bHkgKmhvdyogYW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBvciBpZiB0aGVyZSdzIGFueSBjbGV2ZXJuZXNzIGhlcmUgdGhhdCBJIG1pc3NlZCB0aGUgZmlyc3QgdGltZSBhcm91bmQuIFRpbWUgdG8gY29uZmlybSBpZiBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIG9yIG5lZWQgdG8gZXhwYW5kIHRoZSBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDgxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTI6MTQuOTQxNDE4ODI4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MjI3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfY29uc3VtZV9za2JfYW55KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDAtXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo0MzAxOnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAyLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpuZXRpZl9nZXRfcnhxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cXG5uZXQvY29yZS9kZXYuYzo1NDU4OnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjE2LjU4NzY1MTIyN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjY2NTgzMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdmV0aF94ZHBfcmN2X3NrYmAqKlxuXG5SaWdodCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGNvbmNlcm4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGp1c3QgaG93IGZhciB0aGlzIHJlYWNoZXMuIExldCdzIHNlZS4uLiAqdGhpbmtzIGJhY2sgdG8gdGhlIGNvZGUqIC4uLm9rYXksIEknbSBwcmV0dHkgc3VyZSBgdmV0aF94ZHBfcmN2X3NrYmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFllcywgdGhhdCdzIGl0LiBDb25maXJtZWQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBnbG9iYWwgZnVuY3Rpb25zIGx1cmtpbmcgaW4gYHZldGguY2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW5kIGNoZWNrLiBUaGF0J3MgdGhlIHJlYWwgdGVzdCBvZiBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA1OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjIyLjI1NDIzNzMxMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTQ1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogdmV0aF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3ZldGguYy00Mi1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NDM6c3RydWN0IHZldGhfc3RhdHMge1xcbmRyaXZlcnMvbmV0L3ZldGguYy00NC1cXHR1NjRcXHRyeF9kcm9wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy01NS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NTY6c3RydWN0IHZldGhfcnFfc3RhdHMge1xcbmRyaXZlcnMvbmV0L3ZldGguYy01Ny1cXHRzdHJ1Y3QgdmV0aF9zdGF0c1xcdHZzO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTYwLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo2MTpzdHJ1Y3QgdmV0aF9ycSB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTYyLVxcdHN0cnVjdCBuYXBpX3N0cnVjdFxcdHhkcF9uYXBpO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTczLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo3NDpzdHJ1Y3QgdmV0aF9wcml2IHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtNzUtXFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3VcXHQqcGVlcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy04MS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6ODI6c3RydWN0IHZldGhfeGRwX3R4X2JxIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtODMtXFx0c3RydWN0IHhkcF9mcmFtZSAqcVtWRVRIX1hEUF9UWF9CVUxLX1NJWkVdO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTkwLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo5MTpzdHJ1Y3QgdmV0aF9xX3N0YXRfZGVzYyB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTkyLVxcdGNoYXJcXHRkZXNjW0VUSF9HU1RSSU5HX0xFTl07XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9MTE3PXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTEyMi1cXG5kcml2ZXJzL25ldC92ZXRoLmM6MTIzOnN0cnVjdCB2ZXRoX3hkcF9idWZmIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtMTI0LVxcdHN0cnVjdCB4ZHBfYnVmZiB4ZHA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjIyLjI5OTc2MDEwNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzQ3MTg3MDIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBYRFAgUGFja2V0IFRhaWwgQWRqdXN0bWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCBlZmZlY3RpdmVseS4gSXQncyBkZWFsaW5nIHdpdGggYSBidWcgcmVsYXRlZCB0byBob3cgYHNrYi1cdTAwM2VsZW5gIGFuZCBgc2tiLVx1MDAzZWRhdGFfbGVuYCBhcmUgaGFuZGxlZCBhZnRlciBhbiBYRFAgcHJvZ3JhbSBtb2RpZmllcyB0aGUgcGFja2V0IHRhaWwsIHNwZWNpZmljYWxseSB3aXRoIHNvbWV0aGluZyBsaWtlIGBicGZfeGRwX2FkanVzdF90YWlsYC4gVGhpcyBhcHBlYXJzIHRvIGJlIHJlbGV2YW50IGluIGJvdGggdGhlIGdlbmVyaWMgWERQIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCwgY3JpdGljYWxseSwgdGhlIHZldGggZHJpdmVyJ3MgWERQIHJlY2VpdmUgcGF0aC4gVGhhdCdzIGdvb2QsIHRoYXQgZ2l2ZXMgbWUgbW9yZSBzdXJmYWNlIGFyZWEuXG5cbkdpdmVuIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgaW4gYHZldGguY2AgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB0aGF0IG5hcnJvd3MgbXkgZm9jdXMgY29uc2lkZXJhYmx5LiBNeSBwcmltYXJ5IHN5bWJvbCBvZiBpbnRlcmVzdCBoYXMgdG8gYmUgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cyB0byBmaW5kIHRoZSBidWcuIEl0IHdpbGwgaGl0IHRob3NlIGZ1bmN0aW9ucywgSSdtIGd1ZXNzaW5nLlxuXG5Gcm9tIHRoZSBjb25maWcgcGVyc3BlY3RpdmUsIGBWRVRIYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgdGhlIGtleSBjb25maWdzIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIGlzc3VlLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLCBvYnZpb3VzbHkuXG5cblRoaXMgZml4IGlzIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycy4gVGhhdCdzIGNyaXRpY2FsIGZvciBmdXp6aW5nIGJlY2F1c2UgaXQgc3VnZ2VzdHMgdGhhdCB0YXJnZXRlZCBmdXp6aW5nIGNvdWxkIGJlIHZlcnkgZWZmZWN0aXZlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHRhcmdldCBib3RoIGdlbmVyaWMgWERQIGFuZCB0aGUgdmV0aCBkcml2ZXIgc3BlY2lmaWNhbGx5LiBUaGlzIHdpbGwgYmUgYW4gaW1wb3J0YW50IGFuZCBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldC4gTGV0J3MgZ2V0IHRvIHdvcmsgYW5kIHNldCB1cCBteSBmdXp6aW5nIGhhcm5lc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NzEsIk91dHB1dFRva2VucyI6MTUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjM1Ljc3MTYzMzQxN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTE2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRVRIXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGhvdyBza2ItXFx1MDAzZWxlbiBhbmQgc2tiLVxcdTAwM2VkYXRhX2xlbiBhcmUgc3luY2hyb25pemVkIHdpdGggeGRwIGRhdGEgYWZ0ZXIgcnVubmluZyBhbiBYRFAgcHJvZ3JhbSB0aGF0IGFkanVzdHMgdGhlIHBhY2tldCB0YWlsIChlLmcuLCBicGZfeGRwX2FkanVzdF90YWlsKS4gVGhpcyBhZmZlY3RzIGJvdGggdGhlIGdlbmVyaWMgWERQIHBhdGggaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXIncyBYRFAgcmVjZWl2ZSBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZFVEhcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gaG93IHNrYi1cXHUwMDNlbGVuIGFuZCBza2ItXFx1MDAzZWRhdGFfbGVuIGFyZSBzeW5jaHJvbml6ZWQgd2l0aCB4ZHAgZGF0YSBhZnRlciBydW5uaW5nIGFuIFhEUCBwcm9ncmFtIHRoYXQgYWRqdXN0cyB0aGUgcGFja2V0IHRhaWwgKGUuZy4sIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBUaGlzIGFmZmVjdHMgYm90aCB0aGUgZ2VuZXJpYyBYRFAgcGF0aCBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSB2ZXRoIGRyaXZlcidzIFhEUCByZWNlaXZlIHBhdGguIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowzg9w7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 05:53:34 +0000 UTC FinishedAt: 2026-08-04 06:12:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d1000fd7995e51deec872d154e0a40d82f7a539f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VETH", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d1000fd7995e51deec872d154e0a40d82f7a539f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VETH", "BPF_SYSCALL" ], "series_id": "4f65f384-3203-4e57-a3b9-11ebad1901e6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_prog_run_generic_xdp" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZFVEgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gaG93IHNrYi1cdTAwM2VsZW4gYW5kIHNrYi1cdTAwM2VkYXRhX2xlbiBhcmUgc3luY2hyb25pemVkIHdpdGggeGRwIGRhdGEgYWZ0ZXIgcnVubmluZyBhbiBYRFAgcHJvZ3JhbSB0aGF0IGFkanVzdHMgdGhlIHBhY2tldCB0YWlsIChlLmcuLCBicGZfeGRwX2FkanVzdF90YWlsKS4gVGhpcyBhZmZlY3RzIGJvdGggdGhlIGdlbmVyaWMgWERQIHBhdGggaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXImIzM5O3MgWERQIHJlY2VpdmUgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0MzQwMzEzYWUwMTNlMWViZDhkY2NiMTg1MGVkM2U0MmQzZGUwYTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA2OjEwOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuaW5kZXggMDBlMzRhZmQ4NThlNy4uZjgwZjY1ODRhNmZmOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtODY1LDE4ICYjNDM7ODY1LDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4gXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFxuLVx0LyogY2hlY2sgaWYgYnBmX3hkcF9hZGp1c3RfdGFpbCB3YXMgdXNlZCAqL1xuLVx0b2ZmID0geGRwLVx1MDAzZWRhdGFfZW5kIC0gb3JpZ19kYXRhX2VuZDtcbi1cdGlmIChvZmYgIT0gMClcbi1cdFx0X19za2JfcHV0KHNrYiwgb2ZmKTsgLyogcG9zaXRpdmUgb24gZ3JvdywgbmVnYXRpdmUgb24gc2hyaW5rICovXG4tXG4gXHQvKiBYRFAgZnJhZyBtZXRhZGF0YSAoZS5nLiBucl9mcmFncykgYXJlIHVwZGF0ZWQgaW4gZUJQRiBoZWxwZXJzXG4tXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cbiYjNDM7XHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKS4gUmVtb3ZlIHRoZSBvbGQgZnJhZ21lbnQgY29udHJpYnV0aW9uXG4mIzQzO1x0ICogZnJvbSBza2ItXHUwMDNlbGVuIGJlZm9yZSB1cGRhdGluZyBkYXRhX2xlbiwgdGhlbiBhZGQgdGhlIG5ldyBvbmUgYmFjay5cbiBcdCAqL1xuLVx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxuJiM0MztcdHNrYi1cdTAwM2VsZW4gLT0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuJiM0MztcdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkge1xuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemU7XG4tXHRlbHNlXG4mIzQzO1x0XHRza2ItXHUwMDNlbGVuICYjNDM7PSBza2ItXHUwMDNlZGF0YV9sZW47XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN5bmNocm9uaXplIHRoZSBza2IgdGFpbCB3aXRoIFhEUCYjMzk7cyB1cGRhdGVkIGxpbmVhciBhcmVhLiAqL1xuJiM0MztcdG9mZiA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIG9yaWdfZGF0YV9lbmQ7XG4mIzQzO1x0aWYgKG9mZiAhPSAwKSB7XG4mIzQzO1x0XHRza2Jfc2V0X3RhaWxfcG9pbnRlcihza2IsIHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhKTtcbiYjNDM7XHRcdHNrYi1cdTAwM2VsZW4gJiM0Mzs9IG9mZjsgLyogcG9zaXRpdmUgb24gZ3JvdywgbmVnYXRpdmUgb24gc2hyaW5rICovXG4mIzQzO1x0fVxuIFxuIFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBycS1cdTAwM2VkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDU5MzNjNWRhYjA5ZWUuLjVjMzdjZjZjNGFhMTAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTE3LDEyICYjNDM7NTUxNywxNiBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuIFx0fVxuIFxuIFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xuLVx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXG4mIzQzO1x0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFJlbW92ZSB0aGUgb2xkIGZyYWdtZW50IGNvbnRyaWJ1dGlvblxuJiM0MztcdCAqIGZyb20gc2tiLVx1MDAzZWxlbiBiZWZvcmUgdXBkYXRpbmcgZGF0YV9sZW4sIHRoZW4gYWRkIHRoZSBuZXcgb25lIGJhY2suXG4gXHQgKi9cbi1cdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSlcbiYjNDM7XHRza2ItXHUwMDNlbGVuIC09IHNrYi1cdTAwM2VkYXRhX2xlbjtcbiYjNDM7XHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpIHtcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplO1xuLVx0ZWxzZVxuJiM0MztcdFx0c2tiLVx1MDAzZWxlbiAmIzQzOz0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IDA7XG4mIzQzO1x0fVxuIFxuIFx0LyogY2hlY2sgaWYgWERQIGNoYW5nZWQgZXRoIGhkciBzdWNoIFNLQiBuZWVkcyB1cGRhdGUgKi9cbiBcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVx1MDAzZWRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZFVEgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gaG93IHNrYi1cdTAwM2VsZW4gYW5kIHNrYi1cdTAwM2VkYXRhX2xlbiBhcmUgc3luY2hyb25pemVkIHdpdGggeGRwIGRhdGEgYWZ0ZXIgcnVubmluZyBhbiBYRFAgcHJvZ3JhbSB0aGF0IGFkanVzdHMgdGhlIHBhY2tldCB0YWlsIChlLmcuLCBicGZfeGRwX2FkanVzdF90YWlsKS4gVGhpcyBhZmZlY3RzIGJvdGggdGhlIGdlbmVyaWMgWERQIHBhdGggaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXImIzM5O3MgWERQIHJlY2VpdmUgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0MzQwMzEzYWUwMTNlMWViZDhkY2NiMTg1MGVkM2U0MmQzZGUwYTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDA2OjEwOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDAwZTM0YWZkODU4ZTcuLmY4MGY2NTg0YTZmZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTg2NSwxOCAmIzQzOzg2NSwyNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLAogCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAotCS8qIGNoZWNrIGlmIGJwZl94ZHBfYWRqdXN0X3RhaWwgd2FzIHVzZWQgKi8KLQlvZmYgPSB4ZHAtJmd0O2RhdGFfZW5kIC0gb3JpZ19kYXRhX2VuZDsKLQlpZiAob2ZmICE9IDApCi0JCV9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqLwotCiAJLyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVycwotCSAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLCB3ZSBuZWVkIHRvIHVwZGF0ZSBkYXRhX2xlbiBoZXJlLgomIzQzOwkgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKS4gUmVtb3ZlIHRoZSBvbGQgZnJhZ21lbnQgY29udHJpYnV0aW9uCiYjNDM7CSAqIGZyb20gc2tiLSZndDtsZW4gYmVmb3JlIHVwZGF0aW5nIGRhdGFfbGVuLCB0aGVuIGFkZCB0aGUgbmV3IG9uZSBiYWNrLgogCSAqLwotCWlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkKJiM0MzsJc2tiLSZndDtsZW4gLT0gc2tiLSZndDtkYXRhX2xlbjsKJiM0MzsJaWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7CiAJCXNrYi0mZ3Q7ZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktJmd0O3hkcF9mcmFnc19zaXplOwotCWVsc2UKJiM0MzsJCXNrYi0mZ3Q7bGVuICYjNDM7PSBza2ItJmd0O2RhdGFfbGVuOwomIzQzOwl9IGVsc2UgewogCQlza2ItJmd0O2RhdGFfbGVuID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTeW5jaHJvbml6ZSB0aGUgc2tiIHRhaWwgd2l0aCBYRFAmIzM5O3MgdXBkYXRlZCBsaW5lYXIgYXJlYS4gKi8KJiM0MzsJb2ZmID0geGRwLSZndDtkYXRhX2VuZCAtIG9yaWdfZGF0YV9lbmQ7CiYjNDM7CWlmIChvZmYgIT0gMCkgewomIzQzOwkJc2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCB4ZHAtJmd0O2RhdGFfZW5kIC0geGRwLSZndDtkYXRhKTsKJiM0MzsJCXNrYi0mZ3Q7bGVuICYjNDM7PSBvZmY7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqLwomIzQzOwl9CiAKIAlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBycS0mZ3Q7ZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlLi41YzM3Y2Y2YzRhYTEwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNTUxNywxMiAmIzQzOzU1MTcsMTYgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwKIAl9CiAKIAkvKiBYRFAgZnJhZyBtZXRhZGF0YSAoZS5nLiBucl9mcmFncykgYXJlIHVwZGF0ZWQgaW4gZUJQRiBoZWxwZXJzCi0JICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuCiYjNDM7CSAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBSZW1vdmUgdGhlIG9sZCBmcmFnbWVudCBjb250cmlidXRpb24KJiM0MzsJICogZnJvbSBza2ItJmd0O2xlbiBiZWZvcmUgdXBkYXRpbmcgZGF0YV9sZW4sIHRoZW4gYWRkIHRoZSBuZXcgb25lIGJhY2suCiAJICovCi0JaWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKQomIzQzOwlza2ItJmd0O2xlbiAtPSBza2ItJmd0O2RhdGFfbGVuOwomIzQzOwlpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpIHsKIAkJc2tiLSZndDtkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS0mZ3Q7eGRwX2ZyYWdzX3NpemU7Ci0JZWxzZQomIzQzOwkJc2tiLSZndDtsZW4gJiM0Mzs9IHNrYi0mZ3Q7ZGF0YV9sZW47CiYjNDM7CX0gZWxzZSB7CiAJCXNrYi0mZ3Q7ZGF0YV9sZW4gPSAwOwomIzQzOwl9CiAKIAkvKiBjaGVjayBpZiBYRFAgY2hhbmdlZCBldGggaGRyIHN1Y2ggU0tCIG5lZWRzIHVwZGF0ZSAqLwogCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLSZndDtkYXRhOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IE5ldHdvcmsgQ29yZSBhbmQgVmV0aCBEcml2ZXIgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBib3RoIGBkcml2ZXJzL25ldC92ZXRoLmNgIGFuZCBgbmV0L2NvcmUvZGV2LmNgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBteSBleWVicm93cy4gQW55dGltZSB3ZSYjMzk7cmUgbWVzc2luZyB3aXRoIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBob3cgYHNrYi0mZ3Q7bGVuYCBhbmQgYHNrYi0mZ3Q7ZGF0YV9sZW5gIGFyZSBoYW5kbGVkIHdpdGggWERQIGRhdGEgYWZ0ZXIgYW4gWERQIHByb2dyYW0gcnVucy4gU3luY2hyb25pemF0aW9uIGhlcmUgaXMgY3JpdGljYWwsIGVzcGVjaWFsbHkgd2hlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIHR3byBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHZldGhfeGRwX3Jjdl9za2JgIGluIGBkcml2ZXJzL25ldC92ZXRoLmNgIGlzIHVwZGF0ZWQsIGFuZCB0aGVuIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGluIGBuZXQvY29yZS9kZXYuY2AgYWxzbyBnZXRzIGEgbG9vay4gVGhvc2UgYXJlIGZ1bmN0aW9uIGNoYW5nZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgb24gdGhlIHJhZGFyLiBCb3RoIG9mIHRoZXNlIGFyZSBpbiBjcml0aWNhbCBwYXRocyBmb3IgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgbWlzc3RlcHMgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHkgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aG9zZSBjb25maWcgb3B0aW9ucy4gYGRyaXZlcnMvbmV0L3ZldGguY2AgbmVlZHMgYENPTkZJR19WRVRIYCB0byBiZSBlbmFibGVkLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQuIGBuZXQvY29yZS9kZXYuY2AsIGFzIGEgY29yZSBjb21wb25lbnQsIGlzIGFsd2F5cyBjb21waWxlZC4gWERQIGZ1bmN0aW9uYWxpdHksIHRoYXQgaXMgYSB3aG9sZSBhbm90aGVyIGJlYXN0LCBhbmQgY291bGQgZGVwZW5kIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIG9yIHNvbWUgb3RoZXIgQlBGLXJlbGF0ZWQgY29uZmlnLCBidXQgdGhlIGJhc2UgdmV0aCBhbmQgZGV2IGNvZGUgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQuCgpUaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBzZWFyY2hpbmcgZm9yIHRoZSBmdW5jdGlvbiBuYW1lcywgYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBwb3RlbnRpYWwgaW1wYWN0cyBhbmQgaWRlbnRpZnkgYXJlYXMgdGhhdCBuZWVkIHBhcnRpY3VsYXJseSBjbG9zZSBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXRoX3hkcF9yY3Zfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYz03NTE9c3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxuZHJpdmVycy9uZXQvdmV0aC5jOjc5MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9OTA3PXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM5LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5NDA6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTk0MS1cdFx0XHRpZiAoc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBmdW5jdGlvbiBhbmQgaG93IGl0IHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggaXQgaW4gbWluZCwgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IGVCUEYgcHJvZ3JhbXMgcnVuIGluIFhEUCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGFsbCB0aGUgbnVhbmNlcyBvZiBlQlBGIHByb2dyYW1zLCBYRFAgKGFuZCBpdHMgc3BlY2lmaWMgaW1wbGljYXRpb25zKSwgYW5kIGV4YWN0bHkgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIEJQRiBWTSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGdlbmVyYWwgY2FzZXMsIHRoZSBvbmVzIHRoYXQgYXJlbiYjMzk7dCBzcGVjaWZpYyB0byBhIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uOyB0aGF0IGNvdWxkIHBvaW50IHRvIHRoZSBwbGFjZXMgd2hlcmUgdGhleSBoYW5kbGUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZvcndhcmRpbmcuIEkgZXhwZWN0IHRoZXJlJiMzOTtsbCBiZSBhIGxvb3AsIGxpa2VseSBpbnRlcnByZXRpbmcgYW5kIGV4ZWN1dGluZyB0aGUgQlBGIGluc3RydWN0aW9ucy4gUHJvYmFibHkgY2hlY2tzIGFyb3VuZCB0aGUgdmFsaWRpdHkgb2YgdGhlIHBhY2tldHMsIGFuZCBob3cgdG8gcmVwb3J0IGFueSBlcnJvci4gTGV0JiMzOTtzIHNlZSBpZiBteSBtZW50YWwgbW9kZWwgaG9sZHMgdHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfY29uc3VtZV9za2JfYW55KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAwLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo0MzAxOnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDItXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jPTEzOT1zdGF0aWMgdTMyIGNwdV9tYXBfYnBmX3Byb2dfcnVuX3NrYihzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKnJjcHUsXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy0xNDktXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjE1MDpcdFx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHNrYiwgXHUwMDI2eGRwLCByY3B1LVx1MDAzZXByb2cpO1xua2VybmVsL2JwZi9jcHVtYXAuYy0xNTEtXHRcdHN3aXRjaCAoYWN0KSB7XG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz01MTU9c3RhdGljIHUzMiBkZXZfbWFwX2JwZl9wcm9nX3J1bl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9kdGFiX25ldGRldiAqZHN0KVxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmMtNTI2LVxua2VybmVsL2JwZi9kZXZtYXAuYzo1Mjc6XHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc2tiLCBcdTAwMjZ4ZHAsIGRzdC1cdTAwM2V4ZHBfcHJvZyk7XG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyOC1cdHN3aXRjaCAoYWN0KSB7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01NDU3LVxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXG4tLVxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2MTctXG5uZXQvY29yZS9kZXYuYzo1NjE4Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKCpwc2tiLCB4ZHAsIHhkcF9wcm9nKTtcbm5ldC9jb3JlL2Rldi5jLTU2MTktXHRzd2l0Y2ggKGFjdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWERQIFRhaWwgQWRqdXN0bWVudHMgJmFtcDsgVmV0aCBEcml2ZXIgRml4IC0gRnV6emluZyBPcHBvcnR1bml0eSEqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGNydWNpYWwgaXNzdWU6IGhvdyBgc2tiLSZndDtsZW5gICh0aGUgbGVuZ3RoIG9mIHRoZSBza19idWZmKSBpcyB1cGRhdGVkIHdoZW4gWERQIHByb2dyYW1zIGFyZSBtYW5pcHVsYXRpbmcgdGhlIHRhaWwgZW5kIG9mIHBhY2tldHMuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNvcmUgbmV0d29ya2luZyB0aGluZyBhbmQgdG91Y2hlcyB0aGUgdmV0aCBkcml2ZXIgc3BlY2lmaWNhbGx5LiBUaGlzIHNvdW5kcyBsaWtlIHByaW1lIHRlcnJpdG9yeSBmb3Igc29tZSByaWdvcm91cyBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbHMuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBgdmV0aF94ZHBfcmN2X3NrYmAsIGJ1dCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIHRoYXQgbWlnaHQgYmUgdHJpY2t5IHRvIHRhcmdldCBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIEluc3RlYWQgb2YgYHZldGhfeGRwX3Jjdl9za2JgLCBteSBmaXJzdCBmb2N1cyBzaG91bGQgYmUgb24gYHZldGhfeGRwX3JjdmAgYW5kIGB2ZXRoX3BvbGxgIGFzIGVudHJ5IHBvaW50cy4gSSBiZXQgaWYgSSBleHBsb3JlIGhvdyB0aG9zZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBhZGp1c3RlZCBsZW5ndGhzIGFmdGVyIFhEUCBtb2RpZmljYXRpb25zLCBJJiMzOTtsbCBmaW5kIHRoZSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB0aGUgcGF0Y2ggaXMgZml4aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZldGhfeGRwX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9NjIyPXN0YXRpYyBpbnQgdmV0aF94ZHBfdHgoc3RydWN0IHZldGhfcnEgKnJxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM3LVxuZHJpdmVycy9uZXQvdmV0aC5jOjYzODpzdGF0aWMgc3RydWN0IHhkcF9mcmFtZSAqdmV0aF94ZHBfcmN2X29uZShzdHJ1Y3QgdmV0aF9ycSAqcnEsXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM5LVx0XHRcdFx0XHQgIHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy03MDgtLyogZnJhbWVzIGFycmF5IGNvbnRhaW5zIFZFVEhfWERQX0JBVENIIGF0IG1vc3QgKi9cbmRyaXZlcnMvbmV0L3ZldGguYzo3MDk6c3RhdGljIHZvaWQgdmV0aF94ZHBfcmN2X2J1bGtfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSwgdm9pZCAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L3ZldGguYy03MTAtXHRcdFx0XHQgIGludCBuX3hkcGYsIHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTc1MT1zdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy03ODktXG5kcml2ZXJzL25ldC92ZXRoLmM6NzkwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG5kcml2ZXJzL25ldC92ZXRoLmMtNzkxLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy05MDYtXG5kcml2ZXJzL25ldC92ZXRoLmM6OTA3OnN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbmRyaXZlcnMvbmV0L3ZldGguYy05MDgtXHRcdFx0c3RydWN0IHZldGhfeGRwX3R4X2JxICpicSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI0LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0geGRwX2dldF9mcmFtZV9sZW4oZnJhbWUpO1xuZHJpdmVycy9uZXQvdmV0aC5jOjkyNTpcdFx0XHRmcmFtZSA9IHZldGhfeGRwX3Jjdl9vbmUocnEsIGZyYW1lLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTkyNi1cdFx0XHRpZiAoZnJhbWUpIHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI5LVx0XHRcdFx0aWYgKG5feGRwZiA9PSBWRVRIX1hEUF9CQVRDSCkge1xuZHJpdmVycy9uZXQvdmV0aC5jOjkzMDpcdFx0XHRcdFx0dmV0aF94ZHBfcmN2X2J1bGtfc2tiKHJxLCB4ZHBmLCBuX3hkcGYsXG5kcml2ZXJzL25ldC92ZXRoLmMtOTMxLVx0XHRcdFx0XHRcdFx0ICAgICAgYnEsIHN0YXRzKTtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM5LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5NDA6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTk0MS1cdFx0XHRpZiAoc2tiKSB7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTk1MS1cdGlmIChuX3hkcGYpXG5kcml2ZXJzL25ldC92ZXRoLmM6OTUyOlx0XHR2ZXRoX3hkcF9yY3ZfYnVsa19za2IocnEsIHhkcGYsIG5feGRwZiwgYnEsIHN0YXRzKTtcbmRyaXZlcnMvbmV0L3ZldGguYy05NTMtXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTk2NT1zdGF0aWMgaW50IHZldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTk4NC1cdHhkcF9zZXRfcmV0dXJuX2ZyYW1lX25vX2RpcmVjdCgpO1xuZHJpdmVycy9uZXQvdmV0aC5jOjk4NTpcdGRvbmUgPSB2ZXRoX3hkcF9yY3YocnEsIGJ1ZGdldCwgXHUwMDI2YnEsIFx1MDAyNnN0YXRzKTtcbmRyaXZlcnMvbmV0L3ZldGguYy05ODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWERQIEV4ZWN1dGlvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgWERQIHByb2dyYW1zIGFyZSBleGVjdXRlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBJIHNlZSB0aGF0IGB2ZXRoX3hkcF9yY3ZgIGFuZCBgdmV0aF9wb2xsYCBhcmUgYm90aCBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBzdXJwcmlzaW5nLCB0aGV5JiMzOTtyZSBwcm9iYWJseSBpbnRlcm5hbCB0byB0aGUgdmV0aCBkcml2ZXIuIEJ1dCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgZXhwb3J0ZWQg4oCTIGl0JiMzOTtzIGdsb2JhbCwgYXZhaWxhYmxlIG91dHNpZGUgdGhlIHZldGggbW9kdWxlLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnZW5lcmljIFhEUCBwcm9ncmFtIGV4ZWN1dGlvbiBmbG93LiBOb3cgSSYjMzk7bGwgbmVlZCB0byBnbyBhbmQgZmluZCB3aGVyZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBkZWZpbmVkLiBJJiMzOTtsbCBjaGVjayBgbmV0L2NvcmUvZGV2LmNgLiBJIGhhdmUgYSBnb29kIGZlZWxpbmcgdGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgZmluZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2NvbnN1bWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDMwMTp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYz0xMzk9c3RhdGljIHUzMiBjcHVfbWFwX2JwZl9wcm9nX3J1bl9za2Ioc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtMTQ5LVxua2VybmVsL2JwZi9jcHVtYXAuYzoxNTA6XHRcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFx1MDAyNnhkcCwgcmNwdS1cdTAwM2Vwcm9nKTtcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTUxLVx0XHRzd2l0Y2ggKGFjdCkge1xuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9NTE1PXN0YXRpYyB1MzIgZGV2X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfZHRhYl9uZXRkZXYgKmRzdClcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyNi1cbmtlcm5lbC9icGYvZGV2bWFwLmM6NTI3Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHNrYiwgXHUwMDI2eGRwLCBkc3QtXHUwMDNleGRwX3Byb2cpO1xua2VybmVsL2JwZi9kZXZtYXAuYy01MjgtXHRzd2l0Y2ggKGFjdCkge1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTU1OTA9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy01NjE3LVxubmV0L2NvcmUvZGV2LmM6NTYxODpcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XG5uZXQvY29yZS9kZXYuYy01NjE5LVx0c3dpdGNoIChhY3QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkyOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgWERQIGFuZCBQb3RlbnRpYWwgSW5saW5pbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgY29kZSBoZXJlLiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgdGhhdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbiwgYSBjb21tb24gZW50cnkgcG9pbnQuIEhvd2V2ZXIsIGB2ZXRoX3hkcF9yY3Zfc2tiYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gR2l2ZW4gdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uIGxhbmRzY2FwZSwgYSBmdW5jdGlvbiBkZWZpbmVkIGFzIHN0YXRpYyAqY291bGQqIGJlIGEgY2FuZGlkYXRlIGZvciBpbmxpbmluZyBieSB0aGUgY29tcGlsZXIgZHVyaW5nIG9wdGltaXphdGlvbi4gSSB3b25kZXIsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSwgaGFzIHRoZSBjb21waWxlciBvcHRpbWl6ZWQgYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBpbmxpbmVkIGl0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXRoX3hkcF9yY3Zfc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYz03NTE9c3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxuZHJpdmVycy9uZXQvdmV0aC5jOjc5MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9OTA3PXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM5LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5NDA6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTk0MS1cdFx0XHRpZiAoc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBYRFAgUHJvZ3JhbSBFeGVjdXRpb24gaW4gdGhlIHZldGggRHJpdmVyKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgWERQIGV4ZWN1dGlvbiBwYXRoIGluIHRoZSB2ZXRoIGRyaXZlci4gVGhlIGNvZGUmIzM5O3Mgc3RhdGljIOKAkyBtZWFuaW5nLCBJIGNhbiYjMzk7dCBkaXJlY3RseSBpbmxpbmUgaXQsIGJ1dCBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBpbmxpbmUgZWl0aGVyLiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIHRyYWNpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1c2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgYXMgYSBsaWtlbHksIGtleSBzeW1ib2wgdG8gdHJhY2UgaW50byB0aGUgWERQIGV4ZWN1dGlvbi4gVGhlIGB2ZXRoYCBkcml2ZXIgaXMgb2Z0ZW4gY3JpdGljYWwsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgYmVzdCBlbnRyeSBwb2ludHMuCgpJIHRoZW4gc3RhcnRlZCB0byB0aGluayBhYm91dCBgdmV0aF94ZHBfcmN2YC4gSXQgdG9vIGlzIHN0YXRpYywgYW5kIHRoYXQgcG9zZXMgYSBzaW1pbGFyIGNoYWxsZW5nZS4gSXMgdGhlcmUgYW55IHdheSB0aGF0IHRoZSBleGVjdXRpb24gZ2V0cyB0aGVyZSBmcm9tIHNvbWV0aGluZyB0aGF0JiMzOTtzIG5vdCBzdGF0aWM/IEkgbmVlZCB0byBmaW5kIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYHZldGguY2AgdGhhdCAqY2FsbHMqIGB2ZXRoX3hkcF9yY3ZgLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGxpbmsgSSYjMzk7bSB0cnlpbmcgdG8gZXN0YWJsaXNoLiBJZiBJIGNhbiBmaW5kIHRoYXQgbm9uLXN0YXRpYyBjYWxsZXIsIEkmIzM5O3ZlIGdvdCBhIG11Y2ggbW9yZSBhY2Nlc3NpYmxlIHBvaW50IGZvciBhbmFseXNpcyBhbmQgaW5zdHJ1bWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgZnVuY3Rpb24gY2FsbHMgd2l0aGluIHRoZSB2ZXRoIGRyaXZlciB0byBuYWlsIHRoaXMgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmV0aF9wb2xsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9NTA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmlibXZldGhfcnhxX2dldF9idWZmZXIoc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTUyOC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzo1Mjk6ICogQ29udGV4dDogY2FsbGVkIGZyb20gaWJtdmV0aF9wb2xsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTUzMC0gKlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9MTM3OT1zdGF0aWMgdm9pZCBpYm12ZXRoX3J4X2NzdW1faGVscGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNDQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxNDQ4OnN0YXRpYyBpbnQgaWJtdmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTQ0OS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYz0xNjM5PXN0YXRpYyBpbnQgaWJtdmV0aF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTY4My0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM6MTY4NDpzdGF0aWMgdm9pZCBpYm12ZXRoX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNjg1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jPTE3ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpYm12ZXRoX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNzkyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxNzkzOlx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gaWJtdmV0aF9wb2xsX2NvbnRyb2xsZXIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE3OTQtI2VuZGlmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYz0xNzk3PXN0YXRpYyBpbnQgaWJtdmV0aF9wcm9iZShzdHJ1Y3QgdmlvX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgdmlvX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xODQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxODQ3Olx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0KG5ldGRldiwgXHUwMDI2YWRhcHRlci1cdTAwM2VuYXBpLCBpYm12ZXRoX3BvbGwsIDE2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTg0OC1cbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9OTA3PXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTY0LVxuZHJpdmVycy9uZXQvdmV0aC5jOjk2NTpzdGF0aWMgaW50IHZldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG5kcml2ZXJzL25ldC92ZXRoLmMtOTY2LXtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTExNz1zdGF0aWMgaW50IHZldGhfZW5hYmxlX3hkcF9yYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RhcnQsIGludCBlbmQsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTExMjYtXHRcdGlmICghbmFwaV9hbHJlYWR5X29uKVxuZHJpdmVycy9uZXQvdmV0aC5jOjExMjc6XHRcdFx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZycS1cdTAwM2V4ZHBfbmFwaSwgdmV0aF9wb2xsKTtcbmRyaXZlcnMvbmV0L3ZldGguYy0xMTI4LVx0XHRlcnIgPSB4ZHBfcnhxX2luZm9fcmVnKFx1MDAyNnJxLVx1MDAzZXhkcF9yeHEsIGRldiwgaSwgcnEtXHUwMDNleGRwX25hcGkubmFwaV9pZCk7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTEyMTg9c3RhdGljIGludCB2ZXRoX25hcGlfZW5hYmxlX3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGFydCwgaW50IGVuZClcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTIyNS1cbmRyaXZlcnMvbmV0L3ZldGguYzoxMjI2Olx0XHRuZXRpZl9uYXBpX2FkZChkZXYsIFx1MDAyNnJxLVx1MDAzZXhkcF9uYXBpLCB2ZXRoX3BvbGwpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTEyMjctXHR9XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTE0NzI9c3RhdGljIHZvaWQgdmV0aF9kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy0xNDc3LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvdmV0aC5jOjE0Nzg6c3RhdGljIHZvaWQgdmV0aF9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3ZldGguYy0xNDc5LXtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTcwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZldGhfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcxNy0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L3ZldGguYzoxNzE4Olx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gdmV0aF9wb2xsX2NvbnRyb2xsZXIsXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcxOS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipUaGlua2luZyBUaHJvdWdoIHZldGggRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gYHZldGhfcG9sbGAgaXMgYWxzbyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUmIzM5O3MgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbiB0aGF0IG1pZ2h0IGJlIHVzYWJsZSBvciByZWxldmFudCB0byB0aGUgdmV0aCBpbnRlcmZhY2UgaW4gc29tZSB3YXkuIFdlJiMzOTtyZSBsb29raW5nIGZvciBmbGV4aWJpbGl0eSBoZXJlLCBzbyBhIHN0YXRpYyBmdW5jdGlvbiBpcyBsaW1pdGluZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9yIGV4dGVybmFsIHVzZS4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IGB2ZXRoX3hkcF94bWl0YD8gVGhhdCBtaWdodCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgZm9yIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHdlIGNhbiBhcHBseS4gUGVyaGFwcyBpdCBpcyBhIHJlbGF0ZWQgZnVuY3Rpb24sIHdpdGggYSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgd2UgY2FuIGNoYW5nZSwgb3IgYXQgbGVhc3QgYSBjYWxsIHRoYXQgbWlnaHQgYmUgaW50ZXJjZXB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmV0aF94ZHBfeG1pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9NDk1PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqdmV0aF9wZWVyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01MDItXG5kcml2ZXJzL25ldC92ZXRoLmM6NTAzOnN0YXRpYyBpbnQgdmV0aF94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbixcbmRyaXZlcnMvbmV0L3ZldGguYy01MDQtXHRcdFx0IHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTU2MD1zdGF0aWMgaW50IHZldGhfbmRvX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01NjQtXG5kcml2ZXJzL25ldC92ZXRoLmM6NTY1Olx0ZXJyID0gdmV0aF94ZHBfeG1pdChkZXYsIG4sIGZyYW1lcywgZmxhZ3MsIHRydWUpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTU2Ni1cdGlmIChlcnIgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9NTc1PXN0YXRpYyB2b2lkIHZldGhfeGRwX2ZsdXNoX2JxKHN0cnVjdCB2ZXRoX3JxICpycSwgc3RydWN0IHZldGhfeGRwX3R4X2JxICpicSlcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNTc4LVxuZHJpdmVycy9uZXQvdmV0aC5jOjU3OTpcdHNlbnQgPSB2ZXRoX3hkcF94bWl0KHJxLVx1MDAzZWRldiwgYnEtXHUwMDNlY291bnQsIGJxLVx1MDAzZXEsIDAsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3ZldGguYy01ODAtXHRpZiAoc2VudCBcdTAwM2MgMCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kb19yZWRpcmVjdC5jPTk3PXZvaWQgdGVzdF94ZHBfZG9fcmVkaXJlY3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYy0xNTEtXHQgKiByZWd1bGFyIGZvcndhcmRpbmcgcGF0aCB3aWxsIGVuZCB1cCBnb2luZyB0aHJvdWdoIHRoZSBzYW1lXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYzoxNTI6XHQgKiB2ZXRoX3hkcF94bWl0KCkgY2FsbCBhcyB0aGUgWERQX1JFRElSRUNUIGNvZGUsIHdoaWNoIGNhbiBjYXVzZSBhXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYy0xNTMtXHQgKiBkZWFkbG9jayBpZiBpdCBoYXBwZW5zIG9uIHRoZSBzYW1lIENQVS4gVGhlcmUmIzM5O3MgYSBsb2NhbF9iaF9kaXNhYmxlKClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg1MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWERQIFRyYW5zbWlzc2lvbiBpbiB0aGUgVkVUSCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBYRFAgdHJhbnNtaXNzaW9uIGlzIGhhbmRsZWQgaW4gdGhlIFZFVEggZHJpdmVyLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgc2VlIHRoYXQgYHZldGhfeGRwX3htaXRgLCBgdmV0aF9uZG9feGRwX3htaXRgLCBhbmQgYHZldGhfeG1pdGAgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIGRpZ2dpbmcgYSBiaXQgdG91Z2hlciwgYnV0IG5vIHN1cnByaXNlLCBkcml2ZXIgZnVuY3Rpb25zIG9mdGVuIGZvbGxvdyB0aGF0IHBhdHRlcm4gYW5kIGFyZSByZWdpc3RlcmVkIHdpdGggYG5ldF9kZXZpY2Vfb3BzYC4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCB3aGljaCAqaXMqIGV4cG9ydGVkLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBYRFAsIEkmIzM5O20gdGhpbmtpbmcgdGhhdCYjMzk7cyB0aGUgc3ltYm9sIHRvIGZvY3VzIG9uLiBMb29rcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQuIE5vdywgaXMgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgc3VmZmljaWVudCBvbiBpdHMgb3duIHRvIGRlc2NyaWJlIHRoZSB0cmFuc21pc3Npb24gZmxvdz8gWWVwLCBzZWVtcyBsaWtlIGl0LiBJJiMzOTttIGNvbmZpZGVudCBpbiBzdGFydGluZyB0aGVyZSB0byBnZXQgdGhlIGJpZyBwaWN0dXJlLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGtub3cgYENPTkZJR19WRVRIYCBpcyBvYnZpb3VzbHkgcmVxdWlyZWQgZm9yIHRoZSBWRVRIIG1vZHVsZSBpdHNlbGYuIEFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgZm9yIFhEUCB0byB3b3JrLCBJJiMzOTtkIGV4cGVjdCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgbGV0IG1lIGNyb3NzLXJlZmVyZW5jZSB0aGUgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgZnVuY3Rpb24gd2l0aCBgbmV0L2NvcmUvZGV2LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2NvbnN1bWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDMwMTp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYz0xMzk9c3RhdGljIHUzMiBjcHVfbWFwX2JwZl9wcm9nX3J1bl9za2Ioc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtMTQ5LVxua2VybmVsL2JwZi9jcHVtYXAuYzoxNTA6XHRcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFx1MDAyNnhkcCwgcmNwdS1cdTAwM2Vwcm9nKTtcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTUxLVx0XHRzd2l0Y2ggKGFjdCkge1xuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9NTE1PXN0YXRpYyB1MzIgZGV2X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfZHRhYl9uZXRkZXYgKmRzdClcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyNi1cbmtlcm5lbC9icGYvZGV2bWFwLmM6NTI3Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHNrYiwgXHUwMDI2eGRwLCBkc3QtXHUwMDNleGRwX3Byb2cpO1xua2VybmVsL2JwZi9kZXZtYXAuYy01MjgtXHRzd2l0Y2ggKGFjdCkge1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTU1OTA9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy01NjE3LVxubmV0L2NvcmUvZGV2LmM6NTYxODpcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XG5uZXQvY29yZS9kZXYuYy01NjE5LVx0c3dpdGNoIChhY3QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHdlbGwtdmVyc2VkIGluIGVCUEYgYW5kIFhEUDoKCioqRGlnZ2luZyBpbnRvIHRoZSBYRFAgRXhlY3V0aW9uIFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBwaW5wb2ludCBleGFjdGx5IGhvdyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEZpcnN0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3Igbm90LiBJJiMzOTt2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIG5lc3RsZWQgd2l0aGluIGFueSBwcmVwcm9jZXNzb3IgYCNpZmRlZmAgYmxvY2tzLiBUaGF0IGluZm9ybWF0aW9uIHdpbGwgdGVsbCBtZSBpZiBpdCYjMzk7cyBhbHdheXMgcGFydCBvZiB0aGUgWERQIGV4ZWN1dGlvbiwgb3Igb25seSBlbmFibGVkIHVuZGVyIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBidWlsZCBvcHRpb25zLiBLbm93aW5nIHRoYXQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIGFuZCBob3cgcG9ydGFibGUgb3IgY29uZmlndXJhYmxlIGl0cyBiZWhhdmlvciBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01NDU3LVxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXG4tLVxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2MTctXG5uZXQvY29yZS9kZXYuYzo1NjE4Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKCpwc2tiLCB4ZHAsIHhkcF9wcm9nKTtcbm5ldC9jb3JlL2Rldi5jLTU2MTktXHRzd2l0Y2ggKGFjdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGxpbmUgb2YgdGhpbmtpbmc6CgoqKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIERyaXZlciBJc3N1ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBuZXQvY29yZS9kZXYuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNTQ1OC4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIHdoZXJlIHRoZSBidWcgSSYjMzk7bSBodW50aW5nIGlzIG5lc3RlZC4gSXQmIzM5O3Mgb2Z0ZW4gdGhhdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgaW52b2x2ZSBhIHByb2JsZW0gaW4gdGhlIG5ldHdvcmtpbmcgY29yZSwgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGlzIGZpbGUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBhcmVhIGlzIHBvdGVudGlhbGx5IGNydWNpYWwgZm9yIHRoZSBkZXZpY2UmIzM5O3MgYmVoYXZpb3IuIEkgd2lsbCBsb29rIGZvciBhbnkgY2x1ZXMgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQ0MDpcdFx0cnhxdWV1ZSA9IGRldi1cdTAwM2Vfcng7XG41NDQxOlx0XG41NDQyOlx0XHRpZiAoc2tiX3J4X3F1ZXVlX3JlY29yZGVkKHNrYikpIHtcbjU0NDM6XHRcdFx0dTE2IGluZGV4ID0gc2tiX2dldF9yeF9xdWV1ZShza2IpO1xuNTQ0NDpcdFxuNTQ0NTpcdFx0XHRpZiAodW5saWtlbHkoaW5kZXggXHUwMDNlPSBkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKSkge1xuNTQ0NjpcdFx0XHRcdFdBUk5fT05DRShkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzIFx1MDAzZSAxLFxuNTQ0NzpcdFx0XHRcdFx0ICBcJiMzNDslcyByZWNlaXZlZCBwYWNrZXQgb24gcXVldWUgJXUsIGJ1dCBudW1iZXIgXCYjMzQ7XG41NDQ4Olx0XHRcdFx0XHQgIFwmIzM0O29mIFJYIHF1ZXVlcyBpcyAldVxcblwmIzM0OyxcbjU0NDk6XHRcdFx0XHRcdCAgZGV2LVx1MDAzZW5hbWUsIGluZGV4LCBkZXYtXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzKTtcbjU0NTA6XHRcbjU0NTE6XHRcdFx0XHRyZXR1cm4gcnhxdWV1ZTsgLyogUmV0dXJuIGZpcnN0IHJ4cXVldWUgKi9cbjU0NTI6XHRcdFx0fVxuNTQ1MzpcdFx0XHRyeHF1ZXVlICYjNDM7PSBpbmRleDtcbjU0NTQ6XHRcdH1cbjU0NTU6XHRcdHJldHVybiByeHF1ZXVlO1xuNTQ1NjpcdH1cbjU0NTc6XHRcbjU0NTg6XHR1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuNTQ1OTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcbjU0NjA6XHR7XG41NDYxOlx0XHR2b2lkICpvcmlnX2RhdGEsICpvcmlnX2RhdGFfZW5kLCAqaGFyZF9zdGFydDtcbjU0NjI6XHRcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cXVldWU7XG41NDYzOlx0XHRib29sIG9yaWdfYmNhc3QsIG9yaWdfaG9zdDtcbjU0NjQ6XHRcdHUzMiBtYWNfbGVuLCBmcmFtZV9zejtcbjU0NjU6XHRcdF9fYmUxNiBvcmlnX2V0aF90eXBlO1xuNTQ2NjpcdFx0c3RydWN0IGV0aGhkciAqZXRoO1xuNTQ2NzpcdFx0dTMyIG1ldGFsZW4sIGFjdDtcbjU0Njg6XHRcdGludCBvZmY7XG41NDY5Olx0XG41NDcwOlx0XHQvKiBUaGUgWERQIHByb2dyYW0gd2FudHMgdG8gc2VlIHRoZSBwYWNrZXQgc3RhcnRpbmcgYXQgdGhlIE1BQ1xuNTQ3MTpcdFx0ICogaGVhZGVyLlxuNTQ3MjpcdFx0ICovXG41NDczOlx0XHRtYWNfbGVuID0gc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xuNTQ3NDpcdFx0aGFyZF9zdGFydCA9IHNrYi1cdTAwM2VkYXRhIC0gc2tiX2hlYWRyb29tKHNrYik7XG41NDc1Olx0XG41NDc2Olx0XHQvKiBTS0IgXCYjMzQ7aGVhZFwmIzM0OyBhcmVhIGFsd2F5cyBoYXZlIHRhaWxyb29tIGZvciBza2Jfc2hhcmVkX2luZm8gKi9cbjU0Nzc6XHRcdGZyYW1lX3N6ID0gKHZvaWQgKilza2JfZW5kX3BvaW50ZXIoc2tiKSAtIGhhcmRfc3RhcnQ7XG41NDc4Olx0XHRmcmFtZV9zeiAmIzQzOz0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTtcbjU0Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgdmV0aF94ZHBfcmN2X3NrYmAqKgoKQWxyaWdodCwgc28gdGhlIGlzc3VlIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3QgaGlkZGVuIGJlaGluZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFjcm8sIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBtZWFucyBJIGNhbiBsb29rIGF0IHRoZSBjb2RlIGRpcmVjdGx5IHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGltbWVkaWF0ZWx5LgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHZldGhfeGRwX3Jjdl9za2JgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBmYWlybHkgY2VydGFpbiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHdpdGhpbiBgZHJpdmVycy9uZXQvdmV0aC5jYC4gVGhlIGB2ZXRoYCBkcml2ZXIgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgaGFuZGxpbmcgb2YgVmlydHVhbCBFdGhlcm5ldCBkZXZpY2VzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW50ZXJhY3Rpb25zIGlzIGltcG9ydGFudC4gSeKAmW0gZ29pbmcgdG8gZ28gc3RyYWlnaHQgdG8gdGhhdCBmaWxlIHRvIGludmVzdGlnYXRlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBmdW5jdGlvbiYjMzk7cyBicm9hZGVyIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODA6XHRcdCpwc2tiID0gc2tiO1xuIDc4MTpcdFxuIDc4MjpcdFx0cmV0dXJuIDA7XG4gNzgzOlx0ZHJvcDpcbiA3ODQ6XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gNzg1Olx0XHQqcHNrYiA9IE5VTEw7XG4gNzg2Olx0XG4gNzg3Olx0XHRyZXR1cm4gLUVOT01FTTtcbiA3ODg6XHR9XG4gNzg5Olx0XG4gNzkwOlx0c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcbiA3OTE6XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbiA3OTI6XHRcdFx0XHRcdFx0c3RydWN0IHZldGhfeGRwX3R4X2JxICpicSxcbiA3OTM6XHRcdFx0XHRcdFx0c3RydWN0IHZldGhfc3RhdHMgKnN0YXRzKVxuIDc5NDpcdHtcbiA3OTU6XHRcdHZvaWQgKm9yaWdfZGF0YSwgKm9yaWdfZGF0YV9lbmQ7XG4gNzk2Olx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIDc5NzpcdFx0c3RydWN0IHZldGhfeGRwX2J1ZmYgdnhidWY7XG4gNzk4Olx0XHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCA9IFx1MDAyNnZ4YnVmLnhkcDtcbiA3OTk6XHRcdHUzMiBhY3QsIG1ldGFsZW47XG4gODAwOlx0XHRpbnQgb2ZmO1xuIDgwMTpcdFxuIDgwMjpcdFx0c2tiX3ByZXBhcmVfZm9yX2dybyhza2IpO1xuIDgwMzpcdFxuIDgwNDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDgwNTpcdFx0eGRwX3Byb2cgPSByY3VfZGVyZWZlcmVuY2UocnEtXHUwMDNleGRwX3Byb2cpO1xuIDgwNjpcdFx0aWYgKHVubGlrZWx5KCF4ZHBfcHJvZykpIHtcbiA4MDc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gODA4Olx0XHRcdGdvdG8gb3V0O1xuIDgwOTpcdFx0fVxuIDgxMDpcdFxuIDgxMTpcdFx0X19za2JfcHVzaChza2IsIHNrYi1cdTAwM2VkYXRhIC0gc2tiX21hY19oZWFkZXIoc2tiKSk7XG4gODEyOlx0XHRpZiAodmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihycSwgeGRwLCBcdTAwMjZza2IpKVxuIDgxMzpcdFx0XHRnb3RvIGRyb3A7XG4gODE0Olx0XHR2eGJ1Zi5za2IgPSBza2I7XG4gODE1Olx0XG4gODE2Olx0XHRvcmlnX2RhdGEgPSB4ZHAtXHUwMDNlZGF0YTtcbiA4MTc6XHRcdG9yaWdfZGF0YV9lbmQgPSB4ZHAtXHUwMDNlZGF0YV9lbmQ7XG4gODE4Olx0XG4gODE5Olx0XHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHhkcF9wcm9nLCB4ZHApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QgZ2F0ZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIOKAkyB0aGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBJdCBzZWVtcyB0byBkaXJlY3RseSBtb2RpZnkgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB0b3VjaGluZyB0aGUgdmV0aCBkcml2ZXIgYW5kIG90aGVyIG5ldHdvcmtpbmcgY29kZS4gR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBjb3JlIGZ1bmN0aW9uYWxpdHksIGZ1enppbmcgaXMgYWJzb2x1dGVseSB0aGUgcmlnaHQgYXBwcm9hY2ggaGVyZS4gV2UgbmVlZCB0byBzdWJqZWN0IHRoaXMgdG8gcmlnb3JvdXMgdGVzdGluZy4KCk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IG5lZWRzIHRvIGJlIG9uIHRoZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBzeW1ib2wuIEnigJltIHRoaW5raW5nIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIGNvbnRyb2wgZmxvdyBwb2ludCB3aXRoaW4gdGhlIHBhdGNoLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byBmb2N1c2luZyBvdXIgZnV6emluZyBlZmZvcnRzLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBJIHNlZSBpdCByZWxpZXMgb24gYFZFVEhgIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGVuYWJsaW5nIG9yIGNvbnRyb2xsaW5nIHRoZSBYRFAgZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gYmUgc3VyZSB3ZSYjMzk7cmUgdGVzdGluZyB0aGUgY29ycmVjdCBjb2RlIHBhdGhzLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcxMQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgQlBGIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gTmF0dXJhbGx5LCBJIGltbWVkaWF0ZWx5IHRoaW5rLCAqeWVzLCBgQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24ga25vYiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dC4qIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZnVuZGFtZW50YWwgZW5hYmxlciBmb3IgQlBGIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IHNwcmluZ3MgdG8gbWluZC4KCkJ1dCB0aGVuIG15IG1pbmQgYXV0b21hdGljYWxseSBqdW1wcyB0byB0aGUgbnVhbmNlcy4gSSYjMzk7bSB3b25kZXJpbmcsICppcyBgQlBGX1NZU0NBTExgIHRoZSAqb25seSogdGhpbmcgd2UgbmVlZCB0byBjb25zaWRlciwgb3IgYXJlIHRoZXJlIHNwZWNpZmljLCBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXksIHBhcnRpY3VsYXJseSB3aGVuIGZvY3VzaW5nIG9uIFhEUCBwcm9ncmFtcz8qICBXZSBhbGwga25vdyBYRFAgaGFzIGl0cyBvd24gcGVjdWxpYXJpdGllcywgaXRzIG93biBwZXJmb3JtYW5jZSBwcm9maWxlLCBhbmQgaXRzIG93biB1c2UtY2FzZXMg4oCTIGl0cyBub3QgbWVyZWx5IEJQRiwgaXQmIzM5O3MgYSBzcGVjaWFsaXplZCBleGVjdXRpb24gcGF0aC4gIFNvLCBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhIHNwZWNpZmljLCBYRFAtY2VudHJpYyBjb25maWcgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLCBvciBpZiBpdCYjMzk7cyBhbGwgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgYEJQRl9TWVNDQUxMYCBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLCBhbmQgaG93IFhEUCBpcyBhY3R1YWxseSAqZW5hYmxlZCogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNjcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWERQIEVudHJ5cG9pbnQgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBYRFAgYW5kIGhvdyB0byBiZXN0IHRhcmdldCBpdCBmb3Igd2hhdGV2ZXIgSSYjMzk7bSBkb2luZy4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgWERQIGlzIGF2YWlsYWJsZSB3aGVuZXZlciBCUEYgaXMgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBkaWcgaW50byBgbmV0L2NvcmUvZGV2LmNgIHRvIGxvb2sgYXQgaG93IHRoaXMgYWxsIHRpZXMgdG9nZXRoZXIuIFRoZSBpbW1lZGlhdGUgc3ltYm9sIHRoYXQganVtcHMgb3V0IGlzIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgOyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEFuZCBzaW5jZSBJJiMzOTttIHRyeWluZyB0byBmaW5kIGFuIGVudHJ5IHBvaW50LCBgVkVUSGAgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIGNvbmZpZ3VyYXRpb24gdG8gd29yayB3aXRoLgoKTm93LCBhIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIHRoZSAqb25seSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnZvbHZlZCBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgZmV3IG90aGVyIFhEUC1yZWxhdGVkIGZ1bmN0aW9ucyBpbiBgdmV0aC5jYCwgYnV0IHRoZXkmIzM5O3JlIGFsbCAqc3RhdGljKjogYHZldGhfeGRwX3Jjdl9za2JgLCBgdmV0aF94ZHBfcmN2YCwgYHZldGhfcG9sbGAsIGB2ZXRoX3hkcF94bWl0YCwgYHZldGhfbmRvX3hkcF94bWl0YC4gUmlnaHQsIHRoYXQmIzM5O3MgdHlwaWNhbDsgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBrZXB0IHN0YXRpYy4gU28gaXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCAqaXMqIHRoZSB3YXkgdG8gZ28uCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYHZldGhfeGRwX3Jjdl9za2JgIGlzIGlubGluZWQuIElmIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBzeXprYWxsZXIgY291bGQgdGhlb3JldGljYWxseSB0cmFjZSBpdCBpZiBpdCYjMzk7cyBpbiB0aGUgc3ltYm9sIHRhYmxlLiBIb3dldmVyLCB0aGUgZ3VpZGVsaW5lIHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLiBTbyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBzdGlsbCB0aGUgYmVzdCBwaWNrLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhcm91bmQgYG5ldC9jb3JlL2Rldi5jYCBmb3IgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIE9rYXksIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGV4cG9ydGVkIGl0c2VsZiwgYnV0IGxvb2tpbmcgYXQgaXRzIGNhbGwgZ3JhcGguLi4gaXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBjYWxsZWQgYnkgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLCB3aGljaCBpcyBzdGF0aWMuIFRoYXQsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgZG9feGRwX2dlbmVyaWNgLCB3aGljaCBpcyBhbHNvIHN0YXRpYy4gQW5kIGBkb194ZHBfZ2VuZXJpY2AgaXMgY2FsbGVkIGJ5IGBfX25ldGlmX3JlY2VpdmVfc2tiX2NvcmVgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCBmaW5hbGx5LCBgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlYCBpcyBjYWxsZWQgYnkgYF9fbmV0aWZfcmVjZWl2ZV9za2Jfb25lX2NvcmVgLCB3aGljaCAqaXMqIGV4cG9ydGVkLiBTbywgdGhlIHBhdGggaXM6IGBfX25ldGlmX3JlY2VpdmVfc2tiX29uZV9jb3JlYCAtJmd0OyBgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlYCAtJmd0OyBgZG9feGRwX2dlbmVyaWNgIC0mZ3Q7IGBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwYCAtJmd0OyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gU28gdGhlIGNvbmNsdXNpb24gaXMsIHRoYXQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgc3RpbGwgYSBnb29kIGVudHJ5cG9pbnQgZm9yIHRoZSBYRFAgZnVuY3Rpb25hbGl0eS4KCkFscmlnaHQsIHRoYXQgc2V0dGxlcyBpdDsgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGEgRnVuY3Rpb24qKgoKSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQmIzM5O3MgKm5vdCogZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGNsdWUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpdCYjMzk7cyBhbHNvICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbXBsaWVzIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgY29tcGlsYXRpb24gdW5pdCwgcmlnaHQ/IFRoZSBsaW5rZXIgc2hvdWxkIGJlIGFibGUgdG8gc2VlIGl0LCB3aGljaCBzdWdnZXN0cyBwb3RlbnRpYWwgdXNlIGVsc2V3aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCBtb2R1bGUgb3IgZXZlbiBsaW5rZWQgZXh0ZXJuYWxseS4gT2theSwgSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZmlndXJlIG91dCB0aGUgaW50ZW5kZWQgdmlzaWJpbGl0eS4KCkxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gSSYjMzk7bGwgaGVhZCBiYWNrIG92ZXIgdG8gYG5ldC9jb3JlL2Rldi5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0JiMzOTtzIHRoZSBwbGFjZSB0aGlzIGlzIGRlZmluZWQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgc2VlIGV4YWN0bHkgKmhvdyogYW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVybmVzcyBoZXJlIHRoYXQgSSBtaXNzZWQgdGhlIGZpcnN0IHRpbWUgYXJvdW5kLiBUaW1lIHRvIGNvbmZpcm0gaWYgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgb3IgbmVlZCB0byBleHBhbmQgdGhlIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQyOTY9c3RhdGljIGlubGluZSB2b2lkIGRldl9jb25zdW1lX3NrYl9hbnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDAtXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQzMDE6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMi1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA1OAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdmV0aF94ZHBfcmN2X3NrYmAqKgoKUmlnaHQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdsb2JhbCBjb25jZXJuLiBJIG5lZWQgdG8gZmlndXJlIG91dCBqdXN0IGhvdyBmYXIgdGhpcyByZWFjaGVzLiBMZXQmIzM5O3Mgc2VlLi4uICp0aGlua3MgYmFjayB0byB0aGUgY29kZSogLi4ub2theSwgSSYjMzk7bSBwcmV0dHkgc3VyZSBgdmV0aF94ZHBfcmN2X3NrYmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFllcywgdGhhdCYjMzk7cyBpdC4gQ29uZmlybWVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogZ2xvYmFsIGZ1bmN0aW9ucyBsdXJraW5nIGluIGB2ZXRoLmNgIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGFuZCBjaGVjay4gVGhhdCYjMzk7cyB0aGUgcmVhbCB0ZXN0IG9mIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIHZldGhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYy00Mi1cbmRyaXZlcnMvbmV0L3ZldGguYzo0MzpzdHJ1Y3QgdmV0aF9zdGF0cyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNDQtXHR1NjRcdHJ4X2Ryb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01NS1cbmRyaXZlcnMvbmV0L3ZldGguYzo1NjpzdHJ1Y3QgdmV0aF9ycV9zdGF0cyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNTctXHRzdHJ1Y3QgdmV0aF9zdGF0c1x0dnM7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTYwLVxuZHJpdmVycy9uZXQvdmV0aC5jOjYxOnN0cnVjdCB2ZXRoX3JxIHtcbmRyaXZlcnMvbmV0L3ZldGguYy02Mi1cdHN0cnVjdCBuYXBpX3N0cnVjdFx0eGRwX25hcGk7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTczLVxuZHJpdmVycy9uZXQvdmV0aC5jOjc0OnN0cnVjdCB2ZXRoX3ByaXYge1xuZHJpdmVycy9uZXQvdmV0aC5jLTc1LVx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3VcdCpwZWVyO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy04MS1cbmRyaXZlcnMvbmV0L3ZldGguYzo4MjpzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEge1xuZHJpdmVycy9uZXQvdmV0aC5jLTgzLVx0c3RydWN0IHhkcF9mcmFtZSAqcVtWRVRIX1hEUF9UWF9CVUxLX1NJWkVdO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy05MC1cbmRyaXZlcnMvbmV0L3ZldGguYzo5MTpzdHJ1Y3QgdmV0aF9xX3N0YXRfZGVzYyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtOTItXHRjaGFyXHRkZXNjW0VUSF9HU1RSSU5HX0xFTl07XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTExNz1zdGF0aWMgc3RydWN0IHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTIyLVxuZHJpdmVycy9uZXQvdmV0aC5jOjEyMzpzdHJ1Y3QgdmV0aF94ZHBfYnVmZiB7XG5kcml2ZXJzL25ldC92ZXRoLmMtMTI0LVx0c3RydWN0IHhkcF9idWZmIHhkcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NzEKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFhEUCBQYWNrZXQgVGFpbCBBZGp1c3RtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIGJ1ZyByZWxhdGVkIHRvIGhvdyBgc2tiLSZndDtsZW5gIGFuZCBgc2tiLSZndDtkYXRhX2xlbmAgYXJlIGhhbmRsZWQgYWZ0ZXIgYW4gWERQIHByb2dyYW0gbW9kaWZpZXMgdGhlIHBhY2tldCB0YWlsLCBzcGVjaWZpY2FsbHkgd2l0aCBzb21ldGhpbmcgbGlrZSBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIFRoaXMgYXBwZWFycyB0byBiZSByZWxldmFudCBpbiBib3RoIHRoZSBnZW5lcmljIFhEUCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQsIGNyaXRpY2FsbHksIHRoZSB2ZXRoIGRyaXZlciYjMzk7cyBYRFAgcmVjZWl2ZSBwYXRoLiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQgZ2l2ZXMgbWUgbW9yZSBzdXJmYWNlIGFyZWEuCgpHaXZlbiB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIGluIGB2ZXRoLmNgIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCwgdGhhdCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS4gTXkgcHJpbWFyeSBzeW1ib2wgb2YgaW50ZXJlc3QgaGFzIHRvIGJlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzIHRvIGZpbmQgdGhlIGJ1Zy4gSXQgd2lsbCBoaXQgdGhvc2UgZnVuY3Rpb25zLCBJJiMzOTttIGd1ZXNzaW5nLgoKRnJvbSB0aGUgY29uZmlnIHBlcnNwZWN0aXZlLCBgVkVUSGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIHRoZSBrZXkgY29uZmlncyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBpc3N1ZS4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIG9idmlvdXNseS4KClRoaXMgZml4IGlzIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycy4gVGhhdCYjMzk7cyBjcml0aWNhbCBmb3IgZnV6emluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIHRoYXQgdGFyZ2V0ZWQgZnV6emluZyBjb3VsZCBiZSB2ZXJ5IGVmZmVjdGl2ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byB0YXJnZXQgYm90aCBnZW5lcmljIFhEUCBhbmQgdGhlIHZldGggZHJpdmVyIHNwZWNpZmljYWxseS4gVGhpcyB3aWxsIGJlIGFuIGltcG9ydGFudCBhbmQgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXQuIExldCYjMzk7cyBnZXQgdG8gd29yayBhbmQgc2V0IHVwIG15IGZ1enppbmcgaGFybmVzc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkVUSCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBob3cgc2tiLVx1MDAzZWxlbiBhbmQgc2tiLVx1MDAzZWRhdGFfbGVuIGFyZSBzeW5jaHJvbml6ZWQgd2l0aCB4ZHAgZGF0YSBhZnRlciBydW5uaW5nIGFuIFhEUCBwcm9ncmFtIHRoYXQgYWRqdXN0cyB0aGUgcGFja2V0IHRhaWwgKGUuZy4sIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBUaGlzIGFmZmVjdHMgYm90aCB0aGUgZ2VuZXJpYyBYRFAgcGF0aCBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSB2ZXRoIGRyaXZlciYjMzk7cyBYRFAgcmVjZWl2ZSBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRVRIJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGhvdyBza2ItXHUwMDNlbGVuIGFuZCBza2ItXHUwMDNlZGF0YV9sZW4gYXJlIHN5bmNocm9uaXplZCB3aXRoIHhkcCBkYXRhIGFmdGVyIHJ1bm5pbmcgYW4gWERQIHByb2dyYW0gdGhhdCBhZGp1c3RzIHRoZSBwYWNrZXQgdGFpbCAoZS5nLiwgYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBnZW5lcmljIFhEUCBwYXRoIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyJiMzOTtzIFhEUCByZWNlaXZlIHBhdGguIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMDoyNC43NjI4NzM5NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEwODM4ODc2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkVUSFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBob3cgc2tiLVxcdTAwM2VsZW4gYW5kIHNrYi1cXHUwMDNlZGF0YV9sZW4gYXJlIHN5bmNocm9uaXplZCB3aXRoIHhkcCBkYXRhIGFmdGVyIHJ1bm5pbmcgYW4gWERQIHByb2dyYW0gdGhhdCBhZGp1c3RzIHRoZSBwYWNrZXQgdGFpbCAoZS5nLiwgYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBnZW5lcmljIFhEUCBwYXRoIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyJ3MgWERQIHJlY2VpdmUgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6MjQuNzYyODc5OTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYxODc2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNDM0MDMxM2FlMDEzZTFlYmQ4ZGNjYjE4NTBlZDNlNDJkM2RlMGEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDY6MTA6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXFxuaW5kZXggMDBlMzRhZmQ4NThlNy4uZjgwZjY1ODRhNmZmOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcXG4rKysgYi9kcml2ZXJzL25ldC92ZXRoLmNcXG5AQCAtODY1LDE4ICs4NjUsMjQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuIFxcbi1cXHQvKiBjaGVjayBpZiBicGZfeGRwX2FkanVzdF90YWlsIHdhcyB1c2VkICovXFxuLVxcdG9mZiA9IHhkcC1cXHUwMDNlZGF0YV9lbmQgLSBvcmlnX2RhdGFfZW5kO1xcbi1cXHRpZiAob2ZmICE9IDApXFxuLVxcdFxcdF9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqL1xcbi1cXG4gXFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xcbi1cXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cXG4rXFx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFJlbW92ZSB0aGUgb2xkIGZyYWdtZW50IGNvbnRyaWJ1dGlvblxcbitcXHQgKiBmcm9tIHNrYi1cXHUwMDNlbGVuIGJlZm9yZSB1cGRhdGluZyBkYXRhX2xlbiwgdGhlbiBhZGQgdGhlIG5ldyBvbmUgYmFjay5cXG4gXFx0ICovXFxuLVxcdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSlcXG4rXFx0c2tiLVxcdTAwM2VsZW4gLT0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4rXFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZXhkcF9mcmFnc19zaXplO1xcbi1cXHRlbHNlXFxuK1xcdFxcdHNrYi1cXHUwMDNlbGVuICs9IHNrYi1cXHUwMDNlZGF0YV9sZW47XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGF0YV9sZW4gPSAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTeW5jaHJvbml6ZSB0aGUgc2tiIHRhaWwgd2l0aCBYRFAncyB1cGRhdGVkIGxpbmVhciBhcmVhLiAqL1xcbitcXHRvZmYgPSB4ZHAtXFx1MDAzZWRhdGFfZW5kIC0gb3JpZ19kYXRhX2VuZDtcXG4rXFx0aWYgKG9mZiAhPSAwKSB7XFxuK1xcdFxcdHNrYl9zZXRfdGFpbF9wb2ludGVyKHNrYiwgeGRwLVxcdTAwM2VkYXRhX2VuZCAtIHhkcC1cXHUwMDNlZGF0YSk7XFxuK1xcdFxcdHNrYi1cXHUwMDNlbGVuICs9IG9mZjsgLyogcG9zaXRpdmUgb24gZ3JvdywgbmVnYXRpdmUgb24gc2hyaW5rICovXFxuK1xcdH1cXG4gXFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJxLVxcdTAwM2VkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDU5MzNjNWRhYjA5ZWUuLjVjMzdjZjZjNGFhMTAgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC01NTE3LDEyICs1NTE3LDE2IEBAIHUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFhEUCBmcmFnIG1ldGFkYXRhIChlLmcuIG5yX2ZyYWdzKSBhcmUgdXBkYXRlZCBpbiBlQlBGIGhlbHBlcnNcXG4tXFx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXFxuK1xcdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBSZW1vdmUgdGhlIG9sZCBmcmFnbWVudCBjb250cmlidXRpb25cXG4rXFx0ICogZnJvbSBza2ItXFx1MDAzZWxlbiBiZWZvcmUgdXBkYXRpbmcgZGF0YV9sZW4sIHRoZW4gYWRkIHRoZSBuZXcgb25lIGJhY2suXFxuIFxcdCAqL1xcbi1cXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpXFxuK1xcdHNrYi1cXHUwMDNlbGVuIC09IHNrYi1cXHUwMDNlZGF0YV9sZW47XFxuK1xcdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkge1xcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcXG4tXFx0ZWxzZVxcbitcXHRcXHRza2ItXFx1MDAzZWxlbiArPSBza2ItXFx1MDAzZWRhdGFfbGVuO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogY2hlY2sgaWYgWERQIGNoYW5nZWQgZXRoIGhkciBzdWNoIFNLQiBuZWVkcyB1cGRhdGUgKi9cXG4gXFx0ZXRoID0gKHN0cnVjdCBldGhoZHIgKil4ZHAtXFx1MDAzZWRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEwOjI1LjE5OTg0MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzA2NDY5MDkwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkVUSFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBob3cgc2tiLVxcdTAwM2VsZW4gYW5kIHNrYi1cXHUwMDNlZGF0YV9sZW4gYXJlIHN5bmNocm9uaXplZCB3aXRoIHhkcCBkYXRhIGFmdGVyIHJ1bm5pbmcgYW4gWERQIHByb2dyYW0gdGhhdCBhZGp1c3RzIHRoZSBwYWNrZXQgdGFpbCAoZS5nLiwgYnBmX3hkcF9hZGp1c3RfdGFpbCkuIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBnZW5lcmljIFhEUCBwYXRoIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyJ3MgWERQIHJlY2VpdmUgcGF0aC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjQzNDAzMTNhZTAxM2UxZWJkOGRjY2IxODUwZWQzZTQyZDNkZTBhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMDY6MTA6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmNcbmluZGV4IDAwZTM0YWZkODU4ZTcuLmY4MGY2NTg0YTZmZjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuQEAgLTg2NSwxOCArODY1LDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4gXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFxuLVx0LyogY2hlY2sgaWYgYnBmX3hkcF9hZGp1c3RfdGFpbCB3YXMgdXNlZCAqL1xuLVx0b2ZmID0geGRwLVx1MDAzZWRhdGFfZW5kIC0gb3JpZ19kYXRhX2VuZDtcbi1cdGlmIChvZmYgIT0gMClcbi1cdFx0X19za2JfcHV0KHNrYiwgb2ZmKTsgLyogcG9zaXRpdmUgb24gZ3JvdywgbmVnYXRpdmUgb24gc2hyaW5rICovXG4tXG4gXHQvKiBYRFAgZnJhZyBtZXRhZGF0YSAoZS5nLiBucl9mcmFncykgYXJlIHVwZGF0ZWQgaW4gZUJQRiBoZWxwZXJzXG4tXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cbitcdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBSZW1vdmUgdGhlIG9sZCBmcmFnbWVudCBjb250cmlidXRpb25cbitcdCAqIGZyb20gc2tiLVx1MDAzZWxlbiBiZWZvcmUgdXBkYXRpbmcgZGF0YV9sZW4sIHRoZW4gYWRkIHRoZSBuZXcgb25lIGJhY2suXG4gXHQgKi9cbi1cdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSlcbitcdHNrYi1cdTAwM2VsZW4gLT0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuK1x0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSB7XG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcbi1cdGVsc2VcbitcdFx0c2tiLVx1MDAzZWxlbiArPSBza2ItXHUwMDNlZGF0YV9sZW47XG4rXHR9IGVsc2Uge1xuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSAwO1xuK1x0fVxuK1xuK1x0LyogU3luY2hyb25pemUgdGhlIHNrYiB0YWlsIHdpdGggWERQJ3MgdXBkYXRlZCBsaW5lYXIgYXJlYS4gKi9cbitcdG9mZiA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIG9yaWdfZGF0YV9lbmQ7XG4rXHRpZiAob2ZmICE9IDApIHtcbitcdFx0c2tiX3NldF90YWlsX3BvaW50ZXIoc2tiLCB4ZHAtXHUwMDNlZGF0YV9lbmQgLSB4ZHAtXHUwMDNlZGF0YSk7XG4rXHRcdHNrYi1cdTAwM2VsZW4gKz0gb2ZmOyAvKiBwb3NpdGl2ZSBvbiBncm93LCBuZWdhdGl2ZSBvbiBzaHJpbmsgKi9cbitcdH1cbiBcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcnEtXHUwMDNlZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlLi41YzM3Y2Y2YzRhYTEwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTUxNywxMiArNTUxNywxNiBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuIFx0fVxuIFxuIFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xuLVx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXG4rXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKS4gUmVtb3ZlIHRoZSBvbGQgZnJhZ21lbnQgY29udHJpYnV0aW9uXG4rXHQgKiBmcm9tIHNrYi1cdTAwM2VsZW4gYmVmb3JlIHVwZGF0aW5nIGRhdGFfbGVuLCB0aGVuIGFkZCB0aGUgbmV3IG9uZSBiYWNrLlxuIFx0ICovXG4tXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpXG4rXHRza2ItXHUwMDNlbGVuIC09IHNrYi1cdTAwM2VkYXRhX2xlbjtcbitcdGlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkge1xuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemU7XG4tXHRlbHNlXG4rXHRcdHNrYi1cdTAwM2VsZW4gKz0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuK1x0fSBlbHNlIHtcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gMDtcbitcdH1cbiBcbiBcdC8qIGNoZWNrIGlmIFhEUCBjaGFuZ2VkIGV0aCBoZHIgc3VjaCBTS0IgbmVlZHMgdXBkYXRlICovXG4gXHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cdTAwM2VkYXRhO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6MjUuMTk5ODQ1MDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk4MzI5MDYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBOZXR3b3JrIENvcmUgYW5kIFZldGggRHJpdmVyIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgdG91Y2hpbmcgYm90aCBgZHJpdmVycy9uZXQvdmV0aC5jYCBhbmQgYG5ldC9jb3JlL2Rldi5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgbXkgZXllYnJvd3MuIEFueXRpbWUgd2UncmUgbWVzc2luZyB3aXRoIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBob3cgYHNrYi1cdTAwM2VsZW5gIGFuZCBgc2tiLVx1MDAzZWRhdGFfbGVuYCBhcmUgaGFuZGxlZCB3aXRoIFhEUCBkYXRhIGFmdGVyIGFuIFhEUCBwcm9ncmFtIHJ1bnMuIFN5bmNocm9uaXphdGlvbiBoZXJlIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCB0d28gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHZldGhfeGRwX3Jjdl9za2JgIGluIGBkcml2ZXJzL25ldC92ZXRoLmNgIGlzIHVwZGF0ZWQsIGFuZCB0aGVuIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGluIGBuZXQvY29yZS9kZXYuY2AgYWxzbyBnZXRzIGEgbG9vay4gVGhvc2UgYXJlIGZ1bmN0aW9uIGNoYW5nZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgb24gdGhlIHJhZGFyLiBCb3RoIG9mIHRoZXNlIGFyZSBpbiBjcml0aWNhbCBwYXRocyBmb3IgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgbWlzc3RlcHMgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHkgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGlzc3Vlcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgY29uZmlnIG9wdGlvbnMuIGBkcml2ZXJzL25ldC92ZXRoLmNgIG5lZWRzIGBDT05GSUdfVkVUSGAgdG8gYmUgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBgbmV0L2NvcmUvZGV2LmNgLCBhcyBhIGNvcmUgY29tcG9uZW50LCBpcyBhbHdheXMgY29tcGlsZWQuIFhEUCBmdW5jdGlvbmFsaXR5LCB0aGF0IGlzIGEgd2hvbGUgYW5vdGhlciBiZWFzdCwgYW5kIGNvdWxkIGRlcGVuZCBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBzb21lIG90aGVyIEJQRi1yZWxhdGVkIGNvbmZpZywgYnV0IHRoZSBiYXNlIHZldGggYW5kIGRldiBjb2RlIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5UaW1lIHRvIGRvIHNvbWUgZGlnZ2luZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHNlYXJjaGluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVzLCBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBpbXBhY3RzIGFuZCBpZGVudGlmeSBhcmVhcyB0aGF0IG5lZWQgcGFydGljdWxhcmx5IGNsb3NlIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6MzcuMTgzMTM3NjY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTAyNTEwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmV0aF94ZHBfcmN2X3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92ZXRoLmM9NzUxPXN0YXRpYyBpbnQgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo3OTA6c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG5kcml2ZXJzL25ldC92ZXRoLmMtNzkxLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9OTA3PXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05MzktXFx0XFx0XFx0c3RhdHMtXFx1MDAzZXhkcF9ieXRlcyArPSBza2ItXFx1MDAzZWxlbjtcXG5kcml2ZXJzL25ldC92ZXRoLmM6OTQwOlxcdFxcdFxcdHNrYiA9IHZldGhfeGRwX3Jjdl9za2IocnEsIHNrYiwgYnEsIHN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTQxLVxcdFxcdFxcdGlmIChza2IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6MzguODkzMzkzMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQ4ODg1NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBmdW5jdGlvbiBhbmQgaG93IGl0IHdvcmtzLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBpdCBpbiBtaW5kLCBhcyBpdCdzIHRoZSBjb3JlIG9mIGhvdyBlQlBGIHByb2dyYW1zIHJ1biBpbiBYRFAgY29udGV4dC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGFsbCB0aGUgbnVhbmNlcyBvZiBlQlBGIHByb2dyYW1zLCBYRFAgKGFuZCBpdHMgc3BlY2lmaWMgaW1wbGljYXRpb25zKSwgYW5kIGV4YWN0bHkgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIEJQRiBWTSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBoYW5kbGluZyB0aGUgZ2VuZXJhbCBjYXNlcywgdGhlIG9uZXMgdGhhdCBhcmVuJ3Qgc3BlY2lmaWMgdG8gYSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbjsgdGhhdCBjb3VsZCBwb2ludCB0byB0aGUgcGxhY2VzIHdoZXJlIHRoZXkgaGFuZGxlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBmb3J3YXJkaW5nLiBJIGV4cGVjdCB0aGVyZSdsbCBiZSBhIGxvb3AsIGxpa2VseSBpbnRlcnByZXRpbmcgYW5kIGV4ZWN1dGluZyB0aGUgQlBGIGluc3RydWN0aW9ucy4gUHJvYmFibHkgY2hlY2tzIGFyb3VuZCB0aGUgdmFsaWRpdHkgb2YgdGhlIHBhY2tldHMsIGFuZCBob3cgdG8gcmVwb3J0IGFueSBlcnJvci4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBob2xkcyB0cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTA6NDQuOTQyMjgwODk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTczMzM5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2NvbnN1bWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAwLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDMwMTp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMi1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpO1xcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz0xMzk9c3RhdGljIHUzMiBjcHVfbWFwX2JwZl9wcm9nX3J1bl9za2Ioc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0xNDktXFxua2VybmVsL2JwZi9jcHVtYXAuYzoxNTA6XFx0XFx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHNrYiwgXFx1MDAyNnhkcCwgcmNwdS1cXHUwMDNlcHJvZyk7XFxua2VybmVsL2JwZi9jcHVtYXAuYy0xNTEtXFx0XFx0c3dpdGNoIChhY3QpIHtcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9NTE1PXN0YXRpYyB1MzIgZGV2X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfZHRhYl9uZXRkZXYgKmRzdClcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtNTI2LVxcbmtlcm5lbC9icGYvZGV2bWFwLmM6NTI3OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFxcdTAwMjZ4ZHAsIGRzdC1cXHUwMDNleGRwX3Byb2cpO1xcbmtlcm5lbC9icGYvZGV2bWFwLmMtNTI4LVxcdHN3aXRjaCAoYWN0KSB7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpuZXRpZl9nZXRfcnhxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cXG5uZXQvY29yZS9kZXYuYzo1NDU4OnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NTkwPXN0YXRpYyB1MzIgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NjE3LVxcbm5ldC9jb3JlL2Rldi5jOjU2MTg6XFx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKCpwc2tiLCB4ZHAsIHhkcF9wcm9nKTtcXG5uZXQvY29yZS9kZXYuYy01NjE5LVxcdHN3aXRjaCAoYWN0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEwOjQ2Ljg1OTYyMjA5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNDIxMzIyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIFRhaWwgQWRqdXN0bWVudHMgXHUwMDI2IFZldGggRHJpdmVyIEZpeCAtIEZ1enppbmcgT3Bwb3J0dW5pdHkhKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGNydWNpYWwgaXNzdWU6IGhvdyBgc2tiLVx1MDAzZWxlbmAgKHRoZSBsZW5ndGggb2YgdGhlIHNrX2J1ZmYpIGlzIHVwZGF0ZWQgd2hlbiBYRFAgcHJvZ3JhbXMgYXJlIG1hbmlwdWxhdGluZyB0aGUgdGFpbCBlbmQgb2YgcGFja2V0cy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY29yZSBuZXR3b3JraW5nIHRoaW5nIGFuZCB0b3VjaGVzIHRoZSB2ZXRoIGRyaXZlciBzcGVjaWZpY2FsbHkuIFRoaXMgc291bmRzIGxpa2UgcHJpbWUgdGVycml0b3J5IGZvciBzb21lIHJpZ29yb3VzIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYHZldGhfeGRwX3Jjdl9za2JgLCBidXQgc2luY2UgaXQncyBzdGF0aWMsIHRoYXQgbWlnaHQgYmUgdHJpY2t5IHRvIHRhcmdldCBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cy4gTGV0J3MgZGlnIGRlZXBlci4gSW5zdGVhZCBvZiBgdmV0aF94ZHBfcmN2X3NrYmAsIG15IGZpcnN0IGZvY3VzIHNob3VsZCBiZSBvbiBgdmV0aF94ZHBfcmN2YCBhbmQgYHZldGhfcG9sbGAgYXMgZW50cnkgcG9pbnRzLiBJIGJldCBpZiBJIGV4cGxvcmUgaG93IHRob3NlIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGFkanVzdGVkIGxlbmd0aHMgYWZ0ZXIgWERQIG1vZGlmaWNhdGlvbnMsIEknbGwgZmluZCB0aGUgdnVsbmVyYWJpbGl0aWVzIHRoYXQgdGhlIHBhdGNoIGlzIGZpeGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMDo1My45MDE3NTY0ODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0OTA5NzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXRoX3hkcF9yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jPTYyMj1zdGF0aWMgaW50IHZldGhfeGRwX3R4KHN0cnVjdCB2ZXRoX3JxICpycSwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM3LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo2Mzg6c3RhdGljIHN0cnVjdCB4ZHBfZnJhbWUgKnZldGhfeGRwX3Jjdl9vbmUoc3RydWN0IHZldGhfcnEgKnJxLFxcbmRyaXZlcnMvbmV0L3ZldGguYy02MzktXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgeGRwX2ZyYW1lICpmcmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy03MDgtLyogZnJhbWVzIGFycmF5IGNvbnRhaW5zIFZFVEhfWERQX0JBVENIIGF0IG1vc3QgKi9cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzA5OnN0YXRpYyB2b2lkIHZldGhfeGRwX3Jjdl9idWxrX3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsIHZvaWQgKipmcmFtZXMsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTcxMC1cXHRcXHRcXHRcXHQgIGludCBuX3hkcGYsIHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9NzUxPXN0YXRpYyBpbnQgdmV0aF9jb252ZXJ0X3NrYl90b194ZHBfYnVmZihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo3OTA6c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG5kcml2ZXJzL25ldC92ZXRoLmMtNzkxLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTA2LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo5MDc6c3RhdGljIGludCB2ZXRoX3hkcF9yY3Yoc3RydWN0IHZldGhfcnEgKnJxLCBpbnQgYnVkZ2V0LFxcbmRyaXZlcnMvbmV0L3ZldGguYy05MDgtXFx0XFx0XFx0c3RydWN0IHZldGhfeGRwX3R4X2JxICpicSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05MjQtXFx0XFx0XFx0c3RhdHMtXFx1MDAzZXhkcF9ieXRlcyArPSB4ZHBfZ2V0X2ZyYW1lX2xlbihmcmFtZSk7XFxuZHJpdmVycy9uZXQvdmV0aC5jOjkyNTpcXHRcXHRcXHRmcmFtZSA9IHZldGhfeGRwX3Jjdl9vbmUocnEsIGZyYW1lLCBicSwgc3RhdHMpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy05MjYtXFx0XFx0XFx0aWYgKGZyYW1lKSB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI5LVxcdFxcdFxcdFxcdGlmIChuX3hkcGYgPT0gVkVUSF9YRFBfQkFUQ0gpIHtcXG5kcml2ZXJzL25ldC92ZXRoLmM6OTMwOlxcdFxcdFxcdFxcdFxcdHZldGhfeGRwX3Jjdl9idWxrX3NrYihycSwgeGRwZiwgbl94ZHBmLFxcbmRyaXZlcnMvbmV0L3ZldGguYy05MzEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYnEsIHN0YXRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05MzktXFx0XFx0XFx0c3RhdHMtXFx1MDAzZXhkcF9ieXRlcyArPSBza2ItXFx1MDAzZWxlbjtcXG5kcml2ZXJzL25ldC92ZXRoLmM6OTQwOlxcdFxcdFxcdHNrYiA9IHZldGhfeGRwX3Jjdl9za2IocnEsIHNrYiwgYnEsIHN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTQxLVxcdFxcdFxcdGlmIChza2IpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05NTEtXFx0aWYgKG5feGRwZilcXG5kcml2ZXJzL25ldC92ZXRoLmM6OTUyOlxcdFxcdHZldGhfeGRwX3Jjdl9idWxrX3NrYihycSwgeGRwZiwgbl94ZHBmLCBicSwgc3RhdHMpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy05NTMtXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9OTY1PXN0YXRpYyBpbnQgdmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05ODQtXFx0eGRwX3NldF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KCk7XFxuZHJpdmVycy9uZXQvdmV0aC5jOjk4NTpcXHRkb25lID0gdmV0aF94ZHBfcmN2KHJxLCBidWRnZXQsIFxcdTAwMjZicSwgXFx1MDAyNnN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMDo1NS41NTA4NjAxMzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAwOTY4NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgWERQIEV4ZWN1dGlvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFhEUCBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLiBJIHNlZSB0aGF0IGB2ZXRoX3hkcF9yY3ZgIGFuZCBgdmV0aF9wb2xsYCBhcmUgYm90aCBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0J3Mgbm90IGltbWVkaWF0ZWx5IHN1cnByaXNpbmcsIHRoZXkncmUgcHJvYmFibHkgaW50ZXJuYWwgdG8gdGhlIHZldGggZHJpdmVyLiBCdXQsIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGV4cG9ydGVkIOKAkyBpdCdzIGdsb2JhbCwgYXZhaWxhYmxlIG91dHNpZGUgdGhlIHZldGggbW9kdWxlLiBUaGF0J3MgdGhlIGtleS4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyaWMgWERQIHByb2dyYW0gZXhlY3V0aW9uIGZsb3cuIE5vdyBJJ2xsIG5lZWQgdG8gZ28gYW5kIGZpbmQgd2hlcmUgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgZGVmaW5lZC4gSSdsbCBjaGVjayBgbmV0L2NvcmUvZGV2LmNgLiBJIGhhdmUgYSBnb29kIGZlZWxpbmcgdGhhdCdzIHdoZXJlIEkgd2lsbCBmaW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTg0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MDAuODUxODMyMDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MjUwNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQyOTY9c3RhdGljIGlubGluZSB2b2lkIGRldl9jb25zdW1lX3NrYl9hbnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQzMDE6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDItXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM9MTM5PXN0YXRpYyB1MzIgY3B1X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBicGZfY3B1X21hcF9lbnRyeSAqcmNwdSxcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTQ5LVxcbmtlcm5lbC9icGYvY3B1bWFwLmM6MTUwOlxcdFxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFxcdTAwMjZ4ZHAsIHJjcHUtXFx1MDAzZXByb2cpO1xcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTUxLVxcdFxcdHN3aXRjaCAoYWN0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTUxNT1zdGF0aWMgdTMyIGRldl9tYXBfYnBmX3Byb2dfcnVuX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX2R0YWJfbmV0ZGV2ICpkc3QpXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyNi1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjUyNzpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc2tiLCBcXHUwMDI2eGRwLCBkc3QtXFx1MDAzZXhkcF9wcm9nKTtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyOC1cXHRzd2l0Y2ggKGFjdCkge1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NTctXFxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYxNy1cXG5uZXQvY29yZS9kZXYuYzo1NjE4OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtNTYxOS1cXHRzd2l0Y2ggKGFjdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTowMi40OTgwOTA4NjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTIyNjY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBYRFAgYW5kIFBvdGVudGlhbCBJbmxpbmluZyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgY29kZSBoZXJlLiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCwgdGhhdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uLCBhIGNvbW1vbiBlbnRyeSBwb2ludC4gSG93ZXZlciwgYHZldGhfeGRwX3Jjdl9za2JgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBHaXZlbiB0aGUgY3VycmVudCBvcHRpbWl6YXRpb24gbGFuZHNjYXBlLCBhIGZ1bmN0aW9uIGRlZmluZWQgYXMgc3RhdGljICpjb3VsZCogYmUgYSBjYW5kaWRhdGUgZm9yIGlubGluaW5nIGJ5IHRoZSBjb21waWxlciBkdXJpbmcgb3B0aW1pemF0aW9uLiBJIHdvbmRlciwgbGV0J3MganVzdCBtYWtlIHN1cmUsIGhhcyB0aGUgY29tcGlsZXIgb3B0aW1pemVkIGB2ZXRoX3hkcF9yY3Zfc2tiYCBhbmQgaW5saW5lZCBpdD9cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjA2LjE2OTMyMDIzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjYzOTYwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXRoX3hkcF9yY3Zfc2tiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3ZldGguYz03NTE9c3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy03ODktXFxuZHJpdmVycy9uZXQvdmV0aC5jOjc5MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxcbmRyaXZlcnMvbmV0L3ZldGguYy03OTEtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz05MDc9c3RhdGljIGludCB2ZXRoX3hkcF9yY3Yoc3RydWN0IHZldGhfcnEgKnJxLCBpbnQgYnVkZ2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTkzOS1cXHRcXHRcXHRzdGF0cy1cXHUwMDNleGRwX2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbmRyaXZlcnMvbmV0L3ZldGguYzo5NDA6XFx0XFx0XFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy05NDEtXFx0XFx0XFx0aWYgKHNrYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTowNy44NTE5NjQ5MDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MzQ0NDczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgWERQIFByb2dyYW0gRXhlY3V0aW9uIGluIHRoZSB2ZXRoIERyaXZlcioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBYRFAgZXhlY3V0aW9uIHBhdGggaW4gdGhlIHZldGggZHJpdmVyLiBUaGUgY29kZSdzIHN0YXRpYyDigJMgbWVhbmluZywgSSBjYW4ndCBkaXJlY3RseSBpbmxpbmUgaXQsIGJ1dCBpdCdzIG5vdCBleHBsaWNpdGx5IGlubGluZSBlaXRoZXIuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciB0cmFjaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdXNlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGFzIGEgbGlrZWx5LCBrZXkgc3ltYm9sIHRvIHRyYWNlIGludG8gdGhlIFhEUCBleGVjdXRpb24uIFRoZSBgdmV0aGAgZHJpdmVyIGlzIG9mdGVuIGNyaXRpY2FsLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGJlc3QgZW50cnkgcG9pbnRzLlxuXG5JIHRoZW4gc3RhcnRlZCB0byB0aGluayBhYm91dCBgdmV0aF94ZHBfcmN2YC4gSXQgdG9vIGlzIHN0YXRpYywgYW5kIHRoYXQgcG9zZXMgYSBzaW1pbGFyIGNoYWxsZW5nZS4gSXMgdGhlcmUgYW55IHdheSB0aGF0IHRoZSBleGVjdXRpb24gZ2V0cyB0aGVyZSBmcm9tIHNvbWV0aGluZyB0aGF0J3Mgbm90IHN0YXRpYz8gSSBuZWVkIHRvIGZpbmQgYSBub24tc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBgdmV0aC5jYCB0aGF0ICpjYWxscyogYHZldGhfeGRwX3JjdmAuIFRoYXQncyB0aGUgY3J1Y2lhbCBsaW5rIEknbSB0cnlpbmcgdG8gZXN0YWJsaXNoLiBJZiBJIGNhbiBmaW5kIHRoYXQgbm9uLXN0YXRpYyBjYWxsZXIsIEkndmUgZ290IGEgbXVjaCBtb3JlIGFjY2Vzc2libGUgcG9pbnQgZm9yIGFuYWx5c2lzIGFuZCBpbnN0cnVtZW50YXRpb24uIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNyb3NzLXJlZmVyZW5jZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGUgdmV0aCBkcml2ZXIgdG8gbmFpbCB0aGlzIGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MjIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMToxMS44MzU0MTIzOTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ0MDQwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmV0aF9wb2xsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9NTA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmlibXZldGhfcnhxX2dldF9idWZmZXIoc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtNTI4LSAqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzo1Mjk6ICogQ29udGV4dDogY2FsbGVkIGZyb20gaWJtdmV0aF9wb2xsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy01MzAtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9MTM3OT1zdGF0aWMgdm9pZCBpYm12ZXRoX3J4X2NzdW1faGVscGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE0NDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxNDQ4OnN0YXRpYyBpbnQgaWJtdmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE0NDkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYz0xNjM5PXN0YXRpYyBpbnQgaWJtdmV0aF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNjgzLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM6MTY4NDpzdGF0aWMgdm9pZCBpYm12ZXRoX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTY4NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jPTE3ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpYm12ZXRoX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE3OTItI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYzoxNzkzOlxcdC5uZG9fcG9sbF9jb250cm9sbGVyXFx0PSBpYm12ZXRoX3BvbGxfY29udHJvbGxlcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE3OTQtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jPTE3OTc9c3RhdGljIGludCBpYm12ZXRoX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCB2aW9fZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTg0Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jOjE4NDc6XFx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0KG5ldGRldiwgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGksIGlibXZldGhfcG9sbCwgMTYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTg0OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz05MDc9c3RhdGljIGludCB2ZXRoX3hkcF9yY3Yoc3RydWN0IHZldGhfcnEgKnJxLCBpbnQgYnVkZ2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTk2NC1cXG5kcml2ZXJzL25ldC92ZXRoLmM6OTY1OnN0YXRpYyBpbnQgdmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz0xMTE3PXN0YXRpYyBpbnQgdmV0aF9lbmFibGVfeGRwX3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGFydCwgaW50IGVuZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy0xMTI2LVxcdFxcdGlmICghbmFwaV9hbHJlYWR5X29uKVxcbmRyaXZlcnMvbmV0L3ZldGguYzoxMTI3OlxcdFxcdFxcdG5ldGlmX25hcGlfYWRkKGRldiwgXFx1MDAyNnJxLVxcdTAwM2V4ZHBfbmFwaSwgdmV0aF9wb2xsKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtMTEyOC1cXHRcXHRlcnIgPSB4ZHBfcnhxX2luZm9fcmVnKFxcdTAwMjZycS1cXHUwMDNleGRwX3J4cSwgZGV2LCBpLCBycS1cXHUwMDNleGRwX25hcGkubmFwaV9pZCk7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9MTIxOD1zdGF0aWMgaW50IHZldGhfbmFwaV9lbmFibGVfcmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXJ0LCBpbnQgZW5kKVxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTEyMjUtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjEyMjY6XFx0XFx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcXHUwMDI2cnEtXFx1MDAzZXhkcF9uYXBpLCB2ZXRoX3BvbGwpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy0xMjI3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz0xNDcyPXN0YXRpYyB2b2lkIHZldGhfZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy0xNDc3LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L3ZldGguYzoxNDc4OnN0YXRpYyB2b2lkIHZldGhfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE0Nzkte1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTE3MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcxNy0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC92ZXRoLmM6MTcxODpcXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gdmV0aF9wb2xsX2NvbnRyb2xsZXIsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MTktI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjEzLjQ3OTgyMjkyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ3Mjg5MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCB2ZXRoIEZ1bmN0aW9uYWxpdHkqKlxuXG5SaWdodCwgc28gYHZldGhfcG9sbGAgaXMgYWxzbyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb24gdGhhdCBtaWdodCBiZSB1c2FibGUgb3IgcmVsZXZhbnQgdG8gdGhlIHZldGggaW50ZXJmYWNlIGluIHNvbWUgd2F5LiBXZSdyZSBsb29raW5nIGZvciBmbGV4aWJpbGl0eSBoZXJlLCBzbyBhIHN0YXRpYyBmdW5jdGlvbiBpcyBsaW1pdGluZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9yIGV4dGVybmFsIHVzZS4gTGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgYHZldGhfeGRwX3htaXRgPyBUaGF0IG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBmb3IgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgd2UgY2FuIGFwcGx5LiBQZXJoYXBzIGl0IGlzIGEgcmVsYXRlZCBmdW5jdGlvbiwgd2l0aCBhIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCB3ZSBjYW4gY2hhbmdlLCBvciBhdCBsZWFzdCBhIGNhbGwgdGhhdCBtaWdodCBiZSBpbnRlcmNlcHRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDY3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MTYuNzI3MTE0Mzc4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxNzExMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZldGhfeGRwX3htaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jPTQ5NT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnZldGhfcGVlcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy01MDItXFxuZHJpdmVycy9uZXQvdmV0aC5jOjUwMzpzdGF0aWMgaW50IHZldGhfeGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sXFxuZHJpdmVycy9uZXQvdmV0aC5jLTUwNC1cXHRcXHRcXHQgc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz01NjA9c3RhdGljIGludCB2ZXRoX25kb194ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy01NjQtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjU2NTpcXHRlcnIgPSB2ZXRoX3hkcF94bWl0KGRldiwgbiwgZnJhbWVzLCBmbGFncywgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTU2Ni1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTU3NT1zdGF0aWMgdm9pZCB2ZXRoX3hkcF9mbHVzaF9icShzdHJ1Y3QgdmV0aF9ycSAqcnEsIHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEpXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNTc4LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo1Nzk6XFx0c2VudCA9IHZldGhfeGRwX3htaXQocnEtXFx1MDAzZWRldiwgYnEtXFx1MDAzZWNvdW50LCBicS1cXHUwMDNlcSwgMCwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3ZldGguYy01ODAtXFx0aWYgKHNlbnQgXFx1MDAzYyAwKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYz05Nz12b2lkIHRlc3RfeGRwX2RvX3JlZGlyZWN0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZG9fcmVkaXJlY3QuYy0xNTEtXFx0ICogcmVndWxhciBmb3J3YXJkaW5nIHBhdGggd2lsbCBlbmQgdXAgZ29pbmcgdGhyb3VnaCB0aGUgc2FtZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kb19yZWRpcmVjdC5jOjE1MjpcXHQgKiB2ZXRoX3hkcF94bWl0KCkgY2FsbCBhcyB0aGUgWERQX1JFRElSRUNUIGNvZGUsIHdoaWNoIGNhbiBjYXVzZSBhXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2RvX3JlZGlyZWN0LmMtMTUzLVxcdCAqIGRlYWRsb2NrIGlmIGl0IGhhcHBlbnMgb24gdGhlIHNhbWUgQ1BVLiBUaGVyZSdzIGEgbG9jYWxfYmhfZGlzYWJsZSgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjE4LjM0ODgzMDg4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk1ODQ1NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBYRFAgVHJhbnNtaXNzaW9uIGluIHRoZSBWRVRIIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBYRFAgdHJhbnNtaXNzaW9uIGlzIGhhbmRsZWQgaW4gdGhlIFZFVEggZHJpdmVyLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgc2VlIHRoYXQgYHZldGhfeGRwX3htaXRgLCBgdmV0aF9uZG9feGRwX3htaXRgLCBhbmQgYHZldGhfeG1pdGAgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIGRpZ2dpbmcgYSBiaXQgdG91Z2hlciwgYnV0IG5vIHN1cnByaXNlLCBkcml2ZXIgZnVuY3Rpb25zIG9mdGVuIGZvbGxvdyB0aGF0IHBhdHRlcm4gYW5kIGFyZSByZWdpc3RlcmVkIHdpdGggYG5ldF9kZXZpY2Vfb3BzYC4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLCB3aGljaCAqaXMqIGV4cG9ydGVkLlxuXG5HaXZlbiB0aGF0IGl0J3MgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gZm9yIGdlbmVyaWMgWERQLCBJJ20gdGhpbmtpbmcgdGhhdCdzIHRoZSBzeW1ib2wgdG8gZm9jdXMgb24uIExvb2tzIGxpa2UgYSBzb2xpZCBlbnRyeSBwb2ludC4gTm93LCBpcyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBzdWZmaWNpZW50IG9uIGl0cyBvd24gdG8gZGVzY3JpYmUgdGhlIHRyYW5zbWlzc2lvbiBmbG93PyBZZXAsIHNlZW1zIGxpa2UgaXQuIEknbSBjb25maWRlbnQgaW4gc3RhcnRpbmcgdGhlcmUgdG8gZ2V0IHRoZSBiaWcgcGljdHVyZS5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGtub3cgYENPTkZJR19WRVRIYCBpcyBvYnZpb3VzbHkgcmVxdWlyZWQgZm9yIHRoZSBWRVRIIG1vZHVsZSBpdHNlbGYuIEFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgZm9yIFhEUCB0byB3b3JrLCBJJ2QgZXhwZWN0IHRoYXQncyBhIGdpdmVuLiBOb3csIGxldCBtZSBjcm9zcy1yZWZlcmVuY2UgdGhlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGZ1bmN0aW9uIHdpdGggYG5ldC9jb3JlL2Rldi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MjQuMTQ0Njc4NDc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3MjI4MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQyOTY9c3RhdGljIGlubGluZSB2b2lkIGRldl9jb25zdW1lX3NrYl9hbnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQzMDE6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDItXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM9MTM5PXN0YXRpYyB1MzIgY3B1X21hcF9icGZfcHJvZ19ydW5fc2tiKHN0cnVjdCBicGZfY3B1X21hcF9lbnRyeSAqcmNwdSxcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTQ5LVxcbmtlcm5lbC9icGYvY3B1bWFwLmM6MTUwOlxcdFxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChza2IsIFxcdTAwMjZ4ZHAsIHJjcHUtXFx1MDAzZXByb2cpO1xcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTUxLVxcdFxcdHN3aXRjaCAoYWN0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTUxNT1zdGF0aWMgdTMyIGRldl9tYXBfYnBmX3Byb2dfcnVuX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX2R0YWJfbmV0ZGV2ICpkc3QpXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyNi1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjUyNzpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc2tiLCBcXHUwMDI2eGRwLCBkc3QtXFx1MDAzZXhkcF9wcm9nKTtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTUyOC1cXHRzd2l0Y2ggKGFjdCkge1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NTctXFxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYxNy1cXG5uZXQvY29yZS9kZXYuYzo1NjE4OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtNTYxOS1cXHRzd2l0Y2ggKGFjdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMToyNS45NzE5MTI2MjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2OTU5NzMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGZyYW1lZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBlQlBGIGFuZCBYRFA6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBYRFAgRXhlY3V0aW9uIFBhdGgqKlxuXG5BbHJpZ2h0LCBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgcGlucG9pbnQgZXhhY3RseSBob3cgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBGaXJzdCwgSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG5vdC4gSSd2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgbmVzdGxlZCB3aXRoaW4gYW55IHByZXByb2Nlc3NvciBgI2lmZGVmYCBibG9ja3MuIFRoYXQgaW5mb3JtYXRpb24gd2lsbCB0ZWxsIG1lIGlmIGl0J3MgYWx3YXlzIHBhcnQgb2YgdGhlIFhEUCBleGVjdXRpb24sIG9yIG9ubHkgZW5hYmxlZCB1bmRlciBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgYnVpbGQgb3B0aW9ucy4gS25vd2luZyB0aGF0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cyBhbmQgaG93IHBvcnRhYmxlIG9yIGNvbmZpZ3VyYWJsZSBpdHMgYmVoYXZpb3IgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MzAuNjQxNTEzMDczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA5Nzc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NTctXFxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTU5MD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYxNy1cXG5uZXQvY29yZS9kZXYuYzo1NjE4OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtNTYxOS1cXHRzd2l0Y2ggKGFjdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTozMC42ODc2MTczMjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NzQxOTI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGxpbmUgb2YgdGhpbmtpbmc6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgRHJpdmVyIElzc3VlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNTQ1OC4gVGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gd2hlcmUgdGhlIGJ1ZyBJJ20gaHVudGluZyBpcyBuZXN0ZWQuIEl0J3Mgb2Z0ZW4gdGhhdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgaW52b2x2ZSBhIHByb2JsZW0gaW4gdGhlIG5ldHdvcmtpbmcgY29yZSwgc28gSSdsbCBzdGFydCB3aXRoIHRoaXMgZmlsZS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGFyZWEgaXMgcG90ZW50aWFsbHkgY3J1Y2lhbCBmb3IgdGhlIGRldmljZSdzIGJlaGF2aW9yLiBJIHdpbGwgbG9vayBmb3IgYW55IGNsdWVzIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjMzLjc0NTAzODg4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQ0MDpcXHRcXHRyeHF1ZXVlID0gZGV2LVxcdTAwM2Vfcng7XFxuNTQ0MTpcXHRcXG41NDQyOlxcdFxcdGlmIChza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSkge1xcbjU0NDM6XFx0XFx0XFx0dTE2IGluZGV4ID0gc2tiX2dldF9yeF9xdWV1ZShza2IpO1xcbjU0NDQ6XFx0XFxuNTQ0NTpcXHRcXHRcXHRpZiAodW5saWtlbHkoaW5kZXggXFx1MDAzZT0gZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpKSB7XFxuNTQ0NjpcXHRcXHRcXHRcXHRXQVJOX09OQ0UoZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMgXFx1MDAzZSAxLFxcbjU0NDc6XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXMgcmVjZWl2ZWQgcGFja2V0IG9uIHF1ZXVlICV1LCBidXQgbnVtYmVyIFxcXCJcXG41NDQ4OlxcdFxcdFxcdFxcdFxcdCAgXFxcIm9mIFJYIHF1ZXVlcyBpcyAldVxcXFxuXFxcIixcXG41NDQ5OlxcdFxcdFxcdFxcdFxcdCAgZGV2LVxcdTAwM2VuYW1lLCBpbmRleCwgZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpO1xcbjU0NTA6XFx0XFxuNTQ1MTpcXHRcXHRcXHRcXHRyZXR1cm4gcnhxdWV1ZTsgLyogUmV0dXJuIGZpcnN0IHJ4cXVldWUgKi9cXG41NDUyOlxcdFxcdFxcdH1cXG41NDUzOlxcdFxcdFxcdHJ4cXVldWUgKz0gaW5kZXg7XFxuNTQ1NDpcXHRcXHR9XFxuNTQ1NTpcXHRcXHRyZXR1cm4gcnhxdWV1ZTtcXG41NDU2OlxcdH1cXG41NDU3OlxcdFxcbjU0NTg6XFx0dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG41NDU5OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG41NDYwOlxcdHtcXG41NDYxOlxcdFxcdHZvaWQgKm9yaWdfZGF0YSwgKm9yaWdfZGF0YV9lbmQsICpoYXJkX3N0YXJ0O1xcbjU0NjI6XFx0XFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxdWV1ZTtcXG41NDYzOlxcdFxcdGJvb2wgb3JpZ19iY2FzdCwgb3JpZ19ob3N0O1xcbjU0NjQ6XFx0XFx0dTMyIG1hY19sZW4sIGZyYW1lX3N6O1xcbjU0NjU6XFx0XFx0X19iZTE2IG9yaWdfZXRoX3R5cGU7XFxuNTQ2NjpcXHRcXHRzdHJ1Y3QgZXRoaGRyICpldGg7XFxuNTQ2NzpcXHRcXHR1MzIgbWV0YWxlbiwgYWN0O1xcbjU0Njg6XFx0XFx0aW50IG9mZjtcXG41NDY5OlxcdFxcbjU0NzA6XFx0XFx0LyogVGhlIFhEUCBwcm9ncmFtIHdhbnRzIHRvIHNlZSB0aGUgcGFja2V0IHN0YXJ0aW5nIGF0IHRoZSBNQUNcXG41NDcxOlxcdFxcdCAqIGhlYWRlci5cXG41NDcyOlxcdFxcdCAqL1xcbjU0NzM6XFx0XFx0bWFjX2xlbiA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuNTQ3NDpcXHRcXHRoYXJkX3N0YXJ0ID0gc2tiLVxcdTAwM2VkYXRhIC0gc2tiX2hlYWRyb29tKHNrYik7XFxuNTQ3NTpcXHRcXG41NDc2OlxcdFxcdC8qIFNLQiBcXFwiaGVhZFxcXCIgYXJlYSBhbHdheXMgaGF2ZSB0YWlscm9vbSBmb3Igc2tiX3NoYXJlZF9pbmZvICovXFxuNTQ3NzpcXHRcXHRmcmFtZV9zeiA9ICh2b2lkICopc2tiX2VuZF9wb2ludGVyKHNrYikgLSBoYXJkX3N0YXJ0O1xcbjU0Nzg6XFx0XFx0ZnJhbWVfc3ogKz0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTtcXG41NDc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTozMy43NDU2OTAwNjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMjI1OTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgdmV0aF94ZHBfcmN2X3NrYmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaXNzdWUgSSdtIGxvb2tpbmcgYXQgaXNuJ3QgaGlkZGVuIGJlaGluZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFjcm8sIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBtZWFucyBJIGNhbiBsb29rIGF0IHRoZSBjb2RlIGRpcmVjdGx5IHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGltbWVkaWF0ZWx5LlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgdmV0aF94ZHBfcmN2X3NrYmAgZnVuY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBsaXZlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3ZldGguY2AuIFRoZSBgdmV0aGAgZHJpdmVyIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgaGFuZGxpbmcgb2YgVmlydHVhbCBFdGhlcm5ldCBkZXZpY2VzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW50ZXJhY3Rpb25zIGlzIGltcG9ydGFudC4gSeKAmW0gZ29pbmcgdG8gZ28gc3RyYWlnaHQgdG8gdGhhdCBmaWxlIHRvIGludmVzdGlnYXRlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGZ1bmN0aW9uJ3MgYnJvYWRlciBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6MzcuNTY3OTUxOTI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92ZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzgwOlxcdFxcdCpwc2tiID0gc2tiO1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRcXHRyZXR1cm4gMDtcXG4gNzgzOlxcdGRyb3A6XFxuIDc4NDpcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiA3ODU6XFx0XFx0KnBza2IgPSBOVUxMO1xcbiA3ODY6XFx0XFxuIDc4NzpcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzg4OlxcdH1cXG4gNzg5OlxcdFxcbiA3OTA6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp2ZXRoX3hkcF9yY3Zfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSxcXG4gNzkxOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuIDc5MjpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEgKmJxLFxcbiA3OTM6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZldGhfc3RhdHMgKnN0YXRzKVxcbiA3OTQ6XFx0e1xcbiA3OTU6XFx0XFx0dm9pZCAqb3JpZ19kYXRhLCAqb3JpZ19kYXRhX2VuZDtcXG4gNzk2OlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7XFxuIDc5NzpcXHRcXHRzdHJ1Y3QgdmV0aF94ZHBfYnVmZiB2eGJ1ZjtcXG4gNzk4OlxcdFxcdHN0cnVjdCB4ZHBfYnVmZiAqeGRwID0gXFx1MDAyNnZ4YnVmLnhkcDtcXG4gNzk5OlxcdFxcdHUzMiBhY3QsIG1ldGFsZW47XFxuIDgwMDpcXHRcXHRpbnQgb2ZmO1xcbiA4MDE6XFx0XFxuIDgwMjpcXHRcXHRza2JfcHJlcGFyZV9mb3JfZ3JvKHNrYik7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gODA1OlxcdFxcdHhkcF9wcm9nID0gcmN1X2RlcmVmZXJlbmNlKHJxLVxcdTAwM2V4ZHBfcHJvZyk7XFxuIDgwNjpcXHRcXHRpZiAodW5saWtlbHkoIXhkcF9wcm9nKSkge1xcbiA4MDc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDgwODpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODA5OlxcdFxcdH1cXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0X19za2JfcHVzaChza2IsIHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYikpO1xcbiA4MTI6XFx0XFx0aWYgKHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYocnEsIHhkcCwgXFx1MDAyNnNrYikpXFxuIDgxMzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDgxNDpcXHRcXHR2eGJ1Zi5za2IgPSBza2I7XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdG9yaWdfZGF0YSA9IHhkcC1cXHUwMDNlZGF0YTtcXG4gODE3OlxcdFxcdG9yaWdfZGF0YV9lbmQgPSB4ZHAtXFx1MDAzZWRhdGFfZW5kO1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHhkcF9wcm9nLCB4ZHApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMTozNy41NjgwNjU3MTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ0OTY4NTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXNuJ3QgZ2F0ZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIOKAkyB0aGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIEl0IHNlZW1zIHRvIGRpcmVjdGx5IG1vZGlmeSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIHRoZSB2ZXRoIGRyaXZlciBhbmQgb3RoZXIgbmV0d29ya2luZyBjb2RlLiBHaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvcmUgZnVuY3Rpb25hbGl0eSwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHRoZSByaWdodCBhcHByb2FjaCBoZXJlLiBXZSBuZWVkIHRvIHN1YmplY3QgdGhpcyB0byByaWdvcm91cyB0ZXN0aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBuZWVkcyB0byBiZSBvbiB0aGUgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgc3ltYm9sLiBJ4oCZbSB0aGlua2luZyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBvciBjb250cm9sIGZsb3cgcG9pbnQgd2l0aGluIHRoZSBwYXRjaC4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gZm9jdXNpbmcgb3VyIGZ1enppbmcgZWZmb3J0cy5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBJIHNlZSBpdCByZWxpZXMgb24gYFZFVEhgIGFuZCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGVuYWJsaW5nIG9yIGNvbnRyb2xsaW5nIHRoZSBYRFAgZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gYmUgc3VyZSB3ZSdyZSB0ZXN0aW5nIHRoZSBjb3JyZWN0IGNvZGUgcGF0aHMuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6NDUuMDE3NzUzNzEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMzQzNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjExOjQ2LjgzOTEwMjc2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk1NTY5OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkJQRiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgQlBGIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGl0J3MgaGFuZGxlZCBhdCB0aGUga2VybmVsIGxldmVsLiBOYXR1cmFsbHksIEkgaW1tZWRpYXRlbHkgdGhpbmssICp5ZXMsIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBrbm9iIHdlJ3JlIHRhbGtpbmcgYWJvdXQuKiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZnVuZGFtZW50YWwgZW5hYmxlciBmb3IgQlBGIGZ1bmN0aW9uYWxpdHksIHNvIGl0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQgc3ByaW5ncyB0byBtaW5kLlxuXG5CdXQgdGhlbiBteSBtaW5kIGF1dG9tYXRpY2FsbHkganVtcHMgdG8gdGhlIG51YW5jZXMuIEknbSB3b25kZXJpbmcsICppcyBgQlBGX1NZU0NBTExgIHRoZSAqb25seSogdGhpbmcgd2UgbmVlZCB0byBjb25zaWRlciwgb3IgYXJlIHRoZXJlIHNwZWNpZmljLCBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXksIHBhcnRpY3VsYXJseSB3aGVuIGZvY3VzaW5nIG9uIFhEUCBwcm9ncmFtcz8qICBXZSBhbGwga25vdyBYRFAgaGFzIGl0cyBvd24gcGVjdWxpYXJpdGllcywgaXRzIG93biBwZXJmb3JtYW5jZSBwcm9maWxlLCBhbmQgaXRzIG93biB1c2UtY2FzZXMg4oCTIGl0cyBub3QgbWVyZWx5IEJQRiwgaXQncyBhIHNwZWNpYWxpemVkIGV4ZWN1dGlvbiBwYXRoLiAgU28sIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYSBzcGVjaWZpYywgWERQLWNlbnRyaWMgY29uZmlnIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZywgb3IgaWYgaXQncyBhbGwgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgYEJQRl9TWVNDQUxMYCBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLCBhbmQgaG93IFhEUCBpcyBhY3R1YWxseSAqZW5hYmxlZCogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzExLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6NTEuOTM0Njc1MTA1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2MjMzMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRFBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQveGRwL0tjb25maWctOS1cXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG5uZXQveGRwL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTE6NTMuNTkwOTEzNzQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NzMxOTc2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIEVudHJ5cG9pbnQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgWERQIGFuZCBob3cgdG8gYmVzdCB0YXJnZXQgaXQgZm9yIHdoYXRldmVyIEknbSBkb2luZy4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgWERQIGlzIGF2YWlsYWJsZSB3aGVuZXZlciBCUEYgaXMgZW5hYmxlZCDigJMgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZGlnIGludG8gYG5ldC9jb3JlL2Rldi5jYCB0byBsb29rIGF0IGhvdyB0aGlzIGFsbCB0aWVzIHRvZ2V0aGVyLiBUaGUgaW1tZWRpYXRlIHN5bWJvbCB0aGF0IGp1bXBzIG91dCBpcyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYDsgbGV0J3Mgc3RhcnQgdGhlcmUuIEFuZCBzaW5jZSBJJ20gdHJ5aW5nIHRvIGZpbmQgYW4gZW50cnkgcG9pbnQsIGBWRVRIYCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgY29uZmlndXJhdGlvbiB0byB3b3JrIHdpdGguXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyB0aGUgKm9ubHkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW52b2x2ZWQgaGVyZS4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGEgZmV3IG90aGVyIFhEUC1yZWxhdGVkIGZ1bmN0aW9ucyBpbiBgdmV0aC5jYCwgYnV0IHRoZXkncmUgYWxsICpzdGF0aWMqOiBgdmV0aF94ZHBfcmN2X3NrYmAsIGB2ZXRoX3hkcF9yY3ZgLCBgdmV0aF9wb2xsYCwgYHZldGhfeGRwX3htaXRgLCBgdmV0aF9uZG9feGRwX3htaXRgLiBSaWdodCwgdGhhdCdzIHR5cGljYWw7IGRyaXZlciBmdW5jdGlvbnMgYXJlIHVzdWFsbHkga2VwdCBzdGF0aWMuIFNvIGl0IGxvb2tzIGxpa2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgKmlzKiB0aGUgd2F5IHRvIGdvLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYHZldGhfeGRwX3Jjdl9za2JgIGlzIGlubGluZWQuIElmIGl0J3Mgbm90IGlubGluZWQsIHN5emthbGxlciBjb3VsZCB0aGVvcmV0aWNhbGx5IHRyYWNlIGl0IGlmIGl0J3MgaW4gdGhlIHN5bWJvbCB0YWJsZS4gSG93ZXZlciwgdGhlIGd1aWRlbGluZSBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeXBvaW50cy4gU28gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgc3RpbGwgdGhlIGJlc3QgcGljay5cblxuTm93LCBsZXQncyBsb29rIGFyb3VuZCBgbmV0L2NvcmUvZGV2LmNgIGZvciBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gT2theSwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgZXhwb3J0ZWQgaXRzZWxmLCBidXQgbG9va2luZyBhdCBpdHMgY2FsbCBncmFwaC4uLiBpdCBsb29rcyBsaWtlIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGNhbGxlZCBieSBgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcGAsIHdoaWNoIGlzIHN0YXRpYy4gVGhhdCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBkb194ZHBfZ2VuZXJpY2AsIHdoaWNoIGlzIGFsc28gc3RhdGljLiBBbmQgYGRvX3hkcF9nZW5lcmljYCBpcyBjYWxsZWQgYnkgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIGZpbmFsbHksIGBfX25ldGlmX3JlY2VpdmVfc2tiX2NvcmVgIGlzIGNhbGxlZCBieSBgX19uZXRpZl9yZWNlaXZlX3NrYl9vbmVfY29yZWAsIHdoaWNoICppcyogZXhwb3J0ZWQuIFNvLCB0aGUgcGF0aCBpczogYF9fbmV0aWZfcmVjZWl2ZV9za2Jfb25lX2NvcmVgIC1cdTAwM2UgYF9fbmV0aWZfcmVjZWl2ZV9za2JfY29yZWAgLVx1MDAzZSBgZG9feGRwX2dlbmVyaWNgIC1cdTAwM2UgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgIC1cdTAwM2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFNvIHRoZSBjb25jbHVzaW9uIGlzLCB0aGF0IGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIHN0aWxsIGEgZ29vZCBlbnRyeXBvaW50IGZvciB0aGUgWERQIGZ1bmN0aW9uYWxpdHkuXG5cbkFscmlnaHQsIHRoYXQgc2V0dGxlcyBpdDsgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTY3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjAzLjA2NDExNDM0M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMDIzNTI1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNjoxMjowNS4yODQzNTcyODJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1NzA1OTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYSBGdW5jdGlvbioqXG5cbkhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQncyAqbm90KiBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYC4gVGhhdCdzIHRoZSBmaXJzdCBjbHVlLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gaXQncyBhbHNvICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbXBsaWVzIGl0J3MgaW50ZW5kZWQgdG8gYmUgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBjb21waWxhdGlvbiB1bml0LCByaWdodD8gVGhlIGxpbmtlciBzaG91bGQgYmUgYWJsZSB0byBzZWUgaXQsIHdoaWNoIHN1Z2dlc3RzIHBvdGVudGlhbCB1c2UgZWxzZXdoZXJlIHdpdGhpbiB0aGUga2VybmVsIG1vZHVsZSBvciBldmVuIGxpbmtlZCBleHRlcm5hbGx5LiBPa2F5LCBJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCBmaWd1cmUgb3V0IHRoZSBpbnRlbmRlZCB2aXNpYmlsaXR5LlxuXG5MZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gSSdsbCBoZWFkIGJhY2sgb3ZlciB0byBgbmV0L2NvcmUvZGV2LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQncyB0aGUgcGxhY2UgdGhpcyBpcyBkZWZpbmVkLiBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgc2VlIGV4YWN0bHkgKmhvdyogYW5kICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBvciBpZiB0aGVyZSdzIGFueSBjbGV2ZXJuZXNzIGhlcmUgdGhhdCBJIG1pc3NlZCB0aGUgZmlyc3QgdGltZSBhcm91bmQuIFRpbWUgdG8gY29uZmlybSBpZiBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIG9yIG5lZWQgdG8gZXhwYW5kIHRoZSBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDgxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDY6MTI6MTQuOTQxNDE4ODI4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MjI3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfY29uc3VtZV9za2JfYW55KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDAtXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo0MzAxOnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAyLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpuZXRpZl9nZXRfcnhxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cXG5uZXQvY29yZS9kZXYuYzo1NDU4OnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjE2LjU4NzY1MTIyN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjY2NTgzMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdmV0aF94ZHBfcmN2X3NrYmAqKlxuXG5SaWdodCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGNvbmNlcm4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGp1c3QgaG93IGZhciB0aGlzIHJlYWNoZXMuIExldCdzIHNlZS4uLiAqdGhpbmtzIGJhY2sgdG8gdGhlIGNvZGUqIC4uLm9rYXksIEknbSBwcmV0dHkgc3VyZSBgdmV0aF94ZHBfcmN2X3NrYmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFllcywgdGhhdCdzIGl0LiBDb25maXJtZWQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBnbG9iYWwgZnVuY3Rpb25zIGx1cmtpbmcgaW4gYHZldGguY2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW5kIGNoZWNrLiBUaGF0J3MgdGhlIHJlYWwgdGVzdCBvZiBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA1OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjIyLjI1NDIzNzMxMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTQ1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogdmV0aF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3ZldGguYy00Mi1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NDM6c3RydWN0IHZldGhfc3RhdHMge1xcbmRyaXZlcnMvbmV0L3ZldGguYy00NC1cXHR1NjRcXHRyeF9kcm9wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy01NS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NTY6c3RydWN0IHZldGhfcnFfc3RhdHMge1xcbmRyaXZlcnMvbmV0L3ZldGguYy01Ny1cXHRzdHJ1Y3QgdmV0aF9zdGF0c1xcdHZzO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTYwLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo2MTpzdHJ1Y3QgdmV0aF9ycSB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTYyLVxcdHN0cnVjdCBuYXBpX3N0cnVjdFxcdHhkcF9uYXBpO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTczLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo3NDpzdHJ1Y3QgdmV0aF9wcml2IHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtNzUtXFx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3VcXHQqcGVlcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy04MS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6ODI6c3RydWN0IHZldGhfeGRwX3R4X2JxIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtODMtXFx0c3RydWN0IHhkcF9mcmFtZSAqcVtWRVRIX1hEUF9UWF9CVUxLX1NJWkVdO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTkwLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo5MTpzdHJ1Y3QgdmV0aF9xX3N0YXRfZGVzYyB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTkyLVxcdGNoYXJcXHRkZXNjW0VUSF9HU1RSSU5HX0xFTl07XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmM9MTE3PXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTEyMi1cXG5kcml2ZXJzL25ldC92ZXRoLmM6MTIzOnN0cnVjdCB2ZXRoX3hkcF9idWZmIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtMTI0LVxcdHN0cnVjdCB4ZHBfYnVmZiB4ZHA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjIyLjI5OTc2MDEwNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzQ3MTg3MDIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBYRFAgUGFja2V0IFRhaWwgQWRqdXN0bWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCBlZmZlY3RpdmVseS4gSXQncyBkZWFsaW5nIHdpdGggYSBidWcgcmVsYXRlZCB0byBob3cgYHNrYi1cdTAwM2VsZW5gIGFuZCBgc2tiLVx1MDAzZWRhdGFfbGVuYCBhcmUgaGFuZGxlZCBhZnRlciBhbiBYRFAgcHJvZ3JhbSBtb2RpZmllcyB0aGUgcGFja2V0IHRhaWwsIHNwZWNpZmljYWxseSB3aXRoIHNvbWV0aGluZyBsaWtlIGBicGZfeGRwX2FkanVzdF90YWlsYC4gVGhpcyBhcHBlYXJzIHRvIGJlIHJlbGV2YW50IGluIGJvdGggdGhlIGdlbmVyaWMgWERQIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCwgY3JpdGljYWxseSwgdGhlIHZldGggZHJpdmVyJ3MgWERQIHJlY2VpdmUgcGF0aC4gVGhhdCdzIGdvb2QsIHRoYXQgZ2l2ZXMgbWUgbW9yZSBzdXJmYWNlIGFyZWEuXG5cbkdpdmVuIHRoYXQgYWxsIHRoZSBmdW5jdGlvbnMgaW4gYHZldGguY2AgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB0aGF0IG5hcnJvd3MgbXkgZm9jdXMgY29uc2lkZXJhYmx5LiBNeSBwcmltYXJ5IHN5bWJvbCBvZiBpbnRlcmVzdCBoYXMgdG8gYmUgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cyB0byBmaW5kIHRoZSBidWcuIEl0IHdpbGwgaGl0IHRob3NlIGZ1bmN0aW9ucywgSSdtIGd1ZXNzaW5nLlxuXG5Gcm9tIHRoZSBjb25maWcgcGVyc3BlY3RpdmUsIGBWRVRIYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgdGhlIGtleSBjb25maWdzIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIGlzc3VlLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLCBvYnZpb3VzbHkuXG5cblRoaXMgZml4IGlzIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycy4gVGhhdCdzIGNyaXRpY2FsIGZvciBmdXp6aW5nIGJlY2F1c2UgaXQgc3VnZ2VzdHMgdGhhdCB0YXJnZXRlZCBmdXp6aW5nIGNvdWxkIGJlIHZlcnkgZWZmZWN0aXZlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHRhcmdldCBib3RoIGdlbmVyaWMgWERQIGFuZCB0aGUgdmV0aCBkcml2ZXIgc3BlY2lmaWNhbGx5LiBUaGlzIHdpbGwgYmUgYW4gaW1wb3J0YW50IGFuZCBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldC4gTGV0J3MgZ2V0IHRvIHdvcmsgYW5kIHNldCB1cCBteSBmdXp6aW5nIGhhcm5lc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NzEsIk91dHB1dFRva2VucyI6MTUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA2OjEyOjM1Ljc3MTYzMzQxN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTE2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRVRIXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGhvdyBza2ItXFx1MDAzZWxlbiBhbmQgc2tiLVxcdTAwM2VkYXRhX2xlbiBhcmUgc3luY2hyb25pemVkIHdpdGggeGRwIGRhdGEgYWZ0ZXIgcnVubmluZyBhbiBYRFAgcHJvZ3JhbSB0aGF0IGFkanVzdHMgdGhlIHBhY2tldCB0YWlsIChlLmcuLCBicGZfeGRwX2FkanVzdF90YWlsKS4gVGhpcyBhZmZlY3RzIGJvdGggdGhlIGdlbmVyaWMgWERQIHBhdGggaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXIncyBYRFAgcmVjZWl2ZSBwYXRoLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycywgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZFVEhcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gaG93IHNrYi1cXHUwMDNlbGVuIGFuZCBza2ItXFx1MDAzZWRhdGFfbGVuIGFyZSBzeW5jaHJvbml6ZWQgd2l0aCB4ZHAgZGF0YSBhZnRlciBydW5uaW5nIGFuIFhEUCBwcm9ncmFtIHRoYXQgYWRqdXN0cyB0aGUgcGFja2V0IHRhaWwgKGUuZy4sIGJwZl94ZHBfYWRqdXN0X3RhaWwpLiBUaGlzIGFmZmVjdHMgYm90aCB0aGUgZ2VuZXJpYyBYRFAgcGF0aCBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSB2ZXRoIGRyaXZlcidzIFhEUCByZWNlaXZlIHBhdGguIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowzg9w7[1] Phase: Succeeded StartedAt: 2026-08-04 06:12:46 +0000 UTC FinishedAt: 2026-08-04 06:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 06:12:46 +0000 UTC FinishedAt: 2026-08-04 06:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2] Phase: Succeeded StartedAt: 2026-08-04 06:12:46 +0000 UTC FinishedAt: 2026-08-04 09:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 06:12:46 +0000 UTC FinishedAt: 2026-08-04 09:56:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 06:12:46 +0000 UTC FinishedAt: 2026-08-04 06:12:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 06:12:46 +0000 UTC FinishedAt: 2026-08-04 06:12:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzg9w7/series-workflowzg9w7-convert-artifact-512435143/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 06:12:57 +0000 UTC FinishedAt: 2026-08-04 06:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 06:12:57 +0000 UTC FinishedAt: 2026-08-04 06:29:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e3f2d9f-e2d4-44aa-85c5-20a1055d399c,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-workflowzg9w7/series-workflowzg9w7-convert-artifact-512435143/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": "edf893f8-4e29-4515-831d-ea4a6db18449", "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-workflowzg9w7/series-workflowzg9w7-build-action-3996527709/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 06:12:57 +0000 UTC FinishedAt: 2026-08-04 06:29:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e3f2d9f-e2d4-44aa-85c5-20a1055d399c,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-workflowzg9w7/series-workflowzg9w7-convert-artifact-512435143/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": "edf893f8-4e29-4515-831d-ea4a6db18449", "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-workflowzg9w7/series-workflowzg9w7-build-action-3996527709/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 06:29:42 +0000 UTC FinishedAt: 2026-08-04 06:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 06:29:42 +0000 UTC FinishedAt: 2026-08-04 06:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 06:29:42 +0000 UTC FinishedAt: 2026-08-04 06:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 06:29:42 +0000 UTC FinishedAt: 2026-08-04 06:29:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzg9w7/series-workflowzg9w7-convert-artifact-3465607414/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 06:29:53 +0000 UTC FinishedAt: 2026-08-04 06:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 06:29:53 +0000 UTC FinishedAt: 2026-08-04 06:31:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*edf893f8-4e29-4515-831d-ea4a6db18449,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-workflowzg9w7/series-workflowzg9w7-build-action-3996527709/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-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 06:31:56 +0000 UTC FinishedAt: 2026-08-04 06:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 06:31:56 +0000 UTC FinishedAt: 2026-08-04 06:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 06:31:56 +0000 UTC FinishedAt: 2026-08-04 06:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 06:31:56 +0000 UTC FinishedAt: 2026-08-04 06:51:04 +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:*3e3f2d9f-e2d4-44aa-85c5-20a1055d399c,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-workflowzg9w7/series-workflowzg9w7-convert-artifact-3465607414/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": "d816f634-bd21-4a79-bc14-2f1958b38b0c", "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-workflowzg9w7/series-workflowzg9w7-build-action-656547834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 06:31:56 +0000 UTC FinishedAt: 2026-08-04 06:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e3f2d9f-e2d4-44aa-85c5-20a1055d399c,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-workflowzg9w7/series-workflowzg9w7-convert-artifact-3465607414/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": "d816f634-bd21-4a79-bc14-2f1958b38b0c", "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-workflowzg9w7/series-workflowzg9w7-build-action-656547834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 06:51:04 +0000 UTC FinishedAt: 2026-08-04 06:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 06:51:04 +0000 UTC FinishedAt: 2026-08-04 06:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 06:51:04 +0000 UTC FinishedAt: 2026-08-04 06:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 06:51:04 +0000 UTC FinishedAt: 2026-08-04 06:53:01 +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:*d816f634-bd21-4a79-bc14-2f1958b38b0c,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-workflowzg9w7/series-workflowzg9w7-build-action-656547834/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-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 06:53:13 +0000 UTC FinishedAt: 2026-08-04 09:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 06:53:13 +0000 UTC FinishedAt: 2026-08-04 09:56:14 +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":["bpf_prog_run_generic_xdp"],"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:*edf893f8-4e29-4515-831d-ea4a6db18449,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d816f634-bd21-4a79-bc14-2f1958b38b0c,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-workflowzg9w7/series-workflowzg9w7-build-action-3996527709/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-workflowzg9w7/series-workflowzg9w7-build-action-656547834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 06:53:13 +0000 UTC FinishedAt: 2026-08-04 06:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 06:53:13 +0000 UTC FinishedAt: 2026-08-04 06:53:31 +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":["bpf_prog_run_generic_xdp"],"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-workflowzg9w7/series-workflowzg9w7-convert-artifact-546322971/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 06:53:13 +0000 UTC FinishedAt: 2026-08-04 06:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 06:53:13 +0000 UTC FinishedAt: 2026-08-04 06:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 06:53:14 +0000 UTC FinishedAt: 2026-08-04 06:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 06:53:35 +0000 UTC FinishedAt: 2026-08-04 09:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzg9w7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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":["bpf_prog_run_generic_xdp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL"],"series_id":"4f65f384-3203-4e57-a3b9-11ebad1901e6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 06:53:35 +0000 UTC FinishedAt: 2026-08-04 09:56:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*edf893f8-4e29-4515-831d-ea4a6db18449,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d816f634-bd21-4a79-bc14-2f1958b38b0c,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-workflowzg9w7/series-workflowzg9w7-build-action-3996527709/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-workflowzg9w7/series-workflowzg9w7-build-action-656547834/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-workflowzg9w7/series-workflowzg9w7-convert-artifact-546322971/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,}