Name: series-workflowz294c Phase: Succeeded StartedAt: 2026-07-30 15:59:55 +0000 UTC FinishedAt: 2026-07-30 19:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[0] Phase: Succeeded StartedAt: 2026-07-30 15:59:55 +0000 UTC FinishedAt: 2026-07-30 16:02:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 15:59:55 +0000 UTC FinishedAt: 2026-07-30 16:02:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "b7910da8-a2d5-4bca-9c3d-a1528bf93320" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_prog_attach", "cgroup_bpf_link_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgbG9naWMgZm9yIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgb3IgbGlua3MgdG8gY2dyb3Vwcy4gVGhlIGNoYW5nZSBmaXhlcyBhIGJ1ZyByZWxhdGVkIHRvIHJlc3RvcmluZyBgcGwtXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXHUwMDNlc3RvcmFnZWAgd2hlbiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhdHRhY2htZW50IHByb2Nlc3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSB2aWEgYGJwZigyKWAgc3lzY2FsbCAoc3BlY2lmaWNhbGx5IGBCUEZfUFJPR19BVFRBQ0hgIGFuZCBgQlBGX0xJTktfQ1JFQVRFYCBjb21tYW5kcykuIFRoZSBmdW5jdGlvbnMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZXNlIG9wZXJhdGlvbnMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfQ0dST1VQX0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTkzZWQzYmExNGZhNTkyNGNjNjMyMzQ3YmY1ZDkxYTE5ZTdhMjk5NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE2OjAwOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Li41N2ZkMWQ3ODRlNDQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxMyw4ICYjNDM7ODEzLDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4gXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4mIzQzO1x0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0aW50IGVycjtcbkBAIC04NjUsNiAmIzQzOzg2Nyw4IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFxuIFx0aWYgKHBsKSB7XG4gXHRcdG9sZF9wcm9nID0gcGwtXHUwMDNlcHJvZztcbiYjNDM7XHRcdG9sZF9wbF9mbGFncyA9IHBsLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xuIFx0XHRpZiAoIXBsKSB7XG5AQCAtODg0LDYgJiM0Mzs4ODgsNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xuJiM0MztcdG9sZF9mbGFncyA9IGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcbiBcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xuIFxuIFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcbkBAIC05MTUsMTIgJiM0Mzs5MjAsMTUgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbiYjNDM7XHRcdHBsLVx1MDAzZWZsYWdzID0gb2xkX3BsX2ZsYWdzO1xuJiM0MztcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgb2xkX3N0b3JhZ2UpO1xuIFx0fVxuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiBcdGlmICghb2xkX3Byb2cpIHtcbiBcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIFx0XHRrZnJlZShwbCk7XG4gXHR9XG4mIzQzO1x0Y2dycC1cdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gb2xkX2ZsYWdzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgbG9naWMgZm9yIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgb3IgbGlua3MgdG8gY2dyb3Vwcy4gVGhlIGNoYW5nZSBmaXhlcyBhIGJ1ZyByZWxhdGVkIHRvIHJlc3RvcmluZyBgcGwtXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXHUwMDNlc3RvcmFnZWAgd2hlbiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhdHRhY2htZW50IHByb2Nlc3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSB2aWEgYGJwZigyKWAgc3lzY2FsbCAoc3BlY2lmaWNhbGx5IGBCUEZfUFJPR19BVFRBQ0hgIGFuZCBgQlBGX0xJTktfQ1JFQVRFYCBjb21tYW5kcykuIFRoZSBmdW5jdGlvbnMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZXNlIG9wZXJhdGlvbnMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfQ0dST1VQX0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTkzZWQzYmExNGZhNTkyNGNjNjMyMzQ3YmY1ZDkxYTE5ZTdhMjk5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDE2OjAwOjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKaW5kZXggNDM1NWNjYjc4YTljNi4uNTdmZDFkNzg0ZTQ0MCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jCkBAIC04MTMsOCAmIzQzOzgxMywxMCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDsKIAlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKIAlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307CiYjNDM7CXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay0mZ3Q7bGluay5wcm9nOwogCWVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTsKJiM0MzsJdTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiAJaW50IGVycjsKQEAgLTg2NSw2ICYjNDM7ODY3LDggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAKIAlpZiAocGwpIHsKIAkJb2xkX3Byb2cgPSBwbC0mZ3Q7cHJvZzsKJiM0MzsJCW9sZF9wbF9mbGFncyA9IHBsLSZndDtmbGFnczsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiAJfSBlbHNlIHsKIAkJcGwgPSBrbWFsbG9jX29iaigqcGwpOwogCQlpZiAoIXBsKSB7CkBAIC04ODQsNiAmIzQzOzg4OCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXBsLSZndDtsaW5rID0gbGluazsKIAlwbC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAlicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC0mZ3Q7c3RvcmFnZSwgc3RvcmFnZSk7CiYjNDM7CW9sZF9mbGFncyA9IGNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV07CiAJY2dycC0mZ3Q7YnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzOwogCiAJaWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHsKQEAgLTkxNSwxMiAmIzQzOzkyMCwxNSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIAlpZiAob2xkX3Byb2cpIHsKIAkJcGwtJmd0O3Byb2cgPSBvbGRfcHJvZzsKIAkJcGwtJmd0O2xpbmsgPSBOVUxMOwomIzQzOwkJcGwtJmd0O2ZsYWdzID0gb2xkX3BsX2ZsYWdzOwomIzQzOwkJYnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtJmd0O3N0b3JhZ2UsIG9sZF9zdG9yYWdlKTsKIAl9CiAJYnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTsKIAlpZiAoIW9sZF9wcm9nKSB7CiAJCWhsaXN0X2RlbCgmYW1wO3BsLSZndDtub2RlKTsKIAkJa2ZyZWUocGwpOwogCX0KJiM0MzsJY2dycC0mZ3Q7YnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFnczsKIAlyZXR1cm4gZXJyOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJQRiBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIEltbWVkaWF0ZWx5LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIG1vZGlmaWNhdGlvbiBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBhaW1lZCBhdCBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEJQRiBjZ3JvdXAgYXR0YWNoIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgcmVzdG9yaW5nIGBwbC0mZ3Q7ZmxhZ3NgLCBgcGwtJmd0O3N0b3JhZ2VgLCBhbmQgYGNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV1gIG9uIGVycm9yIHBhdGhzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUga2VybmVsLCBpbXBhY3RpbmcgQlBGIGNncm91cCBhdHRhY2ggZXJyb3IgaGFuZGxpbmcuIFRoYXQmIzM5O3MgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydCB0byBzZWUgd2hhdCBjYW4gYmUgYnJva2VuIGFuZCB3aGF0IGVkZ2UgY2FzZXMgZXhpc3QgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIGFkZHJlc3NlZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBfX2Nncm91cF9icGZfYXR0YWNoYCBmdW5jdGlvbiBpdHNlbGYuIEl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCwgc28gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQ/IFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0cyBiZWhhdmlvcj8gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTM1PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0My1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NDpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ1LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIGEgU3VidGxlIEJQRiBDZ3JvdXAgQXR0YWNoIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgdHdlYWtpbmcgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdpdGhpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgg4oCTIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpbyBkdXJpbmcgQlBGIGNncm91cCBhdHRhY2ggb3BlcmF0aW9ucy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYSBmYWlsdXJlIHBhdGggd2l0aGluIHRoYXQgZnVuY3Rpb24gd2hlcmUgc29tZSBjcnVjaWFsIHN0YXRlLCBuYW1lbHkgYGNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV1gLCBgcGwtJmd0O2ZsYWdzYCwgYW5kIGBwbC0mZ3Q7c3RvcmFnZWAsIHdlcmVuJiMzOTt0IGdldHRpbmcgY29ycmVjdGx5IHJlc3RvcmVkIGlmIGVpdGhlciBgdXBkYXRlX2VmZmVjdGl2ZV9wcm9nc2Agb3IgYGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX2V2ZW50c2AgaGl0IGFuIGVycm9yLiBUaGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCwgYXMgaXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGV2ZW4gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGRvd24gdGhlIGxpbmUuCgpUaGVyZWZvcmUsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGBXb3J0aEZ1enppbmc9dHJ1ZWAgZmxhZy4gVGhlc2Uga2luZHMgb2YgbG93LWxldmVsIGRhdGEgaW50ZWdyaXR5IGlzc3VlcyBjYW4gYmUgdHJpY2t5IGFuZCBsZWFkIHRvIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy4KCk5vdywgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZHJpbGwgZG93biBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVzcHJlYWQgdGhlIGltcGFjdCBtaWdodCBiZSwgc28gbGV0JiMzOTtzIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX2Nncm91cF9icGZfYXR0YWNoYCB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBzeW1ib2xzIGxpa2UgYGNncm91cF9icGZfYXR0YWNoYCBvciB0aGUgc3RhdGljIHZlcnNpb24gYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgIHRvIGlkZW50aWZ5IHRoZSBjYWxsZXJzIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTY1PXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX2xzbV9hdHlwZSBjZ3JvdXBfbHNtX2F0eXBlW0NHUk9VUF9MU01fTlVNXTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjYtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjY3OnN0YXRpYyBib29sIGNncm91cF9icGZfaG9va19yZXR1cm5zX2Vycm5vKGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjgte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzMtI2Vsc2Vcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzQ6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy03NS17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz04ND1icGZfcHJvZ19ydW5fYXJyYXlfY2coY29uc3Qgc3RydWN0IGNncm91cF9icGYgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg1Olx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2LVx0XHQgICAgICBjb25zdCB2b2lkICpjdHgsIGJwZl9wcm9nX3J1bl9mbiBydW5fcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2Mj11bnNpZ25lZCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9sc21fY3VycmVudChjb25zdCB2b2lkICpjdHgsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODEtI2lmZGVmIENPTkZJR19CUEZfTFNNXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE4MjpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4My1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTg5LVx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9MU01fQ0dST1VQKVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTA6XHRcdHJldHVybiB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGF0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkxLVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIwPXZvaWQgYnBmX2Nncm91cF9hdHlwZV9wdXQoaW50IGNncm91cF9hdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzMi0jZWxzZVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzM6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzQtYnBmX2Nncm91cF9hdHlwZV9maW5kKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1MzIgYXR0YWNoX2J0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzNi1cdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTFNNX0NHUk9VUClcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjM3Olx0XHRyZXR1cm4gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZShhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzOC1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTQyND1zdGF0aWMgYm9vbCBoaWVyYXJjaHlfYWxsb3dzX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0MjU6XHRcdFx0XHQgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy00MjYte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NDUzPXN0YXRpYyBpbnQgY29tcHV0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NDU0Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxua2VybmVsL2JwZi9jZ3JvdXAuYy00NTUtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKiphcnJheSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTUxMT1zdGF0aWMgdm9pZCBhY3RpdmF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NTEyOlx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTUxMy1cdFx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nX2FycmF5ICpvbGRfYXJyYXkpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz01OTE9c3RhdGljIGludCB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjU5MjpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy01OTMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODE3LVx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTg6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTgxOS1cdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzNC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM1OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM2LVx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0My1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NDpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ1LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTUwPXN0YXRpYyBpbnQgZWZmZWN0aXZlX3Byb2dfcG9zKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjk1MTpcdFx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1Mi1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTAwMj1zdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDM6XHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMDQtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDM5PXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDIte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDQzOlx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExMzk9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTE0MDpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTQxLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExODA9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExODMte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTg0Olx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTg1LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEyNTU9c3RhdGljIGludCBfX2Nncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjYxLVx0ZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSA9IGF0dHItXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjI6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgZnJvbV9hdHlwZSwgdG9fYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjM6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyNjQtXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODEtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjgyOlx0XHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI4My1cdFx0aWYgKGZyb21fYXR5cGUgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzcxPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5MC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MTpcdHJldCA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5Mi1cdFx0XHRcdGF0dHItXHUwMDNlYXR0YWNoX3R5cGUsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUyMz1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1MS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU1MjpcdGVyciA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIE5VTEwsIE5VTEwsIGxpbmssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTMtXHRcdFx0XHRsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsIEJQRl9GX0FMTE9XX01VTFRJIHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2MDc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MDgtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNjA5Olx0XHRcdFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjEwLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2ODU9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTY4NjpcdFx0XHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjg3LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MTM9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzE1LVx0XHRcdFx0ICAgICAgaW50ICp1YWRkcmxlbixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTcxNjpcdFx0XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTcxNy1cdFx0XHRcdCAgICAgIHZvaWQgKnRfY3R4LFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2Nz1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzY4LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzY5Olx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzAte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc3OD1pbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3OTpcdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzgwLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5MzU9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MzctXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTM4Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRcbiA3OTE6XHQvKipcbiA3OTI6XHQgKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxuIDc5MzpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4gNzk0Olx0ICogQGNncnA6IFRoZSBjZ3JvdXAgd2hpY2ggZGVzY2VuZGFudHMgdG8gdHJhdmVyc2VcbiA3OTU6XHQgKiBAcHJvZzogQSBwcm9ncmFtIHRvIGF0dGFjaFxuIDc5NjpcdCAqIEBsaW5rOiBBIGxpbmsgdG8gYXR0YWNoXG4gNzk3Olx0ICogQHJlcGxhY2VfcHJvZzogUHJldmlvdXNseSBhdHRhY2hlZCBwcm9ncmFtIHRvIHJlcGxhY2UgaWYgQlBGX0ZfUkVQTEFDRSBpcyBzZXRcbiA3OTg6XHQgKiBAdHlwZTogVHlwZSBvZiBhdHRhY2ggb3BlcmF0aW9uXG4gNzk5Olx0ICogQGZsYWdzOiBPcHRpb24gZmxhZ3NcbiA4MDA6XHQgKiBAaWRfb3JfZmQ6IFJlbGF0aXZlIHByb2cgaWQgb3IgZmRcbiA4MDE6XHQgKiBAcmV2aXNpb246IGJwZl9wcm9nX2xpc3QgcmV2aXNpb25cbiA4MDI6XHQgKlxuIDgwMzpcdCAqIEV4YWN0bHkgb25lIG9mIEBwcm9nIG9yIEBsaW5rIGNhbiBiZSBub24tbnVsbC5cbiA4MDQ6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLlxuIDgwNTpcdCAqL1xuIDgwNjpcdHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIDgwNzpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuIDgwODpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuIDgwOTpcdFx0XHRcdCAgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlLCB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCxcbiA4MTA6XHRcdFx0XHQgICAgICAgdTY0IHJldmlzaW9uKVxuIDgxMTpcdHtcbiA4MTI6XHRcdHUzMiBzYXZlZF9mbGFncyA9IChmbGFncyBcdTAwMjYgKEJQRl9GX0FMTE9XX09WRVJSSURFIHwgQlBGX0ZfQUxMT1dfTVVMVEkpKTtcbiA4MTM6XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xuIDgxNDpcdFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gODE1Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gODE2Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gODE3Olx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4gODE4Olx0XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4gODE5Olx0XHR1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7XG4gODIwOlx0XHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XG4gODIxOlx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XG4gODIyOlx0XHRpbnQgZXJyO1xuIDgyMzpcdFxuIDgyNDpcdFx0aWYgKCgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XG4gODI1Olx0XHQgICAgKChmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkpXG4gODI2Olx0XHRcdC8qIGludmFsaWQgY29tYmluYXRpb24gKi9cbiA4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODI4Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQkVGT1JFIHwgQlBGX0ZfQUZURVIpKSlcbiA4Mjk6XHRcdFx0Lyogb25seSBlaXRoZXIgcmVwbGFjZSBvciBpbnNlcnRpb24gd2l0aCBiZWZvcmUvYWZ0ZXIgKi9cbiA4MzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODMxOlx0XHRpZiAobGluayBcdTAwMjZcdTAwMjYgKHByb2cgfHwgcmVwbGFjZV9wcm9nKSlcbiA4MzI6XHRcdFx0Lyogb25seSBlaXRoZXIgbGluayBvciBwcm9nL3JlcGxhY2VfcHJvZyBjYW4gYmUgc3BlY2lmaWVkICovXG4gODMzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzNDpcdFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSlcbiA4MzU6XHRcdFx0LyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi9cbiA4MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM3Olx0XG4gODM4Olx0XHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XG4gODM5Olx0XHRpZiAoYXR5cGUgXHUwMDNjIDApXG4gODQwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg0MTpcdFx0aWYgKHJldmlzaW9uIFx1MDAyNlx1MDAyNiByZXZpc2lvbiAhPSBjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdKVxuIDg0MjpcdFx0XHRyZXR1cm4gLUVTVEFMRTtcbiA4NDM6XHRcbiA4NDQ6XHRcdHByb2dzID0gXHUwMDI2Y2dycC1cdTAwM2VicGYucHJvZ3NbYXR5cGVdO1xuIDg0NTpcdFxuIDg0NjpcdFx0aWYgKCFoaWVyYXJjaHlfYWxsb3dzX2F0dGFjaChjZ3JwLCBhdHlwZSkpXG4gODQ3Olx0XHRcdHJldHVybiAtRVBFUk07XG4gODQ4Olx0XG4gODQ5Olx0XHRpZiAoIWhsaXN0X2VtcHR5KHByb2dzKSBcdTAwMjZcdTAwMjYgY2dycC1cdTAwM2VicGYuZmxhZ3NbYXR5cGVdICE9IHNhdmVkX2ZsYWdzKVxuIDg1MDpcdFx0XHQvKiBEaXNhbGxvdyBhdHRhY2hpbmcgbm9uLW92ZXJyaWRhYmxlIG9uIHRvcFxuIDg1MTpcdFx0XHQgKiBvZiBleGlzdGluZyBvdmVycmlkYWJsZSBpbiB0aGlzIGNncm91cC5cbiA4NTI6XHRcdFx0ICogRGlzYWxsb3cgYXR0YWNoaW5nIG11bHRpLXByb2cgaWYgb3ZlcnJpZGFibGUgb3Igbm9uZVxuIDg1MzpcdFx0XHQgKi9cbiA4NTQ6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4NTU6XHRcbiA4NTY6XHRcdGlmIChwcm9nX2xpc3RfbGVuZ3RoKHByb2dzLCBOVUxMKSBcdTAwM2U9IEJQRl9DR1JPVVBfTUFYX1BST0dTKVxuIDg1NzpcdFx0XHRyZXR1cm4gLUUyQklHO1xuIDg1ODpcdFxuIDg1OTpcdFx0cGwgPSBmaW5kX2F0dGFjaF9lbnRyeShwcm9ncywgcHJvZywgbGluaywgcmVwbGFjZV9wcm9nLFxuIDg2MDpcdFx0XHRcdCAgICAgICBmbGFncyBcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpO1xuIDg2MTpcdFx0aWYgKElTX0VSUihwbCkpXG4gODYyOlx0XHRcdHJldHVybiBQVFJfRVJSKHBsKTtcbiA4NjM6XHRcbiA4NjQ6XHRcdGlmIChicGZfY2dyb3VwX3N0b3JhZ2VzX2FsbG9jKHN0b3JhZ2UsIG5ld19zdG9yYWdlLCB0eXBlLFxuIDg2NTpcdFx0XHRcdFx0ICAgICAgcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2csIGNncnApKVxuIDg2NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4Njc6XHRcbiA4Njg6XHRcdGlmIChwbCkge1xuIDg2OTpcdFx0XHRvbGRfcHJvZyA9IHBsLVx1MDAzZXByb2c7XG4gODcwOlx0XHRcdG9sZF9wbF9mbGFncyA9IHBsLVx1MDAzZWZsYWdzO1xuIDg3MTpcdFx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihvbGRfc3RvcmFnZSwgcGwtXHUwMDNlc3RvcmFnZSk7XG4gODcyOlx0XHR9IGVsc2Uge1xuIDg3MzpcdFx0XHRwbCA9IGttYWxsb2Nfb2JqKCpwbCk7XG4gODc0Olx0XHRcdGlmICghcGwpIHtcbiA4NzU6XHRcdFx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xuIDg3NjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg3NzpcdFx0XHR9XG4gODc4Olx0XG4gODc5Olx0XHRcdGVyciA9IGluc2VydF9wbF90b19obGlzdChwbCwgcHJvZ3MsIHByb2csIGxpbmssIGZsYWdzLCBpZF9vcl9mZCk7XG4gODgwOlx0XHRcdGlmIChlcnIpIHtcbiA4ODE6XHRcdFx0XHRrZnJlZShwbCk7XG4gODgyOlx0XHRcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiA4ODM6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDg4NDpcdFx0XHR9XG4gODg1Olx0XHR9XG4gODg2Olx0XG4gODg3Olx0XHRwbC1cdTAwM2Vwcm9nID0gcHJvZztcbiA4ODg6XHRcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIDg4OTpcdFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODkwOlx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBzdG9yYWdlKTtcbiA4OTE6XHRcdG9sZF9mbGFncyA9IGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcbiA4OTI6XHRcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xuIDg5MzpcdFxuIDg5NDpcdFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcbiA4OTU6XHRcdFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZywgYXR5cGUsIHR5cGUpO1xuIDg5NjpcdFx0XHRpZiAoZXJyKVxuIDg5NzpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiA4OTg6XHRcdH1cbiA4OTk6XHRcbiA5MDA6XHRcdGVyciA9IHVwZGF0ZV9lZmZlY3RpdmVfcHJvZ3MoY2dycCwgYXR5cGUpO1xuIDkwMTpcdFx0aWYgKGVycilcbiA5MDI6XHRcdFx0Z290byBjbGVhbnVwX3RyYW1wb2xpbmU7XG4gOTAzOlx0XG4gOTA0Olx0XHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICYjNDM7PSAxO1xuIDkwNTpcdFx0aWYgKG9sZF9wcm9nKSB7XG4gOTA2Olx0XHRcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKVxuIDkwNzpcdFx0XHRcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShvbGRfcHJvZyk7XG4gOTA4Olx0XHRcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4gOTA5Olx0XHR9IGVsc2Uge1xuIDkxMDpcdFx0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZjZ3JvdXBfYnBmX2VuYWJsZWRfa2V5W2F0eXBlXSk7XG4gOTExOlx0XHR9XG4gOTEyOlx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIHR5cGUpO1xuIDkxMzpcdFx0cmV0dXJuIDA7XG4gOTE0Olx0XG4gOTE1Olx0Y2xlYW51cF90cmFtcG9saW5lOlxuIDkxNjpcdFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApXG4gOTE3Olx0XHRcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZyk7XG4gOTE4Olx0XG4gOTE5Olx0Y2xlYW51cDpcbiA5MjA6XHRcdGlmIChvbGRfcHJvZykge1xuIDkyMTpcdFx0XHRwbC1cdTAwM2Vwcm9nID0gb2xkX3Byb2c7XG4gOTIyOlx0XHRcdHBsLVx1MDAzZWxpbmsgPSBOVUxMO1xuIDkyMzpcdFx0XHRwbC1cdTAwM2VmbGFncyA9IG9sZF9wbF9mbGFncztcbiA5MjQ6XHRcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgb2xkX3N0b3JhZ2UpO1xuIDkyNTpcdFx0fVxuIDkyNjpcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiA5Mjc6XHRcdGlmICghb2xkX3Byb2cpIHtcbiA5Mjg6XHRcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIDkyOTpcdFx0XHRrZnJlZShwbCk7XG4gOTMwOlx0XHR9XG4gOTMxOlx0XHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gOTMyOlx0XHRyZXR1cm4gZXJyO1xuIDkzMzpcdH1cbiA5MzQ6XHRcbiA5MzU6XHRzdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gOTM2Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuIDkzNzpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbiA5Mzg6XHRcdFx0XHQgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsXG4gOTM5Olx0XHRcdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxuIDk0MDpcdHtcbiA5NDE6XHRcdGludCByZXQ7XG4gOTQyOlx0XG4gOTQzOlx0XHRjZ3JvdXBfbG9jaygpO1xuIDk0NDpcdFx0cmV0ID0gX19jZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIGxpbmssIHR5cGUsIGZsYWdzLFxuIDk0NTpcdFx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuIDk0NjpcdFx0Y2dyb3VwX3VubG9jaygpO1xuIDk0NzpcdFx0cmV0dXJuIHJldDtcbiA5NDg6XHR9XG4gOTQ5Olx0XG4gOTUwOlx0c3RhdGljIGludCBlZmZlY3RpdmVfcHJvZ19wb3Moc3RydWN0IGNncm91cCAqY2dycCxcbiA5NTE6XHRcdFx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4gOTUyOlx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2xpc3QgKnRhcmdldF9wbClcbiA5NTM6XHR7XG4gOTU0Olx0XHRpbnQgY250ID0gMCwgcHJlb3JkZXJfY250ID0gMCwgZnN0YXJ0LCBic3RhcnQsIGluaXRfYnN0YXJ0LCBwb3MgPSAtMTtcbiA5NTU6XHRcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcbiA5NTY6XHRcdHN0cnVjdCBjZ3JvdXAgKnAgPSBjZ3JwO1xuIDk1NzpcdFxuIDk1ODpcdFx0LyogY291bnQgZWZmZWN0aXZlIHByb2dyYW1zIHRvIGZpbmQgd2hlcmUgdGhlIHByZW9yZGVyIHJlZ2lvbiBlbmRzICovXG4gOTU5Olx0XHRkbyB7XG4gOTYwOlx0XHRcdGlmIChjbnQgPT0gMCB8fCAocC1cdTAwM2VicGYuZmxhZ3NbYXR5cGVdIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpXG4gOTYxOlx0XHRcdFx0Y250ICYjNDM7PSBwcm9nX2xpc3RfbGVuZ3RoKFx1MDAyNnAtXHUwMDNlYnBmLnByb2dzW2F0eXBlXSwgXHUwMDI2cHJlb3JkZXJfY250KTtcbiA5NjI6XHRcdFx0cCA9IGNncm91cF9wYXJlbnQocCk7XG4gOTYzOlx0XHR9IHdoaWxlIChwKTtcbiA5NjQ6XHRcbiA5NjU6XHRcdC8qIHJlcGxheSBjb21wdXRlX2VmZmVjdGl2ZV9wcm9ncygpIHBsYWNlbWVudCBhbmQgcmVjb3JkIHRhcmdldCYjMzk7cyBzbG90ICovXG4gOTY2Olx0XHRjbnQgPSAwO1xuIDk2NzpcdFx0cCA9IGNncnA7XG4gOTY4Olx0XHRmc3RhcnQgPSBwcmVvcmRlcl9jbnQ7XG4gOTY5Olx0XHRic3RhcnQgPSBwcmVvcmRlcl9jbnQgLSAxO1xuIDk3MDpcdFx0ZG8ge1xuIDk3MTpcdFx0XHRpZiAoY250IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiAhKHAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSBcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKVxuIDk3MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDk3MzpcdFxuIDk3NDpcdFx0XHRpbml0X2JzdGFydCA9IGJzdGFydDtcbiA5NzU6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGwsIFx1MDAyNnAtXHUwMDNlYnBmLnByb2dzW2F0eXBlXSwgbm9kZSkge1xuIDk3NjpcdFx0XHRcdGlmICghcHJvZ19saXN0X3Byb2cocGwpKVxuIDk3NzpcdFx0XHRcdFx0Y29udGludWU7XG4gOTc4Olx0XG4gOTc5Olx0XHRcdFx0aWYgKHBsLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfRl9QUkVPUkRFUikge1xuIDk4MDpcdFx0XHRcdFx0aWYgKHBsID09IHRhcmdldF9wbClcbiA5ODE6XHRcdFx0XHRcdFx0cG9zID0gYnN0YXJ0O1xuIDk4MjpcdFx0XHRcdFx0YnN0YXJ0LS07XG4gOTgzOlx0XHRcdFx0fSBlbHNlIHtcbiA5ODQ6XHRcdFx0XHRcdGlmIChwbCA9PSB0YXJnZXRfcGwpXG4gOTg1Olx0XHRcdFx0XHRcdHBvcyA9IGZzdGFydDtcbiA5ODY6XHRcdFx0XHRcdGZzdGFydCYjNDM7JiM0Mzs7XG4gOTg3Olx0XHRcdFx0fVxuIDk4ODpcdFx0XHRcdGNudCYjNDM7JiM0Mzs7XG4gOTg5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBCUEYgQXR0YWNobWVudCBQb2ludHMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyB0aGUgY29kZSBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIEJQRiBhbmQgY2dyb3VwcyBpcyBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGF0dGFjaGVkIHRvIGNncm91cHMsIGFuZCB3aGljaCBmdW5jdGlvbnMgaGFuZGxlIHRoYXQgcHJvY2Vzcy4gTGV0IG1lIGNoZWNrOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBhcmUgbmFtZWQgaGVyZS4gVGhvc2UgYXJlIGxpa2VseSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBhdHRhY2htZW50IGxvZ2ljLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gdGhvc2UgdHdvIGZ1bmN0aW9ucyBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgdGhleSBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTM2MD1zdGF0aWMgaW50IGNncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzcwLVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMzcxOmludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzcyLVx0XHRcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY2OS1cdGlmIChpc19jZ3JvdXBfcHJvZ190eXBlKHB0eXBlLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlLCB0cnVlKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NDY3MDpcdFx0cmV0ID0gY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChhdHRyLCBwdHlwZSwgcHJvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjcxLVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBCUEYgY29kZToKCioqRGl2aW5nIGludG8gQlBGIEF0dGFjaG1lbnQgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgYXR0YWNobWVudCBwb2ludHMgZm9yIEJQRiBwcm9ncmFtcywgZm9jdXNpbmcgb24gY2dyb3VwIGludGVncmF0aW9uLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfYXR0YWNoYCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhhdCBtYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBzeXN0ZW0gY2FsbCBoYW5kbGluZyBoYXBwZW5zLiBTaW1pbGFybHksIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBpcyB0cmlnZ2VyZWQgYnkgYGJwZl9saW5rX2NyZWF0ZWAgd2l0aGluIHRoZSBzYW1lIGZpbGUuIEl0JiMzOTtzIGZvbGxvd2luZyB0aGUgdHlwaWNhbCBwYXR0ZXJuIC0gc3lzY2FsbCBlbnRyeSBwb2ludCwgdGhlbiBmdW5jdGlvbiBjYWxsIGZvciBkb2luZyBhY3R1YWwgd29yay4gR2l2ZW4gdGhpcyBsYXlvdXQsIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBzZWVtcyBtb3JlIGludGVyZXN0aW5nIHJpZ2h0IG5vdyBpbiB0aGlzIGludmVzdGlnYXRpb24sIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTUwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1MjItXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1MjM6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyNC17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODcxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg3MjpcdFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NzMtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTItXHRcdGVsc2UgaWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX0xTTV9DR1JPVVApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODkzOlx0XHRcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVx0XHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDk3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBfX2Nncm91cF9icGZfYXR0YWNoYCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgd2l0aGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGJ1ZyBmaXggZm9jdXNlZCBvbiByZXN0b3Jpbmcgc3RhdGUgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiAgRXNzZW50aWFsbHksIHRoZSBmdW5jdGlvbiBhdHRlbXB0cyB0byBhdHRhY2ggYSBCUEYgcHJvZ3JhbSB0byBhIGNncm91cCwgYW5kIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLCBpdCBuZWVkcyB0byB1bmRvIHRoZSBjaGFuZ2VzIGl0IHN0YXJ0ZWQgbWFraW5nLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFib3V0IGVuc3VyaW5nIGEgY2xlYW4gcm9sbGJhY2suIFNwZWNpZmljYWxseSwgaW4gdGhlIGVycm9yIHBhdGggKGluZGljYXRlZCBieSB0aGUgYGNsZWFudXA6YCBsYWJlbCksIHRoZSBjb2RlIG5vdyByZXN0b3JlcyBgY2dycC0mZ3Q7YnBmLmZsYWdzW2F0eXBlXWAgdG8gaXRzIG9yaWdpbmFsIHZhbHVlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgY29uc2lzdGVuY3kgaW4gdGhlIGNncm91cCYjMzk7cyBCUEYgc3RhdGUuICBJdCBhbHNvIHJlc2V0cyBgcGwtJmd0O2ZsYWdzYCB0byBgb2xkX3BsX2ZsYWdzYCBhbmQgYHBsLSZndDtzdG9yYWdlYCB0byBgb2xkX3N0b3JhZ2VgLCBpZiBhbiBgb2xkX3Byb2dgIGV4aXN0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFydGlhbGx5LWFwcGxpZWQgY29uZmlndXJhdGlvbnMgYW5kIGNvcnJ1cHRpb24uIFRoZSBkaWZmIGNsZWFybHkgc2hvd3MgdGhlIGFkZGl0aW9uIG9mIGBvbGRfZmxhZ3NgLCBgb2xkX3BsX2ZsYWdzYCBhbmQgYG9sZF9zdG9yYWdlYCB2YXJpYWJsZXMsIHdoaWNoIGhvbGQgdGhlIG9yaWdpbmFsIHZhbHVlcyBiZWZvcmUgbW9kaWZpY2F0aW9uLCBhbmQgYXJlIHJlc3RvcmVkIGxhdGVyIGluIHRoZSBlcnJvciBwYXRocy4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgbWlzc2luZyBzdGF0ZSByZXN0b3JhdGlvbiBpbiB0aGUgZXJyb3IgcGF0aCBjb3VsZCBsZWFkIHRvIGRpZmZpY3VsdC10by1kZWJ1ZyBpc3N1ZXMgaWYgc29tZSBwYXJ0aWFsIGNvbmZpZ3VyYXRpb24gZ290IHNhdmVkLCBvciBzdGF0ZSBoYWQgY2hhbmdlZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzYCBvciBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAgYXJlIHRoZSB0d28gbWFpbiBjdWxwcml0cyB0aGF0IGNvdWxkIHRyaWdnZXIgdGhlIGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZCB3aGVuIHBsYW5uaW5nIHRlc3RzLgoKTm93LCBhcyBmYXIgYXMgdGVzdGluZyBnb2VzLCB0aGUgZW50cnkgcG9pbnRzIGFyZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCwgd2hpY2ggYXJlIHJlYWNoZWQgZnJvbSB0aGUgQlBGIHN5c2NhbGxzIChgYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGxpbmtfY3JlYXRlYCkuICBUaGVzZSBhcmUgbXkgdGFyZ2V0cyBmb3IgZnV6emluZyB0byB2ZXJpZnkgdGhlIGZpeC4gSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGNyYWZ0IGZ1enogaW5wdXRzIHRoYXQgdHJpZ2dlciB0aGVzZSBmYWlsdXJlIHBhdGhzLgoKT2J2aW91c2x5LCBgQ09ORklHX0NHUk9VUF9CUEZgIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgdG8gYmUgcmVsZXZhbnQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGJlIHN1cmUsIGFuZCBJIHdpbGwgYmUgbG9va2luZyBmb3IgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgQlBGIGZlYXR1cmVzLCBhbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGFmZmVjdGVkIGNncm91cCBzdHJ1Y3R1cmVzLgpUaGlzIGZpeCBsb29rcyBmdW5jdGlvbmFsIGFuZCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6IHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzUxLVxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzUzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0MDpcdFxuMTM0MTpcdGNvbmZpZyBDR1JPVVBfUEVSRlxuMTM0MjpcdFx0Ym9vbCBcJiMzNDtQZXJmIGNvbnRyb2xsZXJcJiMzNDtcbjEzNDM6XHRcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFNcbjEzNDQ6XHRcdGhlbHBcbjEzNDU6XHRcdCAgVGhpcyBvcHRpb24gZXh0ZW5kcyB0aGUgcGVyZiBwZXItY3B1IG1vZGUgdG8gcmVzdHJpY3QgbW9uaXRvcmluZ1xuMTM0NjpcdFx0ICB0byB0aHJlYWRzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2dyb3VwIHNwZWNpZmllZCBhbmQgcnVuIG9uIHRoZVxuMTM0NzpcdFx0ICBkZXNpZ25hdGVkIGNwdS4gIE9yIHRoaXMgY2FuIGJlIHVzZWQgdG8gaGF2ZSBjZ3JvdXAgSUQgaW4gc2FtcGxlc1xuMTM0ODpcdFx0ICBzbyB0aGF0IGl0IGNhbiBtb25pdG9yIHBlcmZvcm1hbmNlIGV2ZW50cyBhbW9uZyBjZ3JvdXBzLlxuMTM0OTpcdFxuMTM1MDpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMzUxOlx0XG4xMzUyOlx0Y29uZmlnIENHUk9VUF9CUEZcbjEzNTM6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4xMzU0Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4xMzU1Olx0XHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxuMTM1NjpcdFx0aGVscFxuMTM1NzpcdFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXG4xMzU4Olx0XHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXG4xMzU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTgzCgkJCQkJCQlvdXRwdXQ6IDIzMgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2dyb3VwX2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2Nncm91cF9icGZfYXR0YWNoYCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIG9yIGxpbmtzIHRvIGNncm91cHMuIFRoZSBjaGFuZ2UgZml4ZXMgYSBidWcgcmVsYXRlZCB0byByZXN0b3JpbmcgYHBsLVx1MDAzZWZsYWdzYCBhbmQgYHBsLVx1MDAzZXN0b3JhZ2VgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXR0YWNobWVudCBwcm9jZXNzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgdmlhIGBicGYoMilgIHN5c2NhbGwgKHNwZWNpZmljYWxseSBgQlBGX1BST0dfQVRUQUNIYCBhbmQgYEJQRl9MSU5LX0NSRUFURWAgY29tbWFuZHMpLiBUaGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0NHUk9VUF9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBvciBsaW5rcyB0byBjZ3JvdXBzLiBUaGUgY2hhbmdlIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gcmVzdG9yaW5nIGBwbC1cdTAwM2VmbGFnc2AgYW5kIGBwbC1cdTAwM2VzdG9yYWdlYCB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGF0dGFjaG1lbnQgcHJvY2Vzcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIHZpYSBgYnBmKDIpYCBzeXNjYWxsIChzcGVjaWZpY2FsbHkgYEJQRl9QUk9HX0FUVEFDSGAgYW5kIGBCUEZfTElOS19DUkVBVEVgIGNvbW1hbmRzKS4gVGhlIGZ1bmN0aW9ucyBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19DR1JPVVBfQlBGYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMDo1OC40MzczNjExMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU2MDkzNjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBvciBsaW5rcyB0byBjZ3JvdXBzLiBUaGUgY2hhbmdlIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gcmVzdG9yaW5nIGBwbC1cXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXFx1MDAzZXN0b3JhZ2VgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXR0YWNobWVudCBwcm9jZXNzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgdmlhIGBicGYoMilgIHN5c2NhbGwgKHNwZWNpZmljYWxseSBgQlBGX1BST0dfQVRUQUNIYCBhbmQgYEJQRl9MSU5LX0NSRUFURWAgY29tbWFuZHMpLiBUaGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0NHUk9VUF9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDA6NTguNDM3MzY3MDQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODA0NDg5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OTNlZDNiYTE0ZmE1OTI0Y2M2MzIzNDdiZjVkOTFhMTllN2EyOTk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE2OjAwOjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuaW5kZXggNDM1NWNjYjc4YTljNi4uNTdmZDFkNzg0ZTQ0MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTMsOCArODEzLDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcXG4gXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cXHUwMDNlbGluay5wcm9nO1xcbiBcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxuK1xcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcXG4gXFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xcbiBcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XFxuIFxcdGludCBlcnI7XFxuQEAgLTg2NSw2ICs4NjcsOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFxuIFxcdGlmIChwbCkge1xcbiBcXHRcXHRvbGRfcHJvZyA9IHBsLVxcdTAwM2Vwcm9nO1xcbitcXHRcXHRvbGRfcGxfZmxhZ3MgPSBwbC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC1cXHUwMDNlc3RvcmFnZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHBsID0ga21hbGxvY19vYmooKnBsKTtcXG4gXFx0XFx0aWYgKCFwbCkge1xcbkBAIC04ODQsNiArODg4LDcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdHBsLVxcdTAwM2VsaW5rID0gbGluaztcXG4gXFx0cGwtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVxcdTAwM2VzdG9yYWdlLCBzdG9yYWdlKTtcXG4rXFx0b2xkX2ZsYWdzID0gY2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcXG4gXFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xcbiBcXG4gXFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcXG5AQCAtOTE1LDEyICs5MjAsMTUgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdGlmIChvbGRfcHJvZykge1xcbiBcXHRcXHRwbC1cXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xcbiBcXHRcXHRwbC1cXHUwMDNlbGluayA9IE5VTEw7XFxuK1xcdFxcdHBsLVxcdTAwM2VmbGFncyA9IG9sZF9wbF9mbGFncztcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4gXFx0fVxcbiBcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xcbiBcXHRpZiAoIW9sZF9wcm9nKSB7XFxuIFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2cGwtXFx1MDAzZW5vZGUpO1xcbiBcXHRcXHRrZnJlZShwbCk7XFxuIFxcdH1cXG4rXFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDA6NTguODE4NTMyODI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDgxNzk3NTYzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgbG9naWMgZm9yIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgb3IgbGlua3MgdG8gY2dyb3Vwcy4gVGhlIGNoYW5nZSBmaXhlcyBhIGJ1ZyByZWxhdGVkIHRvIHJlc3RvcmluZyBgcGwtXFx1MDAzZWZsYWdzYCBhbmQgYHBsLVxcdTAwM2VzdG9yYWdlYCB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGF0dGFjaG1lbnQgcHJvY2Vzcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIHZpYSBgYnBmKDIpYCBzeXNjYWxsIChzcGVjaWZpY2FsbHkgYEJQRl9QUk9HX0FUVEFDSGAgYW5kIGBCUEZfTElOS19DUkVBVEVgIGNvbW1hbmRzKS4gVGhlIGZ1bmN0aW9ucyBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19DR1JPVVBfQlBGYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5M2VkM2JhMTRmYTU5MjRjYzYzMjM0N2JmNWQ5MWExOWU3YTI5OTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNjowMDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Li41N2ZkMWQ3ODRlNDQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxMyw4ICs4MTMsMTAgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuK1x0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0aW50IGVycjtcbkBAIC04NjUsNiArODY3LDggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXG4gXHRpZiAocGwpIHtcbiBcdFx0b2xkX3Byb2cgPSBwbC1cdTAwM2Vwcm9nO1xuK1x0XHRvbGRfcGxfZmxhZ3MgPSBwbC1cdTAwM2VmbGFncztcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xuIFx0XHRpZiAoIXBsKSB7XG5AQCAtODg0LDYgKzg4OCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0cGwtXHUwMDNlbGluayA9IGxpbms7XG4gXHRwbC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTE1LDEyICs5MjAsMTUgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbitcdFx0cGwtXHUwMDNlZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7XG4rXHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcbiBcdH1cbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4gXHRpZiAoIW9sZF9wcm9nKSB7XG4gXHRcdGhsaXN0X2RlbChcdTAwMjZwbC1cdTAwM2Vub2RlKTtcbiBcdFx0a2ZyZWUocGwpO1xuIFx0fVxuK1x0Y2dycC1cdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gb2xkX2ZsYWdzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMDo1OC44MTg1MzQwMTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkzNzY2MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRoZSBtb2RpZmljYXRpb24gb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgYWltZWQgYXQgaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIGluIHRoZSBCUEYgY2dyb3VwIGF0dGFjaCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgcmVzdG9yaW5nIGBwbC1cdTAwM2VmbGFnc2AsIGBwbC1cdTAwM2VzdG9yYWdlYCwgYW5kIGBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV1gIG9uIGVycm9yIHBhdGhzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUga2VybmVsLCBpbXBhY3RpbmcgQlBGIGNncm91cCBhdHRhY2ggZXJyb3IgaGFuZGxpbmcuIFRoYXQncyBhIGp1aWN5IHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0IHRvIHNlZSB3aGF0IGNhbiBiZSBicm9rZW4gYW5kIHdoYXQgZWRnZSBjYXNlcyBleGlzdCB0aGF0IGhhdmVuJ3QgYmVlbiBhZGRyZXNzZWQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoYXQgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGZ1bmN0aW9uIGl0c2VsZi4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHNvIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQ/IFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0cyBiZWhhdmlvcj8gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMTowMi41MTIzMDIzODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzNjU5MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzNT1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0My1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQ0OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjAyLjU1NDY3Mjk0OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MTUyNzAxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRml4aW5nIGEgU3VidGxlIEJQRiBDZ3JvdXAgQXR0YWNoIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdHdlYWtpbmcgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdpdGhpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgg4oCTIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpbyBkdXJpbmcgQlBGIGNncm91cCBhdHRhY2ggb3BlcmF0aW9ucy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYSBmYWlsdXJlIHBhdGggd2l0aGluIHRoYXQgZnVuY3Rpb24gd2hlcmUgc29tZSBjcnVjaWFsIHN0YXRlLCBuYW1lbHkgYGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXWAsIGBwbC1cdTAwM2VmbGFnc2AsIGFuZCBgcGwtXHUwMDNlc3RvcmFnZWAsIHdlcmVuJ3QgZ2V0dGluZyBjb3JyZWN0bHkgcmVzdG9yZWQgaWYgZWl0aGVyIGB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzYCBvciBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfZXZlbnRzYCBoaXQgYW4gZXJyb3IuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoLCBhcyBpdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgZXZlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgZG93biB0aGUgbGluZS5cblxuVGhlcmVmb3JlLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBgV29ydGhGdXp6aW5nPXRydWVgIGZsYWcuIFRoZXNlIGtpbmRzIG9mIGxvdy1sZXZlbCBkYXRhIGludGVncml0eSBpc3N1ZXMgY2FuIGJlIHRyaWNreSBhbmQgbGVhZCB0byBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZHJpbGwgZG93biBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVzcHJlYWQgdGhlIGltcGFjdCBtaWdodCBiZSwgc28gbGV0J3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgc3ltYm9scyBsaWtlIGBjZ3JvdXBfYnBmX2F0dGFjaGAgb3IgdGhlIHN0YXRpYyB2ZXJzaW9uIGBfX2Nncm91cF9icGZfYXR0YWNoYCwgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gTGV0J3MgdGFrZSBhIGxvb2sgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgIHRvIGlkZW50aWZ5IHRoZSBjYWxsZXJzIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjA5LjE2OTk0NTc4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg0MDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NjU9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIGNncm91cF9sc21fYXR5cGVbQ0dST1VQX0xTTV9OVU1dO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjYtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo2NzpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy02OC17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTczLSNlbHNlXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3NDpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03NS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTg0PWJwZl9wcm9nX3J1bl9hcnJheV9jZyhjb25zdCBzdHJ1Y3QgY2dyb3VwX2JwZiAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg1OlxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2LVxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmN0eCwgYnBmX3Byb2dfcnVuX2ZuIHJ1bl9wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNjI9dW5zaWduZWQgaW50IF9fY2dyb3VwX2JwZl9ydW5fbHNtX2N1cnJlbnQoY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODEtI2lmZGVmIENPTkZJR19CUEZfTFNNXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxODI6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgzLWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4OS1cXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX0xTTV9DR1JPVVApXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTA6XFx0XFx0cmV0dXJuIHRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkxLVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yMjA9dm9pZCBicGZfY2dyb3VwX2F0eXBlX3B1dChpbnQgY2dyb3VwX2F0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzItI2Vsc2VcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzMzpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzQtYnBmX2Nncm91cF9hdHlwZV9maW5kKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1MzIgYXR0YWNoX2J0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM2LVxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTFNNX0NHUk9VUClcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzNzpcXHRcXHRyZXR1cm4gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZShhdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzgtXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz00MjQ9c3RhdGljIGJvb2wgaGllcmFyY2h5X2FsbG93c19hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQyNTpcXHRcXHRcXHRcXHQgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNDI2LXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NDUzPXN0YXRpYyBpbnQgY29tcHV0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQ1NDpcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy00NTUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9wcm9nX2FycmF5ICoqYXJyYXkpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTUxMT1zdGF0aWMgdm9pZCBhY3RpdmF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjUxMjpcXHRcXHRcXHRcXHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTUxMy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZ19hcnJheSAqb2xkX2FycmF5KVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz01OTE9c3RhdGljIGludCB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1OTI6XFx0XFx0XFx0XFx0ICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy01OTMte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz03NzE9c3RhdGljIGludCBpbnNlcnRfcGxfdG9faGxpc3Qoc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5MS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjc5MjogKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNS0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODE3LVxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2c7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTg6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtODE5LVxcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM0LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM1OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzNi1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0My1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQ0OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTk1MD1zdGF0aWMgaW50IGVmZmVjdGl2ZV9wcm9nX3BvcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTUxOlxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDAyPXN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDM6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAwNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwMzk9c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQyLXtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDM6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMTM5PXN0YXRpYyB2b2lkIHB1cmdlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTQwOlxcdFxcdFxcdFxcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE0MS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExODA9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE4My17XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTg0OlxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExODUtXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTI1NT1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI2MS1cXHRlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlID0gYXR0ci1cXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjYyOlxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBmcm9tX2F0eXBlLCB0b19hdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjM6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI2NC1cXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI4MS1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI4MjpcXHRcXHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODMtXFx0XFx0aWYgKGZyb21fYXR5cGUgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzcxPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzkwLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MTpcXHRyZXQgPSBjZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIE5VTEwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzkyLVxcdFxcdFxcdFxcdGF0dHItXFx1MDAzZWF0dGFjaF90eXBlLCBhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE1MjM9aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1NTI6XFx0ZXJyID0gY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgTlVMTCwgTlVMTCwgbGluayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTMtXFx0XFx0XFx0XFx0bGluay1cXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgQlBGX0ZfQUxMT1dfTVVMVEkgfCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYwNz1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MDgtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE2MDk6XFx0XFx0XFx0XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTYxMC17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2ODU9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE2ODY6XFx0XFx0XFx0ICAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2ODcte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzEzPWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zb2NrX2FkZHIoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzE1LVxcdFxcdFxcdFxcdCAgICAgIGludCAqdWFkZHJsZW4sXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzE2OlxcdFxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3MTctXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqdF9jdHgsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3Njc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NjgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc2OTpcXHRcXHRcXHRcXHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzAte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzc4PWludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3OTpcXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3ODAte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTM1PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MzctXFx0XFx0XFx0XFx0ICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE5Mzg6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjA5LjIxMjc5MDgzOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTE0NzI2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo2ODA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToxMi4zMjQyNjU1MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcbiA3OTE6XFx0LyoqXFxuIDc5MjpcXHQgKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxcbiA3OTM6XFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gZGVzY2VuZGFudHNcXG4gNzk0OlxcdCAqIEBjZ3JwOiBUaGUgY2dyb3VwIHdoaWNoIGRlc2NlbmRhbnRzIHRvIHRyYXZlcnNlXFxuIDc5NTpcXHQgKiBAcHJvZzogQSBwcm9ncmFtIHRvIGF0dGFjaFxcbiA3OTY6XFx0ICogQGxpbms6IEEgbGluayB0byBhdHRhY2hcXG4gNzk3OlxcdCAqIEByZXBsYWNlX3Byb2c6IFByZXZpb3VzbHkgYXR0YWNoZWQgcHJvZ3JhbSB0byByZXBsYWNlIGlmIEJQRl9GX1JFUExBQ0UgaXMgc2V0XFxuIDc5ODpcXHQgKiBAdHlwZTogVHlwZSBvZiBhdHRhY2ggb3BlcmF0aW9uXFxuIDc5OTpcXHQgKiBAZmxhZ3M6IE9wdGlvbiBmbGFnc1xcbiA4MDA6XFx0ICogQGlkX29yX2ZkOiBSZWxhdGl2ZSBwcm9nIGlkIG9yIGZkXFxuIDgwMTpcXHQgKiBAcmV2aXNpb246IGJwZl9wcm9nX2xpc3QgcmV2aXNpb25cXG4gODAyOlxcdCAqXFxuIDgwMzpcXHQgKiBFeGFjdGx5IG9uZSBvZiBAcHJvZyBvciBAbGluayBjYW4gYmUgbm9uLW51bGwuXFxuIDgwNDpcXHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLlxcbiA4MDU6XFx0ICovXFxuIDgwNjpcXHRzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gODA3OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxcbiA4MDg6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIDgwOTpcXHRcXHRcXHRcXHQgICAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSwgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsXFxuIDgxMDpcXHRcXHRcXHRcXHQgICAgICAgdTY0IHJldmlzaW9uKVxcbiA4MTE6XFx0e1xcbiA4MTI6XFx0XFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFxcdTAwMjYgKEJQRl9GX0FMTE9XX09WRVJSSURFIHwgQlBGX0ZfQUxMT1dfTVVMVEkpKTtcXG4gODEzOlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xcbiA4MTQ6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNTpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNjpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNzpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cXHUwMDNlbGluay5wcm9nO1xcbiA4MTg6XFx0XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbiA4MTk6XFx0XFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xcbiA4MjA6XFx0XFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xcbiA4MjE6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xcbiA4MjI6XFx0XFx0aW50IGVycjtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0aWYgKCgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxcbiA4MjU6XFx0XFx0ICAgICgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSlcXG4gODI2OlxcdFxcdFxcdC8qIGludmFsaWQgY29tYmluYXRpb24gKi9cXG4gODI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Mjg6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IChCUEZfRl9CRUZPUkUgfCBCUEZfRl9BRlRFUikpKVxcbiA4Mjk6XFx0XFx0XFx0Lyogb25seSBlaXRoZXIgcmVwbGFjZSBvciBpbnNlcnRpb24gd2l0aCBiZWZvcmUvYWZ0ZXIgKi9cXG4gODMwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MzE6XFx0XFx0aWYgKGxpbmsgXFx1MDAyNlxcdTAwMjYgKHByb2cgfHwgcmVwbGFjZV9wcm9nKSlcXG4gODMyOlxcdFxcdFxcdC8qIG9ubHkgZWl0aGVyIGxpbmsgb3IgcHJvZy9yZXBsYWNlX3Byb2cgY2FuIGJlIHNwZWNpZmllZCAqL1xcbiA4MzM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzNDpcXHRcXHRpZiAoISFyZXBsYWNlX3Byb2cgIT0gISEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSlcXG4gODM1OlxcdFxcdFxcdC8qIHJlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhICovXFxuIDgzNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODM3OlxcdFxcbiA4Mzg6XFx0XFx0YXR5cGUgPSBicGZfY2dyb3VwX2F0eXBlX2ZpbmQodHlwZSwgbmV3X3Byb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XFxuIDgzOTpcXHRcXHRpZiAoYXR5cGUgXFx1MDAzYyAwKVxcbiA4NDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg0MTpcXHRcXHRpZiAocmV2aXNpb24gXFx1MDAyNlxcdTAwMjYgcmV2aXNpb24gIT0gY2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0pXFxuIDg0MjpcXHRcXHRcXHRyZXR1cm4gLUVTVEFMRTtcXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0cHJvZ3MgPSBcXHUwMDI2Y2dycC1cXHUwMDNlYnBmLnByb2dzW2F0eXBlXTtcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0aWYgKCFoaWVyYXJjaHlfYWxsb3dzX2F0dGFjaChjZ3JwLCBhdHlwZSkpXFxuIDg0NzpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiA4NDg6XFx0XFxuIDg0OTpcXHRcXHRpZiAoIWhsaXN0X2VtcHR5KHByb2dzKSBcXHUwMDI2XFx1MDAyNiBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdICE9IHNhdmVkX2ZsYWdzKVxcbiA4NTA6XFx0XFx0XFx0LyogRGlzYWxsb3cgYXR0YWNoaW5nIG5vbi1vdmVycmlkYWJsZSBvbiB0b3BcXG4gODUxOlxcdFxcdFxcdCAqIG9mIGV4aXN0aW5nIG92ZXJyaWRhYmxlIGluIHRoaXMgY2dyb3VwLlxcbiA4NTI6XFx0XFx0XFx0ICogRGlzYWxsb3cgYXR0YWNoaW5nIG11bHRpLXByb2cgaWYgb3ZlcnJpZGFibGUgb3Igbm9uZVxcbiA4NTM6XFx0XFx0XFx0ICovXFxuIDg1NDpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiA4NTU6XFx0XFxuIDg1NjpcXHRcXHRpZiAocHJvZ19saXN0X2xlbmd0aChwcm9ncywgTlVMTCkgXFx1MDAzZT0gQlBGX0NHUk9VUF9NQVhfUFJPR1MpXFxuIDg1NzpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRwbCA9IGZpbmRfYXR0YWNoX2VudHJ5KHByb2dzLCBwcm9nLCBsaW5rLCByZXBsYWNlX3Byb2csXFxuIDg2MDpcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSk7XFxuIDg2MTpcXHRcXHRpZiAoSVNfRVJSKHBsKSlcXG4gODYyOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBsKTtcXG4gODYzOlxcdFxcbiA4NjQ6XFx0XFx0aWYgKGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RvcmFnZSwgbmV3X3N0b3JhZ2UsIHR5cGUsXFxuIDg2NTpcXHRcXHRcXHRcXHRcXHQgICAgICBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2csIGNncnApKVxcbiA4NjY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg2NzpcXHRcXG4gODY4OlxcdFxcdGlmIChwbCkge1xcbiA4Njk6XFx0XFx0XFx0b2xkX3Byb2cgPSBwbC1cXHUwMDNlcHJvZztcXG4gODcwOlxcdFxcdFxcdG9sZF9wbF9mbGFncyA9IHBsLVxcdTAwM2VmbGFncztcXG4gODcxOlxcdFxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC1cXHUwMDNlc3RvcmFnZSk7XFxuIDg3MjpcXHRcXHR9IGVsc2Uge1xcbiA4NzM6XFx0XFx0XFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xcbiA4NzQ6XFx0XFx0XFx0aWYgKCFwbCkge1xcbiA4NzU6XFx0XFx0XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4gODc2OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4Nzc6XFx0XFx0XFx0fVxcbiA4Nzg6XFx0XFxuIDg3OTpcXHRcXHRcXHRlcnIgPSBpbnNlcnRfcGxfdG9faGxpc3QocGwsIHByb2dzLCBwcm9nLCBsaW5rLCBmbGFncywgaWRfb3JfZmQpO1xcbiA4ODA6XFx0XFx0XFx0aWYgKGVycikge1xcbiA4ODE6XFx0XFx0XFx0XFx0a2ZyZWUocGwpO1xcbiA4ODI6XFx0XFx0XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4gODgzOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDg4NDpcXHRcXHRcXHR9XFxuIDg4NTpcXHRcXHR9XFxuIDg4NjpcXHRcXG4gODg3OlxcdFxcdHBsLVxcdTAwM2Vwcm9nID0gcHJvZztcXG4gODg4OlxcdFxcdHBsLVxcdTAwM2VsaW5rID0gbGluaztcXG4gODg5OlxcdFxcdHBsLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToxMi4zMjQ0MTgwNTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ4MjYzNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6ODU5NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToxNS41NzI2ODQyMDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5MDpcXHRcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XFxuIDg5MTpcXHRcXHRvbGRfZmxhZ3MgPSBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdO1xcbiA4OTI6XFx0XFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xcbiA4OTM6XFx0XFxuIDg5NDpcXHRcXHRpZiAodHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkge1xcbiA4OTU6XFx0XFx0XFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZywgYXR5cGUsIHR5cGUpO1xcbiA4OTY6XFx0XFx0XFx0aWYgKGVycilcXG4gODk3OlxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gODk4OlxcdFxcdH1cXG4gODk5OlxcdFxcbiA5MDA6XFx0XFx0ZXJyID0gdXBkYXRlX2VmZmVjdGl2ZV9wcm9ncyhjZ3JwLCBhdHlwZSk7XFxuIDkwMTpcXHRcXHRpZiAoZXJyKVxcbiA5MDI6XFx0XFx0XFx0Z290byBjbGVhbnVwX3RyYW1wb2xpbmU7XFxuIDkwMzpcXHRcXG4gOTA0OlxcdFxcdGNncnAtXFx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XFxuIDkwNTpcXHRcXHRpZiAob2xkX3Byb2cpIHtcXG4gOTA2OlxcdFxcdFxcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKVxcbiA5MDc6XFx0XFx0XFx0XFx0YnBmX3RyYW1wb2xpbmVfdW5saW5rX2Nncm91cF9zaGltKG9sZF9wcm9nKTtcXG4gOTA4OlxcdFxcdFxcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XFxuIDkwOTpcXHRcXHR9IGVsc2Uge1xcbiA5MTA6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9pbmMoXFx1MDAyNmNncm91cF9icGZfZW5hYmxlZF9rZXlbYXR5cGVdKTtcXG4gOTExOlxcdFxcdH1cXG4gOTEyOlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfbGluayhuZXdfc3RvcmFnZSwgY2dycCwgdHlwZSk7XFxuIDkxMzpcXHRcXHRyZXR1cm4gMDtcXG4gOTE0OlxcdFxcbiA5MTU6XFx0Y2xlYW51cF90cmFtcG9saW5lOlxcbiA5MTY6XFx0XFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApXFxuIDkxNzpcXHRcXHRcXHRicGZfdHJhbXBvbGluZV91bmxpbmtfY2dyb3VwX3NoaW0obmV3X3Byb2cpO1xcbiA5MTg6XFx0XFxuIDkxOTpcXHRjbGVhbnVwOlxcbiA5MjA6XFx0XFx0aWYgKG9sZF9wcm9nKSB7XFxuIDkyMTpcXHRcXHRcXHRwbC1cXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xcbiA5MjI6XFx0XFx0XFx0cGwtXFx1MDAzZWxpbmsgPSBOVUxMO1xcbiA5MjM6XFx0XFx0XFx0cGwtXFx1MDAzZWZsYWdzID0gb2xkX3BsX2ZsYWdzO1xcbiA5MjQ6XFx0XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4gOTI1OlxcdFxcdH1cXG4gOTI2OlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XFxuIDkyNzpcXHRcXHRpZiAoIW9sZF9wcm9nKSB7XFxuIDkyODpcXHRcXHRcXHRobGlzdF9kZWwoXFx1MDAyNnBsLVxcdTAwM2Vub2RlKTtcXG4gOTI5OlxcdFxcdFxcdGtmcmVlKHBsKTtcXG4gOTMwOlxcdFxcdH1cXG4gOTMxOlxcdFxcdGNncnAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XFxuIDkzMjpcXHRcXHRyZXR1cm4gZXJyO1xcbiA5MzM6XFx0fVxcbiA5MzQ6XFx0XFxuIDkzNTpcXHRzdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIDkzNjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuIDkzNzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIDkzODpcXHRcXHRcXHRcXHQgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsXFxuIDkzOTpcXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pXFxuIDk0MDpcXHR7XFxuIDk0MTpcXHRcXHRpbnQgcmV0O1xcbiA5NDI6XFx0XFxuIDk0MzpcXHRcXHRjZ3JvdXBfbG9jaygpO1xcbiA5NDQ6XFx0XFx0cmV0ID0gX19jZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIGxpbmssIHR5cGUsIGZsYWdzLFxcbiA5NDU6XFx0XFx0XFx0XFx0XFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xcbiA5NDY6XFx0XFx0Y2dyb3VwX3VubG9jaygpO1xcbiA5NDc6XFx0XFx0cmV0dXJuIHJldDtcXG4gOTQ4OlxcdH1cXG4gOTQ5OlxcdFxcbiA5NTA6XFx0c3RhdGljIGludCBlZmZlY3RpdmVfcHJvZ19wb3Moc3RydWN0IGNncm91cCAqY2dycCxcXG4gOTUxOlxcdFxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG4gOTUyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19saXN0ICp0YXJnZXRfcGwpXFxuIDk1MzpcXHR7XFxuIDk1NDpcXHRcXHRpbnQgY250ID0gMCwgcHJlb3JkZXJfY250ID0gMCwgZnN0YXJ0LCBic3RhcnQsIGluaXRfYnN0YXJ0LCBwb3MgPSAtMTtcXG4gOTU1OlxcdFxcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcXG4gOTU2OlxcdFxcdHN0cnVjdCBjZ3JvdXAgKnAgPSBjZ3JwO1xcbiA5NTc6XFx0XFxuIDk1ODpcXHRcXHQvKiBjb3VudCBlZmZlY3RpdmUgcHJvZ3JhbXMgdG8gZmluZCB3aGVyZSB0aGUgcHJlb3JkZXIgcmVnaW9uIGVuZHMgKi9cXG4gOTU5OlxcdFxcdGRvIHtcXG4gOTYwOlxcdFxcdFxcdGlmIChjbnQgPT0gMCB8fCAocC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSBcXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSlcXG4gOTYxOlxcdFxcdFxcdFxcdGNudCArPSBwcm9nX2xpc3RfbGVuZ3RoKFxcdTAwMjZwLVxcdTAwM2VicGYucHJvZ3NbYXR5cGVdLCBcXHUwMDI2cHJlb3JkZXJfY250KTtcXG4gOTYyOlxcdFxcdFxcdHAgPSBjZ3JvdXBfcGFyZW50KHApO1xcbiA5NjM6XFx0XFx0fSB3aGlsZSAocCk7XFxuIDk2NDpcXHRcXG4gOTY1OlxcdFxcdC8qIHJlcGxheSBjb21wdXRlX2VmZmVjdGl2ZV9wcm9ncygpIHBsYWNlbWVudCBhbmQgcmVjb3JkIHRhcmdldCdzIHNsb3QgKi9cXG4gOTY2OlxcdFxcdGNudCA9IDA7XFxuIDk2NzpcXHRcXHRwID0gY2dycDtcXG4gOTY4OlxcdFxcdGZzdGFydCA9IHByZW9yZGVyX2NudDtcXG4gOTY5OlxcdFxcdGJzdGFydCA9IHByZW9yZGVyX2NudCAtIDE7XFxuIDk3MDpcXHRcXHRkbyB7XFxuIDk3MTpcXHRcXHRcXHRpZiAoY250IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAhKHAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpXFxuIDk3MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0XFx0aW5pdF9ic3RhcnQgPSBic3RhcnQ7XFxuIDk3NTpcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShwbCwgXFx1MDAyNnAtXFx1MDAzZWJwZi5wcm9nc1thdHlwZV0sIG5vZGUpIHtcXG4gOTc2OlxcdFxcdFxcdFxcdGlmICghcHJvZ19saXN0X3Byb2cocGwpKVxcbiA5Nzc6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDk3ODpcXHRcXG4gOTc5OlxcdFxcdFxcdFxcdGlmIChwbC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfRl9QUkVPUkRFUikge1xcbiA5ODA6XFx0XFx0XFx0XFx0XFx0aWYgKHBsID09IHRhcmdldF9wbClcXG4gOTgxOlxcdFxcdFxcdFxcdFxcdFxcdHBvcyA9IGJzdGFydDtcXG4gOTgyOlxcdFxcdFxcdFxcdFxcdGJzdGFydC0tO1xcbiA5ODM6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gOTg0OlxcdFxcdFxcdFxcdFxcdGlmIChwbCA9PSB0YXJnZXRfcGwpXFxuIDk4NTpcXHRcXHRcXHRcXHRcXHRcXHRwb3MgPSBmc3RhcnQ7XFxuIDk4NjpcXHRcXHRcXHRcXHRcXHRmc3RhcnQrKztcXG4gOTg3OlxcdFxcdFxcdFxcdH1cXG4gOTg4OlxcdFxcdFxcdFxcdGNudCsrO1xcbiA5ODk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToxNS41NzI4NzI4MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0ODkwNTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQlBGIEF0dGFjaG1lbnQgUG9pbnRzIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIEJQRiBhbmQgY2dyb3VwcyBpcyBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEJQRiBwcm9ncmFtcyBhcmUgYXR0YWNoZWQgdG8gY2dyb3VwcywgYW5kIHdoaWNoIGZ1bmN0aW9ucyBoYW5kbGUgdGhhdCBwcm9jZXNzLiBMZXQgbWUgY2hlY2s6IGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSBuYW1lZCBoZXJlLiBUaG9zZSBhcmUgbGlrZWx5IHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIGF0dGFjaG1lbnQgbG9naWMuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGRpdmUgaW50byB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCB0aGV5IGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDE6MTkuMDIxNzgxMDg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTcwNDEyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTM2MD1zdGF0aWMgaW50IGNncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzNzAtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMzcxOmludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM3Mi1cXHRcXHRcXHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjY5LVxcdGlmIChpc19jZ3JvdXBfcHJvZ190eXBlKHB0eXBlLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjcwOlxcdFxcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2NzEtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjE5LjA2MzQ4OTA0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQyNzYzNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgQlBGIGNvZGU6XG5cbioqRGl2aW5nIGludG8gQlBGIEF0dGFjaG1lbnQgUG9pbnRzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGF0dGFjaG1lbnQgcG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMsIGZvY3VzaW5nIG9uIGNncm91cCBpbnRlZ3JhdGlvbi4gSSdtIHNlZWluZyB0aGF0IHRoZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfYXR0YWNoYCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhhdCBtYWtlcyBzZW5zZSwgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIHN5c3RlbSBjYWxsIGhhbmRsaW5nIGhhcHBlbnMuIFNpbWlsYXJseSwgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGlzIHRyaWdnZXJlZCBieSBgYnBmX2xpbmtfY3JlYXRlYCB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gSXQncyBmb2xsb3dpbmcgdGhlIHR5cGljYWwgcGF0dGVybiAtIHN5c2NhbGwgZW50cnkgcG9pbnQsIHRoZW4gZnVuY3Rpb24gY2FsbCBmb3IgZG9pbmcgYWN0dWFsIHdvcmsuIEdpdmVuIHRoaXMgbGF5b3V0LCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgc2VlbXMgbW9yZSBpbnRlcmVzdGluZyByaWdodCBub3cgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToyMy4yMDYyNTUwMTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDYwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9icGZfbGlua19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0xNTA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTIyLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMzppbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyNC17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3MS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg3MjpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NzMtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODkyLVxcdFxcdGVsc2UgaWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9MU01fQ0dST1VQKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTM6XFx0XFx0XFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVxcdFxcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToyMy4yNDkzMTk1MDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNDc1MzI1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBfX2Nncm91cF9icGZfYXR0YWNoYCB3aXRoaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgYnVnIGZpeCBmb2N1c2VkIG9uIHJlc3RvcmluZyBzdGF0ZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuICBFc3NlbnRpYWxseSwgdGhlIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGF0dGFjaCBhIEJQRiBwcm9ncmFtIHRvIGEgY2dyb3VwLCBhbmQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIGl0IG5lZWRzIHRvIHVuZG8gdGhlIGNoYW5nZXMgaXQgc3RhcnRlZCBtYWtpbmcuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBhYm91dCBlbnN1cmluZyBhIGNsZWFuIHJvbGxiYWNrLiBTcGVjaWZpY2FsbHksIGluIHRoZSBlcnJvciBwYXRoIChpbmRpY2F0ZWQgYnkgdGhlIGBjbGVhbnVwOmAgbGFiZWwpLCB0aGUgY29kZSBub3cgcmVzdG9yZXMgYGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXWAgdG8gaXRzIG9yaWdpbmFsIHZhbHVlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgY29uc2lzdGVuY3kgaW4gdGhlIGNncm91cCdzIEJQRiBzdGF0ZS4gIEl0IGFsc28gcmVzZXRzIGBwbC1cdTAwM2VmbGFnc2AgdG8gYG9sZF9wbF9mbGFnc2AgYW5kIGBwbC1cdTAwM2VzdG9yYWdlYCB0byBgb2xkX3N0b3JhZ2VgLCBpZiBhbiBgb2xkX3Byb2dgIGV4aXN0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFydGlhbGx5LWFwcGxpZWQgY29uZmlndXJhdGlvbnMgYW5kIGNvcnJ1cHRpb24uIFRoZSBkaWZmIGNsZWFybHkgc2hvd3MgdGhlIGFkZGl0aW9uIG9mIGBvbGRfZmxhZ3NgLCBgb2xkX3BsX2ZsYWdzYCBhbmQgYG9sZF9zdG9yYWdlYCB2YXJpYWJsZXMsIHdoaWNoIGhvbGQgdGhlIG9yaWdpbmFsIHZhbHVlcyBiZWZvcmUgbW9kaWZpY2F0aW9uLCBhbmQgYXJlIHJlc3RvcmVkIGxhdGVyIGluIHRoZSBlcnJvciBwYXRocy5cblxuVGhlIGZpeCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBtaXNzaW5nIHN0YXRlIHJlc3RvcmF0aW9uIGluIHRoZSBlcnJvciBwYXRoIGNvdWxkIGxlYWQgdG8gZGlmZmljdWx0LXRvLWRlYnVnIGlzc3VlcyBpZiBzb21lIHBhcnRpYWwgY29uZmlndXJhdGlvbiBnb3Qgc2F2ZWQsIG9yIHN0YXRlIGhhZCBjaGFuZ2VkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBgdXBkYXRlX2VmZmVjdGl2ZV9wcm9nc2Agb3IgYGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW1gIGFyZSB0aGUgdHdvIG1haW4gY3VscHJpdHMgdGhhdCBjb3VsZCB0cmlnZ2VyIHRoZSBlcnJvciBoYW5kbGluZy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZCB3aGVuIHBsYW5uaW5nIHRlc3RzLlxuXG5Ob3csIGFzIGZhciBhcyB0ZXN0aW5nIGdvZXMsIHRoZSBlbnRyeSBwb2ludHMgYXJlIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLCB3aGljaCBhcmUgcmVhY2hlZCBmcm9tIHRoZSBCUEYgc3lzY2FsbHMgKGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgKS4gIFRoZXNlIGFyZSBteSB0YXJnZXRzIGZvciBmdXp6aW5nIHRvIHZlcmlmeSB0aGUgZml4LiBJJ2xsIGRlZmluaXRlbHkgd2FudCB0byBjcmFmdCBmdXp6IGlucHV0cyB0aGF0IHRyaWdnZXIgdGhlc2UgZmFpbHVyZSBwYXRocy5cblxuT2J2aW91c2x5LCBgQ09ORklHX0NHUk9VUF9CUEZgIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgdG8gYmUgcmVsZXZhbnQuIEknbGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSwgYW5kIEkgd2lsbCBiZSBsb29raW5nIGZvciBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBCUEYgZmVhdHVyZXMsIGFuZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgYWZmZWN0ZWQgY2dyb3VwIHN0cnVjdHVyZXMuXG5UaGlzIGZpeCBsb29rcyBmdW5jdGlvbmFsIGFuZCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6IHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjI2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjM1LjM5Njg1NDY5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxOTMwNjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEzNDE9Y29uZmlnIENHUk9VUF9QRVJGXFxuLS1cXG5pbml0L0tjb25maWctMTM1MS1cXG5pbml0L0tjb25maWc6MTM1Mjpjb25maWcgQ0dST1VQX0JQRlxcbmluaXQvS2NvbmZpZy0xMzUzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDE6MzcuMTE2MTY3NjEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDgxNjM3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTg1MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDE6NDAuNTI0MzM0MzM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0MDpcXHRcXG4xMzQxOlxcdGNvbmZpZyBDR1JPVVBfUEVSRlxcbjEzNDI6XFx0XFx0Ym9vbCBcXFwiUGVyZiBjb250cm9sbGVyXFxcIlxcbjEzNDM6XFx0XFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UU1xcbjEzNDQ6XFx0XFx0aGVscFxcbjEzNDU6XFx0XFx0ICBUaGlzIG9wdGlvbiBleHRlbmRzIHRoZSBwZXJmIHBlci1jcHUgbW9kZSB0byByZXN0cmljdCBtb25pdG9yaW5nXFxuMTM0NjpcXHRcXHQgIHRvIHRocmVhZHMgd2hpY2ggYmVsb25nIHRvIHRoZSBjZ3JvdXAgc3BlY2lmaWVkIGFuZCBydW4gb24gdGhlXFxuMTM0NzpcXHRcXHQgIGRlc2lnbmF0ZWQgY3B1LiAgT3IgdGhpcyBjYW4gYmUgdXNlZCB0byBoYXZlIGNncm91cCBJRCBpbiBzYW1wbGVzXFxuMTM0ODpcXHRcXHQgIHNvIHRoYXQgaXQgY2FuIG1vbml0b3IgcGVyZm9ybWFuY2UgZXZlbnRzIGFtb25nIGNncm91cHMuXFxuMTM0OTpcXHRcXG4xMzUwOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEzNTE6XFx0XFxuMTM1MjpcXHRjb25maWcgQ0dST1VQX0JQRlxcbjEzNTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcbjEzNTQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbjEzNTU6XFx0XFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcXG4xMzU2OlxcdFxcdGhlbHBcXG4xMzU3OlxcdFxcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxcbjEzNTg6XFx0XFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxcbjEzNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjQwLjUyNDQ5MjA0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk1MDU4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTIxODMsIk91dHB1dFRva2VucyI6MjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjQ2LjkxOTU1MjMxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzM0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBvciBsaW5rcyB0byBjZ3JvdXBzLiBUaGUgY2hhbmdlIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gcmVzdG9yaW5nIGBwbC1cXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXFx1MDAzZXN0b3JhZ2VgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXR0YWNobWVudCBwcm9jZXNzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgdmlhIGBicGYoMilgIHN5c2NhbGwgKHNwZWNpZmljYWxseSBgQlBGX1BST0dfQVRUQUNIYCBhbmQgYEJQRl9MSU5LX0NSRUFURWAgY29tbWFuZHMpLiBUaGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0NHUk9VUF9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBvciBsaW5rcyB0byBjZ3JvdXBzLiBUaGUgY2hhbmdlIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gcmVzdG9yaW5nIGBwbC1cXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXFx1MDAzZXN0b3JhZ2VgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXR0YWNobWVudCBwcm9jZXNzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgdmlhIGBicGYoMilgIHN5c2NhbGwgKHNwZWNpZmljYWxseSBgQlBGX1BST0dfQVRUQUNIYCBhbmQgYEJQRl9MSU5LX0NSRUFURWAgY29tbWFuZHMpLiBUaGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0NHUk9VUF9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowz294c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 15:59:55 +0000 UTC FinishedAt: 2026-07-30 16:01:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "b7910da8-a2d5-4bca-9c3d-a1528bf93320" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_prog_attach", "cgroup_bpf_link_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgbG9naWMgZm9yIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgb3IgbGlua3MgdG8gY2dyb3Vwcy4gVGhlIGNoYW5nZSBmaXhlcyBhIGJ1ZyByZWxhdGVkIHRvIHJlc3RvcmluZyBgcGwtXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXHUwMDNlc3RvcmFnZWAgd2hlbiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhdHRhY2htZW50IHByb2Nlc3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSB2aWEgYGJwZigyKWAgc3lzY2FsbCAoc3BlY2lmaWNhbGx5IGBCUEZfUFJPR19BVFRBQ0hgIGFuZCBgQlBGX0xJTktfQ1JFQVRFYCBjb21tYW5kcykuIFRoZSBmdW5jdGlvbnMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZXNlIG9wZXJhdGlvbnMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfQ0dST1VQX0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTkzZWQzYmExNGZhNTkyNGNjNjMyMzQ3YmY1ZDkxYTE5ZTdhMjk5NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE2OjAwOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Li41N2ZkMWQ3ODRlNDQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxMyw4ICYjNDM7ODEzLDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4gXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4mIzQzO1x0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0aW50IGVycjtcbkBAIC04NjUsNiAmIzQzOzg2Nyw4IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFxuIFx0aWYgKHBsKSB7XG4gXHRcdG9sZF9wcm9nID0gcGwtXHUwMDNlcHJvZztcbiYjNDM7XHRcdG9sZF9wbF9mbGFncyA9IHBsLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xuIFx0XHRpZiAoIXBsKSB7XG5AQCAtODg0LDYgJiM0Mzs4ODgsNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xuJiM0MztcdG9sZF9mbGFncyA9IGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcbiBcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xuIFxuIFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcbkBAIC05MTUsMTIgJiM0Mzs5MjAsMTUgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbiYjNDM7XHRcdHBsLVx1MDAzZWZsYWdzID0gb2xkX3BsX2ZsYWdzO1xuJiM0MztcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgb2xkX3N0b3JhZ2UpO1xuIFx0fVxuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiBcdGlmICghb2xkX3Byb2cpIHtcbiBcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIFx0XHRrZnJlZShwbCk7XG4gXHR9XG4mIzQzO1x0Y2dycC1cdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gb2xkX2ZsYWdzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgbG9naWMgZm9yIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgb3IgbGlua3MgdG8gY2dyb3Vwcy4gVGhlIGNoYW5nZSBmaXhlcyBhIGJ1ZyByZWxhdGVkIHRvIHJlc3RvcmluZyBgcGwtXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXHUwMDNlc3RvcmFnZWAgd2hlbiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhdHRhY2htZW50IHByb2Nlc3MuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHJlYWNoYWJsZSB2aWEgYGJwZigyKWAgc3lzY2FsbCAoc3BlY2lmaWNhbGx5IGBCUEZfUFJPR19BVFRBQ0hgIGFuZCBgQlBGX0xJTktfQ1JFQVRFYCBjb21tYW5kcykuIFRoZSBmdW5jdGlvbnMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZXNlIG9wZXJhdGlvbnMuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfQ0dST1VQX0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTkzZWQzYmExNGZhNTkyNGNjNjMyMzQ3YmY1ZDkxYTE5ZTdhMjk5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDE2OjAwOjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKaW5kZXggNDM1NWNjYjc4YTljNi4uNTdmZDFkNzg0ZTQ0MCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jCkBAIC04MTMsOCAmIzQzOzgxMywxMCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDsKIAlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKIAlzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307CiYjNDM7CXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay0mZ3Q7bGluay5wcm9nOwogCWVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTsKJiM0MzsJdTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzOwogCXN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7CiAJaW50IGVycjsKQEAgLTg2NSw2ICYjNDM7ODY3LDggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAKIAlpZiAocGwpIHsKIAkJb2xkX3Byb2cgPSBwbC0mZ3Q7cHJvZzsKJiM0MzsJCW9sZF9wbF9mbGFncyA9IHBsLSZndDtmbGFnczsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiAJfSBlbHNlIHsKIAkJcGwgPSBrbWFsbG9jX29iaigqcGwpOwogCQlpZiAoIXBsKSB7CkBAIC04ODQsNiAmIzQzOzg4OCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXBsLSZndDtsaW5rID0gbGluazsKIAlwbC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAlicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC0mZ3Q7c3RvcmFnZSwgc3RvcmFnZSk7CiYjNDM7CW9sZF9mbGFncyA9IGNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV07CiAJY2dycC0mZ3Q7YnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzOwogCiAJaWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHsKQEAgLTkxNSwxMiAmIzQzOzkyMCwxNSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIAlpZiAob2xkX3Byb2cpIHsKIAkJcGwtJmd0O3Byb2cgPSBvbGRfcHJvZzsKIAkJcGwtJmd0O2xpbmsgPSBOVUxMOwomIzQzOwkJcGwtJmd0O2ZsYWdzID0gb2xkX3BsX2ZsYWdzOwomIzQzOwkJYnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtJmd0O3N0b3JhZ2UsIG9sZF9zdG9yYWdlKTsKIAl9CiAJYnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTsKIAlpZiAoIW9sZF9wcm9nKSB7CiAJCWhsaXN0X2RlbCgmYW1wO3BsLSZndDtub2RlKTsKIAkJa2ZyZWUocGwpOwogCX0KJiM0MzsJY2dycC0mZ3Q7YnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFnczsKIAlyZXR1cm4gZXJyOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJQRiBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIEltbWVkaWF0ZWx5LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIG1vZGlmaWNhdGlvbiBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBhaW1lZCBhdCBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEJQRiBjZ3JvdXAgYXR0YWNoIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgcmVzdG9yaW5nIGBwbC0mZ3Q7ZmxhZ3NgLCBgcGwtJmd0O3N0b3JhZ2VgLCBhbmQgYGNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV1gIG9uIGVycm9yIHBhdGhzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUga2VybmVsLCBpbXBhY3RpbmcgQlBGIGNncm91cCBhdHRhY2ggZXJyb3IgaGFuZGxpbmcuIFRoYXQmIzM5O3MgYSBqdWljeSB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydCB0byBzZWUgd2hhdCBjYW4gYmUgYnJva2VuIGFuZCB3aGF0IGVkZ2UgY2FzZXMgZXhpc3QgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIGFkZHJlc3NlZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBfX2Nncm91cF9icGZfYXR0YWNoYCBmdW5jdGlvbiBpdHNlbGYuIEl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCwgc28gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQ/IFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0cyBiZWhhdmlvcj8gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY2dyb3VwX2JwZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTM1PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0My1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NDpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ1LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIGEgU3VidGxlIEJQRiBDZ3JvdXAgQXR0YWNoIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgdHdlYWtpbmcgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdpdGhpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgg4oCTIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpbyBkdXJpbmcgQlBGIGNncm91cCBhdHRhY2ggb3BlcmF0aW9ucy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYSBmYWlsdXJlIHBhdGggd2l0aGluIHRoYXQgZnVuY3Rpb24gd2hlcmUgc29tZSBjcnVjaWFsIHN0YXRlLCBuYW1lbHkgYGNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV1gLCBgcGwtJmd0O2ZsYWdzYCwgYW5kIGBwbC0mZ3Q7c3RvcmFnZWAsIHdlcmVuJiMzOTt0IGdldHRpbmcgY29ycmVjdGx5IHJlc3RvcmVkIGlmIGVpdGhlciBgdXBkYXRlX2VmZmVjdGl2ZV9wcm9nc2Agb3IgYGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX2V2ZW50c2AgaGl0IGFuIGVycm9yLiBUaGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCwgYXMgaXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGV2ZW4gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGRvd24gdGhlIGxpbmUuCgpUaGVyZWZvcmUsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGBXb3J0aEZ1enppbmc9dHJ1ZWAgZmxhZy4gVGhlc2Uga2luZHMgb2YgbG93LWxldmVsIGRhdGEgaW50ZWdyaXR5IGlzc3VlcyBjYW4gYmUgdHJpY2t5IGFuZCBsZWFkIHRvIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy4KCk5vdywgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZHJpbGwgZG93biBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVzcHJlYWQgdGhlIGltcGFjdCBtaWdodCBiZSwgc28gbGV0JiMzOTtzIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBfX2Nncm91cF9icGZfYXR0YWNoYCB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBzeW1ib2xzIGxpa2UgYGNncm91cF9icGZfYXR0YWNoYCBvciB0aGUgc3RhdGljIHZlcnNpb24gYF9fY2dyb3VwX2JwZl9hdHRhY2hgLCB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgIHRvIGlkZW50aWZ5IHRoZSBjYWxsZXJzIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTY1PXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX2xzbV9hdHlwZSBjZ3JvdXBfbHNtX2F0eXBlW0NHUk9VUF9MU01fTlVNXTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjYtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjY3OnN0YXRpYyBib29sIGNncm91cF9icGZfaG9va19yZXR1cm5zX2Vycm5vKGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjgte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzMtI2Vsc2Vcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzQ6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy03NS17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz04ND1icGZfcHJvZ19ydW5fYXJyYXlfY2coY29uc3Qgc3RydWN0IGNncm91cF9icGYgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg1Olx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2LVx0XHQgICAgICBjb25zdCB2b2lkICpjdHgsIGJwZl9wcm9nX3J1bl9mbiBydW5fcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2Mj11bnNpZ25lZCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9sc21fY3VycmVudChjb25zdCB2b2lkICpjdHgsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODEtI2lmZGVmIENPTkZJR19CUEZfTFNNXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE4MjpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4My1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTg5LVx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9MU01fQ0dST1VQKVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTA6XHRcdHJldHVybiB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGF0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkxLVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIwPXZvaWQgYnBmX2Nncm91cF9hdHlwZV9wdXQoaW50IGNncm91cF9hdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzMi0jZWxzZVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzM6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzQtYnBmX2Nncm91cF9hdHlwZV9maW5kKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1MzIgYXR0YWNoX2J0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzNi1cdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTFNNX0NHUk9VUClcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjM3Olx0XHRyZXR1cm4gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZShhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzOC1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTQyND1zdGF0aWMgYm9vbCBoaWVyYXJjaHlfYWxsb3dzX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0MjU6XHRcdFx0XHQgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy00MjYte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NDUzPXN0YXRpYyBpbnQgY29tcHV0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NDU0Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxua2VybmVsL2JwZi9jZ3JvdXAuYy00NTUtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKiphcnJheSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTUxMT1zdGF0aWMgdm9pZCBhY3RpdmF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NTEyOlx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTUxMy1cdFx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nX2FycmF5ICpvbGRfYXJyYXkpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz01OTE9c3RhdGljIGludCB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjU5MjpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy01OTMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODE3LVx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTg6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTgxOS1cdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzNC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM1OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM2LVx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0My1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NDpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ1LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTUwPXN0YXRpYyBpbnQgZWZmZWN0aXZlX3Byb2dfcG9zKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjk1MTpcdFx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1Mi1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTAwMj1zdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDM6XHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMDQtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDM5PXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDIte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDQzOlx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExMzk9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTE0MDpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTQxLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExODA9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExODMte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTg0Olx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTg1LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEyNTU9c3RhdGljIGludCBfX2Nncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjYxLVx0ZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSA9IGF0dHItXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjI6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgZnJvbV9hdHlwZSwgdG9fYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjM6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyNjQtXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODEtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjgyOlx0XHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI4My1cdFx0aWYgKGZyb21fYXR5cGUgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzcxPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5MC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MTpcdHJldCA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5Mi1cdFx0XHRcdGF0dHItXHUwMDNlYXR0YWNoX3R5cGUsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUyMz1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1MS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU1MjpcdGVyciA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIE5VTEwsIE5VTEwsIGxpbmssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTMtXHRcdFx0XHRsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsIEJQRl9GX0FMTE9XX01VTFRJIHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2MDc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MDgtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNjA5Olx0XHRcdFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjEwLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2ODU9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTY4NjpcdFx0XHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjg3LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MTM9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzE1LVx0XHRcdFx0ICAgICAgaW50ICp1YWRkcmxlbixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTcxNjpcdFx0XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTcxNy1cdFx0XHRcdCAgICAgIHZvaWQgKnRfY3R4LFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2Nz1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzY4LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzY5Olx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzAte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc3OD1pbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3OTpcdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzgwLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5MzU9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MzctXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTM4Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRcbiA3OTE6XHQvKipcbiA3OTI6XHQgKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxuIDc5MzpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4gNzk0Olx0ICogQGNncnA6IFRoZSBjZ3JvdXAgd2hpY2ggZGVzY2VuZGFudHMgdG8gdHJhdmVyc2VcbiA3OTU6XHQgKiBAcHJvZzogQSBwcm9ncmFtIHRvIGF0dGFjaFxuIDc5NjpcdCAqIEBsaW5rOiBBIGxpbmsgdG8gYXR0YWNoXG4gNzk3Olx0ICogQHJlcGxhY2VfcHJvZzogUHJldmlvdXNseSBhdHRhY2hlZCBwcm9ncmFtIHRvIHJlcGxhY2UgaWYgQlBGX0ZfUkVQTEFDRSBpcyBzZXRcbiA3OTg6XHQgKiBAdHlwZTogVHlwZSBvZiBhdHRhY2ggb3BlcmF0aW9uXG4gNzk5Olx0ICogQGZsYWdzOiBPcHRpb24gZmxhZ3NcbiA4MDA6XHQgKiBAaWRfb3JfZmQ6IFJlbGF0aXZlIHByb2cgaWQgb3IgZmRcbiA4MDE6XHQgKiBAcmV2aXNpb246IGJwZl9wcm9nX2xpc3QgcmV2aXNpb25cbiA4MDI6XHQgKlxuIDgwMzpcdCAqIEV4YWN0bHkgb25lIG9mIEBwcm9nIG9yIEBsaW5rIGNhbiBiZSBub24tbnVsbC5cbiA4MDQ6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLlxuIDgwNTpcdCAqL1xuIDgwNjpcdHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIDgwNzpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuIDgwODpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuIDgwOTpcdFx0XHRcdCAgICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlLCB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCxcbiA4MTA6XHRcdFx0XHQgICAgICAgdTY0IHJldmlzaW9uKVxuIDgxMTpcdHtcbiA4MTI6XHRcdHUzMiBzYXZlZF9mbGFncyA9IChmbGFncyBcdTAwMjYgKEJQRl9GX0FMTE9XX09WRVJSSURFIHwgQlBGX0ZfQUxMT1dfTVVMVEkpKTtcbiA4MTM6XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xuIDgxNDpcdFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gODE1Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gODE2Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gODE3Olx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4gODE4Olx0XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4gODE5Olx0XHR1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7XG4gODIwOlx0XHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XG4gODIxOlx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XG4gODIyOlx0XHRpbnQgZXJyO1xuIDgyMzpcdFxuIDgyNDpcdFx0aWYgKCgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX09WRVJSSURFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpIHx8XG4gODI1Olx0XHQgICAgKChmbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSkpXG4gODI2Olx0XHRcdC8qIGludmFsaWQgY29tYmluYXRpb24gKi9cbiA4Mjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODI4Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQkVGT1JFIHwgQlBGX0ZfQUZURVIpKSlcbiA4Mjk6XHRcdFx0Lyogb25seSBlaXRoZXIgcmVwbGFjZSBvciBpbnNlcnRpb24gd2l0aCBiZWZvcmUvYWZ0ZXIgKi9cbiA4MzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODMxOlx0XHRpZiAobGluayBcdTAwMjZcdTAwMjYgKHByb2cgfHwgcmVwbGFjZV9wcm9nKSlcbiA4MzI6XHRcdFx0Lyogb25seSBlaXRoZXIgbGluayBvciBwcm9nL3JlcGxhY2VfcHJvZyBjYW4gYmUgc3BlY2lmaWVkICovXG4gODMzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgzNDpcdFx0aWYgKCEhcmVwbGFjZV9wcm9nICE9ICEhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSlcbiA4MzU6XHRcdFx0LyogcmVwbGFjZV9wcm9nIGltcGxpZXMgQlBGX0ZfUkVQTEFDRSwgYW5kIHZpY2UgdmVyc2EgKi9cbiA4MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODM3Olx0XG4gODM4Olx0XHRhdHlwZSA9IGJwZl9jZ3JvdXBfYXR5cGVfZmluZCh0eXBlLCBuZXdfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XG4gODM5Olx0XHRpZiAoYXR5cGUgXHUwMDNjIDApXG4gODQwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg0MTpcdFx0aWYgKHJldmlzaW9uIFx1MDAyNlx1MDAyNiByZXZpc2lvbiAhPSBjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdKVxuIDg0MjpcdFx0XHRyZXR1cm4gLUVTVEFMRTtcbiA4NDM6XHRcbiA4NDQ6XHRcdHByb2dzID0gXHUwMDI2Y2dycC1cdTAwM2VicGYucHJvZ3NbYXR5cGVdO1xuIDg0NTpcdFxuIDg0NjpcdFx0aWYgKCFoaWVyYXJjaHlfYWxsb3dzX2F0dGFjaChjZ3JwLCBhdHlwZSkpXG4gODQ3Olx0XHRcdHJldHVybiAtRVBFUk07XG4gODQ4Olx0XG4gODQ5Olx0XHRpZiAoIWhsaXN0X2VtcHR5KHByb2dzKSBcdTAwMjZcdTAwMjYgY2dycC1cdTAwM2VicGYuZmxhZ3NbYXR5cGVdICE9IHNhdmVkX2ZsYWdzKVxuIDg1MDpcdFx0XHQvKiBEaXNhbGxvdyBhdHRhY2hpbmcgbm9uLW92ZXJyaWRhYmxlIG9uIHRvcFxuIDg1MTpcdFx0XHQgKiBvZiBleGlzdGluZyBvdmVycmlkYWJsZSBpbiB0aGlzIGNncm91cC5cbiA4NTI6XHRcdFx0ICogRGlzYWxsb3cgYXR0YWNoaW5nIG11bHRpLXByb2cgaWYgb3ZlcnJpZGFibGUgb3Igbm9uZVxuIDg1MzpcdFx0XHQgKi9cbiA4NTQ6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4NTU6XHRcbiA4NTY6XHRcdGlmIChwcm9nX2xpc3RfbGVuZ3RoKHByb2dzLCBOVUxMKSBcdTAwM2U9IEJQRl9DR1JPVVBfTUFYX1BST0dTKVxuIDg1NzpcdFx0XHRyZXR1cm4gLUUyQklHO1xuIDg1ODpcdFxuIDg1OTpcdFx0cGwgPSBmaW5kX2F0dGFjaF9lbnRyeShwcm9ncywgcHJvZywgbGluaywgcmVwbGFjZV9wcm9nLFxuIDg2MDpcdFx0XHRcdCAgICAgICBmbGFncyBcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpO1xuIDg2MTpcdFx0aWYgKElTX0VSUihwbCkpXG4gODYyOlx0XHRcdHJldHVybiBQVFJfRVJSKHBsKTtcbiA4NjM6XHRcbiA4NjQ6XHRcdGlmIChicGZfY2dyb3VwX3N0b3JhZ2VzX2FsbG9jKHN0b3JhZ2UsIG5ld19zdG9yYWdlLCB0eXBlLFxuIDg2NTpcdFx0XHRcdFx0ICAgICAgcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2csIGNncnApKVxuIDg2NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4Njc6XHRcbiA4Njg6XHRcdGlmIChwbCkge1xuIDg2OTpcdFx0XHRvbGRfcHJvZyA9IHBsLVx1MDAzZXByb2c7XG4gODcwOlx0XHRcdG9sZF9wbF9mbGFncyA9IHBsLVx1MDAzZWZsYWdzO1xuIDg3MTpcdFx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihvbGRfc3RvcmFnZSwgcGwtXHUwMDNlc3RvcmFnZSk7XG4gODcyOlx0XHR9IGVsc2Uge1xuIDg3MzpcdFx0XHRwbCA9IGttYWxsb2Nfb2JqKCpwbCk7XG4gODc0Olx0XHRcdGlmICghcGwpIHtcbiA4NzU6XHRcdFx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xuIDg3NjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg3NzpcdFx0XHR9XG4gODc4Olx0XG4gODc5Olx0XHRcdGVyciA9IGluc2VydF9wbF90b19obGlzdChwbCwgcHJvZ3MsIHByb2csIGxpbmssIGZsYWdzLCBpZF9vcl9mZCk7XG4gODgwOlx0XHRcdGlmIChlcnIpIHtcbiA4ODE6XHRcdFx0XHRrZnJlZShwbCk7XG4gODgyOlx0XHRcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiA4ODM6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDg4NDpcdFx0XHR9XG4gODg1Olx0XHR9XG4gODg2Olx0XG4gODg3Olx0XHRwbC1cdTAwM2Vwcm9nID0gcHJvZztcbiA4ODg6XHRcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIDg4OTpcdFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODkwOlx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBzdG9yYWdlKTtcbiA4OTE6XHRcdG9sZF9mbGFncyA9IGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcbiA4OTI6XHRcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xuIDg5MzpcdFxuIDg5NDpcdFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcbiA4OTU6XHRcdFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZywgYXR5cGUsIHR5cGUpO1xuIDg5NjpcdFx0XHRpZiAoZXJyKVxuIDg5NzpcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiA4OTg6XHRcdH1cbiA4OTk6XHRcbiA5MDA6XHRcdGVyciA9IHVwZGF0ZV9lZmZlY3RpdmVfcHJvZ3MoY2dycCwgYXR5cGUpO1xuIDkwMTpcdFx0aWYgKGVycilcbiA5MDI6XHRcdFx0Z290byBjbGVhbnVwX3RyYW1wb2xpbmU7XG4gOTAzOlx0XG4gOTA0Olx0XHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICYjNDM7PSAxO1xuIDkwNTpcdFx0aWYgKG9sZF9wcm9nKSB7XG4gOTA2Olx0XHRcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKVxuIDkwNzpcdFx0XHRcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShvbGRfcHJvZyk7XG4gOTA4Olx0XHRcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4gOTA5Olx0XHR9IGVsc2Uge1xuIDkxMDpcdFx0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZjZ3JvdXBfYnBmX2VuYWJsZWRfa2V5W2F0eXBlXSk7XG4gOTExOlx0XHR9XG4gOTEyOlx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIHR5cGUpO1xuIDkxMzpcdFx0cmV0dXJuIDA7XG4gOTE0Olx0XG4gOTE1Olx0Y2xlYW51cF90cmFtcG9saW5lOlxuIDkxNjpcdFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApXG4gOTE3Olx0XHRcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZyk7XG4gOTE4Olx0XG4gOTE5Olx0Y2xlYW51cDpcbiA5MjA6XHRcdGlmIChvbGRfcHJvZykge1xuIDkyMTpcdFx0XHRwbC1cdTAwM2Vwcm9nID0gb2xkX3Byb2c7XG4gOTIyOlx0XHRcdHBsLVx1MDAzZWxpbmsgPSBOVUxMO1xuIDkyMzpcdFx0XHRwbC1cdTAwM2VmbGFncyA9IG9sZF9wbF9mbGFncztcbiA5MjQ6XHRcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgb2xkX3N0b3JhZ2UpO1xuIDkyNTpcdFx0fVxuIDkyNjpcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcbiA5Mjc6XHRcdGlmICghb2xkX3Byb2cpIHtcbiA5Mjg6XHRcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIDkyOTpcdFx0XHRrZnJlZShwbCk7XG4gOTMwOlx0XHR9XG4gOTMxOlx0XHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gOTMyOlx0XHRyZXR1cm4gZXJyO1xuIDkzMzpcdH1cbiA5MzQ6XHRcbiA5MzU6XHRzdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gOTM2Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuIDkzNzpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbiA5Mzg6XHRcdFx0XHQgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsXG4gOTM5Olx0XHRcdFx0ICAgICB1MzIgZmxhZ3MsIHUzMiBpZF9vcl9mZCwgdTY0IHJldmlzaW9uKVxuIDk0MDpcdHtcbiA5NDE6XHRcdGludCByZXQ7XG4gOTQyOlx0XG4gOTQzOlx0XHRjZ3JvdXBfbG9jaygpO1xuIDk0NDpcdFx0cmV0ID0gX19jZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIGxpbmssIHR5cGUsIGZsYWdzLFxuIDk0NTpcdFx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuIDk0NjpcdFx0Y2dyb3VwX3VubG9jaygpO1xuIDk0NzpcdFx0cmV0dXJuIHJldDtcbiA5NDg6XHR9XG4gOTQ5Olx0XG4gOTUwOlx0c3RhdGljIGludCBlZmZlY3RpdmVfcHJvZ19wb3Moc3RydWN0IGNncm91cCAqY2dycCxcbiA5NTE6XHRcdFx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4gOTUyOlx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2xpc3QgKnRhcmdldF9wbClcbiA5NTM6XHR7XG4gOTU0Olx0XHRpbnQgY250ID0gMCwgcHJlb3JkZXJfY250ID0gMCwgZnN0YXJ0LCBic3RhcnQsIGluaXRfYnN0YXJ0LCBwb3MgPSAtMTtcbiA5NTU6XHRcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcbiA5NTY6XHRcdHN0cnVjdCBjZ3JvdXAgKnAgPSBjZ3JwO1xuIDk1NzpcdFxuIDk1ODpcdFx0LyogY291bnQgZWZmZWN0aXZlIHByb2dyYW1zIHRvIGZpbmQgd2hlcmUgdGhlIHByZW9yZGVyIHJlZ2lvbiBlbmRzICovXG4gOTU5Olx0XHRkbyB7XG4gOTYwOlx0XHRcdGlmIChjbnQgPT0gMCB8fCAocC1cdTAwM2VicGYuZmxhZ3NbYXR5cGVdIFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpXG4gOTYxOlx0XHRcdFx0Y250ICYjNDM7PSBwcm9nX2xpc3RfbGVuZ3RoKFx1MDAyNnAtXHUwMDNlYnBmLnByb2dzW2F0eXBlXSwgXHUwMDI2cHJlb3JkZXJfY250KTtcbiA5NjI6XHRcdFx0cCA9IGNncm91cF9wYXJlbnQocCk7XG4gOTYzOlx0XHR9IHdoaWxlIChwKTtcbiA5NjQ6XHRcbiA5NjU6XHRcdC8qIHJlcGxheSBjb21wdXRlX2VmZmVjdGl2ZV9wcm9ncygpIHBsYWNlbWVudCBhbmQgcmVjb3JkIHRhcmdldCYjMzk7cyBzbG90ICovXG4gOTY2Olx0XHRjbnQgPSAwO1xuIDk2NzpcdFx0cCA9IGNncnA7XG4gOTY4Olx0XHRmc3RhcnQgPSBwcmVvcmRlcl9jbnQ7XG4gOTY5Olx0XHRic3RhcnQgPSBwcmVvcmRlcl9jbnQgLSAxO1xuIDk3MDpcdFx0ZG8ge1xuIDk3MTpcdFx0XHRpZiAoY250IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiAhKHAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSBcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKVxuIDk3MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDk3MzpcdFxuIDk3NDpcdFx0XHRpbml0X2JzdGFydCA9IGJzdGFydDtcbiA5NzU6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGwsIFx1MDAyNnAtXHUwMDNlYnBmLnByb2dzW2F0eXBlXSwgbm9kZSkge1xuIDk3NjpcdFx0XHRcdGlmICghcHJvZ19saXN0X3Byb2cocGwpKVxuIDk3NzpcdFx0XHRcdFx0Y29udGludWU7XG4gOTc4Olx0XG4gOTc5Olx0XHRcdFx0aWYgKHBsLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfRl9QUkVPUkRFUikge1xuIDk4MDpcdFx0XHRcdFx0aWYgKHBsID09IHRhcmdldF9wbClcbiA5ODE6XHRcdFx0XHRcdFx0cG9zID0gYnN0YXJ0O1xuIDk4MjpcdFx0XHRcdFx0YnN0YXJ0LS07XG4gOTgzOlx0XHRcdFx0fSBlbHNlIHtcbiA5ODQ6XHRcdFx0XHRcdGlmIChwbCA9PSB0YXJnZXRfcGwpXG4gOTg1Olx0XHRcdFx0XHRcdHBvcyA9IGZzdGFydDtcbiA5ODY6XHRcdFx0XHRcdGZzdGFydCYjNDM7JiM0Mzs7XG4gOTg3Olx0XHRcdFx0fVxuIDk4ODpcdFx0XHRcdGNudCYjNDM7JiM0Mzs7XG4gOTg5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBCUEYgQXR0YWNobWVudCBQb2ludHMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyB0aGUgY29kZSBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIEJQRiBhbmQgY2dyb3VwcyBpcyBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGF0dGFjaGVkIHRvIGNncm91cHMsIGFuZCB3aGljaCBmdW5jdGlvbnMgaGFuZGxlIHRoYXQgcHJvY2Vzcy4gTGV0IG1lIGNoZWNrOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBhcmUgbmFtZWQgaGVyZS4gVGhvc2UgYXJlIGxpa2VseSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBhdHRhY2htZW50IGxvZ2ljLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gdGhvc2UgdHdvIGZ1bmN0aW9ucyBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgdGhleSBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTM2MD1zdGF0aWMgaW50IGNncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzcwLVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMzcxOmludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzcyLVx0XHRcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY2OS1cdGlmIChpc19jZ3JvdXBfcHJvZ190eXBlKHB0eXBlLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlLCB0cnVlKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NDY3MDpcdFx0cmV0ID0gY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChhdHRyLCBwdHlwZSwgcHJvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjcxLVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBCUEYgY29kZToKCioqRGl2aW5nIGludG8gQlBGIEF0dGFjaG1lbnQgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgYXR0YWNobWVudCBwb2ludHMgZm9yIEJQRiBwcm9ncmFtcywgZm9jdXNpbmcgb24gY2dyb3VwIGludGVncmF0aW9uLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfYXR0YWNoYCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhhdCBtYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBzeXN0ZW0gY2FsbCBoYW5kbGluZyBoYXBwZW5zLiBTaW1pbGFybHksIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBpcyB0cmlnZ2VyZWQgYnkgYGJwZl9saW5rX2NyZWF0ZWAgd2l0aGluIHRoZSBzYW1lIGZpbGUuIEl0JiMzOTtzIGZvbGxvd2luZyB0aGUgdHlwaWNhbCBwYXR0ZXJuIC0gc3lzY2FsbCBlbnRyeSBwb2ludCwgdGhlbiBmdW5jdGlvbiBjYWxsIGZvciBkb2luZyBhY3R1YWwgd29yay4gR2l2ZW4gdGhpcyBsYXlvdXQsIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBzZWVtcyBtb3JlIGludGVyZXN0aW5nIHJpZ2h0IG5vdyBpbiB0aGlzIGludmVzdGlnYXRpb24sIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTUwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1MjItXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1MjM6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyNC17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODcxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg3MjpcdFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NzMtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTItXHRcdGVsc2UgaWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX0xTTV9DR1JPVVApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODkzOlx0XHRcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVx0XHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDk3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBfX2Nncm91cF9icGZfYXR0YWNoYCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgd2l0aGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGJ1ZyBmaXggZm9jdXNlZCBvbiByZXN0b3Jpbmcgc3RhdGUgZHVyaW5nIGVycm9yIGhhbmRsaW5nLiAgRXNzZW50aWFsbHksIHRoZSBmdW5jdGlvbiBhdHRlbXB0cyB0byBhdHRhY2ggYSBCUEYgcHJvZ3JhbSB0byBhIGNncm91cCwgYW5kIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLCBpdCBuZWVkcyB0byB1bmRvIHRoZSBjaGFuZ2VzIGl0IHN0YXJ0ZWQgbWFraW5nLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFib3V0IGVuc3VyaW5nIGEgY2xlYW4gcm9sbGJhY2suIFNwZWNpZmljYWxseSwgaW4gdGhlIGVycm9yIHBhdGggKGluZGljYXRlZCBieSB0aGUgYGNsZWFudXA6YCBsYWJlbCksIHRoZSBjb2RlIG5vdyByZXN0b3JlcyBgY2dycC0mZ3Q7YnBmLmZsYWdzW2F0eXBlXWAgdG8gaXRzIG9yaWdpbmFsIHZhbHVlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgY29uc2lzdGVuY3kgaW4gdGhlIGNncm91cCYjMzk7cyBCUEYgc3RhdGUuICBJdCBhbHNvIHJlc2V0cyBgcGwtJmd0O2ZsYWdzYCB0byBgb2xkX3BsX2ZsYWdzYCBhbmQgYHBsLSZndDtzdG9yYWdlYCB0byBgb2xkX3N0b3JhZ2VgLCBpZiBhbiBgb2xkX3Byb2dgIGV4aXN0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFydGlhbGx5LWFwcGxpZWQgY29uZmlndXJhdGlvbnMgYW5kIGNvcnJ1cHRpb24uIFRoZSBkaWZmIGNsZWFybHkgc2hvd3MgdGhlIGFkZGl0aW9uIG9mIGBvbGRfZmxhZ3NgLCBgb2xkX3BsX2ZsYWdzYCBhbmQgYG9sZF9zdG9yYWdlYCB2YXJpYWJsZXMsIHdoaWNoIGhvbGQgdGhlIG9yaWdpbmFsIHZhbHVlcyBiZWZvcmUgbW9kaWZpY2F0aW9uLCBhbmQgYXJlIHJlc3RvcmVkIGxhdGVyIGluIHRoZSBlcnJvciBwYXRocy4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgbWlzc2luZyBzdGF0ZSByZXN0b3JhdGlvbiBpbiB0aGUgZXJyb3IgcGF0aCBjb3VsZCBsZWFkIHRvIGRpZmZpY3VsdC10by1kZWJ1ZyBpc3N1ZXMgaWYgc29tZSBwYXJ0aWFsIGNvbmZpZ3VyYXRpb24gZ290IHNhdmVkLCBvciBzdGF0ZSBoYWQgY2hhbmdlZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzYCBvciBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAgYXJlIHRoZSB0d28gbWFpbiBjdWxwcml0cyB0aGF0IGNvdWxkIHRyaWdnZXIgdGhlIGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZCB3aGVuIHBsYW5uaW5nIHRlc3RzLgoKTm93LCBhcyBmYXIgYXMgdGVzdGluZyBnb2VzLCB0aGUgZW50cnkgcG9pbnRzIGFyZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCwgd2hpY2ggYXJlIHJlYWNoZWQgZnJvbSB0aGUgQlBGIHN5c2NhbGxzIChgYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGxpbmtfY3JlYXRlYCkuICBUaGVzZSBhcmUgbXkgdGFyZ2V0cyBmb3IgZnV6emluZyB0byB2ZXJpZnkgdGhlIGZpeC4gSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGNyYWZ0IGZ1enogaW5wdXRzIHRoYXQgdHJpZ2dlciB0aGVzZSBmYWlsdXJlIHBhdGhzLgoKT2J2aW91c2x5LCBgQ09ORklHX0NHUk9VUF9CUEZgIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgdG8gYmUgcmVsZXZhbnQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGJlIHN1cmUsIGFuZCBJIHdpbGwgYmUgbG9va2luZyBmb3IgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgQlBGIGZlYXR1cmVzLCBhbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGFmZmVjdGVkIGNncm91cCBzdHJ1Y3R1cmVzLgpUaGlzIGZpeCBsb29rcyBmdW5jdGlvbmFsIGFuZCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6IHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzUxLVxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzUzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0MDpcdFxuMTM0MTpcdGNvbmZpZyBDR1JPVVBfUEVSRlxuMTM0MjpcdFx0Ym9vbCBcJiMzNDtQZXJmIGNvbnRyb2xsZXJcJiMzNDtcbjEzNDM6XHRcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFNcbjEzNDQ6XHRcdGhlbHBcbjEzNDU6XHRcdCAgVGhpcyBvcHRpb24gZXh0ZW5kcyB0aGUgcGVyZiBwZXItY3B1IG1vZGUgdG8gcmVzdHJpY3QgbW9uaXRvcmluZ1xuMTM0NjpcdFx0ICB0byB0aHJlYWRzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2dyb3VwIHNwZWNpZmllZCBhbmQgcnVuIG9uIHRoZVxuMTM0NzpcdFx0ICBkZXNpZ25hdGVkIGNwdS4gIE9yIHRoaXMgY2FuIGJlIHVzZWQgdG8gaGF2ZSBjZ3JvdXAgSUQgaW4gc2FtcGxlc1xuMTM0ODpcdFx0ICBzbyB0aGF0IGl0IGNhbiBtb25pdG9yIHBlcmZvcm1hbmNlIGV2ZW50cyBhbW9uZyBjZ3JvdXBzLlxuMTM0OTpcdFxuMTM1MDpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMzUxOlx0XG4xMzUyOlx0Y29uZmlnIENHUk9VUF9CUEZcbjEzNTM6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG4xMzU0Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4xMzU1Olx0XHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxuMTM1NjpcdFx0aGVscFxuMTM1NzpcdFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXG4xMzU4Olx0XHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXG4xMzU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTgzCgkJCQkJCQlvdXRwdXQ6IDIzMgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2dyb3VwX2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBfX2Nncm91cF9icGZfYXR0YWNoYCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AsIHdoaWNoIGlzIHRoZSBjb3JlIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIG9yIGxpbmtzIHRvIGNncm91cHMuIFRoZSBjaGFuZ2UgZml4ZXMgYSBidWcgcmVsYXRlZCB0byByZXN0b3JpbmcgYHBsLVx1MDAzZWZsYWdzYCBhbmQgYHBsLVx1MDAzZXN0b3JhZ2VgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXR0YWNobWVudCBwcm9jZXNzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgdmlhIGBicGYoMilgIHN5c2NhbGwgKHNwZWNpZmljYWxseSBgQlBGX1BST0dfQVRUQUNIYCBhbmQgYEJQRl9MSU5LX0NSRUFURWAgY29tbWFuZHMpLiBUaGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0NHUk9VUF9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBvciBsaW5rcyB0byBjZ3JvdXBzLiBUaGUgY2hhbmdlIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gcmVzdG9yaW5nIGBwbC1cdTAwM2VmbGFnc2AgYW5kIGBwbC1cdTAwM2VzdG9yYWdlYCB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGF0dGFjaG1lbnQgcHJvY2Vzcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIHZpYSBgYnBmKDIpYCBzeXNjYWxsIChzcGVjaWZpY2FsbHkgYEJQRl9QUk9HX0FUVEFDSGAgYW5kIGBCUEZfTElOS19DUkVBVEVgIGNvbW1hbmRzKS4gVGhlIGZ1bmN0aW9ucyBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19DR1JPVVBfQlBGYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMDo1OC40MzczNjExMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU2MDkzNjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBvciBsaW5rcyB0byBjZ3JvdXBzLiBUaGUgY2hhbmdlIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gcmVzdG9yaW5nIGBwbC1cXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXFx1MDAzZXN0b3JhZ2VgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXR0YWNobWVudCBwcm9jZXNzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgdmlhIGBicGYoMilgIHN5c2NhbGwgKHNwZWNpZmljYWxseSBgQlBGX1BST0dfQVRUQUNIYCBhbmQgYEJQRl9MSU5LX0NSRUFURWAgY29tbWFuZHMpLiBUaGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0NHUk9VUF9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDA6NTguNDM3MzY3MDQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODA0NDg5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OTNlZDNiYTE0ZmE1OTI0Y2M2MzIzNDdiZjVkOTFhMTllN2EyOTk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE2OjAwOjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuaW5kZXggNDM1NWNjYjc4YTljNi4uNTdmZDFkNzg0ZTQ0MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTMsOCArODEzLDEwIEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcXG4gXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cXHUwMDNlbGluay5wcm9nO1xcbiBcXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XFxuK1xcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcXG4gXFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xcbiBcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3M7XFxuIFxcdGludCBlcnI7XFxuQEAgLTg2NSw2ICs4NjcsOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFxuIFxcdGlmIChwbCkge1xcbiBcXHRcXHRvbGRfcHJvZyA9IHBsLVxcdTAwM2Vwcm9nO1xcbitcXHRcXHRvbGRfcGxfZmxhZ3MgPSBwbC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC1cXHUwMDNlc3RvcmFnZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHBsID0ga21hbGxvY19vYmooKnBsKTtcXG4gXFx0XFx0aWYgKCFwbCkge1xcbkBAIC04ODQsNiArODg4LDcgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdHBsLVxcdTAwM2VsaW5rID0gbGluaztcXG4gXFx0cGwtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVxcdTAwM2VzdG9yYWdlLCBzdG9yYWdlKTtcXG4rXFx0b2xkX2ZsYWdzID0gY2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcXG4gXFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xcbiBcXG4gXFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcXG5AQCAtOTE1LDEyICs5MjAsMTUgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIFxcdGlmIChvbGRfcHJvZykge1xcbiBcXHRcXHRwbC1cXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xcbiBcXHRcXHRwbC1cXHUwMDNlbGluayA9IE5VTEw7XFxuK1xcdFxcdHBsLVxcdTAwM2VmbGFncyA9IG9sZF9wbF9mbGFncztcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4gXFx0fVxcbiBcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xcbiBcXHRpZiAoIW9sZF9wcm9nKSB7XFxuIFxcdFxcdGhsaXN0X2RlbChcXHUwMDI2cGwtXFx1MDAzZW5vZGUpO1xcbiBcXHRcXHRrZnJlZShwbCk7XFxuIFxcdH1cXG4rXFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IG9sZF9mbGFncztcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDA6NTguODE4NTMyODI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDgxNzk3NTYzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgbG9naWMgZm9yIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgb3IgbGlua3MgdG8gY2dyb3Vwcy4gVGhlIGNoYW5nZSBmaXhlcyBhIGJ1ZyByZWxhdGVkIHRvIHJlc3RvcmluZyBgcGwtXFx1MDAzZWZsYWdzYCBhbmQgYHBsLVxcdTAwM2VzdG9yYWdlYCB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGF0dGFjaG1lbnQgcHJvY2Vzcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgcmVhY2hhYmxlIHZpYSBgYnBmKDIpYCBzeXNjYWxsIChzcGVjaWZpY2FsbHkgYEJQRl9QUk9HX0FUVEFDSGAgYW5kIGBCUEZfTElOS19DUkVBVEVgIGNvbW1hbmRzKS4gVGhlIGZ1bmN0aW9ucyBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19DR1JPVVBfQlBGYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5M2VkM2JhMTRmYTU5MjRjYzYzMjM0N2JmNWQ5MWExOWU3YTI5OTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNjowMDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Li41N2ZkMWQ3ODRlNDQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxMyw4ICs4MTMsMTAgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xuIFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuK1x0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0aW50IGVycjtcbkBAIC04NjUsNiArODY3LDggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXG4gXHRpZiAocGwpIHtcbiBcdFx0b2xkX3Byb2cgPSBwbC1cdTAwM2Vwcm9nO1xuK1x0XHRvbGRfcGxfZmxhZ3MgPSBwbC1cdTAwM2VmbGFncztcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xuIFx0XHRpZiAoIXBsKSB7XG5AQCAtODg0LDYgKzg4OCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0cGwtXHUwMDNlbGluayA9IGxpbms7XG4gXHRwbC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTE1LDEyICs5MjAsMTUgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRpZiAob2xkX3Byb2cpIHtcbiBcdFx0cGwtXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xuIFx0XHRwbC1cdTAwM2VsaW5rID0gTlVMTDtcbitcdFx0cGwtXHUwMDNlZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7XG4rXHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcbiBcdH1cbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4gXHRpZiAoIW9sZF9wcm9nKSB7XG4gXHRcdGhsaXN0X2RlbChcdTAwMjZwbC1cdTAwM2Vub2RlKTtcbiBcdFx0a2ZyZWUocGwpO1xuIFx0fVxuK1x0Y2dycC1cdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gb2xkX2ZsYWdzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMDo1OC44MTg1MzQwMTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkzNzY2MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRoZSBtb2RpZmljYXRpb24gb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgYWltZWQgYXQgaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIGluIHRoZSBCUEYgY2dyb3VwIGF0dGFjaCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgcmVzdG9yaW5nIGBwbC1cdTAwM2VmbGFnc2AsIGBwbC1cdTAwM2VzdG9yYWdlYCwgYW5kIGBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV1gIG9uIGVycm9yIHBhdGhzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUga2VybmVsLCBpbXBhY3RpbmcgQlBGIGNncm91cCBhdHRhY2ggZXJyb3IgaGFuZGxpbmcuIFRoYXQncyBhIGp1aWN5IHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0IHRvIHNlZSB3aGF0IGNhbiBiZSBicm9rZW4gYW5kIHdoYXQgZWRnZSBjYXNlcyBleGlzdCB0aGF0IGhhdmVuJ3QgYmVlbiBhZGRyZXNzZWQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoYXQgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIGZ1bmN0aW9uIGl0c2VsZi4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHNvIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQ/IFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0cyBiZWhhdmlvcj8gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMTowMi41MTIzMDIzODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzNjU5MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzNT1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0My1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQ0OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjAyLjU1NDY3Mjk0OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MTUyNzAxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRml4aW5nIGEgU3VidGxlIEJQRiBDZ3JvdXAgQXR0YWNoIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdHdlYWtpbmcgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdpdGhpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgg4oCTIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpbyBkdXJpbmcgQlBGIGNncm91cCBhdHRhY2ggb3BlcmF0aW9ucy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYSBmYWlsdXJlIHBhdGggd2l0aGluIHRoYXQgZnVuY3Rpb24gd2hlcmUgc29tZSBjcnVjaWFsIHN0YXRlLCBuYW1lbHkgYGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXWAsIGBwbC1cdTAwM2VmbGFnc2AsIGFuZCBgcGwtXHUwMDNlc3RvcmFnZWAsIHdlcmVuJ3QgZ2V0dGluZyBjb3JyZWN0bHkgcmVzdG9yZWQgaWYgZWl0aGVyIGB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzYCBvciBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfZXZlbnRzYCBoaXQgYW4gZXJyb3IuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNhdGNoLCBhcyBpdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgZXZlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgZG93biB0aGUgbGluZS5cblxuVGhlcmVmb3JlLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBgV29ydGhGdXp6aW5nPXRydWVgIGZsYWcuIFRoZXNlIGtpbmRzIG9mIGxvdy1sZXZlbCBkYXRhIGludGVncml0eSBpc3N1ZXMgY2FuIGJlIHRyaWNreSBhbmQgbGVhZCB0byBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgZHJpbGwgZG93biBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVzcHJlYWQgdGhlIGltcGFjdCBtaWdodCBiZSwgc28gbGV0J3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgc3ltYm9scyBsaWtlIGBjZ3JvdXBfYnBmX2F0dGFjaGAgb3IgdGhlIHN0YXRpYyB2ZXJzaW9uIGBfX2Nncm91cF9icGZfYXR0YWNoYCwgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gTGV0J3MgdGFrZSBhIGxvb2sgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgIHRvIGlkZW50aWZ5IHRoZSBjYWxsZXJzIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjA5LjE2OTk0NTc4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg0MDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NjU9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIGNncm91cF9sc21fYXR5cGVbQ0dST1VQX0xTTV9OVU1dO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjYtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo2NzpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy02OC17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTczLSNlbHNlXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3NDpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03NS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTg0PWJwZl9wcm9nX3J1bl9hcnJheV9jZyhjb25zdCBzdHJ1Y3QgY2dyb3VwX2JwZiAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg1OlxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2LVxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmN0eCwgYnBmX3Byb2dfcnVuX2ZuIHJ1bl9wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNjI9dW5zaWduZWQgaW50IF9fY2dyb3VwX2JwZl9ydW5fbHNtX2N1cnJlbnQoY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODEtI2lmZGVmIENPTkZJR19CUEZfTFNNXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxODI6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgzLWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4OS1cXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX0xTTV9DR1JPVVApXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTA6XFx0XFx0cmV0dXJuIHRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkxLVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yMjA9dm9pZCBicGZfY2dyb3VwX2F0eXBlX3B1dChpbnQgY2dyb3VwX2F0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzItI2Vsc2VcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzMzpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzQtYnBmX2Nncm91cF9hdHlwZV9maW5kKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1MzIgYXR0YWNoX2J0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM2LVxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTFNNX0NHUk9VUClcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzNzpcXHRcXHRyZXR1cm4gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZShhdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzgtXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz00MjQ9c3RhdGljIGJvb2wgaGllcmFyY2h5X2FsbG93c19hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQyNTpcXHRcXHRcXHRcXHQgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNDI2LXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NDUzPXN0YXRpYyBpbnQgY29tcHV0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQ1NDpcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy00NTUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9wcm9nX2FycmF5ICoqYXJyYXkpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTUxMT1zdGF0aWMgdm9pZCBhY3RpdmF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjUxMjpcXHRcXHRcXHRcXHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTUxMy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZ19hcnJheSAqb2xkX2FycmF5KVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz01OTE9c3RhdGljIGludCB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1OTI6XFx0XFx0XFx0XFx0ICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy01OTMte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz03NzE9c3RhdGljIGludCBpbnNlcnRfcGxfdG9faGxpc3Qoc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5MS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjc5MjogKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNS0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODE3LVxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2c7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTg6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtODE5LVxcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM0LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM1OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzNi1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0My1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQ0OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTk1MD1zdGF0aWMgaW50IGVmZmVjdGl2ZV9wcm9nX3BvcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTUxOlxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDAyPXN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDM6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAwNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwMzk9c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQyLXtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDM6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMTM5PXN0YXRpYyB2b2lkIHB1cmdlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTQwOlxcdFxcdFxcdFxcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE0MS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExODA9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE4My17XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTg0OlxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExODUtXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTI1NT1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI2MS1cXHRlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlID0gYXR0ci1cXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjYyOlxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBmcm9tX2F0eXBlLCB0b19hdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjM6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI2NC1cXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI4MS1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI4MjpcXHRcXHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODMtXFx0XFx0aWYgKGZyb21fYXR5cGUgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzcxPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzkwLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MTpcXHRyZXQgPSBjZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIE5VTEwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzkyLVxcdFxcdFxcdFxcdGF0dHItXFx1MDAzZWF0dGFjaF90eXBlLCBhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE1MjM9aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1NTI6XFx0ZXJyID0gY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgTlVMTCwgTlVMTCwgbGluayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTMtXFx0XFx0XFx0XFx0bGluay1cXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgQlBGX0ZfQUxMT1dfTVVMVEkgfCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYwNz1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MDgtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE2MDk6XFx0XFx0XFx0XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTYxMC17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2ODU9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE2ODY6XFx0XFx0XFx0ICAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2ODcte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzEzPWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zb2NrX2FkZHIoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzE1LVxcdFxcdFxcdFxcdCAgICAgIGludCAqdWFkZHJsZW4sXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzE2OlxcdFxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3MTctXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqdF9jdHgsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3Njc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NjgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc2OTpcXHRcXHRcXHRcXHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzAte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzc4PWludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3OTpcXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3ODAte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTM1PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MzctXFx0XFx0XFx0XFx0ICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE5Mzg6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjA5LjIxMjc5MDgzOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTE0NzI2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo2ODA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToxMi4zMjQyNjU1MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcbiA3OTE6XFx0LyoqXFxuIDc5MjpcXHQgKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxcbiA3OTM6XFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gZGVzY2VuZGFudHNcXG4gNzk0OlxcdCAqIEBjZ3JwOiBUaGUgY2dyb3VwIHdoaWNoIGRlc2NlbmRhbnRzIHRvIHRyYXZlcnNlXFxuIDc5NTpcXHQgKiBAcHJvZzogQSBwcm9ncmFtIHRvIGF0dGFjaFxcbiA3OTY6XFx0ICogQGxpbms6IEEgbGluayB0byBhdHRhY2hcXG4gNzk3OlxcdCAqIEByZXBsYWNlX3Byb2c6IFByZXZpb3VzbHkgYXR0YWNoZWQgcHJvZ3JhbSB0byByZXBsYWNlIGlmIEJQRl9GX1JFUExBQ0UgaXMgc2V0XFxuIDc5ODpcXHQgKiBAdHlwZTogVHlwZSBvZiBhdHRhY2ggb3BlcmF0aW9uXFxuIDc5OTpcXHQgKiBAZmxhZ3M6IE9wdGlvbiBmbGFnc1xcbiA4MDA6XFx0ICogQGlkX29yX2ZkOiBSZWxhdGl2ZSBwcm9nIGlkIG9yIGZkXFxuIDgwMTpcXHQgKiBAcmV2aXNpb246IGJwZl9wcm9nX2xpc3QgcmV2aXNpb25cXG4gODAyOlxcdCAqXFxuIDgwMzpcXHQgKiBFeGFjdGx5IG9uZSBvZiBAcHJvZyBvciBAbGluayBjYW4gYmUgbm9uLW51bGwuXFxuIDgwNDpcXHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLlxcbiA4MDU6XFx0ICovXFxuIDgwNjpcXHRzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gODA3OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxcbiA4MDg6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIDgwOTpcXHRcXHRcXHRcXHQgICAgICAgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSwgdTMyIGZsYWdzLCB1MzIgaWRfb3JfZmQsXFxuIDgxMDpcXHRcXHRcXHRcXHQgICAgICAgdTY0IHJldmlzaW9uKVxcbiA4MTE6XFx0e1xcbiA4MTI6XFx0XFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFxcdTAwMjYgKEJQRl9GX0FMTE9XX09WRVJSSURFIHwgQlBGX0ZfQUxMT1dfTVVMVEkpKTtcXG4gODEzOlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xcbiA4MTQ6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNTpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNjpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIDgxNzpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cXHUwMDNlbGluay5wcm9nO1xcbiA4MTg6XFx0XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbiA4MTk6XFx0XFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xcbiA4MjA6XFx0XFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xcbiA4MjE6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xcbiA4MjI6XFx0XFx0aW50IGVycjtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0aWYgKCgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19PVkVSUklERSkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSB8fFxcbiA4MjU6XFx0XFx0ICAgICgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQUxMT1dfTVVMVEkpKSlcXG4gODI2OlxcdFxcdFxcdC8qIGludmFsaWQgY29tYmluYXRpb24gKi9cXG4gODI3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Mjg6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IChCUEZfRl9CRUZPUkUgfCBCUEZfRl9BRlRFUikpKVxcbiA4Mjk6XFx0XFx0XFx0Lyogb25seSBlaXRoZXIgcmVwbGFjZSBvciBpbnNlcnRpb24gd2l0aCBiZWZvcmUvYWZ0ZXIgKi9cXG4gODMwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MzE6XFx0XFx0aWYgKGxpbmsgXFx1MDAyNlxcdTAwMjYgKHByb2cgfHwgcmVwbGFjZV9wcm9nKSlcXG4gODMyOlxcdFxcdFxcdC8qIG9ubHkgZWl0aGVyIGxpbmsgb3IgcHJvZy9yZXBsYWNlX3Byb2cgY2FuIGJlIHNwZWNpZmllZCAqL1xcbiA4MzM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzNDpcXHRcXHRpZiAoISFyZXBsYWNlX3Byb2cgIT0gISEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSlcXG4gODM1OlxcdFxcdFxcdC8qIHJlcGxhY2VfcHJvZyBpbXBsaWVzIEJQRl9GX1JFUExBQ0UsIGFuZCB2aWNlIHZlcnNhICovXFxuIDgzNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODM3OlxcdFxcbiA4Mzg6XFx0XFx0YXR5cGUgPSBicGZfY2dyb3VwX2F0eXBlX2ZpbmQodHlwZSwgbmV3X3Byb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zl9pZCk7XFxuIDgzOTpcXHRcXHRpZiAoYXR5cGUgXFx1MDAzYyAwKVxcbiA4NDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg0MTpcXHRcXHRpZiAocmV2aXNpb24gXFx1MDAyNlxcdTAwMjYgcmV2aXNpb24gIT0gY2dycC1cXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0pXFxuIDg0MjpcXHRcXHRcXHRyZXR1cm4gLUVTVEFMRTtcXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0cHJvZ3MgPSBcXHUwMDI2Y2dycC1cXHUwMDNlYnBmLnByb2dzW2F0eXBlXTtcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0aWYgKCFoaWVyYXJjaHlfYWxsb3dzX2F0dGFjaChjZ3JwLCBhdHlwZSkpXFxuIDg0NzpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiA4NDg6XFx0XFxuIDg0OTpcXHRcXHRpZiAoIWhsaXN0X2VtcHR5KHByb2dzKSBcXHUwMDI2XFx1MDAyNiBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdICE9IHNhdmVkX2ZsYWdzKVxcbiA4NTA6XFx0XFx0XFx0LyogRGlzYWxsb3cgYXR0YWNoaW5nIG5vbi1vdmVycmlkYWJsZSBvbiB0b3BcXG4gODUxOlxcdFxcdFxcdCAqIG9mIGV4aXN0aW5nIG92ZXJyaWRhYmxlIGluIHRoaXMgY2dyb3VwLlxcbiA4NTI6XFx0XFx0XFx0ICogRGlzYWxsb3cgYXR0YWNoaW5nIG11bHRpLXByb2cgaWYgb3ZlcnJpZGFibGUgb3Igbm9uZVxcbiA4NTM6XFx0XFx0XFx0ICovXFxuIDg1NDpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiA4NTU6XFx0XFxuIDg1NjpcXHRcXHRpZiAocHJvZ19saXN0X2xlbmd0aChwcm9ncywgTlVMTCkgXFx1MDAzZT0gQlBGX0NHUk9VUF9NQVhfUFJPR1MpXFxuIDg1NzpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRwbCA9IGZpbmRfYXR0YWNoX2VudHJ5KHByb2dzLCBwcm9nLCBsaW5rLCByZXBsYWNlX3Byb2csXFxuIDg2MDpcXHRcXHRcXHRcXHQgICAgICAgZmxhZ3MgXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSk7XFxuIDg2MTpcXHRcXHRpZiAoSVNfRVJSKHBsKSlcXG4gODYyOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBsKTtcXG4gODYzOlxcdFxcbiA4NjQ6XFx0XFx0aWYgKGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RvcmFnZSwgbmV3X3N0b3JhZ2UsIHR5cGUsXFxuIDg2NTpcXHRcXHRcXHRcXHRcXHQgICAgICBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2csIGNncnApKVxcbiA4NjY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg2NzpcXHRcXG4gODY4OlxcdFxcdGlmIChwbCkge1xcbiA4Njk6XFx0XFx0XFx0b2xkX3Byb2cgPSBwbC1cXHUwMDNlcHJvZztcXG4gODcwOlxcdFxcdFxcdG9sZF9wbF9mbGFncyA9IHBsLVxcdTAwM2VmbGFncztcXG4gODcxOlxcdFxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC1cXHUwMDNlc3RvcmFnZSk7XFxuIDg3MjpcXHRcXHR9IGVsc2Uge1xcbiA4NzM6XFx0XFx0XFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xcbiA4NzQ6XFx0XFx0XFx0aWYgKCFwbCkge1xcbiA4NzU6XFx0XFx0XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4gODc2OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4Nzc6XFx0XFx0XFx0fVxcbiA4Nzg6XFx0XFxuIDg3OTpcXHRcXHRcXHRlcnIgPSBpbnNlcnRfcGxfdG9faGxpc3QocGwsIHByb2dzLCBwcm9nLCBsaW5rLCBmbGFncywgaWRfb3JfZmQpO1xcbiA4ODA6XFx0XFx0XFx0aWYgKGVycikge1xcbiA4ODE6XFx0XFx0XFx0XFx0a2ZyZWUocGwpO1xcbiA4ODI6XFx0XFx0XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4gODgzOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDg4NDpcXHRcXHRcXHR9XFxuIDg4NTpcXHRcXHR9XFxuIDg4NjpcXHRcXG4gODg3OlxcdFxcdHBsLVxcdTAwM2Vwcm9nID0gcHJvZztcXG4gODg4OlxcdFxcdHBsLVxcdTAwM2VsaW5rID0gbGluaztcXG4gODg5OlxcdFxcdHBsLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToxMi4zMjQ0MTgwNTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ4MjYzNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6ODU5NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToxNS41NzI2ODQyMDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5MDpcXHRcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XFxuIDg5MTpcXHRcXHRvbGRfZmxhZ3MgPSBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdO1xcbiA4OTI6XFx0XFx0Y2dycC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xcbiA4OTM6XFx0XFxuIDg5NDpcXHRcXHRpZiAodHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkge1xcbiA4OTU6XFx0XFx0XFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZywgYXR5cGUsIHR5cGUpO1xcbiA4OTY6XFx0XFx0XFx0aWYgKGVycilcXG4gODk3OlxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gODk4OlxcdFxcdH1cXG4gODk5OlxcdFxcbiA5MDA6XFx0XFx0ZXJyID0gdXBkYXRlX2VmZmVjdGl2ZV9wcm9ncyhjZ3JwLCBhdHlwZSk7XFxuIDkwMTpcXHRcXHRpZiAoZXJyKVxcbiA5MDI6XFx0XFx0XFx0Z290byBjbGVhbnVwX3RyYW1wb2xpbmU7XFxuIDkwMzpcXHRcXG4gOTA0OlxcdFxcdGNncnAtXFx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XFxuIDkwNTpcXHRcXHRpZiAob2xkX3Byb2cpIHtcXG4gOTA2OlxcdFxcdFxcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKVxcbiA5MDc6XFx0XFx0XFx0XFx0YnBmX3RyYW1wb2xpbmVfdW5saW5rX2Nncm91cF9zaGltKG9sZF9wcm9nKTtcXG4gOTA4OlxcdFxcdFxcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XFxuIDkwOTpcXHRcXHR9IGVsc2Uge1xcbiA5MTA6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9pbmMoXFx1MDAyNmNncm91cF9icGZfZW5hYmxlZF9rZXlbYXR5cGVdKTtcXG4gOTExOlxcdFxcdH1cXG4gOTEyOlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfbGluayhuZXdfc3RvcmFnZSwgY2dycCwgdHlwZSk7XFxuIDkxMzpcXHRcXHRyZXR1cm4gMDtcXG4gOTE0OlxcdFxcbiA5MTU6XFx0Y2xlYW51cF90cmFtcG9saW5lOlxcbiA5MTY6XFx0XFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApXFxuIDkxNzpcXHRcXHRcXHRicGZfdHJhbXBvbGluZV91bmxpbmtfY2dyb3VwX3NoaW0obmV3X3Byb2cpO1xcbiA5MTg6XFx0XFxuIDkxOTpcXHRjbGVhbnVwOlxcbiA5MjA6XFx0XFx0aWYgKG9sZF9wcm9nKSB7XFxuIDkyMTpcXHRcXHRcXHRwbC1cXHUwMDNlcHJvZyA9IG9sZF9wcm9nO1xcbiA5MjI6XFx0XFx0XFx0cGwtXFx1MDAzZWxpbmsgPSBOVUxMO1xcbiA5MjM6XFx0XFx0XFx0cGwtXFx1MDAzZWZsYWdzID0gb2xkX3BsX2ZsYWdzO1xcbiA5MjQ6XFx0XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcXG4gOTI1OlxcdFxcdH1cXG4gOTI2OlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XFxuIDkyNzpcXHRcXHRpZiAoIW9sZF9wcm9nKSB7XFxuIDkyODpcXHRcXHRcXHRobGlzdF9kZWwoXFx1MDAyNnBsLVxcdTAwM2Vub2RlKTtcXG4gOTI5OlxcdFxcdFxcdGtmcmVlKHBsKTtcXG4gOTMwOlxcdFxcdH1cXG4gOTMxOlxcdFxcdGNncnAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XFxuIDkzMjpcXHRcXHRyZXR1cm4gZXJyO1xcbiA5MzM6XFx0fVxcbiA5MzQ6XFx0XFxuIDkzNTpcXHRzdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuIDkzNjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuIDkzNzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuIDkzODpcXHRcXHRcXHRcXHQgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUsXFxuIDkzOTpcXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncywgdTMyIGlkX29yX2ZkLCB1NjQgcmV2aXNpb24pXFxuIDk0MDpcXHR7XFxuIDk0MTpcXHRcXHRpbnQgcmV0O1xcbiA5NDI6XFx0XFxuIDk0MzpcXHRcXHRjZ3JvdXBfbG9jaygpO1xcbiA5NDQ6XFx0XFx0cmV0ID0gX19jZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIGxpbmssIHR5cGUsIGZsYWdzLFxcbiA5NDU6XFx0XFx0XFx0XFx0XFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xcbiA5NDY6XFx0XFx0Y2dyb3VwX3VubG9jaygpO1xcbiA5NDc6XFx0XFx0cmV0dXJuIHJldDtcXG4gOTQ4OlxcdH1cXG4gOTQ5OlxcdFxcbiA5NTA6XFx0c3RhdGljIGludCBlZmZlY3RpdmVfcHJvZ19wb3Moc3RydWN0IGNncm91cCAqY2dycCxcXG4gOTUxOlxcdFxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG4gOTUyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19saXN0ICp0YXJnZXRfcGwpXFxuIDk1MzpcXHR7XFxuIDk1NDpcXHRcXHRpbnQgY250ID0gMCwgcHJlb3JkZXJfY250ID0gMCwgZnN0YXJ0LCBic3RhcnQsIGluaXRfYnN0YXJ0LCBwb3MgPSAtMTtcXG4gOTU1OlxcdFxcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcXG4gOTU2OlxcdFxcdHN0cnVjdCBjZ3JvdXAgKnAgPSBjZ3JwO1xcbiA5NTc6XFx0XFxuIDk1ODpcXHRcXHQvKiBjb3VudCBlZmZlY3RpdmUgcHJvZ3JhbXMgdG8gZmluZCB3aGVyZSB0aGUgcHJlb3JkZXIgcmVnaW9uIGVuZHMgKi9cXG4gOTU5OlxcdFxcdGRvIHtcXG4gOTYwOlxcdFxcdFxcdGlmIChjbnQgPT0gMCB8fCAocC1cXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSBcXHUwMDI2IEJQRl9GX0FMTE9XX01VTFRJKSlcXG4gOTYxOlxcdFxcdFxcdFxcdGNudCArPSBwcm9nX2xpc3RfbGVuZ3RoKFxcdTAwMjZwLVxcdTAwM2VicGYucHJvZ3NbYXR5cGVdLCBcXHUwMDI2cHJlb3JkZXJfY250KTtcXG4gOTYyOlxcdFxcdFxcdHAgPSBjZ3JvdXBfcGFyZW50KHApO1xcbiA5NjM6XFx0XFx0fSB3aGlsZSAocCk7XFxuIDk2NDpcXHRcXG4gOTY1OlxcdFxcdC8qIHJlcGxheSBjb21wdXRlX2VmZmVjdGl2ZV9wcm9ncygpIHBsYWNlbWVudCBhbmQgcmVjb3JkIHRhcmdldCdzIHNsb3QgKi9cXG4gOTY2OlxcdFxcdGNudCA9IDA7XFxuIDk2NzpcXHRcXHRwID0gY2dycDtcXG4gOTY4OlxcdFxcdGZzdGFydCA9IHByZW9yZGVyX2NudDtcXG4gOTY5OlxcdFxcdGJzdGFydCA9IHByZW9yZGVyX2NudCAtIDE7XFxuIDk3MDpcXHRcXHRkbyB7XFxuIDk3MTpcXHRcXHRcXHRpZiAoY250IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAhKHAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gXFx1MDAyNiBCUEZfRl9BTExPV19NVUxUSSkpXFxuIDk3MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0XFx0aW5pdF9ic3RhcnQgPSBic3RhcnQ7XFxuIDk3NTpcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShwbCwgXFx1MDAyNnAtXFx1MDAzZWJwZi5wcm9nc1thdHlwZV0sIG5vZGUpIHtcXG4gOTc2OlxcdFxcdFxcdFxcdGlmICghcHJvZ19saXN0X3Byb2cocGwpKVxcbiA5Nzc6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDk3ODpcXHRcXG4gOTc5OlxcdFxcdFxcdFxcdGlmIChwbC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfRl9QUkVPUkRFUikge1xcbiA5ODA6XFx0XFx0XFx0XFx0XFx0aWYgKHBsID09IHRhcmdldF9wbClcXG4gOTgxOlxcdFxcdFxcdFxcdFxcdFxcdHBvcyA9IGJzdGFydDtcXG4gOTgyOlxcdFxcdFxcdFxcdFxcdGJzdGFydC0tO1xcbiA5ODM6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gOTg0OlxcdFxcdFxcdFxcdFxcdGlmIChwbCA9PSB0YXJnZXRfcGwpXFxuIDk4NTpcXHRcXHRcXHRcXHRcXHRcXHRwb3MgPSBmc3RhcnQ7XFxuIDk4NjpcXHRcXHRcXHRcXHRcXHRmc3RhcnQrKztcXG4gOTg3OlxcdFxcdFxcdFxcdH1cXG4gOTg4OlxcdFxcdFxcdFxcdGNudCsrO1xcbiA5ODk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToxNS41NzI4NzI4MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0ODkwNTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQlBGIEF0dGFjaG1lbnQgUG9pbnRzIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIEJQRiBhbmQgY2dyb3VwcyBpcyBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEJQRiBwcm9ncmFtcyBhcmUgYXR0YWNoZWQgdG8gY2dyb3VwcywgYW5kIHdoaWNoIGZ1bmN0aW9ucyBoYW5kbGUgdGhhdCBwcm9jZXNzLiBMZXQgbWUgY2hlY2s6IGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSBuYW1lZCBoZXJlLiBUaG9zZSBhcmUgbGlrZWx5IHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIGF0dGFjaG1lbnQgbG9naWMuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGRpdmUgaW50byB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCB0aGV5IGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDE6MTkuMDIxNzgxMDg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTcwNDEyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTM2MD1zdGF0aWMgaW50IGNncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzNzAtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMzcxOmludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM3Mi1cXHRcXHRcXHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjY5LVxcdGlmIChpc19jZ3JvdXBfcHJvZ190eXBlKHB0eXBlLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjcwOlxcdFxcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2NzEtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjE5LjA2MzQ4OTA0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQyNzYzNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgQlBGIGNvZGU6XG5cbioqRGl2aW5nIGludG8gQlBGIEF0dGFjaG1lbnQgUG9pbnRzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGF0dGFjaG1lbnQgcG9pbnRzIGZvciBCUEYgcHJvZ3JhbXMsIGZvY3VzaW5nIG9uIGNncm91cCBpbnRlZ3JhdGlvbi4gSSdtIHNlZWluZyB0aGF0IHRoZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfYXR0YWNoYCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhhdCBtYWtlcyBzZW5zZSwgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIHN5c3RlbSBjYWxsIGhhbmRsaW5nIGhhcHBlbnMuIFNpbWlsYXJseSwgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGlzIHRyaWdnZXJlZCBieSBgYnBmX2xpbmtfY3JlYXRlYCB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gSXQncyBmb2xsb3dpbmcgdGhlIHR5cGljYWwgcGF0dGVybiAtIHN5c2NhbGwgZW50cnkgcG9pbnQsIHRoZW4gZnVuY3Rpb24gY2FsbCBmb3IgZG9pbmcgYWN0dWFsIHdvcmsuIEdpdmVuIHRoaXMgbGF5b3V0LCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgc2VlbXMgbW9yZSBpbnRlcmVzdGluZyByaWdodCBub3cgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToyMy4yMDYyNTUwMTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDYwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9icGZfbGlua19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0xNTA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTIyLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMzppbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyNC17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3MS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg3MjpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NzMtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODkyLVxcdFxcdGVsc2UgaWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9MU01fQ0dST1VQKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTM6XFx0XFx0XFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVxcdFxcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNjowMToyMy4yNDkzMTk1MDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxNDc1MzI1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBfX2Nncm91cF9icGZfYXR0YWNoYCB3aXRoaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgYnVnIGZpeCBmb2N1c2VkIG9uIHJlc3RvcmluZyBzdGF0ZSBkdXJpbmcgZXJyb3IgaGFuZGxpbmcuICBFc3NlbnRpYWxseSwgdGhlIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGF0dGFjaCBhIEJQRiBwcm9ncmFtIHRvIGEgY2dyb3VwLCBhbmQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIGl0IG5lZWRzIHRvIHVuZG8gdGhlIGNoYW5nZXMgaXQgc3RhcnRlZCBtYWtpbmcuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBhYm91dCBlbnN1cmluZyBhIGNsZWFuIHJvbGxiYWNrLiBTcGVjaWZpY2FsbHksIGluIHRoZSBlcnJvciBwYXRoIChpbmRpY2F0ZWQgYnkgdGhlIGBjbGVhbnVwOmAgbGFiZWwpLCB0aGUgY29kZSBub3cgcmVzdG9yZXMgYGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXWAgdG8gaXRzIG9yaWdpbmFsIHZhbHVlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgbWFpbnRhaW5pbmcgY29uc2lzdGVuY3kgaW4gdGhlIGNncm91cCdzIEJQRiBzdGF0ZS4gIEl0IGFsc28gcmVzZXRzIGBwbC1cdTAwM2VmbGFnc2AgdG8gYG9sZF9wbF9mbGFnc2AgYW5kIGBwbC1cdTAwM2VzdG9yYWdlYCB0byBgb2xkX3N0b3JhZ2VgLCBpZiBhbiBgb2xkX3Byb2dgIGV4aXN0ZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGxlYWthZ2Ugb2YgcGFydGlhbGx5LWFwcGxpZWQgY29uZmlndXJhdGlvbnMgYW5kIGNvcnJ1cHRpb24uIFRoZSBkaWZmIGNsZWFybHkgc2hvd3MgdGhlIGFkZGl0aW9uIG9mIGBvbGRfZmxhZ3NgLCBgb2xkX3BsX2ZsYWdzYCBhbmQgYG9sZF9zdG9yYWdlYCB2YXJpYWJsZXMsIHdoaWNoIGhvbGQgdGhlIG9yaWdpbmFsIHZhbHVlcyBiZWZvcmUgbW9kaWZpY2F0aW9uLCBhbmQgYXJlIHJlc3RvcmVkIGxhdGVyIGluIHRoZSBlcnJvciBwYXRocy5cblxuVGhlIGZpeCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBtaXNzaW5nIHN0YXRlIHJlc3RvcmF0aW9uIGluIHRoZSBlcnJvciBwYXRoIGNvdWxkIGxlYWQgdG8gZGlmZmljdWx0LXRvLWRlYnVnIGlzc3VlcyBpZiBzb21lIHBhcnRpYWwgY29uZmlndXJhdGlvbiBnb3Qgc2F2ZWQsIG9yIHN0YXRlIGhhZCBjaGFuZ2VkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBgdXBkYXRlX2VmZmVjdGl2ZV9wcm9nc2Agb3IgYGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW1gIGFyZSB0aGUgdHdvIG1haW4gY3VscHJpdHMgdGhhdCBjb3VsZCB0cmlnZ2VyIHRoZSBlcnJvciBoYW5kbGluZy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZCB3aGVuIHBsYW5uaW5nIHRlc3RzLlxuXG5Ob3csIGFzIGZhciBhcyB0ZXN0aW5nIGdvZXMsIHRoZSBlbnRyeSBwb2ludHMgYXJlIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLCB3aGljaCBhcmUgcmVhY2hlZCBmcm9tIHRoZSBCUEYgc3lzY2FsbHMgKGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgKS4gIFRoZXNlIGFyZSBteSB0YXJnZXRzIGZvciBmdXp6aW5nIHRvIHZlcmlmeSB0aGUgZml4LiBJJ2xsIGRlZmluaXRlbHkgd2FudCB0byBjcmFmdCBmdXp6IGlucHV0cyB0aGF0IHRyaWdnZXIgdGhlc2UgZmFpbHVyZSBwYXRocy5cblxuT2J2aW91c2x5LCBgQ09ORklHX0NHUk9VUF9CUEZgIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgdG8gYmUgcmVsZXZhbnQuIEknbGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSwgYW5kIEkgd2lsbCBiZSBsb29raW5nIGZvciBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBCUEYgZmVhdHVyZXMsIGFuZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgYWZmZWN0ZWQgY2dyb3VwIHN0cnVjdHVyZXMuXG5UaGlzIGZpeCBsb29rcyBmdW5jdGlvbmFsIGFuZCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6IHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjI2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjM1LjM5Njg1NDY5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxOTMwNjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEzNDE9Y29uZmlnIENHUk9VUF9QRVJGXFxuLS1cXG5pbml0L0tjb25maWctMTM1MS1cXG5pbml0L0tjb25maWc6MTM1Mjpjb25maWcgQ0dST1VQX0JQRlxcbmluaXQvS2NvbmZpZy0xMzUzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDE6MzcuMTE2MTY3NjEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDgxNjM3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTg1MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTY6MDE6NDAuNTI0MzM0MzM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0MDpcXHRcXG4xMzQxOlxcdGNvbmZpZyBDR1JPVVBfUEVSRlxcbjEzNDI6XFx0XFx0Ym9vbCBcXFwiUGVyZiBjb250cm9sbGVyXFxcIlxcbjEzNDM6XFx0XFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UU1xcbjEzNDQ6XFx0XFx0aGVscFxcbjEzNDU6XFx0XFx0ICBUaGlzIG9wdGlvbiBleHRlbmRzIHRoZSBwZXJmIHBlci1jcHUgbW9kZSB0byByZXN0cmljdCBtb25pdG9yaW5nXFxuMTM0NjpcXHRcXHQgIHRvIHRocmVhZHMgd2hpY2ggYmVsb25nIHRvIHRoZSBjZ3JvdXAgc3BlY2lmaWVkIGFuZCBydW4gb24gdGhlXFxuMTM0NzpcXHRcXHQgIGRlc2lnbmF0ZWQgY3B1LiAgT3IgdGhpcyBjYW4gYmUgdXNlZCB0byBoYXZlIGNncm91cCBJRCBpbiBzYW1wbGVzXFxuMTM0ODpcXHRcXHQgIHNvIHRoYXQgaXQgY2FuIG1vbml0b3IgcGVyZm9ybWFuY2UgZXZlbnRzIGFtb25nIGNncm91cHMuXFxuMTM0OTpcXHRcXG4xMzUwOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEzNTE6XFx0XFxuMTM1MjpcXHRjb25maWcgQ0dST1VQX0JQRlxcbjEzNTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcbjEzNTQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbjEzNTU6XFx0XFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcXG4xMzU2OlxcdFxcdGhlbHBcXG4xMzU3OlxcdFxcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxcbjEzNTg6XFx0XFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxcbjEzNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjQwLjUyNDQ5MjA0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk1MDU4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTIxODMsIk91dHB1dFRva2VucyI6MjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE2OjAxOjQ2LjkxOTU1MjMxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzM0MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBvciBsaW5rcyB0byBjZ3JvdXBzLiBUaGUgY2hhbmdlIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gcmVzdG9yaW5nIGBwbC1cXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXFx1MDAzZXN0b3JhZ2VgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXR0YWNobWVudCBwcm9jZXNzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgdmlhIGBicGYoMilgIHN5c2NhbGwgKHNwZWNpZmljYWxseSBgQlBGX1BST0dfQVRUQUNIYCBhbmQgYEJQRl9MSU5LX0NSRUFURWAgY29tbWFuZHMpLiBUaGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0NHUk9VUF9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgLCB3aGljaCBpcyB0aGUgY29yZSBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBvciBsaW5rcyB0byBjZ3JvdXBzLiBUaGUgY2hhbmdlIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gcmVzdG9yaW5nIGBwbC1cXHUwMDNlZmxhZ3NgIGFuZCBgcGwtXFx1MDAzZXN0b3JhZ2VgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXR0YWNobWVudCBwcm9jZXNzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSByZWFjaGFibGUgdmlhIGBicGYoMilgIHN5c2NhbGwgKHNwZWNpZmljYWxseSBgQlBGX1BST0dfQVRUQUNIYCBhbmQgYEJQRl9MSU5LX0NSRUFURWAgY29tbWFuZHMpLiBUaGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX0NHUk9VUF9CUEZgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowz294c[1] Phase: Succeeded StartedAt: 2026-07-30 16:02:14 +0000 UTC FinishedAt: 2026-07-30 16:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 16:02:15 +0000 UTC FinishedAt: 2026-07-30 16:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2] Phase: Succeeded StartedAt: 2026-07-30 16:02:15 +0000 UTC FinishedAt: 2026-07-30 19:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 16:02:16 +0000 UTC FinishedAt: 2026-07-30 19:46:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 16:02:16 +0000 UTC FinishedAt: 2026-07-30 16:02:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 16:02:16 +0000 UTC FinishedAt: 2026-07-30 16:02:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowz294c/series-workflowz294c-convert-artifact-3756598284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 16:02:31 +0000 UTC FinishedAt: 2026-07-30 16:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 16:02:31 +0000 UTC FinishedAt: 2026-07-30 16:25:09 +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:*a6198353-75dc-43c8-a733-2c0d674e354d,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-workflowz294c/series-workflowz294c-convert-artifact-3756598284/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": "d56b3d09-016a-487e-92ec-dad8c204bb33", "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-workflowz294c/series-workflowz294c-build-action-4136102458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 16:02:31 +0000 UTC FinishedAt: 2026-07-30 16:25:00 +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:*a6198353-75dc-43c8-a733-2c0d674e354d,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-workflowz294c/series-workflowz294c-convert-artifact-3756598284/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": "d56b3d09-016a-487e-92ec-dad8c204bb33", "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-workflowz294c/series-workflowz294c-build-action-4136102458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 16:25:09 +0000 UTC FinishedAt: 2026-07-30 16:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 16:25:09 +0000 UTC FinishedAt: 2026-07-30 16:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 16:25:09 +0000 UTC FinishedAt: 2026-07-30 16:25:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 16:25:09 +0000 UTC FinishedAt: 2026-07-30 16:25:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowz294c/series-workflowz294c-convert-artifact-3215680331/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 16:25:19 +0000 UTC FinishedAt: 2026-07-30 16:27:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 16:25:19 +0000 UTC FinishedAt: 2026-07-30 16:27:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d56b3d09-016a-487e-92ec-dad8c204bb33,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-workflowz294c/series-workflowz294c-build-action-4136102458/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-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 16:27:13 +0000 UTC FinishedAt: 2026-07-30 16:27:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 16:27:13 +0000 UTC FinishedAt: 2026-07-30 16:27:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 16:27:13 +0000 UTC FinishedAt: 2026-07-30 16:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 16:27:13 +0000 UTC FinishedAt: 2026-07-30 16:43:52 +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:*a6198353-75dc-43c8-a733-2c0d674e354d,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-workflowz294c/series-workflowz294c-convert-artifact-3215680331/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": "deaee756-c0bc-41bd-8c80-edb8bbd84f1e", "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-workflowz294c/series-workflowz294c-build-action-1797883887/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 16:27:13 +0000 UTC FinishedAt: 2026-07-30 16:43:41 +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:*a6198353-75dc-43c8-a733-2c0d674e354d,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-workflowz294c/series-workflowz294c-convert-artifact-3215680331/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": "deaee756-c0bc-41bd-8c80-edb8bbd84f1e", "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-workflowz294c/series-workflowz294c-build-action-1797883887/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 16:43:52 +0000 UTC FinishedAt: 2026-07-30 16:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 16:43:52 +0000 UTC FinishedAt: 2026-07-30 16:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 16:43:52 +0000 UTC FinishedAt: 2026-07-30 16:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 16:43:52 +0000 UTC FinishedAt: 2026-07-30 16:45:27 +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:*deaee756-c0bc-41bd-8c80-edb8bbd84f1e,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-workflowz294c/series-workflowz294c-build-action-1797883887/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-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 16:45:37 +0000 UTC FinishedAt: 2026-07-30 19:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 16:45:37 +0000 UTC FinishedAt: 2026-07-30 19:46:57 +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"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"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:*d56b3d09-016a-487e-92ec-dad8c204bb33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*deaee756-c0bc-41bd-8c80-edb8bbd84f1e,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-workflowz294c/series-workflowz294c-build-action-4136102458/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-workflowz294c/series-workflowz294c-build-action-1797883887/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 16:45:37 +0000 UTC FinishedAt: 2026-07-30 16:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 16:45:37 +0000 UTC FinishedAt: 2026-07-30 16:45:44 +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"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"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-workflowz294c/series-workflowz294c-convert-artifact-2693829604/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 16:45:37 +0000 UTC FinishedAt: 2026-07-30 16:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 16:45:37 +0000 UTC FinishedAt: 2026-07-30 16:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 16:45:37 +0000 UTC FinishedAt: 2026-07-30 16:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 16:45:48 +0000 UTC FinishedAt: 2026-07-30 19:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz294c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"b7910da8-a2d5-4bca-9c3d-a1528bf93320","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 16:45:48 +0000 UTC FinishedAt: 2026-07-30 19:46:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d56b3d09-016a-487e-92ec-dad8c204bb33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*deaee756-c0bc-41bd-8c80-edb8bbd84f1e,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-workflowz294c/series-workflowz294c-build-action-4136102458/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-workflowz294c/series-workflowz294c-build-action-1797883887/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-workflowz294c/series-workflowz294c-convert-artifact-2693829604/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,}