Name: series-workflowks5mp Phase: Succeeded StartedAt: 2026-07-22 20:06:36 +0000 UTC FinishedAt: 2026-07-23 01:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[0] Phase: Succeeded StartedAt: 2026-07-22 20:06:36 +0000 UTC FinishedAt: 2026-07-22 20:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 20:06:36 +0000 UTC FinishedAt: 2026-07-22 20:31:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cd170f051dba9ac146fabcd1b91726487c0cb9fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cd170f051dba9ac146fabcd1b91726487c0cb9fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "0fb5e247-10dc-4dcd-ba1b-de55c10bcf62" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib6_check_nh_list", "nh_rt_cache_flush", "__nexthop_replace_notify" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X2NoZWNrX25oX2xpc3QmIzM0OywKICAgICYjMzQ7bmhfcnRfY2FjaGVfZmx1c2gmIzM0OywKICAgICYjMzQ7X19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAgaW4gSVB2NiBuZXh0aG9wIHJlcGxhY2VtZW50IGFuZCBjYWNoZSBmbHVzaGluZyBwYXRocy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgUlRNX05FV05FWFRIT1Agd2l0aCB0aGUgTkxNX0ZfUkVQTEFDRSBmbGFnLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NTA4YTI3YjE3ZGQxZDI3NWQ4ZTRhMTIwNzMxZTgwNDE1ZjI5OGYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMjA6MzA6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5pbmRleCA2MjA1YmQ1N2FhODUyMC4uMWU5Y2NhYzZiZjBmMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXh0aG9wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25leHRob3AuY1xuQEAgLTE1OTcsMTQgJiM0MzsxNTk3LDIxIEBAIHN0YXRpYyBpbnQgZmliNl9jaGVja19uaF9saXN0KHN0cnVjdCBuZXh0aG9wICpvbGQsIHN0cnVjdCBuZXh0aG9wICpuZXcsXG4gXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmY2aTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9sZC1cdTAwM2VmNmlfbGlzdCkpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZvbGQtXHUwMDNlbG9jayk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGY2aSwgXHUwMDI2b2xkLVx1MDAzZWY2aV9saXN0LCBuaF9saXN0KSB7XG4tXHRcdGlmIChjaGVja19zcmNfYWRkcihcdTAwMjZmNmktXHUwMDNlZmliNl9zcmMuYWRkciwgZXh0YWNrKSBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGVyciA9IGNoZWNrX3NyY19hZGRyKFx1MDAyNmY2aS1cdTAwM2VmaWI2X3NyYy5hZGRyLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2b2xkLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcbiBcdHJldHVybiBmaWI2X2NoZWNrX25leHRob3AobmV3LCBOVUxMLCBleHRhY2spO1xuIH1cbkBAIC0yMjMzLDE4ICYjNDM7MjI0MCwxOCBAQCBzdGF0aWMgdm9pZCByZW1vdmVfb25lX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4gc3RhdGljIHZvaWQgbmhfcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4gXHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKnJlcGxhY2VkX25oKVxuIHtcbi1cdHN0cnVjdCBmaWI2X2luZm8gKmY2aTtcbiBcdHN0cnVjdCBuaF9ncm91cCAqbmhnO1xuJiM0MztcdGJvb2wgaGF2ZV9mNmk7XG4gXHRpbnQgaTtcbiBcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZuaC1cdTAwM2VmaV9saXN0KSlcbiBcdFx0cnRfY2FjaGVfZmx1c2gobmV0KTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcdTAwMjZuaC1cdTAwM2VmNmlfbGlzdCwgbmhfbGlzdCkge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2ZjZpLVx1MDAzZWZpYjZfdGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0XHRmaWI2X3VwZGF0ZV9zZXJudW1fdXB0b19yb290KG5ldCwgZjZpKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZjZpLVx1MDAzZWZpYjZfdGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0fVxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuaC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRoYXZlX2Y2aSA9ICFsaXN0X2VtcHR5KFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0KTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuaC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGF2ZV9mNmkpXG4mIzQzO1x0XHRydF9nZW5pZF9idW1wX2lwdjYobmV0KTtcbiBcbiBcdC8qIGlmIGFuIElQdjYgZ3JvdXAgd2FzIHJlcGxhY2VkLCB3ZSBoYXZlIHRvIHJlbGVhc2UgYWxsIG9sZFxuIFx0ICogZHN0cyB0byBtYWtlIHN1cmUgYWxsIHJlZmNvdW50cyBhcmUgcmVsZWFzZWRcbkBAIC0yNTM4LDggJiM0MzsyNTQ1LDEwIEBAIHN0YXRpYyB2b2lkIF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbiBcdFx0XHRmaS1cdTAwM2VuaF91cGRhdGVkID0gZmFsc2U7XG4gXHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5oLVx1MDAzZWxvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmNmksIFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0LCBuaF9saXN0KVxuIFx0XHRmaWI2X3J0X3VwZGF0ZShuZXQsIGY2aSwgaW5mbyk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmgtXHUwMDNlbG9jayk7XG4gfVxuIFxuIC8qIHNlbmQgUlRNX05FV1JPVVRFIHdpdGggUkVQTEFDRSBmbGFnIHNldCBmb3IgYWxsIEZJQiBlbnRyaWVzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X2NoZWNrX25oX2xpc3QmIzM0OywKICAgICYjMzQ7bmhfcnRfY2FjaGVfZmx1c2gmIzM0OywKICAgICYjMzQ7X19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAgaW4gSVB2NiBuZXh0aG9wIHJlcGxhY2VtZW50IGFuZCBjYWNoZSBmbHVzaGluZyBwYXRocy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgUlRNX05FV05FWFRIT1Agd2l0aCB0aGUgTkxNX0ZfUkVQTEFDRSBmbGFnLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1MDhhMjdiMTdkZDFkMjc1ZDhlNGExMjA3MzFlODA0MTVmMjk4ZjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAyMDozMDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25leHRob3AuYyBiL25ldC9pcHY0L25leHRob3AuYwppbmRleCA2MjA1YmQ1N2FhODUyMC4uMWU5Y2NhYzZiZjBmMTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25leHRob3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXh0aG9wLmMKQEAgLTE1OTcsMTQgJiM0MzsxNTk3LDIxIEBAIHN0YXRpYyBpbnQgZmliNl9jaGVja19uaF9saXN0KHN0cnVjdCBuZXh0aG9wICpvbGQsIHN0cnVjdCBuZXh0aG9wICpuZXcsCiAJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGZpYjZfaW5mbyAqZjZpOwomIzQzOwlpbnQgZXJyID0gMDsKIAogCWlmIChsaXN0X2VtcHR5KCZhbXA7b2xkLSZndDtmNmlfbGlzdCkpCiAJCXJldHVybiAwOwogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO29sZC0mZ3Q7bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmNmksICZhbXA7b2xkLSZndDtmNmlfbGlzdCwgbmhfbGlzdCkgewotCQlpZiAoY2hlY2tfc3JjX2FkZHIoJmFtcDtmNmktJmd0O2ZpYjZfc3JjLmFkZHIsIGV4dGFjaykgJmx0OyAwKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQllcnIgPSBjaGVja19zcmNfYWRkcigmYW1wO2Y2aS0mZ3Q7ZmliNl9zcmMuYWRkciwgZXh0YWNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJYnJlYWs7CiAJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO29sZC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCiAJcmV0dXJuIGZpYjZfY2hlY2tfbmV4dGhvcChuZXcsIE5VTEwsIGV4dGFjayk7CiB9CkBAIC0yMjMzLDE4ICYjNDM7MjI0MCwxOCBAQCBzdGF0aWMgdm9pZCByZW1vdmVfb25lX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsCiBzdGF0aWMgdm9pZCBuaF9ydF9jYWNoZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCwKIAkJCSAgICAgIHN0cnVjdCBuZXh0aG9wICpyZXBsYWNlZF9uaCkKIHsKLQlzdHJ1Y3QgZmliNl9pbmZvICpmNmk7CiAJc3RydWN0IG5oX2dyb3VwICpuaGc7CiYjNDM7CWJvb2wgaGF2ZV9mNmk7CiAJaW50IGk7CiAKIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDtuaC0mZ3Q7ZmlfbGlzdCkpCiAJCXJ0X2NhY2hlX2ZsdXNoKG5ldCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGY2aSwgJmFtcDtuaC0mZ3Q7ZjZpX2xpc3QsIG5oX2xpc3QpIHsKLQkJc3Bpbl9sb2NrX2JoKCZhbXA7ZjZpLSZndDtmaWI2X3RhYmxlLSZndDt0YjZfbG9jayk7Ci0JCWZpYjZfdXBkYXRlX3Nlcm51bV91cHRvX3Jvb3QobmV0LCBmNmkpOwotCQlzcGluX3VubG9ja19iaCgmYW1wO2Y2aS0mZ3Q7ZmliNl90YWJsZS0mZ3Q7dGI2X2xvY2spOwotCX0KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmgtJmd0O2xvY2spOwomIzQzOwloYXZlX2Y2aSA9ICFsaXN0X2VtcHR5KCZhbXA7bmgtJmd0O2Y2aV9saXN0KTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuaC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChoYXZlX2Y2aSkKJiM0MzsJCXJ0X2dlbmlkX2J1bXBfaXB2NihuZXQpOwogCiAJLyogaWYgYW4gSVB2NiBncm91cCB3YXMgcmVwbGFjZWQsIHdlIGhhdmUgdG8gcmVsZWFzZSBhbGwgb2xkCiAJICogZHN0cyB0byBtYWtlIHN1cmUgYWxsIHJlZmNvdW50cyBhcmUgcmVsZWFzZWQKQEAgLTI1MzgsOCAmIzQzOzI1NDUsMTAgQEAgc3RhdGljIHZvaWQgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLAogCQkJZmktJmd0O25oX3VwZGF0ZWQgPSBmYWxzZTsKIAl9CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmgtJmd0O2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCAmYW1wO25oLSZndDtmNmlfbGlzdCwgbmhfbGlzdCkKIAkJZmliNl9ydF91cGRhdGUobmV0LCBmNmksIGluZm8pOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25oLSZndDtsb2NrKTsKIH0KIAogLyogc2VuZCBSVE1fTkVXUk9VVEUgd2l0aCBSRVBMQUNFIGZsYWcgc2V0IGZvciBhbGwgRklCIGVudHJpZXMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBuZXQvaXB2NC9uZXh0aG9wLmMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvaXB2NC9uZXh0aG9wLmNgLiBJdCBzZWVtcyBsaWtlIGEgbG9ja2luZyBmaXgsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBmNmlfbGlzdGAgaW4gdGhpcyBtb2R1bGUuIFRoZXkmIzM5O3ZlIGFkZGVkIGBzcGluX2xvY2tfYmhgIGNhbGxzLiBMZXQmIzM5O3Mgc2VlLi4uIGluIGBmaWI2X2NoZWNrX25oX2xpc3RgLCB0aGVyZSYjMzk7cyBhIGxvY2sgYWRkZWQgYmVmb3JlIHRoYXQgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBBbmQgaW4gYG5oX3J0X2NhY2hlX2ZsdXNoYCwgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgbG9ja2luZyBhbmQgYXJlIG5vdyBjaGVja2luZyBgIWxpc3RfZW1wdHkoJmFtcDtuaC0mZ3Q7ZjZpX2xpc3QpYCBhbmQgYnVtcGluZyB0aGUgSVB2NiBnZW5pZC4gVGhhdCYjMzk7cyBhIGNsZXZlciBvcHRpbWl6YXRpb24sIGF2b2lkcyBpdGVyYXRpbmcgdGhlIGxpc3QgdW5uZWNlc3NhcmlseS4gRmluYWxseSwgaW4gYF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeWAsIHRoZXJlJiMzOTtzIGFub3RoZXIgbG9jayBhZGRlZCBhcm91bmQgdGhlIGxpc3QgaXRlcmF0aW9uLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGZpeGluZyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGltcHJvdmluZyB0aGUgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG1lcml0cyBzb21lIGZ1enppbmcuIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyByb2NrIHNvbGlkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFjdHVhbGx5IGVuYWJsZSB0aGlzIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGJ1aWxkIGBuZXQvaXB2NC9uZXh0aG9wLmNgLiBJIHdvdWxkIGFzc3VtZSBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgd291bGQgYmUgaW52b2x2ZWQuIFRpbWUgdG8gZ28gY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCBhbmQgY29uZmlybSB3aGljaCBjb25maWd1cmF0aW9ucyBicmluZyB0aGlzIGNvZGUgaW50byB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXh0aG9wXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNzpcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cbm5ldC9pcHY0L01ha2VmaWxlLTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgY29kZSBzbmlwcGV0LCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHdlbGwtdmVyc2VkIGluIG5ldHdvcmtpbmcgYW5kIGtlcm5lbCBpbnRlcm5hbHM6CgoqKklQdjYgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyB0aGUgYnVpbGQgaXMgdW5jb25kaXRpb25hbCBmb3IgSVB2NCwgdGhhdCYjMzk7cyBmaW5lLCBidXQgdGhlIHJlYWxseSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSBJUHY2LWNlbnRyaWM6IGBmaWI2X2NoZWNrX25oX2xpc3RgLCBgbmhfcnRfY2FjaGVfZmx1c2hgLCBhbmQgYF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxsIGludGltYXRlbHkgbGlua2VkIHRvIHRoZSBoYW5kbGluZyBvZiBJUHY2IG5leHQgaG9wcywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgdGhlIElQdjYgcm91dGluZyB0YWJsZXMgd29yay4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgY29kZSAqYWN0dWFsbHkqIGRlcGVuZGVudCBvbiBJUHY2IGJlaW5nIGNvbmZpZ3VyZWQsIGV2ZW4gdGhvdWdoIHRoZSBvdmVyYWxsIGJ1aWxkIGlzbiYjMzk7dD8gUGVyaGFwcyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdGhlbXNlbHZlcywgb3IgbWF5YmUgdGhleSBqdXN0IHdvbiYjMzk7dCBiZSBjYWxsZWQgaWYgSVB2NiBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGRlZXBlciBhbmQgZGV0ZXJtaW5lIGlmIGBDT05GSUdfSVBWNmAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGlzIGNvZGUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIGdyYWNlZnVsIGRlZ3JhZGF0aW9uIG9yIGFsdGVybmF0aXZlIHBhdGggdGhhdCYjMzk7cyBwb3NzaWJsZS4gSSBzdXNwZWN0IHdlJiMzOTtsbCBmaW5kIHNvbWUgYGlmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYjZfY2hlY2tfbmhfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmM9MTU5MT1FWFBPUlRfU1lNQk9MX0dQTChmaWI2X2NoZWNrX25leHRob3ApO1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy0xNTk1LSAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjE1OTY6c3RhdGljIGludCBmaWI2X2NoZWNrX25oX2xpc3Qoc3RydWN0IG5leHRob3AgKm9sZCwgc3RydWN0IG5leHRob3AgKm5ldyxcbm5ldC9pcHY0L25leHRob3AuYy0xNTk3LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MjU2OT1zdGF0aWMgaW50IHJlcGxhY2VfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpvbGQsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTI1ODMtXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjU4NDpcdGVyciA9IGZpYjZfY2hlY2tfbmhfbGlzdChvbGQsIG5ldywgZXh0YWNrKTtcbm5ldC9pcHY0L25leHRob3AuYy0yNTg1LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYwNy1cbm5ldC9pcHY0L25leHRob3AuYzoyNjA4Olx0XHRlcnIgPSBmaWI2X2NoZWNrX25oX2xpc3QobmhnZS1cdTAwM2VuaF9wYXJlbnQsIG5ldywgZXh0YWNrKTtcbm5ldC9pcHY0L25leHRob3AuYy0yNjA5LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkNoZWNraW5nIGZvciBJUHY2IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZWZpbmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmIENPTkZJR19JUFY2YCBkaXJlY3RpdmVzIGx1cmtpbmcgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy4gVGhhdOKAmXMgdGhlIGZpcnN0IHRoaW5nIEkgZG8gd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGNvZGUuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBJUHY2IHN1cHBvcnQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gRGVwZW5kaW5nIG9uIHRob3NlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGFuZCBwZXJoYXBzIGl0cyBiZWhhdmlvciwgd2lsbCBiZSBkcmFzdGljYWxseSBkaWZmZXJlbnQuIElmIHRoZXJlJiMzOTtzIGFuIElQdjYgY2hlY2ssIEkgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgcG90ZW50aWFsbHkgZGVhbGluZyB3aXRoIGJvdGggSVB2NCBhbmQgSVB2Ni1zcGVjaWZpYyBjb2RlIHBhdGhzLiBTbywgYCNpZmRlZiBDT05GSUdfSVBWNmAgaXQgaXMhIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYz0xNDExPXN0YXRpYyBib29sIG5leHRob3BfaXNfZ29vZF9uaChjb25zdCBzdHJ1Y3QgbmV4dGhvcCAqbmgpXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTE0MTgtXHRjYXNlIEFGX0lORVQ2OlxubmV0L2lwdjQvbmV4dGhvcC5jOjE0MTk6XHRcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjYgaXB2Nl9nb29kX25oKFx1MDAyNm5oaS1cdTAwM2VmaWI2X25oKTtcbm5ldC9pcHY0L25leHRob3AuYy0xNDIwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKlVucGFja2luZyBhIENvbXBpbGF0aW9uIFB1enpsZSoqCgpIYW5nIG9uIGEgc2Vjb25k4oCmSSB0aG91Z2h0IEkgdW5kZXJzdG9vZCBob3cgdGhhdCBgZmliNl9jaGVja19uaF9saXN0YCBmdW5jdGlvbiB3YXMgc3VwcG9zZWQgdG8gYmVoYXZlLCBidXQgbm93IEkmIzM5O20gdGhpbmtpbmcsIGlzIGl0IHJlYWxseSAqYWx3YXlzKiBjb21waWxlZD8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBtZWFudCB0byBiZSBjb25kaXRpb25hbCBvbiBzb21lIGJ1aWxkIGZsYWdzLCBidXQgdGhpcyBmZWVscyBvZmYuIE9rYXksIHRpbWUgdG8gZGl2ZSBpbiBhbmQgY29uZmlybS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgbmV0L2lwdjQvbmV4dGhvcC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG5pdHR5LWdyaXR0eSBvZiBJUHY0IG5leHQgaG9wIGhhbmRsaW5nIGxpdmVzLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGxpa2VseSBzcG90IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gYGZpYjZfY2hlY2tfbmhfbGlzdGAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc291cmNlIHNheXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTgwOlx0XG4xNTgxOlx0XHRpZiAoaXNfZmRiX25oKSB7XG4xNTgyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Um91dGUgY2Fubm90IHBvaW50IHRvIGEgZmRiIG5leHRob3BcJiMzNDspO1xuMTU4MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1ODQ6XHRcdH1cbjE1ODU6XHRcbjE1ODY6XHRcdHJldHVybiAwO1xuMTU4NzpcdG5vX3Y0X25oOlxuMTU4ODpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUHY2IHJvdXRlcyBjYW4gbm90IHVzZSBhbiBJUHY0IG5leHRob3BcJiMzNDspO1xuMTU4OTpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTkwOlx0fVxuMTU5MTpcdEVYUE9SVF9TWU1CT0xfR1BMKGZpYjZfY2hlY2tfbmV4dGhvcCk7XG4xNTkyOlx0XG4xNTkzOlx0LyogaWYgZXhpc3RpbmcgbmV4dGhvcCBoYXMgaXB2NiByb3V0ZXMgbGlua2VkIHRvIGl0LCBuZWVkXG4xNTk0Olx0ICogdG8gdmVyaWZ5IHRoaXMgbmV3IHNwZWMgd29ya3Mgd2l0aCBpcHY2XG4xNTk1Olx0ICovXG4xNTk2Olx0c3RhdGljIGludCBmaWI2X2NoZWNrX25oX2xpc3Qoc3RydWN0IG5leHRob3AgKm9sZCwgc3RydWN0IG5leHRob3AgKm5ldyxcbjE1OTc6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xNTk4Olx0e1xuMTU5OTpcdFx0c3RydWN0IGZpYjZfaW5mbyAqZjZpO1xuMTYwMDpcdFx0aW50IGVyciA9IDA7XG4xNjAxOlx0XG4xNjAyOlx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZvbGQtXHUwMDNlZjZpX2xpc3QpKVxuMTYwMzpcdFx0XHRyZXR1cm4gMDtcbjE2MDQ6XHRcbjE2MDU6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZvbGQtXHUwMDNlbG9jayk7XG4xNjA2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGY2aSwgXHUwMDI2b2xkLVx1MDAzZWY2aV9saXN0LCBuaF9saXN0KSB7XG4xNjA3Olx0XHRcdGVyciA9IGNoZWNrX3NyY19hZGRyKFx1MDAyNmY2aS1cdTAwM2VmaWI2X3NyYy5hZGRyLCBleHRhY2spO1xuMTYwODpcdFx0XHRpZiAoZXJyKVxuMTYwOTpcdFx0XHRcdGJyZWFrO1xuMTYxMDpcdFx0fVxuMTYxMTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2b2xkLVx1MDAzZWxvY2spO1xuMTYxMjpcdFxuMTYxMzpcdFx0aWYgKGVycilcbjE2MTQ6XHRcdFx0cmV0dXJuIGVycjtcbjE2MTU6XHRcbjE2MTY6XHRcdHJldHVybiBmaWI2X2NoZWNrX25leHRob3AobmV3LCBOVUxMLCBleHRhY2spO1xuMTYxNzpcdH1cbjE2MTg6XHRcbjE2MTk6XHRzdGF0aWMgaW50IG5leHRob3BfY2hlY2tfc2NvcGUoc3RydWN0IG5oX2luZm8gKm5oaSwgdTggc2NvcGUsXG4xNjIwOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE2MjE6XHR7XG4xNjIyOlx0XHRpZiAoc2NvcGUgPT0gUlRfU0NPUEVfSE9TVCBcdTAwMjZcdTAwMjYgbmhpLVx1MDAzZWZpYl9uaGMubmhjX2d3X2ZhbWlseSkge1xuMTYyMzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4xNjI0Olx0XHRcdFx0ICAgICAgIFwmIzM0O1JvdXRlIHdpdGggaG9zdCBzY29wZSBjYW4gbm90IGhhdmUgYSBnYXRld2F5XCYjMzQ7KTtcbjE2MjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjI2Olx0XHR9XG4xNjI3Olx0XG4xNjI4Olx0XHRpZiAobmhpLVx1MDAzZWZpYl9uaGMubmhjX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfT05MSU5LIFx1MDAyNlx1MDAyNiBzY29wZSBcdTAwM2U9IFJUX1NDT1BFX0xJTkspIHtcbjE2Mjk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtTY29wZSBtaXNtYXRjaCB3aXRoIG5leHRob3BcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDU3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVucGFja2luZyB0aGUgRGVwZW5kZW5jaWVzOiBgZmliNl9jaGVja19uaF9saXN0YCoqCgpSaWdodCwgc28gaXQgbG9va3MgbGlrZSBgZmliNl9jaGVja19uaF9saXN0YCBpcyBnZXR0aW5nIGNvbXBpbGVkIHJlZ2FyZGxlc3Mgb2Ygb3RoZXIgY29uZGl0aW9ucy4gVGhhdCYjMzk7cyBmaW5lIGluIGl0c2VsZiwgYnV0IGl0JiMzOTtzIHRoZSAqaW50ZXJhY3Rpb24qIEkgbmVlZCB0byBmb2N1cyBvbi4gSXQmIzM5O3MgdG91Y2hpbmcgYGZpYjZfaW5mb2AgYW5kIGBmNmlfbGlzdGAuIFRob3NlIGFyZSBjbGVhcmx5IElQdjYgcm91dGluZyBzdHJ1Y3R1cmVzLiBNeSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbGlua2FnZS4gQWgsIGhhbmcgb27igKYgSSByZW1lbWJlciwgYGY2aV9saXN0YCBpcyBhY3R1YWxseSBuZXN0ZWQgd2l0aGluIGBzdHJ1Y3QgbmV4dGhvcGAuIE9rYXksIHRoYXQmIzM5O3MgY3J1Y2lhbC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGluY2x1ZGUvbmV0L25leHRob3AuaGAgdG8gbWFrZSBzdXJlIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhpcyByZWxhdGlvbnNoaXAgY29ycmVjdGx5LiBJIG5lZWQgdG8gcmVmcmVzaCB0aGF0IHBhcnRpY3VsYXIgcGllY2Ugb2YgbWVtb3J5IGFuZCBjb25maXJtIGhvdyB0aGlzIGlzIGFsbCBjb25uZWN0ZWQsIHN0cnVjdHVyYWxseS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBwb2ludHMgYWJvdXQgdGhvc2Ugc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Y2aV9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV4dGhvcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25leHRob3AuaD0xNDI9c3RydWN0IG5leHRob3Age1xuLS1cbmluY2x1ZGUvbmV0L25leHRob3AuaC0xNDQtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRmaV9saXN0OyAgICAvKiB2NCBlbnRyaWVzIHVzaW5nIG5oICovXG5pbmNsdWRlL25ldC9uZXh0aG9wLmg6MTQ1Olx0c3RydWN0IGxpc3RfaGVhZFx0ZjZpX2xpc3Q7ICAgLyogdjYgZW50cmllcyB1c2luZyBuaCAqL1xuaW5jbHVkZS9uZXQvbmV4dGhvcC5oLTE0Ni1cdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGZkYl9saXN0OyAgIC8qIGZkYiBlbnRyaWVzIHVzaW5nIHRoaXMgbmggKi9cbi0tXG5pbmNsdWRlL25ldC9uZXh0aG9wLmgtMTU1LVx0Ym9vbFx0XHRcdGRlYWQ7XG5pbmNsdWRlL25ldC9uZXh0aG9wLmg6MTU2Olx0c3BpbmxvY2tfdFx0XHRsb2NrOyAgICAgICAvKiBwcm90ZWN0IGRlYWQgYW5kIGY2aV9saXN0ICovXG5pbmNsdWRlL25ldC9uZXh0aG9wLmgtMTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXh0aG9wIEluZnJhc3RydWN0dXJlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IGNvZGUsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgY29yZSBvZiB0aGUgbmV4dGhvcCBpbmZyYXN0cnVjdHVyZS4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gdGhlc2UgdGhyZWUgZnVuY3Rpb25zOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMgaGFwcGVuaW5nLCBkZWFsaW5nIHdpdGggcmVwbGFjaW5nIG5leHRob3BzIGFuZCBmbHVzaGluZyB0aGUgY2FjaGUuIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0aGVzZSBmdW5jdGlvbnM7IHRoZXkmIzM5O3JlIHRoZSBrZXkgdGFyZ2V0cy4KClNvLCBmb3IgZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLgoKTm93LCB0byBnZXQgdGhlIGludGVyZXN0aW5nIHBhdGhzIHRyaWdnZXJlZCwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSVB2NiBpcyBlbmFibGVkLCBlc3BlY2lhbGx5IHRvIHBvcHVsYXRlIGBmNmlfbGlzdGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSVBWNmAgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIElQdjYgcm91dGVzIGFuZCB0cmlnZ2VyIHJlbGV2YW50IGNvZGUgZXhlY3V0aW9uLiBMb29raW5nIHRocm91Z2ggdGhlIGNvZGUsIGFsdGhvdWdoIGl0IGFwcGVhcnMgdG8gYmUgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LCBJIHN1c3BlY3QgaXQgd29uJiMzOTt0IGFjdHVhbGx5IGRvIG11Y2ggd2l0aG91dCBJUHY2IGVuYWJsZWQuIFllcCwgYElQVjZgIGlzIG5lZWRlZC4gTm8gc3BlY2lmaWMgY29uZmlncyBmb3IgbmV4dGhvcHMuIGBuZXQvaXB2NC9uZXh0aG9wLmNgIGNvbXBpbGVzIHVuY29uZGl0aW9uYWxseS4KCkkgbmVlZCB0byBjb25maXJtIGlmIGFueXRoaW5nIGxpa2UgYENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFU2Agb3IgYENPTkZJR19JUFY2X1JPVVRFUl9QUkVGYCBhcmUgbmVjZXNzYXJ5LCBidXQgSSYjMzk7bSB0aGlua2luZyBqdXN0IGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudC4KCkxldCBtZSBkb3VibGUtY2hlY2sgYG5oX3J0X2NhY2hlX2ZsdXNoYCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25oX3J0X2NhY2hlX2ZsdXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYz0yMjMwPXN0YXRpYyB2b2lkIHJlbW92ZV9vbmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIzOS0gKi9cbm5ldC9pcHY0L25leHRob3AuYzoyMjQwOnN0YXRpYyB2b2lkIG5oX3J0X2NhY2hlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxubmV0L2lwdjQvbmV4dGhvcC5jLTIyNDEtXHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKnJlcGxhY2VkX25oKVxuLS1cbm5ldC9pcHY0L25leHRob3AuYz0yNTY5PXN0YXRpYyBpbnQgcmVwbGFjZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm9sZCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYxOC1cdGlmICghZXJyKSB7XG5uZXQvaXB2NC9uZXh0aG9wLmM6MjYxOTpcdFx0bmhfcnRfY2FjaGVfZmx1c2gobmV0LCBvbGQsIG5ldyk7XG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYyMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKk15IEFuYWx5c2lzIG9mIGByZXBsYWNlX25leHRob3BgIGFuZCBpdHMgUm9sZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgYHJlcGxhY2VfbmV4dGhvcGAgZnVuY3Rpb24gaXMgY2xlYXJseSBpbXBvcnRhbnQgaW4gcm91dGUgbWFuYWdlbWVudC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsaW5nIGBuaF9ydF9jYWNoZV9mbHVzaGAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUgbGV2ZWwgb2YgY2FjaGUgaW52YWxpZGF0aW9uIG9yIHVwZGF0ZSByZWxhdGVkIHRvIHRoZSBuZXh0IGhvcCBpbmZvcm1hdGlvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOyBpZiB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIG5leHQgaG9wLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgcm91dGluZyBjYWNoZSByZWZsZWN0cyB0aGF0IGNoYW5nZSBpbW1lZGlhdGVseSB0byBhdm9pZCBkaXJlY3RpbmcgdHJhZmZpYyBkb3duIHN0YWxlIHJvdXRlcy4gVGhhdCBmdW5jdGlvbiBuYW1lLCBgbmhfcnRfY2FjaGVfZmx1c2hgLCBpcyBwcmV0dHkgZXhwbGljaXQgYWJvdXQgaXRzIHJvbGUgaW4gcHVyZ2luZyBvciB1cGRhdGluZyB0aGUgcmVsZXZhbnQgY2FjaGUgZW50cmllcy4KClRoZSBzZWNvbmQgcGllY2Ugb2YgdGhlIHB1enpsZSBpcyB0aGF0IGByZXBsYWNlX25leHRob3BgIGlzICpjYWxsZWQqIGZyb20gYHJ0bV9uZXdfbmV4dGhvcGAuICBgcnRtX25ld19uZXh0aG9wYD8gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGByZXBsYWNlX25leHRob3BgIGZ1bmN0aW9uIGlzIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9yIHBhcnQgb2YgdGhlIHByb2Nlc3MgZm9yIGhhbmRsaW5nIHRoZSBjcmVhdGlvbiBvZiBhICpuZXcqIG5leHQgaG9wIHdpdGhpbiB0aGUgcm91dGluZyB0YWJsZS4gIFNvLCB3aGVuZXZlciBhIG5ldyBuZXh0IGhvcCBpcyBpbnRyb2R1Y2VkIHRvIHRoZSBzeXN0ZW0sIGByZXBsYWNlX25leHRob3BgIGlzIGxpa2VseSB1c2VkIHRvIGhhbmRsZSB0aGUgbmVjZXNzYXJ5IHVwZGF0ZXMgYW5kIHBvdGVudGlhbGx5IHJlcGxhY2UgYW4gZXhpc3RpbmcgbmV4dCBob3AuIFRoaXMgaXMgYSBjcnVjaWFsIGxpbmsgYmV0d2VlbiB0aGUgdXNlciBzcGFjZSByb3V0aW5nIGluZm9ybWF0aW9uIGFuZCB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLgoKRXNzZW50aWFsbHksIEkmIzM5O20gaW5mZXJyaW5nIHRoYXQgd2hlbmV2ZXIgYSBuZXcgcm91dGUgaXMgY29uZmlndXJlZCB3aXRoIGEgc3BlY2lmaWMgbmV4dC1ob3AgaW5mb3JtYXRpb24sIGBydG1fbmV3X25leHRob3BgIGNhbGxzIGByZXBsYWNlX25leHRob3BgIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyBhcHBsaWVkIChwZXJoYXBzIHJlcGxhY2luZyBhbiBleGlzdGluZyBlbnRyeSkgYW5kIGJ5IGFzc29jaWF0aW9uIHRoZSBgbmhfcnRfY2FjaGVfZmx1c2hgIGZ1bmN0aW9uIGlzIHRoZSBzYWZlZ3VhcmQgdG8gaW52YWxpZGF0ZSBhbmQgcmVsb2FkIHRoZSBjb3JyZWN0IGNhY2hlZCBkYXRhLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZXJlZm9yZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgcm91dGluZyBhY2N1cmFjeSBhbmQgZWZmaWNpZW5jeSBpbiBkeW5hbWljIHJvdXRpbmcgZW52aXJvbm1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG1fbmV3X25leHRob3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jPTMyNjk9c3RhdGljIGludCBydG1fdG9fbmhfY29uZmlnX3J0bmwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTMzMDAtLyogcnRubCAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjMzMDE6c3RhdGljIGludCBydG1fbmV3X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzMwMi1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTQxODM9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIG5leHRob3BfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbm5ldC9pcHY0L25leHRob3AuYzo0MTg0Olx0ey5tc2d0eXBlID0gUlRNX05FV05FWFRIT1AsIC5kb2l0ID0gcnRtX25ld19uZXh0aG9wLFxubmV0L2lwdjQvbmV4dGhvcC5jLTQxODUtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE5Mi1cdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLFxubmV0L2lwdjQvbmV4dGhvcC5jOjQxOTM6XHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE5NC1cdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9HRVRORVhUSE9QLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy00MTk2LVx0ey5wcm90b2NvbCA9IFBGX0lORVQ2LCAubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLFxubmV0L2lwdjQvbmV4dGhvcC5jOjQxOTc6XHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE5OC1cdHsucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXRsaW5rIE5leHRob3AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGNvbmZpZ3VyZSBhbmQgbWFuaXB1bGF0ZSBJUHY2IG5leHRob3BzIHVzaW5nIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBSVE1fTkVXTkVYVEhPUGAgd2l0aCB0aGUgYE5MTV9GX1JFUExBQ0VgIGZsYWcuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgZmV3IGtleSBzeW1ib2xzIEkgbmVlZCB0byB1bmRlcnN0YW5kOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB2YWxpZGF0aW5nLCBmbHVzaGluZyBjYWNoZXMsIGFuZCBub3RpZnlpbmcgb2YgdXBkYXRlcyB3aGVuIGEgbmV4dGhvcCBpcyBiZWluZyBtb2RpZmllZC4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGJlaGF2aW9yLiBDbGVhcmx5LCBgQ09ORklHX0lQVjZgIGlzIGEgbm8tYnJhaW5lcjsgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBJUHY2IG5leHRob3BzLCBzbyB0aGF0JiMzOTtzIGEgcmVxdWlyZW1lbnQuIEJ1dCBJJiMzOTttIGFsc28gd29uZGVyaW5nIGFib3V0IGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gTmV4dGhvcHMgYXJlIGZ1bmRhbWVudGFsIHRvIG11bHRpcGF0aCByb3V0aW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBmZWF0dXJlIGlzIGFsc28gYSBoYXJkIHJlcXVpcmVtZW50IG9yLCBhdCBsZWFzdCwgaGVhdmlseSBpbmZsdWVuY2VzIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gZXhhbWluaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgaWYgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW50byBvciBhZmZlY3RzIHRoZSBmbG93IGFyb3VuZCB0aGlzIG5leHRob3AgbWFuaXB1bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYG5leHRob3AuY2AgRGVwZW5kZW5jaWVzKioKCkhtbSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGVyZSB3YXMgYSBkZXBlbmRlbmN5LCBidXQgSSYjMzk7bSB0aGlua2luZywgJiMzNDtObywgYG5leHRob3AuY2AgZG9lc24mIzM5O3QgYWN0dWFsbHkgZGVwZW5kIG9uICp0aGF0KiBkaXJlY3RseS4mIzM0OyBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB0aGlzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBtb3JlIHN1YnRseSBsaW5rZWQuIFRoZSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXNjb3VudCB0aGUgZGVwZW5kZW5jeSwgYnV0IGl0IHdvdWxkIGJlIHdpc2UgdG8gY29udGludWUgdG8gZXZhbHVhdGUgb3RoZXIgYXJlYXMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuCgpBbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGFyZWEgb2YgY29uY2VybiBpcyBsb29raW5nIGNsZWFyLCB0aGVyZWZvcmUsIGl0JiMzOTtzIHRpbWUgdG8gY2hhbmdlIGdlYXJzIGFuZCBsb29rIGRlZXBlci4gTGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFU2AuIFRoYXQmIzM5O3MgbGlrZWx5IHRoZSBuZXh0IGxvZ2ljYWwgYXJlYSB0byBpbnZlc3RpZ2F0ZSwgZXNwZWNpYWxseSBpZiB0aGlzIHJlbGF0ZXMgdG8gSVB2NiByb3V0aW5nIHRhYmxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGF0IGNvbmZpZyBvcHRpb24gbWlnaHQgaW5mbHVlbmNlIGBuZXh0aG9wLmNgJiMzOTtzIGJlaGF2aW9yIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW5kaXJlY3QgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzMwoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiA5ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgTmV4dGhvcCBMb2NraW5nIGZvciBOZXRsaW5rIFJvdXRlIFJlcGxhY2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVhaCwgdGhlIG1haW4gdGhpbmcgaGVyZSBpcyBgSVBWNmAuIFdlIG5lZWQgdG8gYWRkcmVzcyBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBgZjZpX2xpc3RgIHdpdGhpbiB0aGUgYG5leHRob3BgIHN0cnVjdHVyZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJvdXRlIHJlcGxhY2VtZW50IHZpYSBuZXRsaW5rLiBJIGNhbiBzZWUgdGhyZWUgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLgoKSW4gdGhlIGBmaWI2X2NoZWNrX25oX2xpc3RgIGZ1bmN0aW9uLCB0aGV5JiMzOTtyZSBhZGRpbmcgYSBgc3Bpbl9sb2NrX2JoYCBhcm91bmQgdGhlIGl0ZXJhdGlvbiB0aHJvdWdoIGBmNmlfbGlzdGAuIFRoaXMgaXMgY2xlYXJseSB0byBwcm90ZWN0IHRoZSBsaXN0IHdoaWxlIGNoZWNraW5nIHNvdXJjZSBhZGRyZXNzZXMsIHdoaWNoIG1ha2VzIHNlbnNlIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGR1cmluZyBtb2RpZmljYXRpb25zLgoKYG5oX3J0X2NhY2hlX2ZsdXNoYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGEgbGl0dGxlIGludGVyZXN0aW5nLiBUaGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBleHBsaWNpdCBpdGVyYXRpb24gb3ZlciBgZjZpX2xpc3RgLiBJbnN0ZWFkLCB0aGVyZSYjMzk7cyBhIGxvY2sgYXJvdW5kIGNoZWNraW5nIGlmIHRoZSBsaXN0IGlzIGVtcHR5LCBhbmQgaWYgaXQmIzM5O3Mgbm90IGVtcHR5LCB0aGV5IGNhbGwgYHJ0X2dlbmlkX2J1bXBfaXB2NmAuIFRoaXMgaXMgYSBtb3JlIGVmZmljaWVudCBhcHByb2FjaCwgYXZvaWRpbmcgdGhlIGZ1bGwgaXRlcmF0aW9uIHdoZW4gaXQmIzM5O3MganVzdCBhIG1hdHRlciBvZiBzaWduYWxpbmcgYSBjYWNoZSBpbnZhbGlkYXRpb24uIFRoaXMgaXMgYSBnb29kIG9wdGltaXphdGlvbi4KCkZpbmFsbHksIGluIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLCBhbm90aGVyIGBzcGluX2xvY2tfYmhgIGhhcyBiZWVuIGFkZGVkIGFyb3VuZCB0aGUgaXRlcmF0aW9uIG92ZXIgYGY2aV9saXN0YC4gVGhpcyBwcm90ZWN0cyB0aGUgbGlzdCBkdXJpbmcgdGhlIHVwZGF0ZSBvZiByb3V0ZSBpbmZvcm1hdGlvbiwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgZGF0YSBpbnRlZ3JpdHkuCgpUaGUgb3ZlcmFsbCBnb2FsIGhlcmUgaXMgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nIGFyb3VuZCB0aGUgYGY2aV9saXN0YCB3aGVuIGRlYWxpbmcgd2l0aCBuZXRsaW5rIHJvdXRlIHJlcGxhY2VtZW50LCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpeCwgYXMgaXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVuIHJlcGxhY2luZyByb3V0ZXMsIHdoaWNoIGFyZSBjb3JlIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0uIEkgd291bGQgY29uc2lkZXIgdGhpcyBwYXRjaCAmIzM0O3dvcnRoIGZ1enppbmcmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X2NoZWNrX25oX2xpc3QmIzM0OywKICAgICYjMzQ7bmhfcnRfY2FjaGVfZmx1c2gmIzM0OywKICAgICYjMzQ7X19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAgaW4gSVB2NiBuZXh0aG9wIHJlcGxhY2VtZW50IGFuZCBjYWNoZSBmbHVzaGluZyBwYXRocy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgUlRNX05FV05FWFRIT1Agd2l0aCB0aGUgTkxNX0ZfUkVQTEFDRSBmbGFnLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X2NoZWNrX25oX2xpc3QmIzM0OywKICAgICYjMzQ7bmhfcnRfY2FjaGVfZmx1c2gmIzM0OywKICAgICYjMzQ7X19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAgaW4gSVB2NiBuZXh0aG9wIHJlcGxhY2VtZW50IGFuZCBjYWNoZSBmbHVzaGluZyBwYXRocy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgUlRNX05FV05FWFRIT1Agd2l0aCB0aGUgTkxNX0ZfUkVQTEFDRSBmbGFnLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMDo0MS42MDMwMjYwMDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk4ODY0NjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl9jaGVja19uaF9saXN0XCIsXG4gICAgXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICAgIFwiX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YCBpbiBJUHY2IG5leHRob3AgcmVwbGFjZW1lbnQgYW5kIGNhY2hlIGZsdXNoaW5nIHBhdGhzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBSVE1fTkVXTkVYVEhPUCB3aXRoIHRoZSBOTE1fRl9SRVBMQUNFIGZsYWcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIGxvY2tpbmcgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NDEuNjAzMDMwNTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUzNzk1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NTA4YTI3YjE3ZGQxZDI3NWQ4ZTRhMTIwNzMxZTgwNDE1ZjI5OGYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDIwOjMwOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25leHRob3AuYyBiL25ldC9pcHY0L25leHRob3AuY1xcbmluZGV4IDYyMDViZDU3YWE4NTIwLi4xZTljY2FjNmJmMGYxNyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXh0aG9wLmNcXG4rKysgYi9uZXQvaXB2NC9uZXh0aG9wLmNcXG5AQCAtMTU5NywxNCArMTU5NywyMSBAQCBzdGF0aWMgaW50IGZpYjZfY2hlY2tfbmhfbGlzdChzdHJ1Y3QgbmV4dGhvcCAqb2xkLCBzdHJ1Y3QgbmV4dGhvcCAqbmV3LFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyAqZjZpO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZvbGQtXFx1MDAzZWY2aV9saXN0KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm9sZC1cXHUwMDNlbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcXHUwMDI2b2xkLVxcdTAwM2VmNmlfbGlzdCwgbmhfbGlzdCkge1xcbi1cXHRcXHRpZiAoY2hlY2tfc3JjX2FkZHIoXFx1MDAyNmY2aS1cXHUwMDNlZmliNl9zcmMuYWRkciwgZXh0YWNrKSBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRlcnIgPSBjaGVja19zcmNfYWRkcihcXHUwMDI2ZjZpLVxcdTAwM2VmaWI2X3NyYy5hZGRyLCBleHRhY2spO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2b2xkLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRyZXR1cm4gZmliNl9jaGVja19uZXh0aG9wKG5ldywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbkBAIC0yMjMzLDE4ICsyMjQwLDE4IEBAIHN0YXRpYyB2b2lkIHJlbW92ZV9vbmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcXG4gc3RhdGljIHZvaWQgbmhfcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXh0aG9wICpyZXBsYWNlZF9uaClcXG4ge1xcbi1cXHRzdHJ1Y3QgZmliNl9pbmZvICpmNmk7XFxuIFxcdHN0cnVjdCBuaF9ncm91cCAqbmhnO1xcbitcXHRib29sIGhhdmVfZjZpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bmgtXFx1MDAzZWZpX2xpc3QpKVxcbiBcXHRcXHRydF9jYWNoZV9mbHVzaChuZXQpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmNmksIFxcdTAwMjZuaC1cXHUwMDNlZjZpX2xpc3QsIG5oX2xpc3QpIHtcXG4tXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZmNmktXFx1MDAzZWZpYjZfdGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4tXFx0XFx0ZmliNl91cGRhdGVfc2VybnVtX3VwdG9fcm9vdChuZXQsIGY2aSk7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZmNmktXFx1MDAzZWZpYjZfdGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4tXFx0fVxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5oLVxcdTAwM2Vsb2NrKTtcXG4rXFx0aGF2ZV9mNmkgPSAhbGlzdF9lbXB0eShcXHUwMDI2bmgtXFx1MDAzZWY2aV9saXN0KTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5oLVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKGhhdmVfZjZpKVxcbitcXHRcXHRydF9nZW5pZF9idW1wX2lwdjYobmV0KTtcXG4gXFxuIFxcdC8qIGlmIGFuIElQdjYgZ3JvdXAgd2FzIHJlcGxhY2VkLCB3ZSBoYXZlIHRvIHJlbGVhc2UgYWxsIG9sZFxcbiBcXHQgKiBkc3RzIHRvIG1ha2Ugc3VyZSBhbGwgcmVmY291bnRzIGFyZSByZWxlYXNlZFxcbkBAIC0yNTM4LDggKzI1NDUsMTAgQEAgc3RhdGljIHZvaWQgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbiBcXHRcXHRcXHRmaS1cXHUwMDNlbmhfdXBkYXRlZCA9IGZhbHNlO1xcbiBcXHR9XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5oLVxcdTAwM2Vsb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmNmksIFxcdTAwMjZuaC1cXHUwMDNlZjZpX2xpc3QsIG5oX2xpc3QpXFxuIFxcdFxcdGZpYjZfcnRfdXBkYXRlKG5ldCwgZjZpLCBpbmZvKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5oLVxcdTAwM2Vsb2NrKTtcXG4gfVxcbiBcXG4gLyogc2VuZCBSVE1fTkVXUk9VVEUgd2l0aCBSRVBMQUNFIGZsYWcgc2V0IGZvciBhbGwgRklCIGVudHJpZXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NDIuMTk5MDIzNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0ODM5MjY0MDEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl9jaGVja19uaF9saXN0XCIsXG4gICAgXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICAgIFwiX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YCBpbiBJUHY2IG5leHRob3AgcmVwbGFjZW1lbnQgYW5kIGNhY2hlIGZsdXNoaW5nIHBhdGhzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBSVE1fTkVXTkVYVEhPUCB3aXRoIHRoZSBOTE1fRl9SRVBMQUNFIGZsYWcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIGxvY2tpbmcgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NTA4YTI3YjE3ZGQxZDI3NWQ4ZTRhMTIwNzMxZTgwNDE1ZjI5OGYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMjA6MzA6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXh0aG9wLmMgYi9uZXQvaXB2NC9uZXh0aG9wLmNcbmluZGV4IDYyMDViZDU3YWE4NTIwLi4xZTljY2FjNmJmMGYxNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25leHRob3AuY1xuKysrIGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5AQCAtMTU5NywxNCArMTU5NywyMSBAQCBzdGF0aWMgaW50IGZpYjZfY2hlY2tfbmhfbGlzdChzdHJ1Y3QgbmV4dGhvcCAqb2xkLCBzdHJ1Y3QgbmV4dGhvcCAqbmV3LFxuIFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvICpmNmk7XG4rXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9sZC1cdTAwM2VmNmlfbGlzdCkpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm9sZC1cdTAwM2Vsb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcdTAwMjZvbGQtXHUwMDNlZjZpX2xpc3QsIG5oX2xpc3QpIHtcbi1cdFx0aWYgKGNoZWNrX3NyY19hZGRyKFx1MDAyNmY2aS1cdTAwM2VmaWI2X3NyYy5hZGRyLCBleHRhY2spIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRlcnIgPSBjaGVja19zcmNfYWRkcihcdTAwMjZmNmktXHUwMDNlZmliNl9zcmMuYWRkciwgZXh0YWNrKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRicmVhaztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm9sZC1cdTAwM2Vsb2NrKTtcbitcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4gXHRyZXR1cm4gZmliNl9jaGVja19uZXh0aG9wKG5ldywgTlVMTCwgZXh0YWNrKTtcbiB9XG5AQCAtMjIzMywxOCArMjI0MCwxOCBAQCBzdGF0aWMgdm9pZCByZW1vdmVfb25lX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4gc3RhdGljIHZvaWQgbmhfcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4gXHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKnJlcGxhY2VkX25oKVxuIHtcbi1cdHN0cnVjdCBmaWI2X2luZm8gKmY2aTtcbiBcdHN0cnVjdCBuaF9ncm91cCAqbmhnO1xuK1x0Ym9vbCBoYXZlX2Y2aTtcbiBcdGludCBpO1xuIFxuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5oLVx1MDAzZWZpX2xpc3QpKVxuIFx0XHRydF9jYWNoZV9mbHVzaChuZXQpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShmNmksIFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0LCBuaF9saXN0KSB7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZmNmktXHUwMDNlZmliNl90YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tXHRcdGZpYjZfdXBkYXRlX3Nlcm51bV91cHRvX3Jvb3QobmV0LCBmNmkpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZmNmktXHUwMDNlZmliNl90YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tXHR9XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmgtXHUwMDNlbG9jayk7XG4rXHRoYXZlX2Y2aSA9ICFsaXN0X2VtcHR5KFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0KTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5oLVx1MDAzZWxvY2spO1xuK1x0aWYgKGhhdmVfZjZpKVxuK1x0XHRydF9nZW5pZF9idW1wX2lwdjYobmV0KTtcbiBcbiBcdC8qIGlmIGFuIElQdjYgZ3JvdXAgd2FzIHJlcGxhY2VkLCB3ZSBoYXZlIHRvIHJlbGVhc2UgYWxsIG9sZFxuIFx0ICogZHN0cyB0byBtYWtlIHN1cmUgYWxsIHJlZmNvdW50cyBhcmUgcmVsZWFzZWRcbkBAIC0yNTM4LDggKzI1NDUsMTAgQEAgc3RhdGljIHZvaWQgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxuIFx0XHRcdGZpLVx1MDAzZW5oX3VwZGF0ZWQgPSBmYWxzZTtcbiBcdH1cbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuaC1cdTAwM2Vsb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcdTAwMjZuaC1cdTAwM2VmNmlfbGlzdCwgbmhfbGlzdClcbiBcdFx0ZmliNl9ydF91cGRhdGUobmV0LCBmNmksIGluZm8pO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmgtXHUwMDNlbG9jayk7XG4gfVxuIFxuIC8qIHNlbmQgUlRNX05FV1JPVVRFIHdpdGggUkVQTEFDRSBmbGFnIHNldCBmb3IgYWxsIEZJQiBlbnRyaWVzXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMDo0Mi4xOTkwMjQ4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDU4NzA4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gbmV0L2lwdjQvbmV4dGhvcC5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC9pcHY0L25leHRob3AuY2AuIEl0IHNlZW1zIGxpa2UgYSBsb2NraW5nIGZpeCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGY2aV9saXN0YCBpbiB0aGlzIG1vZHVsZS4gVGhleSd2ZSBhZGRlZCBgc3Bpbl9sb2NrX2JoYCBjYWxscy4gTGV0J3Mgc2VlLi4uIGluIGBmaWI2X2NoZWNrX25oX2xpc3RgLCB0aGVyZSdzIGEgbG9jayBhZGRlZCBiZWZvcmUgdGhhdCBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgbG9vcCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuIEFuZCBpbiBgbmhfcnRfY2FjaGVfZmx1c2hgLCB0aGV5J3ZlIGNoYW5nZWQgdGhlIGxvY2tpbmcgYW5kIGFyZSBub3cgY2hlY2tpbmcgYCFsaXN0X2VtcHR5KFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0KWAgYW5kIGJ1bXBpbmcgdGhlIElQdjYgZ2VuaWQuIFRoYXQncyBhIGNsZXZlciBvcHRpbWl6YXRpb24sIGF2b2lkcyBpdGVyYXRpbmcgdGhlIGxpc3QgdW5uZWNlc3NhcmlseS4gRmluYWxseSwgaW4gYF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeWAsIHRoZXJlJ3MgYW5vdGhlciBsb2NrIGFkZGVkIGFyb3VuZCB0aGUgbGlzdCBpdGVyYXRpb24uXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBmaXhpbmcgc29tZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBpbXByb3ZpbmcgdGhlIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBtZXJpdHMgc29tZSBmdXp6aW5nLiBHb3R0YSBtYWtlIHN1cmUgdGhpcyBmaXggaXMgcm9jayBzb2xpZC5cblxuTm93LCBsZXQncyBzZWUgd2hpY2ggY29uZmlnIG9wdGlvbnMgYWN0dWFsbHkgZW5hYmxlIHRoaXMgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbnMgYnVpbGQgYG5ldC9pcHY0L25leHRob3AuY2AuIEkgd291bGQgYXNzdW1lIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBvciBzb21ldGhpbmcgc2ltaWxhciB3b3VsZCBiZSBpbnZvbHZlZC4gVGltZSB0byBnbyBjaGVjayBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCBjb25maXJtIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGJyaW5nIHRoaXMgY29kZSBpbnRvIHRoZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NDcuMzA0ODk3NDkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODQ1MTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXh0aG9wXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTE2LVxcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE3OlxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0xOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NDcuNzAzMzU0MjIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MDgxMjkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhpcyBjb2RlIHNuaXBwZXQsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBuZXR3b3JraW5nIGFuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKklQdjYgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBidWlsZCBpcyB1bmNvbmRpdGlvbmFsIGZvciBJUHY0LCB0aGF0J3MgZmluZSwgYnV0IHRoZSByZWFsbHkgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNsZWFybHkgSVB2Ni1jZW50cmljOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBpbnRpbWF0ZWx5IGxpbmtlZCB0byB0aGUgaGFuZGxpbmcgb2YgSVB2NiBuZXh0IGhvcHMsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IHRoZSBJUHY2IHJvdXRpbmcgdGFibGVzIHdvcmsuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgY29kZSAqYWN0dWFsbHkqIGRlcGVuZGVudCBvbiBJUHY2IGJlaW5nIGNvbmZpZ3VyZWQsIGV2ZW4gdGhvdWdoIHRoZSBvdmVyYWxsIGJ1aWxkIGlzbid0PyBQZXJoYXBzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCB0aGVtc2VsdmVzLCBvciBtYXliZSB0aGV5IGp1c3Qgd29uJ3QgYmUgY2FsbGVkIGlmIElQdjYgaXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlciBhbmQgZGV0ZXJtaW5lIGlmIGBDT05GSUdfSVBWNmAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGlzIGNvZGUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBvciBpZiB0aGVyZSdzIHNvbWUgZ3JhY2VmdWwgZGVncmFkYXRpb24gb3IgYWx0ZXJuYXRpdmUgcGF0aCB0aGF0J3MgcG9zc2libGUuIEkgc3VzcGVjdCB3ZSdsbCBmaW5kIHNvbWUgYGlmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzUyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NTEuNDc0MTcwMTE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ2NzU3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWI2X2NoZWNrX25oX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25leHRob3AuYz0xNTkxPUVYUE9SVF9TWU1CT0xfR1BMKGZpYjZfY2hlY2tfbmV4dGhvcCk7XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMTU5NS0gKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MTU5NjpzdGF0aWMgaW50IGZpYjZfY2hlY2tfbmhfbGlzdChzdHJ1Y3QgbmV4dGhvcCAqb2xkLCBzdHJ1Y3QgbmV4dGhvcCAqbmV3LFxcbm5ldC9pcHY0L25leHRob3AuYy0xNTk3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0yNTY5PXN0YXRpYyBpbnQgcmVwbGFjZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm9sZCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0yNTgzLVxcbm5ldC9pcHY0L25leHRob3AuYzoyNTg0OlxcdGVyciA9IGZpYjZfY2hlY2tfbmhfbGlzdChvbGQsIG5ldywgZXh0YWNrKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjU4NS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTI2MDctXFxubmV0L2lwdjQvbmV4dGhvcC5jOjI2MDg6XFx0XFx0ZXJyID0gZmliNl9jaGVja19uaF9saXN0KG5oZ2UtXFx1MDAzZW5oX3BhcmVudCwgbmV3LCBleHRhY2spO1xcbm5ldC9pcHY0L25leHRob3AuYy0yNjA5LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIwOjMwOjUxLjU4NTY0MjU3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NTk0NTE4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqQ2hlY2tpbmcgZm9yIElQdjYgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVmaW5lcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZiBDT05GSUdfSVBWNmAgZGlyZWN0aXZlcyBsdXJraW5nIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMuIFRoYXTigJlzIHRoZSBmaXJzdCB0aGluZyBJIGRvIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGNvZGUuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBJUHY2IHN1cHBvcnQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gRGVwZW5kaW5nIG9uIHRob3NlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGFuZCBwZXJoYXBzIGl0cyBiZWhhdmlvciwgd2lsbCBiZSBkcmFzdGljYWxseSBkaWZmZXJlbnQuIElmIHRoZXJlJ3MgYW4gSVB2NiBjaGVjaywgSSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggYm90aCBJUHY0IGFuZCBJUHY2LXNwZWNpZmljIGNvZGUgcGF0aHMuIFNvLCBgI2lmZGVmIENPTkZJR19JUFY2YCBpdCBpcyEgTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NTQuMjQ1MDk5MzQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3ODg2NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmM9MTQxMT1zdGF0aWMgYm9vbCBuZXh0aG9wX2lzX2dvb2RfbmgoY29uc3Qgc3RydWN0IG5leHRob3AgKm5oKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTE0MTgtXFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MTQxOTpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXFx1MDAyNlxcdTAwMjYgaXB2Nl9nb29kX25oKFxcdTAwMjZuaGktXFx1MDAzZWZpYjZfbmgpO1xcbm5ldC9pcHY0L25leHRob3AuYy0xNDIwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NTQuMzMyOTkxNDY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNzc4MDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipVbnBhY2tpbmcgYSBDb21waWxhdGlvbiBQdXp6bGUqKlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmSSB0aG91Z2h0IEkgdW5kZXJzdG9vZCBob3cgdGhhdCBgZmliNl9jaGVja19uaF9saXN0YCBmdW5jdGlvbiB3YXMgc3VwcG9zZWQgdG8gYmVoYXZlLCBidXQgbm93IEknbSB0aGlua2luZywgaXMgaXQgcmVhbGx5ICphbHdheXMqIGNvbXBpbGVkPyBJJ20gcHJldHR5IHN1cmUgaXQncyBtZWFudCB0byBiZSBjb25kaXRpb25hbCBvbiBzb21lIGJ1aWxkIGZsYWdzLCBidXQgdGhpcyBmZWVscyBvZmYuIE9rYXksIHRpbWUgdG8gZGl2ZSBpbiBhbmQgY29uZmlybS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBuZXQvaXB2NC9uZXh0aG9wLmNgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBuaXR0eS1ncml0dHkgb2YgSVB2NCBuZXh0IGhvcCBoYW5kbGluZyBsaXZlcywgYW5kIGl0IHNlZW1zIGxpa2UgYSBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBmaWI2X2NoZWNrX25oX2xpc3RgLiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIHNheXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMDo1Ny43NTA3NzUxOTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTgwOlxcdFxcbjE1ODE6XFx0XFx0aWYgKGlzX2ZkYl9uaCkge1xcbjE1ODI6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUm91dGUgY2Fubm90IHBvaW50IHRvIGEgZmRiIG5leHRob3BcXFwiKTtcXG4xNTgzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1ODQ6XFx0XFx0fVxcbjE1ODU6XFx0XFxuMTU4NjpcXHRcXHRyZXR1cm4gMDtcXG4xNTg3OlxcdG5vX3Y0X25oOlxcbjE1ODg6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVB2NiByb3V0ZXMgY2FuIG5vdCB1c2UgYW4gSVB2NCBuZXh0aG9wXFxcIik7XFxuMTU4OTpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTkwOlxcdH1cXG4xNTkxOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGZpYjZfY2hlY2tfbmV4dGhvcCk7XFxuMTU5MjpcXHRcXG4xNTkzOlxcdC8qIGlmIGV4aXN0aW5nIG5leHRob3AgaGFzIGlwdjYgcm91dGVzIGxpbmtlZCB0byBpdCwgbmVlZFxcbjE1OTQ6XFx0ICogdG8gdmVyaWZ5IHRoaXMgbmV3IHNwZWMgd29ya3Mgd2l0aCBpcHY2XFxuMTU5NTpcXHQgKi9cXG4xNTk2OlxcdHN0YXRpYyBpbnQgZmliNl9jaGVja19uaF9saXN0KHN0cnVjdCBuZXh0aG9wICpvbGQsIHN0cnVjdCBuZXh0aG9wICpuZXcsXFxuMTU5NzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTU5ODpcXHR7XFxuMTU5OTpcXHRcXHRzdHJ1Y3QgZmliNl9pbmZvICpmNmk7XFxuMTYwMDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xNjAxOlxcdFxcbjE2MDI6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm9sZC1cXHUwMDNlZjZpX2xpc3QpKVxcbjE2MDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2b2xkLVxcdTAwM2Vsb2NrKTtcXG4xNjA2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcXHUwMDI2b2xkLVxcdTAwM2VmNmlfbGlzdCwgbmhfbGlzdCkge1xcbjE2MDc6XFx0XFx0XFx0ZXJyID0gY2hlY2tfc3JjX2FkZHIoXFx1MDAyNmY2aS1cXHUwMDNlZmliNl9zcmMuYWRkciwgZXh0YWNrKTtcXG4xNjA4OlxcdFxcdFxcdGlmIChlcnIpXFxuMTYwOTpcXHRcXHRcXHRcXHRicmVhaztcXG4xNjEwOlxcdFxcdH1cXG4xNjExOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZvbGQtXFx1MDAzZWxvY2spO1xcbjE2MTI6XFx0XFxuMTYxMzpcXHRcXHRpZiAoZXJyKVxcbjE2MTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNjE1OlxcdFxcbjE2MTY6XFx0XFx0cmV0dXJuIGZpYjZfY2hlY2tfbmV4dGhvcChuZXcsIE5VTEwsIGV4dGFjayk7XFxuMTYxNzpcXHR9XFxuMTYxODpcXHRcXG4xNjE5OlxcdHN0YXRpYyBpbnQgbmV4dGhvcF9jaGVja19zY29wZShzdHJ1Y3QgbmhfaW5mbyAqbmhpLCB1OCBzY29wZSxcXG4xNjIwOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTYyMTpcXHR7XFxuMTYyMjpcXHRcXHRpZiAoc2NvcGUgPT0gUlRfU0NPUEVfSE9TVCBcXHUwMDI2XFx1MDAyNiBuaGktXFx1MDAzZWZpYl9uaGMubmhjX2d3X2ZhbWlseSkge1xcbjE2MjM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjE2MjQ6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJSb3V0ZSB3aXRoIGhvc3Qgc2NvcGUgY2FuIG5vdCBoYXZlIGEgZ2F0ZXdheVxcXCIpO1xcbjE2MjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYyNjpcXHRcXHR9XFxuMTYyNzpcXHRcXG4xNjI4OlxcdFxcdGlmIChuaGktXFx1MDAzZWZpYl9uaGMubmhjX2ZsYWdzIFxcdTAwMjYgUlROSF9GX09OTElOSyBcXHUwMDI2XFx1MDAyNiBzY29wZSBcXHUwMDNlPSBSVF9TQ09QRV9MSU5LKSB7XFxuMTYyOTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTY29wZSBtaXNtYXRjaCB3aXRoIG5leHRob3BcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NTcuNzUxMTE4OTE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTg0MjQxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbnBhY2tpbmcgdGhlIERlcGVuZGVuY2llczogYGZpYjZfY2hlY2tfbmhfbGlzdGAqKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSBgZmliNl9jaGVja19uaF9saXN0YCBpcyBnZXR0aW5nIGNvbXBpbGVkIHJlZ2FyZGxlc3Mgb2Ygb3RoZXIgY29uZGl0aW9ucy4gVGhhdCdzIGZpbmUgaW4gaXRzZWxmLCBidXQgaXQncyB0aGUgKmludGVyYWN0aW9uKiBJIG5lZWQgdG8gZm9jdXMgb24uIEl0J3MgdG91Y2hpbmcgYGZpYjZfaW5mb2AgYW5kIGBmNmlfbGlzdGAuIFRob3NlIGFyZSBjbGVhcmx5IElQdjYgcm91dGluZyBzdHJ1Y3R1cmVzLiBNeSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbGlua2FnZS4gQWgsIGhhbmcgb27igKYgSSByZW1lbWJlciwgYGY2aV9saXN0YCBpcyBhY3R1YWxseSBuZXN0ZWQgd2l0aGluIGBzdHJ1Y3QgbmV4dGhvcGAuIE9rYXksIHRoYXQncyBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBpbmNsdWRlL25ldC9uZXh0aG9wLmhgIHRvIG1ha2Ugc3VyZSBJJ20gcmVtZW1iZXJpbmcgdGhpcyByZWxhdGlvbnNoaXAgY29ycmVjdGx5LiBJIG5lZWQgdG8gcmVmcmVzaCB0aGF0IHBhcnRpY3VsYXIgcGllY2Ugb2YgbWVtb3J5IGFuZCBjb25maXJtIGhvdyB0aGlzIGlzIGFsbCBjb25uZWN0ZWQsIHN0cnVjdHVyYWxseS4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgc3VidGxlIHBvaW50cyBhYm91dCB0aG9zZSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzE6MDEuMjQ5NTQ2MDA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI3ODIyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZjZpX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvbmV4dGhvcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25leHRob3AuaD0xNDI9c3RydWN0IG5leHRob3Age1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV4dGhvcC5oLTE0NC1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZmlfbGlzdDsgICAgLyogdjQgZW50cmllcyB1c2luZyBuaCAqL1xcbmluY2x1ZGUvbmV0L25leHRob3AuaDoxNDU6XFx0c3RydWN0IGxpc3RfaGVhZFxcdGY2aV9saXN0OyAgIC8qIHY2IGVudHJpZXMgdXNpbmcgbmggKi9cXG5pbmNsdWRlL25ldC9uZXh0aG9wLmgtMTQ2LVxcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGZkYl9saXN0OyAgIC8qIGZkYiBlbnRyaWVzIHVzaW5nIHRoaXMgbmggKi9cXG4tLVxcbmluY2x1ZGUvbmV0L25leHRob3AuaC0xNTUtXFx0Ym9vbFxcdFxcdFxcdGRlYWQ7XFxuaW5jbHVkZS9uZXQvbmV4dGhvcC5oOjE1NjpcXHRzcGlubG9ja190XFx0XFx0bG9jazsgICAgICAgLyogcHJvdGVjdCBkZWFkIGFuZCBmNmlfbGlzdCAqL1xcbmluY2x1ZGUvbmV0L25leHRob3AuaC0xNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIwOjMxOjAxLjY5MjMzMzczN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc2MzU3ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBOZXh0aG9wIEluZnJhc3RydWN0dXJlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG5ldyBjb2RlLCBhbmQgaXQncyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgY29yZSBvZiB0aGUgbmV4dGhvcCBpbmZyYXN0cnVjdHVyZS4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gdGhlc2UgdGhyZWUgZnVuY3Rpb25zOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcsIGRlYWxpbmcgd2l0aCByZXBsYWNpbmcgbmV4dGhvcHMgYW5kIGZsdXNoaW5nIHRoZSBjYWNoZS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRoZXNlIGZ1bmN0aW9uczsgdGhleSdyZSB0aGUga2V5IHRhcmdldHMuXG5cblNvLCBmb3IgZnV6emluZywgSSdtIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGBmaWI2X2NoZWNrX25oX2xpc3RgLCBgbmhfcnRfY2FjaGVfZmx1c2hgLCBhbmQgYF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeWAuXG5cbk5vdywgdG8gZ2V0IHRoZSBpbnRlcmVzdGluZyBwYXRocyB0cmlnZ2VyZWQsIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgSVB2NiBpcyBlbmFibGVkLCBlc3BlY2lhbGx5IHRvIHBvcHVsYXRlIGBmNmlfbGlzdGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSVBWNmAgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIElQdjYgcm91dGVzIGFuZCB0cmlnZ2VyIHJlbGV2YW50IGNvZGUgZXhlY3V0aW9uLiBMb29raW5nIHRocm91Z2ggdGhlIGNvZGUsIGFsdGhvdWdoIGl0IGFwcGVhcnMgdG8gYmUgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LCBJIHN1c3BlY3QgaXQgd29uJ3QgYWN0dWFsbHkgZG8gbXVjaCB3aXRob3V0IElQdjYgZW5hYmxlZC4gWWVwLCBgSVBWNmAgaXMgbmVlZGVkLiBObyBzcGVjaWZpYyBjb25maWdzIGZvciBuZXh0aG9wcy4gYG5ldC9pcHY0L25leHRob3AuY2AgY29tcGlsZXMgdW5jb25kaXRpb25hbGx5LlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBhbnl0aGluZyBsaWtlIGBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVNgIG9yIGBDT05GSUdfSVBWNl9ST1VURVJfUFJFRmAgYXJlIG5lY2Vzc2FyeSwgYnV0IEknbSB0aGlua2luZyBqdXN0IGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBgbmhfcnRfY2FjaGVfZmx1c2hgIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMTowNy4xNjg2OTQ0NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDk4NDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jPTIyMzA9c3RhdGljIHZvaWQgcmVtb3ZlX29uZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIyMzktICovXFxubmV0L2lwdjQvbmV4dGhvcC5jOjIyNDA6c3RhdGljIHZvaWQgbmhfcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIyNDEtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5leHRob3AgKnJlcGxhY2VkX25oKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jPTI1Njk9c3RhdGljIGludCByZXBsYWNlX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqb2xkLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTI2MTgtXFx0aWYgKCFlcnIpIHtcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjYxOTpcXHRcXHRuaF9ydF9jYWNoZV9mbHVzaChuZXQsIG9sZCwgbmV3KTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYyMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzE6MDcuMjk5NjgzNDkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDQ2NzkxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKk15IEFuYWx5c2lzIG9mIGByZXBsYWNlX25leHRob3BgIGFuZCBpdHMgUm9sZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgYHJlcGxhY2VfbmV4dGhvcGAgZnVuY3Rpb24gaXMgY2xlYXJseSBpbXBvcnRhbnQgaW4gcm91dGUgbWFuYWdlbWVudC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxpbmcgYG5oX3J0X2NhY2hlX2ZsdXNoYCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIGNhY2hlIGludmFsaWRhdGlvbiBvciB1cGRhdGUgcmVsYXRlZCB0byB0aGUgbmV4dCBob3AgaW5mb3JtYXRpb24uIFRoYXQncyBhIGNsYXNzaWMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOyBpZiB3ZSdyZSBjaGFuZ2luZyB0aGUgbmV4dCBob3AsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSByb3V0aW5nIGNhY2hlIHJlZmxlY3RzIHRoYXQgY2hhbmdlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIGRpcmVjdGluZyB0cmFmZmljIGRvd24gc3RhbGUgcm91dGVzLiBUaGF0IGZ1bmN0aW9uIG5hbWUsIGBuaF9ydF9jYWNoZV9mbHVzaGAsIGlzIHByZXR0eSBleHBsaWNpdCBhYm91dCBpdHMgcm9sZSBpbiBwdXJnaW5nIG9yIHVwZGF0aW5nIHRoZSByZWxldmFudCBjYWNoZSBlbnRyaWVzLlxuXG5UaGUgc2Vjb25kIHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgdGhhdCBgcmVwbGFjZV9uZXh0aG9wYCBpcyAqY2FsbGVkKiBmcm9tIGBydG1fbmV3X25leHRob3BgLiAgYHJ0bV9uZXdfbmV4dGhvcGA/IFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBgcmVwbGFjZV9uZXh0aG9wYCBmdW5jdGlvbiBpcyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBvciBwYXJ0IG9mIHRoZSBwcm9jZXNzIGZvciBoYW5kbGluZyB0aGUgY3JlYXRpb24gb2YgYSAqbmV3KiBuZXh0IGhvcCB3aXRoaW4gdGhlIHJvdXRpbmcgdGFibGUuICBTbywgd2hlbmV2ZXIgYSBuZXcgbmV4dCBob3AgaXMgaW50cm9kdWNlZCB0byB0aGUgc3lzdGVtLCBgcmVwbGFjZV9uZXh0aG9wYCBpcyBsaWtlbHkgdXNlZCB0byBoYW5kbGUgdGhlIG5lY2Vzc2FyeSB1cGRhdGVzIGFuZCBwb3RlbnRpYWxseSByZXBsYWNlIGFuIGV4aXN0aW5nIG5leHQgaG9wLiBUaGlzIGlzIGEgY3J1Y2lhbCBsaW5rIGJldHdlZW4gdGhlIHVzZXIgc3BhY2Ugcm91dGluZyBpbmZvcm1hdGlvbiBhbmQgdGhlIGtlcm5lbCdzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGluZmVycmluZyB0aGF0IHdoZW5ldmVyIGEgbmV3IHJvdXRlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIHNwZWNpZmljIG5leHQtaG9wIGluZm9ybWF0aW9uLCBgcnRtX25ld19uZXh0aG9wYCBjYWxscyBgcmVwbGFjZV9uZXh0aG9wYCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgYXBwbGllZCAocGVyaGFwcyByZXBsYWNpbmcgYW4gZXhpc3RpbmcgZW50cnkpIGFuZCBieSBhc3NvY2lhdGlvbiB0aGUgYG5oX3J0X2NhY2hlX2ZsdXNoYCBmdW5jdGlvbiBpcyB0aGUgc2FmZWd1YXJkIHRvIGludmFsaWRhdGUgYW5kIHJlbG9hZCB0aGUgY29ycmVjdCBjYWNoZWQgZGF0YS4gVGhlc2UgZnVuY3Rpb25zIGFyZSB0aGVyZWZvcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHJvdXRpbmcgYWNjdXJhY3kgYW5kIGVmZmljaWVuY3kgaW4gZHluYW1pYyByb3V0aW5nIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIwOjMxOjExLjQwNDM2NDgxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwNTU1NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRtX25ld19uZXh0aG9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmM9MzI2OT1zdGF0aWMgaW50IHJ0bV90b19uaF9jb25maWdfcnRubChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zMzAwLS8qIHJ0bmwgKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzMwMTpzdGF0aWMgaW50IHJ0bV9uZXdfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzMwMi1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9NDE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmV4dGhvcF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9pcHY0L25leHRob3AuYzo0MTg0OlxcdHsubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLCAuZG9pdCA9IHJ0bV9uZXdfbmV4dGhvcCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE4NS1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy00MTkyLVxcdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLFxcbm5ldC9pcHY0L25leHRob3AuYzo0MTkzOlxcdCAuZG9pdCA9IHJ0bV9uZXdfbmV4dGhvcCwgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE5NC1cXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy00MTk2LVxcdHsucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fTkVXTkVYVEhPUCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDE5NzpcXHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQxOTgtXFx0ey5wcm90b2NvbCA9IFBGX0lORVQ2LCAubXNndHlwZSA9IFJUTV9HRVRORVhUSE9QLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMToxMS41MDI0MjQ4NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMDA1OTg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRsaW5rIE5leHRob3AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjb25maWd1cmUgYW5kIG1hbmlwdWxhdGUgSVB2NiBuZXh0aG9wcyB1c2luZyBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgUlRNX05FV05FWFRIT1BgIHdpdGggdGhlIGBOTE1fRl9SRVBMQUNFYCBmbGFnLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGZldyBrZXkgc3ltYm9scyBJIG5lZWQgdG8gdW5kZXJzdGFuZDogYGZpYjZfY2hlY2tfbmhfbGlzdGAsIGBuaF9ydF9jYWNoZV9mbHVzaGAsIGFuZCBgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5YC4gVGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdmFsaWRhdGluZywgZmx1c2hpbmcgY2FjaGVzLCBhbmQgbm90aWZ5aW5nIG9mIHVwZGF0ZXMgd2hlbiBhIG5leHRob3AgaXMgYmVpbmcgbW9kaWZpZWQuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGJlaGF2aW9yLiBDbGVhcmx5LCBgQ09ORklHX0lQVjZgIGlzIGEgbm8tYnJhaW5lcjsgd2UncmUgZGVhbGluZyB3aXRoIElQdjYgbmV4dGhvcHMsIHNvIHRoYXQncyBhIHJlcXVpcmVtZW50LiBCdXQgSSdtIGFsc28gd29uZGVyaW5nIGFib3V0IGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gTmV4dGhvcHMgYXJlIGZ1bmRhbWVudGFsIHRvIG11bHRpcGF0aCByb3V0aW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBmZWF0dXJlIGlzIGFsc28gYSBoYXJkIHJlcXVpcmVtZW50IG9yLCBhdCBsZWFzdCwgaGVhdmlseSBpbmZsdWVuY2VzIHRoZSBmdW5jdGlvbmFsaXR5IEknbSBleGFtaW5pbmcuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhbmQgc2VlIGlmIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gb3IgYWZmZWN0cyB0aGUgZmxvdyBhcm91bmQgdGhpcyBuZXh0aG9wIG1hbmlwdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMToxNS44MDI0ODcxNTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQzNTY1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIwOjMxOjE1LjkwNDkzMjE3NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAwMjI3MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgbmV4dGhvcC5jYCBEZXBlbmRlbmNpZXMqKlxuXG5IbW0sIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhlcmUgd2FzIGEgZGVwZW5kZW5jeSwgYnV0IEknbSB0aGlua2luZywgXCJObywgYG5leHRob3AuY2AgZG9lc24ndCBhY3R1YWxseSBkZXBlbmQgb24gKnRoYXQqIGRpcmVjdGx5LlwiIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHRoaXMuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBtb3JlIHN1YnRseSBsaW5rZWQuIFRoZSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXNjb3VudCB0aGUgZGVwZW5kZW5jeSwgYnV0IGl0IHdvdWxkIGJlIHdpc2UgdG8gY29udGludWUgdG8gZXZhbHVhdGUgb3RoZXIgYXJlYXMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG5cbkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgYXJlYSBvZiBjb25jZXJuIGlzIGxvb2tpbmcgY2xlYXIsIHRoZXJlZm9yZSwgaXQncyB0aW1lIHRvIGNoYW5nZSBnZWFycyBhbmQgbG9vayBkZWVwZXIuIExldCdzIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFU2AuIFRoYXQncyBsaWtlbHkgdGhlIG5leHQgbG9naWNhbCBhcmVhIHRvIGludmVzdGlnYXRlLCBlc3BlY2lhbGx5IGlmIHRoaXMgcmVsYXRlcyB0byBJUHY2IHJvdXRpbmcgdGFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoYXQgY29uZmlnIG9wdGlvbiBtaWdodCBpbmZsdWVuY2UgYG5leHRob3AuY2AncyBiZWhhdmlvciBhbmQgaWYgdGhlcmUncyBhbnkgaW5kaXJlY3QgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMToxOS4zMDUxNjE2NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzEzODAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMToxOS40MDM0ODI3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAwOTM3MjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBOZXh0aG9wIExvY2tpbmcgZm9yIE5ldGxpbmsgUm91dGUgUmVwbGFjZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVhaCwgdGhlIG1haW4gdGhpbmcgaGVyZSBpcyBgSVBWNmAuIFdlIG5lZWQgdG8gYWRkcmVzcyBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBgZjZpX2xpc3RgIHdpdGhpbiB0aGUgYG5leHRob3BgIHN0cnVjdHVyZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJvdXRlIHJlcGxhY2VtZW50IHZpYSBuZXRsaW5rLiBJIGNhbiBzZWUgdGhyZWUgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLlxuXG5JbiB0aGUgYGZpYjZfY2hlY2tfbmhfbGlzdGAgZnVuY3Rpb24sIHRoZXkncmUgYWRkaW5nIGEgYHNwaW5fbG9ja19iaGAgYXJvdW5kIHRoZSBpdGVyYXRpb24gdGhyb3VnaCBgZjZpX2xpc3RgLiBUaGlzIGlzIGNsZWFybHkgdG8gcHJvdGVjdCB0aGUgbGlzdCB3aGlsZSBjaGVja2luZyBzb3VyY2UgYWRkcmVzc2VzLCB3aGljaCBtYWtlcyBzZW5zZSB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSBkdXJpbmcgbW9kaWZpY2F0aW9ucy5cblxuYG5oX3J0X2NhY2hlX2ZsdXNoYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGEgbGl0dGxlIGludGVyZXN0aW5nLiBUaGV5J3ZlIHJlbW92ZWQgdGhlIGV4cGxpY2l0IGl0ZXJhdGlvbiBvdmVyIGBmNmlfbGlzdGAuIEluc3RlYWQsIHRoZXJlJ3MgYSBsb2NrIGFyb3VuZCBjaGVja2luZyBpZiB0aGUgbGlzdCBpcyBlbXB0eSwgYW5kIGlmIGl0J3Mgbm90IGVtcHR5LCB0aGV5IGNhbGwgYHJ0X2dlbmlkX2J1bXBfaXB2NmAuIFRoaXMgaXMgYSBtb3JlIGVmZmljaWVudCBhcHByb2FjaCwgYXZvaWRpbmcgdGhlIGZ1bGwgaXRlcmF0aW9uIHdoZW4gaXQncyBqdXN0IGEgbWF0dGVyIG9mIHNpZ25hbGluZyBhIGNhY2hlIGludmFsaWRhdGlvbi4gVGhpcyBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLlxuXG5GaW5hbGx5LCBpbiBgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5YCwgYW5vdGhlciBgc3Bpbl9sb2NrX2JoYCBoYXMgYmVlbiBhZGRlZCBhcm91bmQgdGhlIGl0ZXJhdGlvbiBvdmVyIGBmNmlfbGlzdGAuIFRoaXMgcHJvdGVjdHMgdGhlIGxpc3QgZHVyaW5nIHRoZSB1cGRhdGUgb2Ygcm91dGUgaW5mb3JtYXRpb24sIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIGRhdGEgaW50ZWdyaXR5LlxuXG5UaGUgb3ZlcmFsbCBnb2FsIGhlcmUgaXMgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nIGFyb3VuZCB0aGUgYGY2aV9saXN0YCB3aGVuIGRlYWxpbmcgd2l0aCBuZXRsaW5rIHJvdXRlIHJlcGxhY2VtZW50LCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpeCwgYXMgaXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVuIHJlcGxhY2luZyByb3V0ZXMsIHdoaWNoIGFyZSBjb3JlIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0uIEkgd291bGQgY29uc2lkZXIgdGhpcyBwYXRjaCBcIndvcnRoIGZ1enppbmdcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzMywiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzE6MzAuNDEyODU3MjI0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4ODAzNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl9jaGVja19uaF9saXN0XCIsXG4gICAgXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICAgIFwiX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YCBpbiBJUHY2IG5leHRob3AgcmVwbGFjZW1lbnQgYW5kIGNhY2hlIGZsdXNoaW5nIHBhdGhzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBSVE1fTkVXTkVYVEhPUCB3aXRoIHRoZSBOTE1fRl9SRVBMQUNFIGZsYWcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIGxvY2tpbmcgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl9jaGVja19uaF9saXN0XCIsXG4gICAgXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICAgIFwiX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YCBpbiBJUHY2IG5leHRob3AgcmVwbGFjZW1lbnQgYW5kIGNhY2hlIGZsdXNoaW5nIHBhdGhzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBSVE1fTkVXTkVYVEhPUCB3aXRoIHRoZSBOTE1fRl9SRVBMQUNFIGZsYWcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIGxvY2tpbmcgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowks5mp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 20:06:36 +0000 UTC FinishedAt: 2026-07-22 20:31:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cd170f051dba9ac146fabcd1b91726487c0cb9fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cd170f051dba9ac146fabcd1b91726487c0cb9fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "0fb5e247-10dc-4dcd-ba1b-de55c10bcf62" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib6_check_nh_list", "nh_rt_cache_flush", "__nexthop_replace_notify" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X2NoZWNrX25oX2xpc3QmIzM0OywKICAgICYjMzQ7bmhfcnRfY2FjaGVfZmx1c2gmIzM0OywKICAgICYjMzQ7X19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAgaW4gSVB2NiBuZXh0aG9wIHJlcGxhY2VtZW50IGFuZCBjYWNoZSBmbHVzaGluZyBwYXRocy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgUlRNX05FV05FWFRIT1Agd2l0aCB0aGUgTkxNX0ZfUkVQTEFDRSBmbGFnLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NTA4YTI3YjE3ZGQxZDI3NWQ4ZTRhMTIwNzMxZTgwNDE1ZjI5OGYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMjA6MzA6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5pbmRleCA2MjA1YmQ1N2FhODUyMC4uMWU5Y2NhYzZiZjBmMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXh0aG9wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25leHRob3AuY1xuQEAgLTE1OTcsMTQgJiM0MzsxNTk3LDIxIEBAIHN0YXRpYyBpbnQgZmliNl9jaGVja19uaF9saXN0KHN0cnVjdCBuZXh0aG9wICpvbGQsIHN0cnVjdCBuZXh0aG9wICpuZXcsXG4gXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBmaWI2X2luZm8gKmY2aTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9sZC1cdTAwM2VmNmlfbGlzdCkpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZvbGQtXHUwMDNlbG9jayk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGY2aSwgXHUwMDI2b2xkLVx1MDAzZWY2aV9saXN0LCBuaF9saXN0KSB7XG4tXHRcdGlmIChjaGVja19zcmNfYWRkcihcdTAwMjZmNmktXHUwMDNlZmliNl9zcmMuYWRkciwgZXh0YWNrKSBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGVyciA9IGNoZWNrX3NyY19hZGRyKFx1MDAyNmY2aS1cdTAwM2VmaWI2X3NyYy5hZGRyLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2b2xkLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcbiBcdHJldHVybiBmaWI2X2NoZWNrX25leHRob3AobmV3LCBOVUxMLCBleHRhY2spO1xuIH1cbkBAIC0yMjMzLDE4ICYjNDM7MjI0MCwxOCBAQCBzdGF0aWMgdm9pZCByZW1vdmVfb25lX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4gc3RhdGljIHZvaWQgbmhfcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4gXHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKnJlcGxhY2VkX25oKVxuIHtcbi1cdHN0cnVjdCBmaWI2X2luZm8gKmY2aTtcbiBcdHN0cnVjdCBuaF9ncm91cCAqbmhnO1xuJiM0MztcdGJvb2wgaGF2ZV9mNmk7XG4gXHRpbnQgaTtcbiBcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZuaC1cdTAwM2VmaV9saXN0KSlcbiBcdFx0cnRfY2FjaGVfZmx1c2gobmV0KTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcdTAwMjZuaC1cdTAwM2VmNmlfbGlzdCwgbmhfbGlzdCkge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2ZjZpLVx1MDAzZWZpYjZfdGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0XHRmaWI2X3VwZGF0ZV9zZXJudW1fdXB0b19yb290KG5ldCwgZjZpKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZjZpLVx1MDAzZWZpYjZfdGFibGUtXHUwMDNldGI2X2xvY2spO1xuLVx0fVxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuaC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRoYXZlX2Y2aSA9ICFsaXN0X2VtcHR5KFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0KTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuaC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGF2ZV9mNmkpXG4mIzQzO1x0XHRydF9nZW5pZF9idW1wX2lwdjYobmV0KTtcbiBcbiBcdC8qIGlmIGFuIElQdjYgZ3JvdXAgd2FzIHJlcGxhY2VkLCB3ZSBoYXZlIHRvIHJlbGVhc2UgYWxsIG9sZFxuIFx0ICogZHN0cyB0byBtYWtlIHN1cmUgYWxsIHJlZmNvdW50cyBhcmUgcmVsZWFzZWRcbkBAIC0yNTM4LDggJiM0MzsyNTQ1LDEwIEBAIHN0YXRpYyB2b2lkIF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbiBcdFx0XHRmaS1cdTAwM2VuaF91cGRhdGVkID0gZmFsc2U7XG4gXHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5oLVx1MDAzZWxvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmNmksIFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0LCBuaF9saXN0KVxuIFx0XHRmaWI2X3J0X3VwZGF0ZShuZXQsIGY2aSwgaW5mbyk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmgtXHUwMDNlbG9jayk7XG4gfVxuIFxuIC8qIHNlbmQgUlRNX05FV1JPVVRFIHdpdGggUkVQTEFDRSBmbGFnIHNldCBmb3IgYWxsIEZJQiBlbnRyaWVzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X2NoZWNrX25oX2xpc3QmIzM0OywKICAgICYjMzQ7bmhfcnRfY2FjaGVfZmx1c2gmIzM0OywKICAgICYjMzQ7X19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAgaW4gSVB2NiBuZXh0aG9wIHJlcGxhY2VtZW50IGFuZCBjYWNoZSBmbHVzaGluZyBwYXRocy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgUlRNX05FV05FWFRIT1Agd2l0aCB0aGUgTkxNX0ZfUkVQTEFDRSBmbGFnLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1MDhhMjdiMTdkZDFkMjc1ZDhlNGExMjA3MzFlODA0MTVmMjk4ZjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAyMDozMDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25leHRob3AuYyBiL25ldC9pcHY0L25leHRob3AuYwppbmRleCA2MjA1YmQ1N2FhODUyMC4uMWU5Y2NhYzZiZjBmMTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25leHRob3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXh0aG9wLmMKQEAgLTE1OTcsMTQgJiM0MzsxNTk3LDIxIEBAIHN0YXRpYyBpbnQgZmliNl9jaGVja19uaF9saXN0KHN0cnVjdCBuZXh0aG9wICpvbGQsIHN0cnVjdCBuZXh0aG9wICpuZXcsCiAJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGZpYjZfaW5mbyAqZjZpOwomIzQzOwlpbnQgZXJyID0gMDsKIAogCWlmIChsaXN0X2VtcHR5KCZhbXA7b2xkLSZndDtmNmlfbGlzdCkpCiAJCXJldHVybiAwOwogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO29sZC0mZ3Q7bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmNmksICZhbXA7b2xkLSZndDtmNmlfbGlzdCwgbmhfbGlzdCkgewotCQlpZiAoY2hlY2tfc3JjX2FkZHIoJmFtcDtmNmktJmd0O2ZpYjZfc3JjLmFkZHIsIGV4dGFjaykgJmx0OyAwKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQllcnIgPSBjaGVja19zcmNfYWRkcigmYW1wO2Y2aS0mZ3Q7ZmliNl9zcmMuYWRkciwgZXh0YWNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJYnJlYWs7CiAJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO29sZC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCiAJcmV0dXJuIGZpYjZfY2hlY2tfbmV4dGhvcChuZXcsIE5VTEwsIGV4dGFjayk7CiB9CkBAIC0yMjMzLDE4ICYjNDM7MjI0MCwxOCBAQCBzdGF0aWMgdm9pZCByZW1vdmVfb25lX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsCiBzdGF0aWMgdm9pZCBuaF9ydF9jYWNoZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCwKIAkJCSAgICAgIHN0cnVjdCBuZXh0aG9wICpyZXBsYWNlZF9uaCkKIHsKLQlzdHJ1Y3QgZmliNl9pbmZvICpmNmk7CiAJc3RydWN0IG5oX2dyb3VwICpuaGc7CiYjNDM7CWJvb2wgaGF2ZV9mNmk7CiAJaW50IGk7CiAKIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDtuaC0mZ3Q7ZmlfbGlzdCkpCiAJCXJ0X2NhY2hlX2ZsdXNoKG5ldCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGY2aSwgJmFtcDtuaC0mZ3Q7ZjZpX2xpc3QsIG5oX2xpc3QpIHsKLQkJc3Bpbl9sb2NrX2JoKCZhbXA7ZjZpLSZndDtmaWI2X3RhYmxlLSZndDt0YjZfbG9jayk7Ci0JCWZpYjZfdXBkYXRlX3Nlcm51bV91cHRvX3Jvb3QobmV0LCBmNmkpOwotCQlzcGluX3VubG9ja19iaCgmYW1wO2Y2aS0mZ3Q7ZmliNl90YWJsZS0mZ3Q7dGI2X2xvY2spOwotCX0KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmgtJmd0O2xvY2spOwomIzQzOwloYXZlX2Y2aSA9ICFsaXN0X2VtcHR5KCZhbXA7bmgtJmd0O2Y2aV9saXN0KTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuaC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChoYXZlX2Y2aSkKJiM0MzsJCXJ0X2dlbmlkX2J1bXBfaXB2NihuZXQpOwogCiAJLyogaWYgYW4gSVB2NiBncm91cCB3YXMgcmVwbGFjZWQsIHdlIGhhdmUgdG8gcmVsZWFzZSBhbGwgb2xkCiAJICogZHN0cyB0byBtYWtlIHN1cmUgYWxsIHJlZmNvdW50cyBhcmUgcmVsZWFzZWQKQEAgLTI1MzgsOCAmIzQzOzI1NDUsMTAgQEAgc3RhdGljIHZvaWQgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLAogCQkJZmktJmd0O25oX3VwZGF0ZWQgPSBmYWxzZTsKIAl9CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmgtJmd0O2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCAmYW1wO25oLSZndDtmNmlfbGlzdCwgbmhfbGlzdCkKIAkJZmliNl9ydF91cGRhdGUobmV0LCBmNmksIGluZm8pOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25oLSZndDtsb2NrKTsKIH0KIAogLyogc2VuZCBSVE1fTkVXUk9VVEUgd2l0aCBSRVBMQUNFIGZsYWcgc2V0IGZvciBhbGwgRklCIGVudHJpZXMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBuZXQvaXB2NC9uZXh0aG9wLmMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvaXB2NC9uZXh0aG9wLmNgLiBJdCBzZWVtcyBsaWtlIGEgbG9ja2luZyBmaXgsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBmNmlfbGlzdGAgaW4gdGhpcyBtb2R1bGUuIFRoZXkmIzM5O3ZlIGFkZGVkIGBzcGluX2xvY2tfYmhgIGNhbGxzLiBMZXQmIzM5O3Mgc2VlLi4uIGluIGBmaWI2X2NoZWNrX25oX2xpc3RgLCB0aGVyZSYjMzk7cyBhIGxvY2sgYWRkZWQgYmVmb3JlIHRoYXQgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBBbmQgaW4gYG5oX3J0X2NhY2hlX2ZsdXNoYCwgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGUgbG9ja2luZyBhbmQgYXJlIG5vdyBjaGVja2luZyBgIWxpc3RfZW1wdHkoJmFtcDtuaC0mZ3Q7ZjZpX2xpc3QpYCBhbmQgYnVtcGluZyB0aGUgSVB2NiBnZW5pZC4gVGhhdCYjMzk7cyBhIGNsZXZlciBvcHRpbWl6YXRpb24sIGF2b2lkcyBpdGVyYXRpbmcgdGhlIGxpc3QgdW5uZWNlc3NhcmlseS4gRmluYWxseSwgaW4gYF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeWAsIHRoZXJlJiMzOTtzIGFub3RoZXIgbG9jayBhZGRlZCBhcm91bmQgdGhlIGxpc3QgaXRlcmF0aW9uLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGZpeGluZyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGltcHJvdmluZyB0aGUgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG1lcml0cyBzb21lIGZ1enppbmcuIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyByb2NrIHNvbGlkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFjdHVhbGx5IGVuYWJsZSB0aGlzIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGJ1aWxkIGBuZXQvaXB2NC9uZXh0aG9wLmNgLiBJIHdvdWxkIGFzc3VtZSBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgd291bGQgYmUgaW52b2x2ZWQuIFRpbWUgdG8gZ28gY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCBhbmQgY29uZmlybSB3aGljaCBjb25maWd1cmF0aW9ucyBicmluZyB0aGlzIGNvZGUgaW50byB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXh0aG9wXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNzpcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cbm5ldC9pcHY0L01ha2VmaWxlLTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgY29kZSBzbmlwcGV0LCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHdlbGwtdmVyc2VkIGluIG5ldHdvcmtpbmcgYW5kIGtlcm5lbCBpbnRlcm5hbHM6CgoqKklQdjYgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyB0aGUgYnVpbGQgaXMgdW5jb25kaXRpb25hbCBmb3IgSVB2NCwgdGhhdCYjMzk7cyBmaW5lLCBidXQgdGhlIHJlYWxseSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSBJUHY2LWNlbnRyaWM6IGBmaWI2X2NoZWNrX25oX2xpc3RgLCBgbmhfcnRfY2FjaGVfZmx1c2hgLCBhbmQgYF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxsIGludGltYXRlbHkgbGlua2VkIHRvIHRoZSBoYW5kbGluZyBvZiBJUHY2IG5leHQgaG9wcywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgdGhlIElQdjYgcm91dGluZyB0YWJsZXMgd29yay4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgY29kZSAqYWN0dWFsbHkqIGRlcGVuZGVudCBvbiBJUHY2IGJlaW5nIGNvbmZpZ3VyZWQsIGV2ZW4gdGhvdWdoIHRoZSBvdmVyYWxsIGJ1aWxkIGlzbiYjMzk7dD8gUGVyaGFwcyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdGhlbXNlbHZlcywgb3IgbWF5YmUgdGhleSBqdXN0IHdvbiYjMzk7dCBiZSBjYWxsZWQgaWYgSVB2NiBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGRlZXBlciBhbmQgZGV0ZXJtaW5lIGlmIGBDT05GSUdfSVBWNmAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGlzIGNvZGUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIGdyYWNlZnVsIGRlZ3JhZGF0aW9uIG9yIGFsdGVybmF0aXZlIHBhdGggdGhhdCYjMzk7cyBwb3NzaWJsZS4gSSBzdXNwZWN0IHdlJiMzOTtsbCBmaW5kIHNvbWUgYGlmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYjZfY2hlY2tfbmhfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmM9MTU5MT1FWFBPUlRfU1lNQk9MX0dQTChmaWI2X2NoZWNrX25leHRob3ApO1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy0xNTk1LSAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjE1OTY6c3RhdGljIGludCBmaWI2X2NoZWNrX25oX2xpc3Qoc3RydWN0IG5leHRob3AgKm9sZCwgc3RydWN0IG5leHRob3AgKm5ldyxcbm5ldC9pcHY0L25leHRob3AuYy0xNTk3LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MjU2OT1zdGF0aWMgaW50IHJlcGxhY2VfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpvbGQsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTI1ODMtXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjU4NDpcdGVyciA9IGZpYjZfY2hlY2tfbmhfbGlzdChvbGQsIG5ldywgZXh0YWNrKTtcbm5ldC9pcHY0L25leHRob3AuYy0yNTg1LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYwNy1cbm5ldC9pcHY0L25leHRob3AuYzoyNjA4Olx0XHRlcnIgPSBmaWI2X2NoZWNrX25oX2xpc3QobmhnZS1cdTAwM2VuaF9wYXJlbnQsIG5ldywgZXh0YWNrKTtcbm5ldC9pcHY0L25leHRob3AuYy0yNjA5LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkNoZWNraW5nIGZvciBJUHY2IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZWZpbmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmIENPTkZJR19JUFY2YCBkaXJlY3RpdmVzIGx1cmtpbmcgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy4gVGhhdOKAmXMgdGhlIGZpcnN0IHRoaW5nIEkgZG8gd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGNvZGUuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBJUHY2IHN1cHBvcnQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gRGVwZW5kaW5nIG9uIHRob3NlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGFuZCBwZXJoYXBzIGl0cyBiZWhhdmlvciwgd2lsbCBiZSBkcmFzdGljYWxseSBkaWZmZXJlbnQuIElmIHRoZXJlJiMzOTtzIGFuIElQdjYgY2hlY2ssIEkgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgcG90ZW50aWFsbHkgZGVhbGluZyB3aXRoIGJvdGggSVB2NCBhbmQgSVB2Ni1zcGVjaWZpYyBjb2RlIHBhdGhzLiBTbywgYCNpZmRlZiBDT05GSUdfSVBWNmAgaXQgaXMhIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYz0xNDExPXN0YXRpYyBib29sIG5leHRob3BfaXNfZ29vZF9uaChjb25zdCBzdHJ1Y3QgbmV4dGhvcCAqbmgpXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTE0MTgtXHRjYXNlIEFGX0lORVQ2OlxubmV0L2lwdjQvbmV4dGhvcC5jOjE0MTk6XHRcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjYgaXB2Nl9nb29kX25oKFx1MDAyNm5oaS1cdTAwM2VmaWI2X25oKTtcbm5ldC9pcHY0L25leHRob3AuYy0xNDIwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKlVucGFja2luZyBhIENvbXBpbGF0aW9uIFB1enpsZSoqCgpIYW5nIG9uIGEgc2Vjb25k4oCmSSB0aG91Z2h0IEkgdW5kZXJzdG9vZCBob3cgdGhhdCBgZmliNl9jaGVja19uaF9saXN0YCBmdW5jdGlvbiB3YXMgc3VwcG9zZWQgdG8gYmVoYXZlLCBidXQgbm93IEkmIzM5O20gdGhpbmtpbmcsIGlzIGl0IHJlYWxseSAqYWx3YXlzKiBjb21waWxlZD8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBtZWFudCB0byBiZSBjb25kaXRpb25hbCBvbiBzb21lIGJ1aWxkIGZsYWdzLCBidXQgdGhpcyBmZWVscyBvZmYuIE9rYXksIHRpbWUgdG8gZGl2ZSBpbiBhbmQgY29uZmlybS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgbmV0L2lwdjQvbmV4dGhvcC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG5pdHR5LWdyaXR0eSBvZiBJUHY0IG5leHQgaG9wIGhhbmRsaW5nIGxpdmVzLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGxpa2VseSBzcG90IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gYGZpYjZfY2hlY2tfbmhfbGlzdGAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc291cmNlIHNheXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTgwOlx0XG4xNTgxOlx0XHRpZiAoaXNfZmRiX25oKSB7XG4xNTgyOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Um91dGUgY2Fubm90IHBvaW50IHRvIGEgZmRiIG5leHRob3BcJiMzNDspO1xuMTU4MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1ODQ6XHRcdH1cbjE1ODU6XHRcbjE1ODY6XHRcdHJldHVybiAwO1xuMTU4NzpcdG5vX3Y0X25oOlxuMTU4ODpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUHY2IHJvdXRlcyBjYW4gbm90IHVzZSBhbiBJUHY0IG5leHRob3BcJiMzNDspO1xuMTU4OTpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTkwOlx0fVxuMTU5MTpcdEVYUE9SVF9TWU1CT0xfR1BMKGZpYjZfY2hlY2tfbmV4dGhvcCk7XG4xNTkyOlx0XG4xNTkzOlx0LyogaWYgZXhpc3RpbmcgbmV4dGhvcCBoYXMgaXB2NiByb3V0ZXMgbGlua2VkIHRvIGl0LCBuZWVkXG4xNTk0Olx0ICogdG8gdmVyaWZ5IHRoaXMgbmV3IHNwZWMgd29ya3Mgd2l0aCBpcHY2XG4xNTk1Olx0ICovXG4xNTk2Olx0c3RhdGljIGludCBmaWI2X2NoZWNrX25oX2xpc3Qoc3RydWN0IG5leHRob3AgKm9sZCwgc3RydWN0IG5leHRob3AgKm5ldyxcbjE1OTc6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xNTk4Olx0e1xuMTU5OTpcdFx0c3RydWN0IGZpYjZfaW5mbyAqZjZpO1xuMTYwMDpcdFx0aW50IGVyciA9IDA7XG4xNjAxOlx0XG4xNjAyOlx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZvbGQtXHUwMDNlZjZpX2xpc3QpKVxuMTYwMzpcdFx0XHRyZXR1cm4gMDtcbjE2MDQ6XHRcbjE2MDU6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZvbGQtXHUwMDNlbG9jayk7XG4xNjA2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGY2aSwgXHUwMDI2b2xkLVx1MDAzZWY2aV9saXN0LCBuaF9saXN0KSB7XG4xNjA3Olx0XHRcdGVyciA9IGNoZWNrX3NyY19hZGRyKFx1MDAyNmY2aS1cdTAwM2VmaWI2X3NyYy5hZGRyLCBleHRhY2spO1xuMTYwODpcdFx0XHRpZiAoZXJyKVxuMTYwOTpcdFx0XHRcdGJyZWFrO1xuMTYxMDpcdFx0fVxuMTYxMTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2b2xkLVx1MDAzZWxvY2spO1xuMTYxMjpcdFxuMTYxMzpcdFx0aWYgKGVycilcbjE2MTQ6XHRcdFx0cmV0dXJuIGVycjtcbjE2MTU6XHRcbjE2MTY6XHRcdHJldHVybiBmaWI2X2NoZWNrX25leHRob3AobmV3LCBOVUxMLCBleHRhY2spO1xuMTYxNzpcdH1cbjE2MTg6XHRcbjE2MTk6XHRzdGF0aWMgaW50IG5leHRob3BfY2hlY2tfc2NvcGUoc3RydWN0IG5oX2luZm8gKm5oaSwgdTggc2NvcGUsXG4xNjIwOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE2MjE6XHR7XG4xNjIyOlx0XHRpZiAoc2NvcGUgPT0gUlRfU0NPUEVfSE9TVCBcdTAwMjZcdTAwMjYgbmhpLVx1MDAzZWZpYl9uaGMubmhjX2d3X2ZhbWlseSkge1xuMTYyMzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4xNjI0Olx0XHRcdFx0ICAgICAgIFwmIzM0O1JvdXRlIHdpdGggaG9zdCBzY29wZSBjYW4gbm90IGhhdmUgYSBnYXRld2F5XCYjMzQ7KTtcbjE2MjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjI2Olx0XHR9XG4xNjI3Olx0XG4xNjI4Olx0XHRpZiAobmhpLVx1MDAzZWZpYl9uaGMubmhjX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfT05MSU5LIFx1MDAyNlx1MDAyNiBzY29wZSBcdTAwM2U9IFJUX1NDT1BFX0xJTkspIHtcbjE2Mjk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtTY29wZSBtaXNtYXRjaCB3aXRoIG5leHRob3BcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDU3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVucGFja2luZyB0aGUgRGVwZW5kZW5jaWVzOiBgZmliNl9jaGVja19uaF9saXN0YCoqCgpSaWdodCwgc28gaXQgbG9va3MgbGlrZSBgZmliNl9jaGVja19uaF9saXN0YCBpcyBnZXR0aW5nIGNvbXBpbGVkIHJlZ2FyZGxlc3Mgb2Ygb3RoZXIgY29uZGl0aW9ucy4gVGhhdCYjMzk7cyBmaW5lIGluIGl0c2VsZiwgYnV0IGl0JiMzOTtzIHRoZSAqaW50ZXJhY3Rpb24qIEkgbmVlZCB0byBmb2N1cyBvbi4gSXQmIzM5O3MgdG91Y2hpbmcgYGZpYjZfaW5mb2AgYW5kIGBmNmlfbGlzdGAuIFRob3NlIGFyZSBjbGVhcmx5IElQdjYgcm91dGluZyBzdHJ1Y3R1cmVzLiBNeSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbGlua2FnZS4gQWgsIGhhbmcgb27igKYgSSByZW1lbWJlciwgYGY2aV9saXN0YCBpcyBhY3R1YWxseSBuZXN0ZWQgd2l0aGluIGBzdHJ1Y3QgbmV4dGhvcGAuIE9rYXksIHRoYXQmIzM5O3MgY3J1Y2lhbC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGluY2x1ZGUvbmV0L25leHRob3AuaGAgdG8gbWFrZSBzdXJlIEkmIzM5O20gcmVtZW1iZXJpbmcgdGhpcyByZWxhdGlvbnNoaXAgY29ycmVjdGx5LiBJIG5lZWQgdG8gcmVmcmVzaCB0aGF0IHBhcnRpY3VsYXIgcGllY2Ugb2YgbWVtb3J5IGFuZCBjb25maXJtIGhvdyB0aGlzIGlzIGFsbCBjb25uZWN0ZWQsIHN0cnVjdHVyYWxseS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBwb2ludHMgYWJvdXQgdGhvc2Ugc3RydWN0dXJlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Y2aV9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV4dGhvcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25leHRob3AuaD0xNDI9c3RydWN0IG5leHRob3Age1xuLS1cbmluY2x1ZGUvbmV0L25leHRob3AuaC0xNDQtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRmaV9saXN0OyAgICAvKiB2NCBlbnRyaWVzIHVzaW5nIG5oICovXG5pbmNsdWRlL25ldC9uZXh0aG9wLmg6MTQ1Olx0c3RydWN0IGxpc3RfaGVhZFx0ZjZpX2xpc3Q7ICAgLyogdjYgZW50cmllcyB1c2luZyBuaCAqL1xuaW5jbHVkZS9uZXQvbmV4dGhvcC5oLTE0Ni1cdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGZkYl9saXN0OyAgIC8qIGZkYiBlbnRyaWVzIHVzaW5nIHRoaXMgbmggKi9cbi0tXG5pbmNsdWRlL25ldC9uZXh0aG9wLmgtMTU1LVx0Ym9vbFx0XHRcdGRlYWQ7XG5pbmNsdWRlL25ldC9uZXh0aG9wLmg6MTU2Olx0c3BpbmxvY2tfdFx0XHRsb2NrOyAgICAgICAvKiBwcm90ZWN0IGRlYWQgYW5kIGY2aV9saXN0ICovXG5pbmNsdWRlL25ldC9uZXh0aG9wLmgtMTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXh0aG9wIEluZnJhc3RydWN0dXJlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IGNvZGUsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgY29yZSBvZiB0aGUgbmV4dGhvcCBpbmZyYXN0cnVjdHVyZS4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gdGhlc2UgdGhyZWUgZnVuY3Rpb25zOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMgaGFwcGVuaW5nLCBkZWFsaW5nIHdpdGggcmVwbGFjaW5nIG5leHRob3BzIGFuZCBmbHVzaGluZyB0aGUgY2FjaGUuIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0aGVzZSBmdW5jdGlvbnM7IHRoZXkmIzM5O3JlIHRoZSBrZXkgdGFyZ2V0cy4KClNvLCBmb3IgZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLgoKTm93LCB0byBnZXQgdGhlIGludGVyZXN0aW5nIHBhdGhzIHRyaWdnZXJlZCwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSVB2NiBpcyBlbmFibGVkLCBlc3BlY2lhbGx5IHRvIHBvcHVsYXRlIGBmNmlfbGlzdGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSVBWNmAgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIElQdjYgcm91dGVzIGFuZCB0cmlnZ2VyIHJlbGV2YW50IGNvZGUgZXhlY3V0aW9uLiBMb29raW5nIHRocm91Z2ggdGhlIGNvZGUsIGFsdGhvdWdoIGl0IGFwcGVhcnMgdG8gYmUgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LCBJIHN1c3BlY3QgaXQgd29uJiMzOTt0IGFjdHVhbGx5IGRvIG11Y2ggd2l0aG91dCBJUHY2IGVuYWJsZWQuIFllcCwgYElQVjZgIGlzIG5lZWRlZC4gTm8gc3BlY2lmaWMgY29uZmlncyBmb3IgbmV4dGhvcHMuIGBuZXQvaXB2NC9uZXh0aG9wLmNgIGNvbXBpbGVzIHVuY29uZGl0aW9uYWxseS4KCkkgbmVlZCB0byBjb25maXJtIGlmIGFueXRoaW5nIGxpa2UgYENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFU2Agb3IgYENPTkZJR19JUFY2X1JPVVRFUl9QUkVGYCBhcmUgbmVjZXNzYXJ5LCBidXQgSSYjMzk7bSB0aGlua2luZyBqdXN0IGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudC4KCkxldCBtZSBkb3VibGUtY2hlY2sgYG5oX3J0X2NhY2hlX2ZsdXNoYCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25oX3J0X2NhY2hlX2ZsdXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYz0yMjMwPXN0YXRpYyB2b2lkIHJlbW92ZV9vbmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIzOS0gKi9cbm5ldC9pcHY0L25leHRob3AuYzoyMjQwOnN0YXRpYyB2b2lkIG5oX3J0X2NhY2hlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxubmV0L2lwdjQvbmV4dGhvcC5jLTIyNDEtXHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKnJlcGxhY2VkX25oKVxuLS1cbm5ldC9pcHY0L25leHRob3AuYz0yNTY5PXN0YXRpYyBpbnQgcmVwbGFjZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm9sZCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYxOC1cdGlmICghZXJyKSB7XG5uZXQvaXB2NC9uZXh0aG9wLmM6MjYxOTpcdFx0bmhfcnRfY2FjaGVfZmx1c2gobmV0LCBvbGQsIG5ldyk7XG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYyMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKk15IEFuYWx5c2lzIG9mIGByZXBsYWNlX25leHRob3BgIGFuZCBpdHMgUm9sZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgYHJlcGxhY2VfbmV4dGhvcGAgZnVuY3Rpb24gaXMgY2xlYXJseSBpbXBvcnRhbnQgaW4gcm91dGUgbWFuYWdlbWVudC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsaW5nIGBuaF9ydF9jYWNoZV9mbHVzaGAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUgbGV2ZWwgb2YgY2FjaGUgaW52YWxpZGF0aW9uIG9yIHVwZGF0ZSByZWxhdGVkIHRvIHRoZSBuZXh0IGhvcCBpbmZvcm1hdGlvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOyBpZiB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIG5leHQgaG9wLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgcm91dGluZyBjYWNoZSByZWZsZWN0cyB0aGF0IGNoYW5nZSBpbW1lZGlhdGVseSB0byBhdm9pZCBkaXJlY3RpbmcgdHJhZmZpYyBkb3duIHN0YWxlIHJvdXRlcy4gVGhhdCBmdW5jdGlvbiBuYW1lLCBgbmhfcnRfY2FjaGVfZmx1c2hgLCBpcyBwcmV0dHkgZXhwbGljaXQgYWJvdXQgaXRzIHJvbGUgaW4gcHVyZ2luZyBvciB1cGRhdGluZyB0aGUgcmVsZXZhbnQgY2FjaGUgZW50cmllcy4KClRoZSBzZWNvbmQgcGllY2Ugb2YgdGhlIHB1enpsZSBpcyB0aGF0IGByZXBsYWNlX25leHRob3BgIGlzICpjYWxsZWQqIGZyb20gYHJ0bV9uZXdfbmV4dGhvcGAuICBgcnRtX25ld19uZXh0aG9wYD8gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGByZXBsYWNlX25leHRob3BgIGZ1bmN0aW9uIGlzIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9yIHBhcnQgb2YgdGhlIHByb2Nlc3MgZm9yIGhhbmRsaW5nIHRoZSBjcmVhdGlvbiBvZiBhICpuZXcqIG5leHQgaG9wIHdpdGhpbiB0aGUgcm91dGluZyB0YWJsZS4gIFNvLCB3aGVuZXZlciBhIG5ldyBuZXh0IGhvcCBpcyBpbnRyb2R1Y2VkIHRvIHRoZSBzeXN0ZW0sIGByZXBsYWNlX25leHRob3BgIGlzIGxpa2VseSB1c2VkIHRvIGhhbmRsZSB0aGUgbmVjZXNzYXJ5IHVwZGF0ZXMgYW5kIHBvdGVudGlhbGx5IHJlcGxhY2UgYW4gZXhpc3RpbmcgbmV4dCBob3AuIFRoaXMgaXMgYSBjcnVjaWFsIGxpbmsgYmV0d2VlbiB0aGUgdXNlciBzcGFjZSByb3V0aW5nIGluZm9ybWF0aW9uIGFuZCB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLgoKRXNzZW50aWFsbHksIEkmIzM5O20gaW5mZXJyaW5nIHRoYXQgd2hlbmV2ZXIgYSBuZXcgcm91dGUgaXMgY29uZmlndXJlZCB3aXRoIGEgc3BlY2lmaWMgbmV4dC1ob3AgaW5mb3JtYXRpb24sIGBydG1fbmV3X25leHRob3BgIGNhbGxzIGByZXBsYWNlX25leHRob3BgIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyBhcHBsaWVkIChwZXJoYXBzIHJlcGxhY2luZyBhbiBleGlzdGluZyBlbnRyeSkgYW5kIGJ5IGFzc29jaWF0aW9uIHRoZSBgbmhfcnRfY2FjaGVfZmx1c2hgIGZ1bmN0aW9uIGlzIHRoZSBzYWZlZ3VhcmQgdG8gaW52YWxpZGF0ZSBhbmQgcmVsb2FkIHRoZSBjb3JyZWN0IGNhY2hlZCBkYXRhLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZXJlZm9yZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgcm91dGluZyBhY2N1cmFjeSBhbmQgZWZmaWNpZW5jeSBpbiBkeW5hbWljIHJvdXRpbmcgZW52aXJvbm1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG1fbmV3X25leHRob3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jPTMyNjk9c3RhdGljIGludCBydG1fdG9fbmhfY29uZmlnX3J0bmwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTMzMDAtLyogcnRubCAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjMzMDE6c3RhdGljIGludCBydG1fbmV3X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzMwMi1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTQxODM9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIG5leHRob3BfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbm5ldC9pcHY0L25leHRob3AuYzo0MTg0Olx0ey5tc2d0eXBlID0gUlRNX05FV05FWFRIT1AsIC5kb2l0ID0gcnRtX25ld19uZXh0aG9wLFxubmV0L2lwdjQvbmV4dGhvcC5jLTQxODUtXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE5Mi1cdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLFxubmV0L2lwdjQvbmV4dGhvcC5jOjQxOTM6XHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE5NC1cdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9HRVRORVhUSE9QLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy00MTk2LVx0ey5wcm90b2NvbCA9IFBGX0lORVQ2LCAubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLFxubmV0L2lwdjQvbmV4dGhvcC5jOjQxOTc6XHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE5OC1cdHsucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXRsaW5rIE5leHRob3AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGNvbmZpZ3VyZSBhbmQgbWFuaXB1bGF0ZSBJUHY2IG5leHRob3BzIHVzaW5nIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBSVE1fTkVXTkVYVEhPUGAgd2l0aCB0aGUgYE5MTV9GX1JFUExBQ0VgIGZsYWcuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgZmV3IGtleSBzeW1ib2xzIEkgbmVlZCB0byB1bmRlcnN0YW5kOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB2YWxpZGF0aW5nLCBmbHVzaGluZyBjYWNoZXMsIGFuZCBub3RpZnlpbmcgb2YgdXBkYXRlcyB3aGVuIGEgbmV4dGhvcCBpcyBiZWluZyBtb2RpZmllZC4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGJlaGF2aW9yLiBDbGVhcmx5LCBgQ09ORklHX0lQVjZgIGlzIGEgbm8tYnJhaW5lcjsgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBJUHY2IG5leHRob3BzLCBzbyB0aGF0JiMzOTtzIGEgcmVxdWlyZW1lbnQuIEJ1dCBJJiMzOTttIGFsc28gd29uZGVyaW5nIGFib3V0IGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gTmV4dGhvcHMgYXJlIGZ1bmRhbWVudGFsIHRvIG11bHRpcGF0aCByb3V0aW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBmZWF0dXJlIGlzIGFsc28gYSBoYXJkIHJlcXVpcmVtZW50IG9yLCBhdCBsZWFzdCwgaGVhdmlseSBpbmZsdWVuY2VzIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gZXhhbWluaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgaWYgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW50byBvciBhZmZlY3RzIHRoZSBmbG93IGFyb3VuZCB0aGlzIG5leHRob3AgbWFuaXB1bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYG5leHRob3AuY2AgRGVwZW5kZW5jaWVzKioKCkhtbSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGVyZSB3YXMgYSBkZXBlbmRlbmN5LCBidXQgSSYjMzk7bSB0aGlua2luZywgJiMzNDtObywgYG5leHRob3AuY2AgZG9lc24mIzM5O3QgYWN0dWFsbHkgZGVwZW5kIG9uICp0aGF0KiBkaXJlY3RseS4mIzM0OyBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB0aGlzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBtb3JlIHN1YnRseSBsaW5rZWQuIFRoZSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXNjb3VudCB0aGUgZGVwZW5kZW5jeSwgYnV0IGl0IHdvdWxkIGJlIHdpc2UgdG8gY29udGludWUgdG8gZXZhbHVhdGUgb3RoZXIgYXJlYXMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuCgpBbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGFyZWEgb2YgY29uY2VybiBpcyBsb29raW5nIGNsZWFyLCB0aGVyZWZvcmUsIGl0JiMzOTtzIHRpbWUgdG8gY2hhbmdlIGdlYXJzIGFuZCBsb29rIGRlZXBlci4gTGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFU2AuIFRoYXQmIzM5O3MgbGlrZWx5IHRoZSBuZXh0IGxvZ2ljYWwgYXJlYSB0byBpbnZlc3RpZ2F0ZSwgZXNwZWNpYWxseSBpZiB0aGlzIHJlbGF0ZXMgdG8gSVB2NiByb3V0aW5nIHRhYmxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGF0IGNvbmZpZyBvcHRpb24gbWlnaHQgaW5mbHVlbmNlIGBuZXh0aG9wLmNgJiMzOTtzIGJlaGF2aW9yIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW5kaXJlY3QgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzMwoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiA5ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgTmV4dGhvcCBMb2NraW5nIGZvciBOZXRsaW5rIFJvdXRlIFJlcGxhY2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVhaCwgdGhlIG1haW4gdGhpbmcgaGVyZSBpcyBgSVBWNmAuIFdlIG5lZWQgdG8gYWRkcmVzcyBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBgZjZpX2xpc3RgIHdpdGhpbiB0aGUgYG5leHRob3BgIHN0cnVjdHVyZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJvdXRlIHJlcGxhY2VtZW50IHZpYSBuZXRsaW5rLiBJIGNhbiBzZWUgdGhyZWUgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLgoKSW4gdGhlIGBmaWI2X2NoZWNrX25oX2xpc3RgIGZ1bmN0aW9uLCB0aGV5JiMzOTtyZSBhZGRpbmcgYSBgc3Bpbl9sb2NrX2JoYCBhcm91bmQgdGhlIGl0ZXJhdGlvbiB0aHJvdWdoIGBmNmlfbGlzdGAuIFRoaXMgaXMgY2xlYXJseSB0byBwcm90ZWN0IHRoZSBsaXN0IHdoaWxlIGNoZWNraW5nIHNvdXJjZSBhZGRyZXNzZXMsIHdoaWNoIG1ha2VzIHNlbnNlIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGR1cmluZyBtb2RpZmljYXRpb25zLgoKYG5oX3J0X2NhY2hlX2ZsdXNoYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGEgbGl0dGxlIGludGVyZXN0aW5nLiBUaGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBleHBsaWNpdCBpdGVyYXRpb24gb3ZlciBgZjZpX2xpc3RgLiBJbnN0ZWFkLCB0aGVyZSYjMzk7cyBhIGxvY2sgYXJvdW5kIGNoZWNraW5nIGlmIHRoZSBsaXN0IGlzIGVtcHR5LCBhbmQgaWYgaXQmIzM5O3Mgbm90IGVtcHR5LCB0aGV5IGNhbGwgYHJ0X2dlbmlkX2J1bXBfaXB2NmAuIFRoaXMgaXMgYSBtb3JlIGVmZmljaWVudCBhcHByb2FjaCwgYXZvaWRpbmcgdGhlIGZ1bGwgaXRlcmF0aW9uIHdoZW4gaXQmIzM5O3MganVzdCBhIG1hdHRlciBvZiBzaWduYWxpbmcgYSBjYWNoZSBpbnZhbGlkYXRpb24uIFRoaXMgaXMgYSBnb29kIG9wdGltaXphdGlvbi4KCkZpbmFsbHksIGluIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLCBhbm90aGVyIGBzcGluX2xvY2tfYmhgIGhhcyBiZWVuIGFkZGVkIGFyb3VuZCB0aGUgaXRlcmF0aW9uIG92ZXIgYGY2aV9saXN0YC4gVGhpcyBwcm90ZWN0cyB0aGUgbGlzdCBkdXJpbmcgdGhlIHVwZGF0ZSBvZiByb3V0ZSBpbmZvcm1hdGlvbiwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgZGF0YSBpbnRlZ3JpdHkuCgpUaGUgb3ZlcmFsbCBnb2FsIGhlcmUgaXMgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nIGFyb3VuZCB0aGUgYGY2aV9saXN0YCB3aGVuIGRlYWxpbmcgd2l0aCBuZXRsaW5rIHJvdXRlIHJlcGxhY2VtZW50LCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpeCwgYXMgaXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVuIHJlcGxhY2luZyByb3V0ZXMsIHdoaWNoIGFyZSBjb3JlIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0uIEkgd291bGQgY29uc2lkZXIgdGhpcyBwYXRjaCAmIzM0O3dvcnRoIGZ1enppbmcmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X2NoZWNrX25oX2xpc3QmIzM0OywKICAgICYjMzQ7bmhfcnRfY2FjaGVfZmx1c2gmIzM0OywKICAgICYjMzQ7X19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAgaW4gSVB2NiBuZXh0aG9wIHJlcGxhY2VtZW50IGFuZCBjYWNoZSBmbHVzaGluZyBwYXRocy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgUlRNX05FV05FWFRIT1Agd2l0aCB0aGUgTkxNX0ZfUkVQTEFDRSBmbGFnLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWI2X2NoZWNrX25oX2xpc3QmIzM0OywKICAgICYjMzQ7bmhfcnRfY2FjaGVfZmx1c2gmIzM0OywKICAgICYjMzQ7X19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAgaW4gSVB2NiBuZXh0aG9wIHJlcGxhY2VtZW50IGFuZCBjYWNoZSBmbHVzaGluZyBwYXRocy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgUlRNX05FV05FWFRIT1Agd2l0aCB0aGUgTkxNX0ZfUkVQTEFDRSBmbGFnLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMDo0MS42MDMwMjYwMDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk4ODY0NjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl9jaGVja19uaF9saXN0XCIsXG4gICAgXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICAgIFwiX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YCBpbiBJUHY2IG5leHRob3AgcmVwbGFjZW1lbnQgYW5kIGNhY2hlIGZsdXNoaW5nIHBhdGhzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBSVE1fTkVXTkVYVEhPUCB3aXRoIHRoZSBOTE1fRl9SRVBMQUNFIGZsYWcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIGxvY2tpbmcgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NDEuNjAzMDMwNTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUzNzk1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NTA4YTI3YjE3ZGQxZDI3NWQ4ZTRhMTIwNzMxZTgwNDE1ZjI5OGYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDIwOjMwOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25leHRob3AuYyBiL25ldC9pcHY0L25leHRob3AuY1xcbmluZGV4IDYyMDViZDU3YWE4NTIwLi4xZTljY2FjNmJmMGYxNyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXh0aG9wLmNcXG4rKysgYi9uZXQvaXB2NC9uZXh0aG9wLmNcXG5AQCAtMTU5NywxNCArMTU5NywyMSBAQCBzdGF0aWMgaW50IGZpYjZfY2hlY2tfbmhfbGlzdChzdHJ1Y3QgbmV4dGhvcCAqb2xkLCBzdHJ1Y3QgbmV4dGhvcCAqbmV3LFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IGZpYjZfaW5mbyAqZjZpO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZvbGQtXFx1MDAzZWY2aV9saXN0KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm9sZC1cXHUwMDNlbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcXHUwMDI2b2xkLVxcdTAwM2VmNmlfbGlzdCwgbmhfbGlzdCkge1xcbi1cXHRcXHRpZiAoY2hlY2tfc3JjX2FkZHIoXFx1MDAyNmY2aS1cXHUwMDNlZmliNl9zcmMuYWRkciwgZXh0YWNrKSBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRlcnIgPSBjaGVja19zcmNfYWRkcihcXHUwMDI2ZjZpLVxcdTAwM2VmaWI2X3NyYy5hZGRyLCBleHRhY2spO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2b2xkLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRyZXR1cm4gZmliNl9jaGVja19uZXh0aG9wKG5ldywgTlVMTCwgZXh0YWNrKTtcXG4gfVxcbkBAIC0yMjMzLDE4ICsyMjQwLDE4IEBAIHN0YXRpYyB2b2lkIHJlbW92ZV9vbmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcXG4gc3RhdGljIHZvaWQgbmhfcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXh0aG9wICpyZXBsYWNlZF9uaClcXG4ge1xcbi1cXHRzdHJ1Y3QgZmliNl9pbmZvICpmNmk7XFxuIFxcdHN0cnVjdCBuaF9ncm91cCAqbmhnO1xcbitcXHRib29sIGhhdmVfZjZpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bmgtXFx1MDAzZWZpX2xpc3QpKVxcbiBcXHRcXHRydF9jYWNoZV9mbHVzaChuZXQpO1xcbiBcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmNmksIFxcdTAwMjZuaC1cXHUwMDNlZjZpX2xpc3QsIG5oX2xpc3QpIHtcXG4tXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZmNmktXFx1MDAzZWZpYjZfdGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4tXFx0XFx0ZmliNl91cGRhdGVfc2VybnVtX3VwdG9fcm9vdChuZXQsIGY2aSk7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZmNmktXFx1MDAzZWZpYjZfdGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4tXFx0fVxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5oLVxcdTAwM2Vsb2NrKTtcXG4rXFx0aGF2ZV9mNmkgPSAhbGlzdF9lbXB0eShcXHUwMDI2bmgtXFx1MDAzZWY2aV9saXN0KTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5oLVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKGhhdmVfZjZpKVxcbitcXHRcXHRydF9nZW5pZF9idW1wX2lwdjYobmV0KTtcXG4gXFxuIFxcdC8qIGlmIGFuIElQdjYgZ3JvdXAgd2FzIHJlcGxhY2VkLCB3ZSBoYXZlIHRvIHJlbGVhc2UgYWxsIG9sZFxcbiBcXHQgKiBkc3RzIHRvIG1ha2Ugc3VyZSBhbGwgcmVmY291bnRzIGFyZSByZWxlYXNlZFxcbkBAIC0yNTM4LDggKzI1NDUsMTAgQEAgc3RhdGljIHZvaWQgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbiBcXHRcXHRcXHRmaS1cXHUwMDNlbmhfdXBkYXRlZCA9IGZhbHNlO1xcbiBcXHR9XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5oLVxcdTAwM2Vsb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmNmksIFxcdTAwMjZuaC1cXHUwMDNlZjZpX2xpc3QsIG5oX2xpc3QpXFxuIFxcdFxcdGZpYjZfcnRfdXBkYXRlKG5ldCwgZjZpLCBpbmZvKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5oLVxcdTAwM2Vsb2NrKTtcXG4gfVxcbiBcXG4gLyogc2VuZCBSVE1fTkVXUk9VVEUgd2l0aCBSRVBMQUNFIGZsYWcgc2V0IGZvciBhbGwgRklCIGVudHJpZXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NDIuMTk5MDIzNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0ODM5MjY0MDEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl9jaGVja19uaF9saXN0XCIsXG4gICAgXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICAgIFwiX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YCBpbiBJUHY2IG5leHRob3AgcmVwbGFjZW1lbnQgYW5kIGNhY2hlIGZsdXNoaW5nIHBhdGhzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBSVE1fTkVXTkVYVEhPUCB3aXRoIHRoZSBOTE1fRl9SRVBMQUNFIGZsYWcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIGxvY2tpbmcgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NTA4YTI3YjE3ZGQxZDI3NWQ4ZTRhMTIwNzMxZTgwNDE1ZjI5OGYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMjA6MzA6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXh0aG9wLmMgYi9uZXQvaXB2NC9uZXh0aG9wLmNcbmluZGV4IDYyMDViZDU3YWE4NTIwLi4xZTljY2FjNmJmMGYxNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25leHRob3AuY1xuKysrIGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5AQCAtMTU5NywxNCArMTU5NywyMSBAQCBzdGF0aWMgaW50IGZpYjZfY2hlY2tfbmhfbGlzdChzdHJ1Y3QgbmV4dGhvcCAqb2xkLCBzdHJ1Y3QgbmV4dGhvcCAqbmV3LFxuIFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvICpmNmk7XG4rXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9sZC1cdTAwM2VmNmlfbGlzdCkpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm9sZC1cdTAwM2Vsb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcdTAwMjZvbGQtXHUwMDNlZjZpX2xpc3QsIG5oX2xpc3QpIHtcbi1cdFx0aWYgKGNoZWNrX3NyY19hZGRyKFx1MDAyNmY2aS1cdTAwM2VmaWI2X3NyYy5hZGRyLCBleHRhY2spIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRlcnIgPSBjaGVja19zcmNfYWRkcihcdTAwMjZmNmktXHUwMDNlZmliNl9zcmMuYWRkciwgZXh0YWNrKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRicmVhaztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm9sZC1cdTAwM2Vsb2NrKTtcbitcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4gXHRyZXR1cm4gZmliNl9jaGVja19uZXh0aG9wKG5ldywgTlVMTCwgZXh0YWNrKTtcbiB9XG5AQCAtMjIzMywxOCArMjI0MCwxOCBAQCBzdGF0aWMgdm9pZCByZW1vdmVfb25lX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4gc3RhdGljIHZvaWQgbmhfcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4gXHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKnJlcGxhY2VkX25oKVxuIHtcbi1cdHN0cnVjdCBmaWI2X2luZm8gKmY2aTtcbiBcdHN0cnVjdCBuaF9ncm91cCAqbmhnO1xuK1x0Ym9vbCBoYXZlX2Y2aTtcbiBcdGludCBpO1xuIFxuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5oLVx1MDAzZWZpX2xpc3QpKVxuIFx0XHRydF9jYWNoZV9mbHVzaChuZXQpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShmNmksIFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0LCBuaF9saXN0KSB7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZmNmktXHUwMDNlZmliNl90YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tXHRcdGZpYjZfdXBkYXRlX3Nlcm51bV91cHRvX3Jvb3QobmV0LCBmNmkpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZmNmktXHUwMDNlZmliNl90YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4tXHR9XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmgtXHUwMDNlbG9jayk7XG4rXHRoYXZlX2Y2aSA9ICFsaXN0X2VtcHR5KFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0KTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5oLVx1MDAzZWxvY2spO1xuK1x0aWYgKGhhdmVfZjZpKVxuK1x0XHRydF9nZW5pZF9idW1wX2lwdjYobmV0KTtcbiBcbiBcdC8qIGlmIGFuIElQdjYgZ3JvdXAgd2FzIHJlcGxhY2VkLCB3ZSBoYXZlIHRvIHJlbGVhc2UgYWxsIG9sZFxuIFx0ICogZHN0cyB0byBtYWtlIHN1cmUgYWxsIHJlZmNvdW50cyBhcmUgcmVsZWFzZWRcbkBAIC0yNTM4LDggKzI1NDUsMTAgQEAgc3RhdGljIHZvaWQgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxuIFx0XHRcdGZpLVx1MDAzZW5oX3VwZGF0ZWQgPSBmYWxzZTtcbiBcdH1cbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuaC1cdTAwM2Vsb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcdTAwMjZuaC1cdTAwM2VmNmlfbGlzdCwgbmhfbGlzdClcbiBcdFx0ZmliNl9ydF91cGRhdGUobmV0LCBmNmksIGluZm8pO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmgtXHUwMDNlbG9jayk7XG4gfVxuIFxuIC8qIHNlbmQgUlRNX05FV1JPVVRFIHdpdGggUkVQTEFDRSBmbGFnIHNldCBmb3IgYWxsIEZJQiBlbnRyaWVzXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMDo0Mi4xOTkwMjQ4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDU4NzA4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gbmV0L2lwdjQvbmV4dGhvcC5jKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC9pcHY0L25leHRob3AuY2AuIEl0IHNlZW1zIGxpa2UgYSBsb2NraW5nIGZpeCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGY2aV9saXN0YCBpbiB0aGlzIG1vZHVsZS4gVGhleSd2ZSBhZGRlZCBgc3Bpbl9sb2NrX2JoYCBjYWxscy4gTGV0J3Mgc2VlLi4uIGluIGBmaWI2X2NoZWNrX25oX2xpc3RgLCB0aGVyZSdzIGEgbG9jayBhZGRlZCBiZWZvcmUgdGhhdCBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgbG9vcCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuIEFuZCBpbiBgbmhfcnRfY2FjaGVfZmx1c2hgLCB0aGV5J3ZlIGNoYW5nZWQgdGhlIGxvY2tpbmcgYW5kIGFyZSBub3cgY2hlY2tpbmcgYCFsaXN0X2VtcHR5KFx1MDAyNm5oLVx1MDAzZWY2aV9saXN0KWAgYW5kIGJ1bXBpbmcgdGhlIElQdjYgZ2VuaWQuIFRoYXQncyBhIGNsZXZlciBvcHRpbWl6YXRpb24sIGF2b2lkcyBpdGVyYXRpbmcgdGhlIGxpc3QgdW5uZWNlc3NhcmlseS4gRmluYWxseSwgaW4gYF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeWAsIHRoZXJlJ3MgYW5vdGhlciBsb2NrIGFkZGVkIGFyb3VuZCB0aGUgbGlzdCBpdGVyYXRpb24uXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBmaXhpbmcgc29tZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBpbXByb3ZpbmcgdGhlIGxvY2tpbmcgYXJvdW5kIGBmNmlfbGlzdGAuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBtZXJpdHMgc29tZSBmdXp6aW5nLiBHb3R0YSBtYWtlIHN1cmUgdGhpcyBmaXggaXMgcm9jayBzb2xpZC5cblxuTm93LCBsZXQncyBzZWUgd2hpY2ggY29uZmlnIG9wdGlvbnMgYWN0dWFsbHkgZW5hYmxlIHRoaXMgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbnMgYnVpbGQgYG5ldC9pcHY0L25leHRob3AuY2AuIEkgd291bGQgYXNzdW1lIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBvciBzb21ldGhpbmcgc2ltaWxhciB3b3VsZCBiZSBpbnZvbHZlZC4gVGltZSB0byBnbyBjaGVjayBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCBjb25maXJtIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGJyaW5nIHRoaXMgY29kZSBpbnRvIHRoZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NDcuMzA0ODk3NDkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODQ1MTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXh0aG9wXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTE2LVxcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE3OlxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0xOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NDcuNzAzMzU0MjIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MDgxMjkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhpcyBjb2RlIHNuaXBwZXQsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBuZXR3b3JraW5nIGFuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKklQdjYgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBidWlsZCBpcyB1bmNvbmRpdGlvbmFsIGZvciBJUHY0LCB0aGF0J3MgZmluZSwgYnV0IHRoZSByZWFsbHkgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGNsZWFybHkgSVB2Ni1jZW50cmljOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBpbnRpbWF0ZWx5IGxpbmtlZCB0byB0aGUgaGFuZGxpbmcgb2YgSVB2NiBuZXh0IGhvcHMsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IHRoZSBJUHY2IHJvdXRpbmcgdGFibGVzIHdvcmsuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgY29kZSAqYWN0dWFsbHkqIGRlcGVuZGVudCBvbiBJUHY2IGJlaW5nIGNvbmZpZ3VyZWQsIGV2ZW4gdGhvdWdoIHRoZSBvdmVyYWxsIGJ1aWxkIGlzbid0PyBQZXJoYXBzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCB0aGVtc2VsdmVzLCBvciBtYXliZSB0aGV5IGp1c3Qgd29uJ3QgYmUgY2FsbGVkIGlmIElQdjYgaXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlciBhbmQgZGV0ZXJtaW5lIGlmIGBDT05GSUdfSVBWNmAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGlzIGNvZGUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBvciBpZiB0aGVyZSdzIHNvbWUgZ3JhY2VmdWwgZGVncmFkYXRpb24gb3IgYWx0ZXJuYXRpdmUgcGF0aCB0aGF0J3MgcG9zc2libGUuIEkgc3VzcGVjdCB3ZSdsbCBmaW5kIHNvbWUgYGlmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzUyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NTEuNDc0MTcwMTE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQ2NzU3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWI2X2NoZWNrX25oX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25leHRob3AuYz0xNTkxPUVYUE9SVF9TWU1CT0xfR1BMKGZpYjZfY2hlY2tfbmV4dGhvcCk7XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMTU5NS0gKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MTU5NjpzdGF0aWMgaW50IGZpYjZfY2hlY2tfbmhfbGlzdChzdHJ1Y3QgbmV4dGhvcCAqb2xkLCBzdHJ1Y3QgbmV4dGhvcCAqbmV3LFxcbm5ldC9pcHY0L25leHRob3AuYy0xNTk3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0yNTY5PXN0YXRpYyBpbnQgcmVwbGFjZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm9sZCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0yNTgzLVxcbm5ldC9pcHY0L25leHRob3AuYzoyNTg0OlxcdGVyciA9IGZpYjZfY2hlY2tfbmhfbGlzdChvbGQsIG5ldywgZXh0YWNrKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjU4NS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTI2MDctXFxubmV0L2lwdjQvbmV4dGhvcC5jOjI2MDg6XFx0XFx0ZXJyID0gZmliNl9jaGVja19uaF9saXN0KG5oZ2UtXFx1MDAzZW5oX3BhcmVudCwgbmV3LCBleHRhY2spO1xcbm5ldC9pcHY0L25leHRob3AuYy0yNjA5LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIwOjMwOjUxLjU4NTY0MjU3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NTk0NTE4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqQ2hlY2tpbmcgZm9yIElQdjYgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVmaW5lcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZiBDT05GSUdfSVBWNmAgZGlyZWN0aXZlcyBsdXJraW5nIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMuIFRoYXTigJlzIHRoZSBmaXJzdCB0aGluZyBJIGRvIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGNvZGUuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBJUHY2IHN1cHBvcnQgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gRGVwZW5kaW5nIG9uIHRob3NlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGFuZCBwZXJoYXBzIGl0cyBiZWhhdmlvciwgd2lsbCBiZSBkcmFzdGljYWxseSBkaWZmZXJlbnQuIElmIHRoZXJlJ3MgYW4gSVB2NiBjaGVjaywgSSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggYm90aCBJUHY0IGFuZCBJUHY2LXNwZWNpZmljIGNvZGUgcGF0aHMuIFNvLCBgI2lmZGVmIENPTkZJR19JUFY2YCBpdCBpcyEgTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NTQuMjQ1MDk5MzQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3ODg2NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmM9MTQxMT1zdGF0aWMgYm9vbCBuZXh0aG9wX2lzX2dvb2RfbmgoY29uc3Qgc3RydWN0IG5leHRob3AgKm5oKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTE0MTgtXFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MTQxOTpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXFx1MDAyNlxcdTAwMjYgaXB2Nl9nb29kX25oKFxcdTAwMjZuaGktXFx1MDAzZWZpYjZfbmgpO1xcbm5ldC9pcHY0L25leHRob3AuYy0xNDIwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NTQuMzMyOTkxNDY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNzc4MDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipVbnBhY2tpbmcgYSBDb21waWxhdGlvbiBQdXp6bGUqKlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmSSB0aG91Z2h0IEkgdW5kZXJzdG9vZCBob3cgdGhhdCBgZmliNl9jaGVja19uaF9saXN0YCBmdW5jdGlvbiB3YXMgc3VwcG9zZWQgdG8gYmVoYXZlLCBidXQgbm93IEknbSB0aGlua2luZywgaXMgaXQgcmVhbGx5ICphbHdheXMqIGNvbXBpbGVkPyBJJ20gcHJldHR5IHN1cmUgaXQncyBtZWFudCB0byBiZSBjb25kaXRpb25hbCBvbiBzb21lIGJ1aWxkIGZsYWdzLCBidXQgdGhpcyBmZWVscyBvZmYuIE9rYXksIHRpbWUgdG8gZGl2ZSBpbiBhbmQgY29uZmlybS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBuZXQvaXB2NC9uZXh0aG9wLmNgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBuaXR0eS1ncml0dHkgb2YgSVB2NCBuZXh0IGhvcCBoYW5kbGluZyBsaXZlcywgYW5kIGl0IHNlZW1zIGxpa2UgYSBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBmaWI2X2NoZWNrX25oX2xpc3RgLiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIHNheXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMDo1Ny43NTA3NzUxOTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTgwOlxcdFxcbjE1ODE6XFx0XFx0aWYgKGlzX2ZkYl9uaCkge1xcbjE1ODI6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUm91dGUgY2Fubm90IHBvaW50IHRvIGEgZmRiIG5leHRob3BcXFwiKTtcXG4xNTgzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1ODQ6XFx0XFx0fVxcbjE1ODU6XFx0XFxuMTU4NjpcXHRcXHRyZXR1cm4gMDtcXG4xNTg3OlxcdG5vX3Y0X25oOlxcbjE1ODg6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVB2NiByb3V0ZXMgY2FuIG5vdCB1c2UgYW4gSVB2NCBuZXh0aG9wXFxcIik7XFxuMTU4OTpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTkwOlxcdH1cXG4xNTkxOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGZpYjZfY2hlY2tfbmV4dGhvcCk7XFxuMTU5MjpcXHRcXG4xNTkzOlxcdC8qIGlmIGV4aXN0aW5nIG5leHRob3AgaGFzIGlwdjYgcm91dGVzIGxpbmtlZCB0byBpdCwgbmVlZFxcbjE1OTQ6XFx0ICogdG8gdmVyaWZ5IHRoaXMgbmV3IHNwZWMgd29ya3Mgd2l0aCBpcHY2XFxuMTU5NTpcXHQgKi9cXG4xNTk2OlxcdHN0YXRpYyBpbnQgZmliNl9jaGVja19uaF9saXN0KHN0cnVjdCBuZXh0aG9wICpvbGQsIHN0cnVjdCBuZXh0aG9wICpuZXcsXFxuMTU5NzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTU5ODpcXHR7XFxuMTU5OTpcXHRcXHRzdHJ1Y3QgZmliNl9pbmZvICpmNmk7XFxuMTYwMDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xNjAxOlxcdFxcbjE2MDI6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm9sZC1cXHUwMDNlZjZpX2xpc3QpKVxcbjE2MDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2b2xkLVxcdTAwM2Vsb2NrKTtcXG4xNjA2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZjZpLCBcXHUwMDI2b2xkLVxcdTAwM2VmNmlfbGlzdCwgbmhfbGlzdCkge1xcbjE2MDc6XFx0XFx0XFx0ZXJyID0gY2hlY2tfc3JjX2FkZHIoXFx1MDAyNmY2aS1cXHUwMDNlZmliNl9zcmMuYWRkciwgZXh0YWNrKTtcXG4xNjA4OlxcdFxcdFxcdGlmIChlcnIpXFxuMTYwOTpcXHRcXHRcXHRcXHRicmVhaztcXG4xNjEwOlxcdFxcdH1cXG4xNjExOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZvbGQtXFx1MDAzZWxvY2spO1xcbjE2MTI6XFx0XFxuMTYxMzpcXHRcXHRpZiAoZXJyKVxcbjE2MTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNjE1OlxcdFxcbjE2MTY6XFx0XFx0cmV0dXJuIGZpYjZfY2hlY2tfbmV4dGhvcChuZXcsIE5VTEwsIGV4dGFjayk7XFxuMTYxNzpcXHR9XFxuMTYxODpcXHRcXG4xNjE5OlxcdHN0YXRpYyBpbnQgbmV4dGhvcF9jaGVja19zY29wZShzdHJ1Y3QgbmhfaW5mbyAqbmhpLCB1OCBzY29wZSxcXG4xNjIwOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTYyMTpcXHR7XFxuMTYyMjpcXHRcXHRpZiAoc2NvcGUgPT0gUlRfU0NPUEVfSE9TVCBcXHUwMDI2XFx1MDAyNiBuaGktXFx1MDAzZWZpYl9uaGMubmhjX2d3X2ZhbWlseSkge1xcbjE2MjM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjE2MjQ6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJSb3V0ZSB3aXRoIGhvc3Qgc2NvcGUgY2FuIG5vdCBoYXZlIGEgZ2F0ZXdheVxcXCIpO1xcbjE2MjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYyNjpcXHRcXHR9XFxuMTYyNzpcXHRcXG4xNjI4OlxcdFxcdGlmIChuaGktXFx1MDAzZWZpYl9uaGMubmhjX2ZsYWdzIFxcdTAwMjYgUlROSF9GX09OTElOSyBcXHUwMDI2XFx1MDAyNiBzY29wZSBcXHUwMDNlPSBSVF9TQ09QRV9MSU5LKSB7XFxuMTYyOTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTY29wZSBtaXNtYXRjaCB3aXRoIG5leHRob3BcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzA6NTcuNzUxMTE4OTE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTg0MjQxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbnBhY2tpbmcgdGhlIERlcGVuZGVuY2llczogYGZpYjZfY2hlY2tfbmhfbGlzdGAqKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSBgZmliNl9jaGVja19uaF9saXN0YCBpcyBnZXR0aW5nIGNvbXBpbGVkIHJlZ2FyZGxlc3Mgb2Ygb3RoZXIgY29uZGl0aW9ucy4gVGhhdCdzIGZpbmUgaW4gaXRzZWxmLCBidXQgaXQncyB0aGUgKmludGVyYWN0aW9uKiBJIG5lZWQgdG8gZm9jdXMgb24uIEl0J3MgdG91Y2hpbmcgYGZpYjZfaW5mb2AgYW5kIGBmNmlfbGlzdGAuIFRob3NlIGFyZSBjbGVhcmx5IElQdjYgcm91dGluZyBzdHJ1Y3R1cmVzLiBNeSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbGlua2FnZS4gQWgsIGhhbmcgb27igKYgSSByZW1lbWJlciwgYGY2aV9saXN0YCBpcyBhY3R1YWxseSBuZXN0ZWQgd2l0aGluIGBzdHJ1Y3QgbmV4dGhvcGAuIE9rYXksIHRoYXQncyBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBpbmNsdWRlL25ldC9uZXh0aG9wLmhgIHRvIG1ha2Ugc3VyZSBJJ20gcmVtZW1iZXJpbmcgdGhpcyByZWxhdGlvbnNoaXAgY29ycmVjdGx5LiBJIG5lZWQgdG8gcmVmcmVzaCB0aGF0IHBhcnRpY3VsYXIgcGllY2Ugb2YgbWVtb3J5IGFuZCBjb25maXJtIGhvdyB0aGlzIGlzIGFsbCBjb25uZWN0ZWQsIHN0cnVjdHVyYWxseS4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgc3VidGxlIHBvaW50cyBhYm91dCB0aG9zZSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzE6MDEuMjQ5NTQ2MDA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI3ODIyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZjZpX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvbmV4dGhvcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25leHRob3AuaD0xNDI9c3RydWN0IG5leHRob3Age1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV4dGhvcC5oLTE0NC1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0ZmlfbGlzdDsgICAgLyogdjQgZW50cmllcyB1c2luZyBuaCAqL1xcbmluY2x1ZGUvbmV0L25leHRob3AuaDoxNDU6XFx0c3RydWN0IGxpc3RfaGVhZFxcdGY2aV9saXN0OyAgIC8qIHY2IGVudHJpZXMgdXNpbmcgbmggKi9cXG5pbmNsdWRlL25ldC9uZXh0aG9wLmgtMTQ2LVxcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGZkYl9saXN0OyAgIC8qIGZkYiBlbnRyaWVzIHVzaW5nIHRoaXMgbmggKi9cXG4tLVxcbmluY2x1ZGUvbmV0L25leHRob3AuaC0xNTUtXFx0Ym9vbFxcdFxcdFxcdGRlYWQ7XFxuaW5jbHVkZS9uZXQvbmV4dGhvcC5oOjE1NjpcXHRzcGlubG9ja190XFx0XFx0bG9jazsgICAgICAgLyogcHJvdGVjdCBkZWFkIGFuZCBmNmlfbGlzdCAqL1xcbmluY2x1ZGUvbmV0L25leHRob3AuaC0xNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIwOjMxOjAxLjY5MjMzMzczN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc2MzU3ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBOZXh0aG9wIEluZnJhc3RydWN0dXJlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG5ldyBjb2RlLCBhbmQgaXQncyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgY29yZSBvZiB0aGUgbmV4dGhvcCBpbmZyYXN0cnVjdHVyZS4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gdGhlc2UgdGhyZWUgZnVuY3Rpb25zOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcsIGRlYWxpbmcgd2l0aCByZXBsYWNpbmcgbmV4dGhvcHMgYW5kIGZsdXNoaW5nIHRoZSBjYWNoZS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRoZXNlIGZ1bmN0aW9uczsgdGhleSdyZSB0aGUga2V5IHRhcmdldHMuXG5cblNvLCBmb3IgZnV6emluZywgSSdtIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGBmaWI2X2NoZWNrX25oX2xpc3RgLCBgbmhfcnRfY2FjaGVfZmx1c2hgLCBhbmQgYF9fbmV4dGhvcF9yZXBsYWNlX25vdGlmeWAuXG5cbk5vdywgdG8gZ2V0IHRoZSBpbnRlcmVzdGluZyBwYXRocyB0cmlnZ2VyZWQsIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgSVB2NiBpcyBlbmFibGVkLCBlc3BlY2lhbGx5IHRvIHBvcHVsYXRlIGBmNmlfbGlzdGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSVBWNmAgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIElQdjYgcm91dGVzIGFuZCB0cmlnZ2VyIHJlbGV2YW50IGNvZGUgZXhlY3V0aW9uLiBMb29raW5nIHRocm91Z2ggdGhlIGNvZGUsIGFsdGhvdWdoIGl0IGFwcGVhcnMgdG8gYmUgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LCBJIHN1c3BlY3QgaXQgd29uJ3QgYWN0dWFsbHkgZG8gbXVjaCB3aXRob3V0IElQdjYgZW5hYmxlZC4gWWVwLCBgSVBWNmAgaXMgbmVlZGVkLiBObyBzcGVjaWZpYyBjb25maWdzIGZvciBuZXh0aG9wcy4gYG5ldC9pcHY0L25leHRob3AuY2AgY29tcGlsZXMgdW5jb25kaXRpb25hbGx5LlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBhbnl0aGluZyBsaWtlIGBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVNgIG9yIGBDT05GSUdfSVBWNl9ST1VURVJfUFJFRmAgYXJlIG5lY2Vzc2FyeSwgYnV0IEknbSB0aGlua2luZyBqdXN0IGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBgbmhfcnRfY2FjaGVfZmx1c2hgIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMTowNy4xNjg2OTQ0NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDk4NDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jPTIyMzA9c3RhdGljIHZvaWQgcmVtb3ZlX29uZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIyMzktICovXFxubmV0L2lwdjQvbmV4dGhvcC5jOjIyNDA6c3RhdGljIHZvaWQgbmhfcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIyNDEtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5leHRob3AgKnJlcGxhY2VkX25oKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jPTI1Njk9c3RhdGljIGludCByZXBsYWNlX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqb2xkLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTI2MTgtXFx0aWYgKCFlcnIpIHtcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjYxOTpcXHRcXHRuaF9ydF9jYWNoZV9mbHVzaChuZXQsIG9sZCwgbmV3KTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYyMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzE6MDcuMjk5NjgzNDkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDQ2NzkxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKk15IEFuYWx5c2lzIG9mIGByZXBsYWNlX25leHRob3BgIGFuZCBpdHMgUm9sZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgYHJlcGxhY2VfbmV4dGhvcGAgZnVuY3Rpb24gaXMgY2xlYXJseSBpbXBvcnRhbnQgaW4gcm91dGUgbWFuYWdlbWVudC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxpbmcgYG5oX3J0X2NhY2hlX2ZsdXNoYCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIGNhY2hlIGludmFsaWRhdGlvbiBvciB1cGRhdGUgcmVsYXRlZCB0byB0aGUgbmV4dCBob3AgaW5mb3JtYXRpb24uIFRoYXQncyBhIGNsYXNzaWMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOyBpZiB3ZSdyZSBjaGFuZ2luZyB0aGUgbmV4dCBob3AsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSByb3V0aW5nIGNhY2hlIHJlZmxlY3RzIHRoYXQgY2hhbmdlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIGRpcmVjdGluZyB0cmFmZmljIGRvd24gc3RhbGUgcm91dGVzLiBUaGF0IGZ1bmN0aW9uIG5hbWUsIGBuaF9ydF9jYWNoZV9mbHVzaGAsIGlzIHByZXR0eSBleHBsaWNpdCBhYm91dCBpdHMgcm9sZSBpbiBwdXJnaW5nIG9yIHVwZGF0aW5nIHRoZSByZWxldmFudCBjYWNoZSBlbnRyaWVzLlxuXG5UaGUgc2Vjb25kIHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgdGhhdCBgcmVwbGFjZV9uZXh0aG9wYCBpcyAqY2FsbGVkKiBmcm9tIGBydG1fbmV3X25leHRob3BgLiAgYHJ0bV9uZXdfbmV4dGhvcGA/IFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBgcmVwbGFjZV9uZXh0aG9wYCBmdW5jdGlvbiBpcyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBvciBwYXJ0IG9mIHRoZSBwcm9jZXNzIGZvciBoYW5kbGluZyB0aGUgY3JlYXRpb24gb2YgYSAqbmV3KiBuZXh0IGhvcCB3aXRoaW4gdGhlIHJvdXRpbmcgdGFibGUuICBTbywgd2hlbmV2ZXIgYSBuZXcgbmV4dCBob3AgaXMgaW50cm9kdWNlZCB0byB0aGUgc3lzdGVtLCBgcmVwbGFjZV9uZXh0aG9wYCBpcyBsaWtlbHkgdXNlZCB0byBoYW5kbGUgdGhlIG5lY2Vzc2FyeSB1cGRhdGVzIGFuZCBwb3RlbnRpYWxseSByZXBsYWNlIGFuIGV4aXN0aW5nIG5leHQgaG9wLiBUaGlzIGlzIGEgY3J1Y2lhbCBsaW5rIGJldHdlZW4gdGhlIHVzZXIgc3BhY2Ugcm91dGluZyBpbmZvcm1hdGlvbiBhbmQgdGhlIGtlcm5lbCdzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGluZmVycmluZyB0aGF0IHdoZW5ldmVyIGEgbmV3IHJvdXRlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIHNwZWNpZmljIG5leHQtaG9wIGluZm9ybWF0aW9uLCBgcnRtX25ld19uZXh0aG9wYCBjYWxscyBgcmVwbGFjZV9uZXh0aG9wYCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgYXBwbGllZCAocGVyaGFwcyByZXBsYWNpbmcgYW4gZXhpc3RpbmcgZW50cnkpIGFuZCBieSBhc3NvY2lhdGlvbiB0aGUgYG5oX3J0X2NhY2hlX2ZsdXNoYCBmdW5jdGlvbiBpcyB0aGUgc2FmZWd1YXJkIHRvIGludmFsaWRhdGUgYW5kIHJlbG9hZCB0aGUgY29ycmVjdCBjYWNoZWQgZGF0YS4gVGhlc2UgZnVuY3Rpb25zIGFyZSB0aGVyZWZvcmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHJvdXRpbmcgYWNjdXJhY3kgYW5kIGVmZmljaWVuY3kgaW4gZHluYW1pYyByb3V0aW5nIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIwOjMxOjExLjQwNDM2NDgxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgwNTU1NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRtX25ld19uZXh0aG9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmM9MzI2OT1zdGF0aWMgaW50IHJ0bV90b19uaF9jb25maWdfcnRubChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zMzAwLS8qIHJ0bmwgKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzMwMTpzdGF0aWMgaW50IHJ0bV9uZXdfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzMwMi1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9NDE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmV4dGhvcF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9pcHY0L25leHRob3AuYzo0MTg0OlxcdHsubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLCAuZG9pdCA9IHJ0bV9uZXdfbmV4dGhvcCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE4NS1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy00MTkyLVxcdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLFxcbm5ldC9pcHY0L25leHRob3AuYzo0MTkzOlxcdCAuZG9pdCA9IHJ0bV9uZXdfbmV4dGhvcCwgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDE5NC1cXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy00MTk2LVxcdHsucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fTkVXTkVYVEhPUCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDE5NzpcXHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQxOTgtXFx0ey5wcm90b2NvbCA9IFBGX0lORVQ2LCAubXNndHlwZSA9IFJUTV9HRVRORVhUSE9QLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMToxMS41MDI0MjQ4NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMDA1OTg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRsaW5rIE5leHRob3AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjb25maWd1cmUgYW5kIG1hbmlwdWxhdGUgSVB2NiBuZXh0aG9wcyB1c2luZyBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgUlRNX05FV05FWFRIT1BgIHdpdGggdGhlIGBOTE1fRl9SRVBMQUNFYCBmbGFnLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGZldyBrZXkgc3ltYm9scyBJIG5lZWQgdG8gdW5kZXJzdGFuZDogYGZpYjZfY2hlY2tfbmhfbGlzdGAsIGBuaF9ydF9jYWNoZV9mbHVzaGAsIGFuZCBgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5YC4gVGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdmFsaWRhdGluZywgZmx1c2hpbmcgY2FjaGVzLCBhbmQgbm90aWZ5aW5nIG9mIHVwZGF0ZXMgd2hlbiBhIG5leHRob3AgaXMgYmVpbmcgbW9kaWZpZWQuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGJlaGF2aW9yLiBDbGVhcmx5LCBgQ09ORklHX0lQVjZgIGlzIGEgbm8tYnJhaW5lcjsgd2UncmUgZGVhbGluZyB3aXRoIElQdjYgbmV4dGhvcHMsIHNvIHRoYXQncyBhIHJlcXVpcmVtZW50LiBCdXQgSSdtIGFsc28gd29uZGVyaW5nIGFib3V0IGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gTmV4dGhvcHMgYXJlIGZ1bmRhbWVudGFsIHRvIG11bHRpcGF0aCByb3V0aW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCBmZWF0dXJlIGlzIGFsc28gYSBoYXJkIHJlcXVpcmVtZW50IG9yLCBhdCBsZWFzdCwgaGVhdmlseSBpbmZsdWVuY2VzIHRoZSBmdW5jdGlvbmFsaXR5IEknbSBleGFtaW5pbmcuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhbmQgc2VlIGlmIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gb3IgYWZmZWN0cyB0aGUgZmxvdyBhcm91bmQgdGhpcyBuZXh0aG9wIG1hbmlwdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMToxNS44MDI0ODcxNTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQzNTY1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIwOjMxOjE1LjkwNDkzMjE3NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAwMjI3MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgbmV4dGhvcC5jYCBEZXBlbmRlbmNpZXMqKlxuXG5IbW0sIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhlcmUgd2FzIGEgZGVwZW5kZW5jeSwgYnV0IEknbSB0aGlua2luZywgXCJObywgYG5leHRob3AuY2AgZG9lc24ndCBhY3R1YWxseSBkZXBlbmQgb24gKnRoYXQqIGRpcmVjdGx5LlwiIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHRoaXMuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBtb3JlIHN1YnRseSBsaW5rZWQuIFRoZSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXNjb3VudCB0aGUgZGVwZW5kZW5jeSwgYnV0IGl0IHdvdWxkIGJlIHdpc2UgdG8gY29udGludWUgdG8gZXZhbHVhdGUgb3RoZXIgYXJlYXMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG5cbkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgYXJlYSBvZiBjb25jZXJuIGlzIGxvb2tpbmcgY2xlYXIsIHRoZXJlZm9yZSwgaXQncyB0aW1lIHRvIGNoYW5nZSBnZWFycyBhbmQgbG9vayBkZWVwZXIuIExldCdzIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFU2AuIFRoYXQncyBsaWtlbHkgdGhlIG5leHQgbG9naWNhbCBhcmVhIHRvIGludmVzdGlnYXRlLCBlc3BlY2lhbGx5IGlmIHRoaXMgcmVsYXRlcyB0byBJUHY2IHJvdXRpbmcgdGFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoYXQgY29uZmlnIG9wdGlvbiBtaWdodCBpbmZsdWVuY2UgYG5leHRob3AuY2AncyBiZWhhdmlvciBhbmQgaWYgdGhlcmUncyBhbnkgaW5kaXJlY3QgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMToxOS4zMDUxNjE2NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MzEzODAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMDozMToxOS40MDM0ODI3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAwOTM3MjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBOZXh0aG9wIExvY2tpbmcgZm9yIE5ldGxpbmsgUm91dGUgUmVwbGFjZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVhaCwgdGhlIG1haW4gdGhpbmcgaGVyZSBpcyBgSVBWNmAuIFdlIG5lZWQgdG8gYWRkcmVzcyBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBgZjZpX2xpc3RgIHdpdGhpbiB0aGUgYG5leHRob3BgIHN0cnVjdHVyZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJvdXRlIHJlcGxhY2VtZW50IHZpYSBuZXRsaW5rLiBJIGNhbiBzZWUgdGhyZWUgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkOiBgZmliNl9jaGVja19uaF9saXN0YCwgYG5oX3J0X2NhY2hlX2ZsdXNoYCwgYW5kIGBfX25leHRob3BfcmVwbGFjZV9ub3RpZnlgLlxuXG5JbiB0aGUgYGZpYjZfY2hlY2tfbmhfbGlzdGAgZnVuY3Rpb24sIHRoZXkncmUgYWRkaW5nIGEgYHNwaW5fbG9ja19iaGAgYXJvdW5kIHRoZSBpdGVyYXRpb24gdGhyb3VnaCBgZjZpX2xpc3RgLiBUaGlzIGlzIGNsZWFybHkgdG8gcHJvdGVjdCB0aGUgbGlzdCB3aGlsZSBjaGVja2luZyBzb3VyY2UgYWRkcmVzc2VzLCB3aGljaCBtYWtlcyBzZW5zZSB0byBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSBkdXJpbmcgbW9kaWZpY2F0aW9ucy5cblxuYG5oX3J0X2NhY2hlX2ZsdXNoYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGEgbGl0dGxlIGludGVyZXN0aW5nLiBUaGV5J3ZlIHJlbW92ZWQgdGhlIGV4cGxpY2l0IGl0ZXJhdGlvbiBvdmVyIGBmNmlfbGlzdGAuIEluc3RlYWQsIHRoZXJlJ3MgYSBsb2NrIGFyb3VuZCBjaGVja2luZyBpZiB0aGUgbGlzdCBpcyBlbXB0eSwgYW5kIGlmIGl0J3Mgbm90IGVtcHR5LCB0aGV5IGNhbGwgYHJ0X2dlbmlkX2J1bXBfaXB2NmAuIFRoaXMgaXMgYSBtb3JlIGVmZmljaWVudCBhcHByb2FjaCwgYXZvaWRpbmcgdGhlIGZ1bGwgaXRlcmF0aW9uIHdoZW4gaXQncyBqdXN0IGEgbWF0dGVyIG9mIHNpZ25hbGluZyBhIGNhY2hlIGludmFsaWRhdGlvbi4gVGhpcyBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uLlxuXG5GaW5hbGx5LCBpbiBgX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5YCwgYW5vdGhlciBgc3Bpbl9sb2NrX2JoYCBoYXMgYmVlbiBhZGRlZCBhcm91bmQgdGhlIGl0ZXJhdGlvbiBvdmVyIGBmNmlfbGlzdGAuIFRoaXMgcHJvdGVjdHMgdGhlIGxpc3QgZHVyaW5nIHRoZSB1cGRhdGUgb2Ygcm91dGUgaW5mb3JtYXRpb24sIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIGRhdGEgaW50ZWdyaXR5LlxuXG5UaGUgb3ZlcmFsbCBnb2FsIGhlcmUgaXMgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nIGFyb3VuZCB0aGUgYGY2aV9saXN0YCB3aGVuIGRlYWxpbmcgd2l0aCBuZXRsaW5rIHJvdXRlIHJlcGxhY2VtZW50LCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpeCwgYXMgaXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVuIHJlcGxhY2luZyByb3V0ZXMsIHdoaWNoIGFyZSBjb3JlIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0uIEkgd291bGQgY29uc2lkZXIgdGhpcyBwYXRjaCBcIndvcnRoIGZ1enppbmdcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzMywiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjA6MzE6MzAuNDEyODU3MjI0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4ODAzNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl9jaGVja19uaF9saXN0XCIsXG4gICAgXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICAgIFwiX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YCBpbiBJUHY2IG5leHRob3AgcmVwbGFjZW1lbnQgYW5kIGNhY2hlIGZsdXNoaW5nIHBhdGhzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBSVE1fTkVXTkVYVEhPUCB3aXRoIHRoZSBOTE1fRl9SRVBMQUNFIGZsYWcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIGxvY2tpbmcgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliNl9jaGVja19uaF9saXN0XCIsXG4gICAgXCJuaF9ydF9jYWNoZV9mbHVzaFwiLFxuICAgIFwiX19uZXh0aG9wX3JlcGxhY2Vfbm90aWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9ja2luZyBhcm91bmQgYGY2aV9saXN0YCBpbiBJUHY2IG5leHRob3AgcmVwbGFjZW1lbnQgYW5kIGNhY2hlIGZsdXNoaW5nIHBhdGhzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBSVE1fTkVXTkVYVEhPUCB3aXRoIHRoZSBOTE1fRl9SRVBMQUNFIGZsYWcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIGxvY2tpbmcgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowks5mp[1] Phase: Succeeded StartedAt: 2026-07-22 20:31:41 +0000 UTC FinishedAt: 2026-07-22 20:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 20:31:41 +0000 UTC FinishedAt: 2026-07-22 20:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2] Phase: Succeeded StartedAt: 2026-07-22 20:31:41 +0000 UTC FinishedAt: 2026-07-23 01:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-22 20:31:41 +0000 UTC FinishedAt: 2026-07-23 01:43:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-22 20:31:41 +0000 UTC FinishedAt: 2026-07-22 20:31:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-22 20:31:41 +0000 UTC FinishedAt: 2026-07-22 20:31:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowks5mp/series-workflowks5mp-convert-artifact-2579600917/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-22 20:31:51 +0000 UTC FinishedAt: 2026-07-22 21:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-22 20:31:51 +0000 UTC FinishedAt: 2026-07-22 21:27:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*38972981-6227-4c0b-9de5-54cf1b5d3eed,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-workflowks5mp/series-workflowks5mp-convert-artifact-2579600917/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": "40067da0-fb2a-46c0-bf5f-8d3ad3c56cf8", "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-workflowks5mp/series-workflowks5mp-build-action-3531730555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-22 20:31:51 +0000 UTC FinishedAt: 2026-07-22 21:26:53 +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:*38972981-6227-4c0b-9de5-54cf1b5d3eed,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-workflowks5mp/series-workflowks5mp-convert-artifact-2579600917/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": "40067da0-fb2a-46c0-bf5f-8d3ad3c56cf8", "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-workflowks5mp/series-workflowks5mp-build-action-3531730555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-22 21:27:03 +0000 UTC FinishedAt: 2026-07-22 21:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-22 21:27:03 +0000 UTC FinishedAt: 2026-07-22 21:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-22 21:27:03 +0000 UTC FinishedAt: 2026-07-22 21:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-22 21:27:03 +0000 UTC FinishedAt: 2026-07-22 21:27:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowks5mp/series-workflowks5mp-convert-artifact-1881817840/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-22 21:27:34 +0000 UTC FinishedAt: 2026-07-22 21:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-22 21:27:34 +0000 UTC FinishedAt: 2026-07-22 21:29:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*40067da0-fb2a-46c0-bf5f-8d3ad3c56cf8,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-workflowks5mp/series-workflowks5mp-build-action-3531730555/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-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-22 21:29:46 +0000 UTC FinishedAt: 2026-07-22 21:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-22 21:29:46 +0000 UTC FinishedAt: 2026-07-22 21:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-22 21:29:46 +0000 UTC FinishedAt: 2026-07-22 22:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-22 21:29:46 +0000 UTC FinishedAt: 2026-07-22 22:39:56 +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:*38972981-6227-4c0b-9de5-54cf1b5d3eed,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-workflowks5mp/series-workflowks5mp-convert-artifact-1881817840/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": "d6c947d3-a45d-44dc-a565-f7021d8605b7", "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-workflowks5mp/series-workflowks5mp-build-action-11838444/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-22 21:29:46 +0000 UTC FinishedAt: 2026-07-22 22:39:46 +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:*38972981-6227-4c0b-9de5-54cf1b5d3eed,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-workflowks5mp/series-workflowks5mp-convert-artifact-1881817840/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": "d6c947d3-a45d-44dc-a565-f7021d8605b7", "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-workflowks5mp/series-workflowks5mp-build-action-11838444/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-22 22:39:56 +0000 UTC FinishedAt: 2026-07-22 22:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-22 22:39:56 +0000 UTC FinishedAt: 2026-07-22 22:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-22 22:39:56 +0000 UTC FinishedAt: 2026-07-22 22:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-22 22:39:56 +0000 UTC FinishedAt: 2026-07-22 22:41:39 +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:*d6c947d3-a45d-44dc-a565-f7021d8605b7,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-workflowks5mp/series-workflowks5mp-build-action-11838444/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-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-22 22:41:49 +0000 UTC FinishedAt: 2026-07-23 01:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-22 22:41:49 +0000 UTC FinishedAt: 2026-07-23 01:43:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"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:*40067da0-fb2a-46c0-bf5f-8d3ad3c56cf8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d6c947d3-a45d-44dc-a565-f7021d8605b7,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-workflowks5mp/series-workflowks5mp-build-action-3531730555/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-workflowks5mp/series-workflowks5mp-build-action-11838444/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-22 22:41:49 +0000 UTC FinishedAt: 2026-07-22 22:41:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-22 22:41:49 +0000 UTC FinishedAt: 2026-07-22 22:41:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"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-workflowks5mp/series-workflowks5mp-convert-artifact-3499672425/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-22 22:41:49 +0000 UTC FinishedAt: 2026-07-22 22:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-22 22:41:49 +0000 UTC FinishedAt: 2026-07-22 22:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-22 22:41:49 +0000 UTC FinishedAt: 2026-07-22 22:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-22 22:41:59 +0000 UTC FinishedAt: 2026-07-23 01:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowks5mp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib6_check_nh_list","nh_rt_cache_flush","__nexthop_replace_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd170f051dba9ac146fabcd1b91726487c0cb9fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"0fb5e247-10dc-4dcd-ba1b-de55c10bcf62","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-22 22:41:59 +0000 UTC FinishedAt: 2026-07-23 01:43:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*40067da0-fb2a-46c0-bf5f-8d3ad3c56cf8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d6c947d3-a45d-44dc-a565-f7021d8605b7,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-workflowks5mp/series-workflowks5mp-build-action-3531730555/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-workflowks5mp/series-workflowks5mp-build-action-11838444/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-workflowks5mp/series-workflowks5mp-convert-artifact-3499672425/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,}