Name: series-workflowmwlkl Phase: Succeeded StartedAt: 2026-08-05 18:46:56 +0000 UTC FinishedAt: 2026-08-05 22:47:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[0] Phase: Succeeded StartedAt: 2026-08-05 18:46:56 +0000 UTC FinishedAt: 2026-08-05 18:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 18:46:56 +0000 UTC FinishedAt: 2026-08-05 18:49:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dd16f1b5720f5dae33a79b5305e188e8290a3973", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT", "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dd16f1b5720f5dae33a79b5305e188e8290a3973", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT", "NF_CONNTRACK" ], "series_id": "342cb719-2bf2-4b65-aa14-3d5fc0baf5eb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get", "ovs_ct_execute" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE4OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGZvciBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9WUyBjb25udHJhY2sgbG9naWMgYW5kIG5ldGxpbmsgY29udHJvbCBwbGFuZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgZGF0YXBhdGggZXhlY3V0aW9uIHdoaWNoIGNoZWNrcyB0aGVzZSBsaW1pdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTg6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZjhiMzNiNjRjM2FiOWRiZjc1ZjdhNWRjYjVkM2U4ZjRlOTA4NjBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxODo0ODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjVmZTY0YmZmMjU0YTMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0dTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9ucztcbiBcdHUzMiBjb25uY291bnRfa2V5O1xuIFxuJiM0MztcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRpZiAoIWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICYjNDM7MTU4OSw0NyBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdGludCBpLCBlcnI7XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKVxuJiM0MztcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzID1cbiYjNDM7XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiYjNDM7XHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VsaW1pdHMpIHtcbiYjNDM7XHRcdGtmcmVlKGluZm8pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspXG4tXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzW2ldKTtcbiYjNDM7XHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXSk7XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuJiM0MztcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmIChJU19FUlIoaW5mby1cdTAwM2VkYXRhKSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihpbmZvLVx1MDAzZWRhdGEpO1xuJiM0MztcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHByX2VycihcJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdGludCBpO1xuIFxuJiM0MztcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbiYjNDM7XHRcdFx0XHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcbiYjNDM7XHQvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgJiM0MzsxNjc2LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4mIzQzO1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDcgJiM0MzsxNjkxLDkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuLVx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0XHRcdGlmIChsaWtlbHkoaW5mbykpXG4mIzQzO1x0XHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuQEAgLTE2OTUsOCAmIzQzOzE3MDksMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0Y3RfbGltaXQtXHUwMDNlbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFxuIFx0XHRcdG92c19sb2NrKCk7XG4tXHRcdFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcbiYjNDM7XHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRcdFx0aWYgKGxpa2VseShpbmZvKSlcbiYjNDM7XHRcdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseSghaW5mbykpXG4mIzQzO1x0XHRcdFx0a2ZyZWUoY3RfbGltaXQpO1xuIFx0XHR9XG4gXHRcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XG4gXHRcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgJiM0MztcbkBAIC0xNzA5LDEyICYjNDM7MTcyOCwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4mIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XG4tXHRpbnQgcmVtO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuJiM0MztcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTcyMywxNCAmIzQzOzE3NDMsMTggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuLVx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdFx0XHRpZiAobGlrZWx5KGluZm8pKVxuJiM0MztcdFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbiBcdFx0XHRcdHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCwgXHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuLVx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiYjNDM7XHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRcdFx0aWYgKGxpa2VseShpbmZvKSlcbiYjNDM7XHRcdFx0XHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG4gXHRcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XG5AQCAtMTc3Myw2ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXHUwMDI2em9uZV9saW1pdCk7XG4gfVxuIFxuJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICYjNDM7MTgyMSwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0XHRcdTAwMjZ6b25lKSkpIHtcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICYjNDM7MTgzOSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxuQEAgLTE4MjgsMTkgJiM0MzsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkge1xuIFx0XHRoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG4gXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkge1xuIFx0XHRcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby1cdTAwM2VkYXRhLFxuIFx0XHRcdFx0Y3RfbGltaXQtXHUwMDNlem9uZSwgY3RfbGltaXQtXHUwMDNlbGltaXQsIHJlcGx5KTtcbiBcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBleGl0X2VycjtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyAmIzQzOzE4NzEsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULFxuQEAgLTE4NjMsOCAmIzQzOzE4ODMsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbiYjNDM7XHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE4ODQsNyAmIzQzOzE5MDQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLFxuQEAgLTE4OTcsOCAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcbiYjNDM7XHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE5MTgsNyAmIzQzOzE5MzcsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDE4ICYjNDM7MTk1MSwyMSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFjdF9saW1pdF9pbmZvKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PRU5UO1xuJiM0MztcdH0gZWxzZSBpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXhpdF9lcnI7XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uOTNlMTFlNDY4ZDE3MyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuQEAgLTE3Miw3ICYjNDM7MTcyLDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRmOGIzM2I2NGMzYWI5ZGJmNzVmN2E1ZGNiNWQzZThmNGU5MDg2MGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE4OjQ4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCmluZGV4IDk1Njk3ZDRlMTZlNjQuLjVmZTY0YmZmMjU0YTMgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKQogewogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJdTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9uczsKIAl1MzIgY29ubmNvdW50X2tleTsKIAomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWN0X2xpbWl0X2luZm8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAljb25uY291bnRfa2V5ID0gaW5mby0mZ3Q7em9uZS5pZDsKIAogCXBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tJmd0O3pvbmUuaWQpOwpAQCAtMTU4NSw0MCAmIzQzOzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbykKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQogc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQogewomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGksIGVycjsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKQomIzQzOwlpbmZvID0ga21hbGxvY19vYmooKmluZm8pOwomIzQzOwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyA9CiYjNDM7CWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKJiM0MzsJaW5mby0mZ3Q7bGltaXRzID0KIAkJa21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpOwotCWlmICghb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzKSB7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWluZm8tJmd0O2xpbWl0cykgewomIzQzOwkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KQotCQlJTklUX0hMSVNUX0hFQUQoJmFtcDtvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHNbaV0pOwomIzQzOwkJSU5JVF9ITElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldKTsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwogCi0JaWYgKElTX0VSUihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkYXRhKSkgewotCQllcnIgPSBQVFJfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaWYgKElTX0VSUihpbmZvLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihpbmZvLSZndDtkYXRhKTsKJiM0MzsJCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcHJfZXJyKCYjMzQ7b3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxuJiMzNDssIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCWludCBpOwogCiYjNDM7CWluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8sIE5VTEwsCiYjNDM7CQkJCSAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwomIzQzOwkvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwogCW5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby0mZ3Q7ZGF0YSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKQEAgLTE2NjUsMTIgJiM0MzsxNjc2LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNjc5LDcgJiM0MzsxNjkxLDkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKLQkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJCQlpZiAobGlrZWx5KGluZm8pKQomIzQzOwkJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCiAJCQkJem9uZV9saW1pdC0mZ3Q7em9uZV9pZCwgJmFtcDt6b25lKSkpIHsKQEAgLTE2OTUsOCAmIzQzOzE3MDksMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQljdF9saW1pdC0mZ3Q7bGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAogCQkJb3ZzX2xvY2soKTsKLQkJCWN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CQkJaWYgKGxpa2VseShpbmZvKSkKJiM0MzsJCQkJY3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTsKIAkJCW92c191bmxvY2soKTsKJiM0MzsKJiM0MzsJCQlpZiAodW5saWtlbHkoIWluZm8pKQomIzQzOwkJCQlrZnJlZShjdF9saW1pdCk7CiAJCX0KIAkJcmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTsKIAkJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKikoKHU4ICopem9uZV9saW1pdCAmIzQzOwpAQCAtMTcwOSwxMiAmIzQzOzE3MjgsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAotCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCkKIHsKIAlzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7Ci0JaW50IHJlbTsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCXUxNiB6b25lOwomIzQzOwlpbnQgcmVtOwogCiAJcmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTsKIAl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTsKQEAgLTE3MjMsMTQgJiM0MzsxNzQzLDE4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7Ci0JCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CQkJaWYgKGxpa2VseShpbmZvKSkKJiM0MzsJCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwogCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKAogCQkJCXpvbmVfbGltaXQtJmd0O3pvbmVfaWQsICZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKIAkJCW92c19sb2NrKCk7Ci0JCQljdF9saW1pdF9kZWwoaW5mbywgem9uZSk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CQkJaWYgKGxpa2VseShpbmZvKSkKJiM0MzsJCQkJY3RfbGltaXRfZGVsKGluZm8sIHpvbmUpOwogCQkJb3ZzX3VubG9jaygpOwogCQl9CiAJCXJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7CkBAIC0xNzczLDYgJiM0MzsxNzk3LDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgJmFtcDt6b25lX2xpbWl0KTsKIH0KIAomIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi8KIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywKQEAgLTE3OTYsMTIgJiM0MzsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCQkmYW1wO3pvbmUpKSkgewogCQkJT1ZTX05MRVJSKHRydWUsICYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2UmIzM0Oyk7CiAJCX0gZWxzZSB7Ci0JCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQlsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTsKIAogCQkJZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQkJbmV0LCBpbmZvLSZndDtkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTE4MTYsNiAmIzQzOzE4MzksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCiAJCQkJCSAgIHN0cnVjdCBza19idWZmICpyZXBseSkKQEAgLTE4MjgsMTkgJiM0MzsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkgewogCQloZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkgewogCQkJZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLSZndDtkYXRhLAogCQkJCWN0X2xpbWl0LSZndDt6b25lLCBjdF9saW1pdC0mZ3Q7bGltaXQsIHJlcGx5KTsKIAkJCWlmIChlcnIpCi0JCQkJZ290byBleGl0X2VycjsKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIAotZXhpdF9lcnI6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTg1MCw3ICYjNDM7MTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULApAQCAtMTg2Myw4ICYjNDM7MTg4Myw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKLQkJCQkJICBjdF9saW1pdF9pbmZvKTsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsCiYjNDM7CQkJCQkgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9lcnI7CiAKQEAgLTE4ODQsNyAmIzQzOzE5MDQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCwKQEAgLTE4OTcsOCAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xOTE4LDcgJiM0MzsxOTM3LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCwKQEAgLTE5MzIsMTggJiM0MzsxOTUxLDIxIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQlpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkgewomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykgewomIzQzOwkJZXJyID0gLUVOT0VOVDsKJiM0MzsJfSBlbHNlIGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCW5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbywKIAkJCXJlcGx5KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiAJfSBlbHNlIHsKIAkJZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sCiAJCQkJCQkgICAgICByZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfZXJyOwogCiAJbmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpOwogCWdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKaW5kZXggNjk2NjQwZTg4ZmE3ZS4uOTNlMTFlNDY4ZDE3MyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKQEAgLTE3Miw3ICYjNDM7MTcyLDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSQ1UgSW1wbGVtZW50YXRpb24gaW4gT3BlbiB2U3dpdGNoIENvbm50cmFjayBMaW1pdHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBhbmQgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBgY3RfbGltaXRfaW5mb2AgZGF0YSBzdHJ1Y3R1cmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHVzaW5nIGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYHN5bmNocm9uaXplX3JjdWAsIHNvIHRoaXMgaXMgYSBzaWduaWZpY2FudCBzeW5jaHJvbml6YXRpb24gY2hhbmdlIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBsb2dpYy4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYSBsb3Qgb2YgZnVuY3Rpb25zLCBuYW1lbHkgYG92c19jdF9saW1pdF9pbml0YCwgYG92c19jdF9saW1pdF9leGl0YCwgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgc28gaXQmIzM5O3MgYSBwcmV0dHkgcGVydmFzaXZlIGNoYW5nZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSAtIGludHJvZHVjaW5nIFJDVSBzeW5jaHJvbml6YXRpb24gaW50byB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGltcGxlbWVudGF0aW9uIHdpdGhpbiBPcGVuIHZTd2l0Y2guIEl0IGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZnV6emVkIHRob3JvdWdobHkuIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBpcyBoaWdoLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb2RlIGlzIGdhdGVkIGJ5IGAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClgIGluIGBjb25udHJhY2suY2AuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZGVwZW5kZW5jeSwgYW5kIG9mIGNvdXJzZSwgT3BlbiB2U3dpdGNoIGl0c2VsZiByZXF1aXJlcyBgQ09ORklHX09QRU5WU1dJVENIYC4gSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBqdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciBidWlsZC10aW1lIG9wdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBJIHN0YXJ0IHNldHRpbmcgdXAgYSBmdXp6aW5nIGVudmlyb25tZW50LiBNYWtpbmcgc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcyB3aWxsIHNhdmUgbWUgaGVhZGFjaGVzIGxhdGVyIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgT1BFTlZTV0lUQ0ggRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgZ29hbCBpcyBjbGVhcjogdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIE9wZW4gdlN3aXRjaC4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgZXZlcnl0aGluZyBpdCByZWxpZXMgdXBvbiwgYm90aCBkaXJlY3RseSBhbmQgaW5kaXJlY3RseS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgZGVwZW5kZW5jeSBhbmFseXNpcy4gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggYnVpbGQtdGltZSBhbmQgcnVuLXRpbWUgZGVwZW5kZW5jaWVzLgoKKiAgICoqQnVpbGQtdGltZSBkZXBlbmRlbmNpZXM6KiogV2hhdCBzb2Z0d2FyZSwgbGlicmFyaWVzLCBhbmQgdG9vbHMgYXJlICpyZXF1aXJlZCogdG8gY29tcGlsZSBhbmQgYnVpbGQgT3BlbiB2U3dpdGNoIGZyb20gc291cmNlPyBUaGlzIHdvdWxkIGluY2x1ZGUgY29tcGlsZXJzLCBidWlsZCBzeXN0ZW1zIChsaWtlIGF1dG90b29scywgQ01ha2UsIGV0Yy4pLCBzcGVjaWZpYyB2ZXJzaW9ucyBvZiBsaWJyYXJpZXMgKGUuZy4sIHNwZWNpZmljIHZlcnNpb25zIG9mIGxpYnBjYXAsIG9wZW5zc2wsIGV0Yy4pLCBoZWFkZXIgZmlsZXMsIGFuZCBhbnl0aGluZyBlbHNlIHRoZSBidWlsZCBwcm9jZXNzIGRlbWFuZHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gc2VwYXJhdGUgdGhvc2UgZnJvbSBhbnkgb3B0aW9uYWwgZGVwZW5kZW5jaWVzLgoKKiAgICoqUnVuLXRpbWUgZGVwZW5kZW5jaWVzOioqIE9uY2UgYnVpbHQgYW5kIHJ1bm5pbmcsIHdoYXQgZG9lcyBPcGVuIHZTd2l0Y2ggKm5lZWQqIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3RpbmcuIFdlJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoaW5ncyBsaWtlIHRoZSBrZXJuZWwgbW9kdWxlcyAob3ZzX3Zwb3J0LCBldGMuKSwgdGhlIHVzZXItc3BhY2UgZGFlbW9ucywgYW5kIGFueSBvdGhlciBzeXN0ZW0gbGlicmFyaWVzIG9yIHNlcnZpY2VzIGl0IGludGVyYWN0cyB3aXRoLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgdmVyc2lvbnMgb2Yga2VybmVsIG1vZHVsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkgYWxzbyBuZWVkIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgYW55IG9wdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGFyZSByZWNvbW1lbmRlZCwgYnV0IG5vdCBuZWNlc3NhcnkuCgpJIHdpbGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBncmFudWxhcml0eSBvZiB0aGUgYW5hbHlzaXMuIElzIGEgaGlnaC1sZXZlbCBvdmVydmlldyBlbm91Z2gsIG9yIHdpbGwgSSBuZWVkIGEgZGV0YWlsZWQsIHBhY2thZ2UtYnktcGFja2FnZSBicmVha2Rvd24/IFRoZSBsZXZlbCBvZiBkZXRhaWwgd2lsbCBkZXBlbmQgb24gdGhlIHVsdGltYXRlIG9iamVjdGl2ZS4gSXMgdGhlIGdvYWwgdG8gdHJvdWJsZXNob290IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpc3N1ZSwgdW5kZXJzdGFuZCBjb21wYXRpYmlsaXR5LCBvciBwcmVwYXJlIGZvciBhIHN5c3RlbSB1cGdyYWRlPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIG11bHRpcGxlIGxldmVscyBvZiBkZXRhaWwgdG8gYmUgdGhvcm91Z2guIEkgd2lsbCBoYXZlIHRvIGFwcHJvYWNoIHRoaXMgdGFzayBpbiBhIHN0cnVjdHVyZWQgd2F5LgoKSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbW9zdCBvYnZpb3VzIHNvdXJjZXM6IHRoZSBPcGVuIHZTd2l0Y2ggZG9jdW1lbnRhdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiAodGhlIGBjb25maWd1cmUuYWNgIGFuZCBgTWFrZWZpbGUuYW1gIGZpbGVzIGFyZSBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50KSwgYW5kIHBlcmhhcHMgdGhlIHBhY2thZ2UgcmVwb3NpdG9yaWVzIGZvciB2YXJpb3VzIExpbnV4IGRpc3RyaWJ1dGlvbnMuIEkgY2FuIHRoZW4gdXNlIHZhcmlvdXMgdG9vbHMgbGlrZSBgbGRkYCwgYHBrZy1jb25maWdgLCBhbmQgZGVwZW5kZW5jeSBncmFwaCBnZW5lcmF0b3JzIHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgaW5mb3JtYXRpb24gdG8gY29uZmlybSBteSBpbml0aWFsIHN1cHBvc2l0aW9ucyBhbmQgdG8gcHJvZHVjZSBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIuIEZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gb3JnYW5pemUgdGhpcyBpbmZvcm1hdGlvbiBpbiBhIGNsZWFyIGFuZCBhY2Nlc3NpYmxlIGZvcm1hdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XG4gIDMyOlx0XHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXG4gIDMzOlx0XHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcbiAgMzQ6XHRcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNlZSBodHRwOi8vb3BlbnZzd2l0Y2gub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2Vyc3BhY2VcbiAgMzc6XHRcdCAgdXRpbGl0aWVzLlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDQwOlx0XHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDgzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gLSBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBXZSYjMzk7cmUgc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQsIGFuZCByaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBTdGFuZGFyZCBmYXJlLCByZWFsbHksIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBtZXRob2RpY2FsLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTttIHVzaW5nLCBhbmQgSSYjMzk7bGwgc3RhcnQgd2l0aCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEJlc3QgcHJhY3RpY2UgZGljdGF0ZXMgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBvcHRpb24sIHNvIEkmIzM5O2xsIGJlIG9mZiB0byBgL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIExldCYjMzk7cyBjb25maXJtIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIE5vIHN1cnByaXNlcywgcGxlYXNlISBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gYnVpbGQgdXBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIHJlcXVpcmVzIGBORl9DT05OVFJBQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCBhcmUgZW5hYmxlZC4gR29vZCB0byBrbm93LgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgc3VpdGUgb2YgZnVuY3Rpb25zIHdpdGggYG92c19jdF9saW1pdGAgaW4gdGhlaXIgbmFtZXMuIEkgc2VlOiBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9saW1pdF9pbml0YCwgYG92c19jdF9saW1pdF9leGl0YCwgYW5kIHRoZW4gc2V2ZXJhbCBvdGhlcnMgZGVhbGluZyB3aXRoIHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyB6b25lIGxpbWl0cy4gVGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIHNpbmNlIHRoZXkgd2lsbCBsaWtlbHkgc2VydmUgYXMgZW50cnkgcG9pbnRzLgoKYG92c19jdF9jaGVja19saW1pdGAgaXMgcHJvYmFibHkgdGhlIG1vc3QgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBvdnNfY3RfY29tbWl0YCBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggc3VnZ2VzdHMgaXQmIzM5O3MgcGFydCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgdGFyZ2V0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZWFsLXRpbWUgaW1wYWN0LCBidXQgaXQgbWlnaHQgYmUgY2FsbGVkIHZlcnkgZnJlcXVlbnRseSwgbWFraW5nIGl0IGEgYml0ICYjMzQ7aG90JiMzNDsgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgaW1wYWN0LiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2NoZWNrX2xpbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05MTc9c3RhdGljIHUzMiBjdF9saW1pdF9nZXQoY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLCB1MTYgem9uZSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMwLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjkzMTpzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMyLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgwLVx0XHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5ODE6XHRcdFx0ZXJyID0gb3ZzX2N0X2NoZWNrX2xpbWl0KG5ldCwgc2tiLCBpbmZvKTtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05ODItXHRcdFx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzI4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIENvbm5lY3Rpb24gVHJhY2tpbmcgTGltaXRzKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGZvciB0aGVzZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cy4gTG9va3MgbGlrZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIOKAkyB0aGUgY29tbWFuZCBoYW5kbGVycy4gVGhleSBzZWVtIHRvIGJlIHRoZSBrZXkgY29udHJvbCBwbGFuZSBmdW5jdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbi4KClRoZSBvdGhlciBmdW5jdGlvbnMsIGBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdGAsIGFyZSBqdXN0IHN0YXRpYyBoZWxwZXJzIHVzZWQgYnkgdGhlIGNvbW1hbmQgaGFuZGxlcnMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGVtIGZvciBub3cuIEkgYWxzbyBzZWUgYG92c19jdF9jaGVja19saW1pdGAgaXMgY2FsbGVkIGJ5IGBvdnNfY3RfY29tbWl0YCwgd2hpY2ggY291bGQgYmUgcmVsZXZhbnQsIG9yIGV2ZW4gYG92c19jdF9leGVjdXRlYCwgYnV0IHRoZSBgb3ZzX2N0X2xpbWl0X2NtZF8qYCBoYW5kbGVycyBhcmUgdGhlIG9uZXMgSSYjMzk7bGwgYmUgZGlyZWN0bHkgbW9kaWZ5aW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYG92c19jdF9saW1pdF9jbWRfc2V0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiB0byBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4NDM9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2Ny1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODY4OnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODY5LXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODQtXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5ODU6XHRcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4Ni1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBPVlMgQ29ubnRyYWNrIExpbWl0IE5ldGxpbmsgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCBiZXN0IHByYWN0aWNlcy4gVGhlIGd1aWRlbGluZSBoZXJlIGlzIGNsZWFyOiB3ZSBzaG91bGQgcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBndXQgcmVhY3Rpb24gd2FzIHRvIGF2b2lkIGRpcmVjdGx5IHVzaW5nIGBvdnNfY3RfbGltaXRfY21kX3NldGAgYmVjYXVzZSBpdCAqaXMqIHN0YXRpYy4gQnV0IHRoZW4gSSByZW1lbWJlciB0aGF0IE5ldGxpbmsgYC5kb2l0YCBoYW5kbGVycyBhcmUgb2Z0ZW4gKmRlZmluZWQqIGFzIHN0YXRpYywgeWV0IHRoZXkgZXNzZW50aWFsbHkgKmFyZSogdGhlIGVudHJ5cG9pbnRzIGZvciB0aGUgTmV0bGluayBjb21tYW5kcyB0aGVtc2VsdmVzLiBUaGUgc3RhdGljIG5hdHVyZSBjYW4gY2F1c2UgdG9vbGluZyBpc3N1ZXMgd2l0aCB0aGluZ3MgbGlrZSBzeW1ib2wgcmVzb2x1dGlvbiBmb3IgZGVidWdnZXJzIGFuZCBmdXp6ZXJzIGxpa2Ugc3l6a2FsbGVyLCBhbHRob3VnaCBzeXprYWxsZXIgaXMgb2Z0ZW4gc3RpbGwgYWJsZSB0byByZXNvbHZlIHRoZW0gaWYgdGhleSBhcmVuJiMzOTt0IGlubGluZWQuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICpub24qLXN0YXRpYyBhbHRlcm5hdGl2ZXM/IFRoZSBuZXRsaW5rIGZhbWlseSBpdHNlbGYgaXMgcmVnaXN0ZXJlZC4uLiBsZXQgbWUgcXVpY2tseSBjaGVjayB3aGVyZS4uLiBBaCwgcmlnaHQsIG5vdCBpbiBhIGZ1bmN0aW9uIHNwZWNpZmljIHRvIHRoaXMgZmVhdHVyZSwgYnV0IHZpYSBgZHBfcmVnaXN0ZXJfZ2VubGAuIFNvLCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGp1c3QgYml0ZSB0aGUgYnVsbGV0IGFuZCB1c2UgdGhvc2UgZnVuY3Rpb24gYXMgTmV0bGluayBoYW5kbGVycy4gVGhlIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCBhcmUgdGhlIG1vc3QgZGlyZWN0IGVudHJ5IHBvaW50cyBmb3IgdGhpcyBmZWF0dXJlLiBUaGV5JiMzOTtyZSBleGFjdGx5IHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLgoKLi4uIEhvbGQgb24sIHdhaXQgYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhIG1vcmUgZnVuZGFtZW50YWwgZW50cnlwb2ludC4gT2ggeWVhaCwgYG92c19jdF9leGVjdXRlYCBpcyB0aGUgZGF0YXBhdGggZW50cnkgcG9pbnQgZm9yIGNvbm50cmFjayBhY3Rpb24hIFNvIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGNvbnRpbnVlIHJldmlld2luZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NTMyPXN0YXRpY1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjUzMzpzdHJ1Y3QgbmZfY29ubiAqb3ZzX2N0X2V4ZWN1dGVkKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01MzQtXHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NTYxPXN0YXRpYyBib29sIHNrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTU3MS1cdGlmICghY3QpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6NTcyOlx0XHRjdCA9IG92c19jdF9leGVjdXRlZChuZXQsIGtleSwgaW5mbywgc2tiLCBcdTAwMjZjdF9leGVjdXRlZCk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTczLVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTA0MTppbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDItXHRcdCAgIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwNwoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA1MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYG92c19jdF9leGVjdXRlYCBpc24mIzM5O3Qgc3RhdGljLiBHb29kLiBOb3csIGxldCYjMzk7cyBjb25maXJtIGlmIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIEluaXRpYWxseSwgSSBjb25zaWRlcmVkIGluY2x1ZGluZyBgb3ZzX2N0X2V4ZWN1dGVgIGp1c3QgdG8gYmUgZXh0cmEgY2F1dGlvdXMuIEJ1dCwgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnMgaW4gdGhvc2UgbmV0bGluayBoYW5kbGVycyDigJMgdGhleSYjMzk7cmUgdGhlIG9uZXMgdHJpZ2dlcmluZyB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgY29udHJvbCBwbGFuZS4gVGhleSBhcmUgbm90IGlubGluZWQsIHNpbmNlIG5ldGxpbmsgaGFuZGxlcnMgYXJlIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBnZW5sX3NtYWxsX29wc2AsIGFuZCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHNvIGl0IGlzIHNhZmUgdG8gaW5jbHVkZSB0aGVtIGRpcmVjdGx5LgoKU28sIEkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBhbmQgYWxzbyBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCBhbmQgYG92c19jdF9leGVjdXRlYCBhcyBmb2N1cyBzeW1ib2xzLgoKSSB0aGVuIGRvdWJsZS1jaGVja2VkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSBgT1BFTlZTV0lUQ0hgLCBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGFuZCBgTkZfQ09OTlRSQUNLYC4gYE5FVEZJTFRFUl9DT05OQ09VTlRgIG9idmlvdXNseSByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AsIGFuZCBgT1BFTlZTV0lUQ0hgIHJlcXVpcmVzIGBJTkVUYCwgc28gYE9QRU5WU1dJVENIYCwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBhbmQgYE5GX0NPTk5UUkFDS2AgYXJlIHRoZSBrZXkgb25lcyBoZXJlLgoKTG9va2luZyBiYWNrIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIHRvIGBjdF9saW1pdF9pbmZvYCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgb3ZzX25ldGAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlOyBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciBmb3IgZnV6emluZy4KCk15IHRoaW5raW5nIGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHN5bmNocm9uaXphdGlvbiBmb3IgT3BlbiB2U3dpdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBPVlMgY29ubnRyYWNrIGxvZ2ljIGFuZCBuZXRsaW5rIGNvbnRyb2wgcGxhbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgZm9yIHNldHRpbmcvZ2V0dGluZy9kZWxldGluZyBsaW1pdHMsIGFzIHdlbGwgYXMgdGhlIGRhdGFwYXRoIGV4ZWN1dGlvbiB3aGljaCBjaGVja3MgdGhlc2UgbGltaXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ4OjU3LjI2MTMxNTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4NzE4MzIwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGZvciBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9WUyBjb25udHJhY2sgbG9naWMgYW5kIG5ldGxpbmsgY29udHJvbCBwbGFuZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgZGF0YXBhdGggZXhlY3V0aW9uIHdoaWNoIGNoZWNrcyB0aGVzZSBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ4OjU3LjI2MTMyMDc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjYyNDA4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZjhiMzNiNjRjM2FiOWRiZjc1ZjdhNWRjYjVkM2U4ZjRlOTA4NjBiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTg6NDg6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuaW5kZXggOTU2OTdkNGUxNmU2NC4uNWZlNjRiZmYyNTRhMyAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG5AQCAtOTMzLDEwICs5MzMsMTQgQEAgc3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG4tXFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbiBcXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xcbiBcXHR1MzIgY29ubmNvdW50X2tleTtcXG4gXFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmICghY3RfbGltaXRfaW5mbylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRjb25uY291bnRfa2V5ID0gaW5mby1cXHUwMDNlem9uZS5pZDtcXG4gXFxuIFxcdHBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tXFx1MDAzZXpvbmUuaWQpO1xcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4ge1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbi1cXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pXFxuK1xcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XFxuK1xcdGlmICghaW5mbylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyA9XFxuK1xcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4rXFx0aW5mby1cXHUwMDNlbGltaXRzID1cXG4gXFx0XFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xcbi1cXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cykge1xcbi1cXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VsaW1pdHMpIHtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpKyspXFxuLVxcdFxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzW2ldKTtcXG4rXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbiBcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xcbitcXHRpbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuIFxcbi1cXHRpZiAoSVNfRVJSKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRhdGEpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSk7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyk7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoSVNfRVJSKGluZm8tXFx1MDAzZWRhdGEpKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoaW5mby1cXHUwMDNlZGF0YSk7XFxuK1xcdFxcdGtmcmVlKGluZm8tXFx1MDAzZWxpbWl0cyk7XFxuK1xcdFxcdGtmcmVlKGluZm8pO1xcbiBcXHRcXHRwcl9lcnIoXFxcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXFxcblxcXCIsIGVycik7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0aW5mbyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcXG4rXFx0XFx0XFx0XFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XFxuK1xcdC8qIFdhaXQgZm9yIFJDVSByZWFkZXJzIHRvIHN0b3AgdXNpbmcgdGhlIENUIGxpbWl0cy4gKi9cXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcbiBcXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXFx1MDAzZWRhdGEpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcXG4gXFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcXHUwMDI2aW5mby1cXHUwMDNlbGltaXRzW2ldO1xcbkBAIC0xNjY1LDEyICsxNjc2LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXFxuIHtcXG4gXFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xcbi1cXHRpbnQgcmVtO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdHUxNiB6b25lO1xcbitcXHRpbnQgcmVtO1xcbiBcXG4gXFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcXG4gXFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XFxuQEAgLTE2NzksNyArMTY5MSw5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cXHUwMDNlem9uZV9pZCA9PVxcbiBcXHRcXHRcXHRcXHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XFxuIFxcdFxcdFxcdG92c19sb2NrKCk7XFxuLVxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdFxcdFxcdGlmIChsaWtlbHkoaW5mbykpXFxuK1xcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbiBcXHRcXHRcXHRcXHR6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkLCBcXHUwMDI2em9uZSkpKSB7XFxuQEAgLTE2OTUsOCArMTcwOSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cXHUwMDNlbGltaXQ7XFxuIFxcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbi1cXHRcXHRcXHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0XFx0XFx0aWYgKGxpa2VseShpbmZvKSlcXG4rXFx0XFx0XFx0XFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KCFpbmZvKSlcXG4rXFx0XFx0XFx0XFx0a2ZyZWUoY3RfbGltaXQpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XFxuIFxcdFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgK1xcbkBAIC0xNzA5LDEyICsxNzI4LDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXFxuIHtcXG4gXFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xcbi1cXHRpbnQgcmVtO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdHUxNiB6b25lO1xcbitcXHRpbnQgcmVtO1xcbiBcXG4gXFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcXG4gXFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XFxuQEAgLTE3MjMsMTQgKzE3NDMsMTggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0XFx0XFx0aWYgKGxpa2VseShpbmZvKSlcXG4rXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXFxuIFxcdFxcdFxcdFxcdHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQsIFxcdTAwMjZ6b25lKSkpIHtcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbi1cXHRcXHRcXHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XFxuK1xcdFxcdFxcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRcXHRcXHRpZiAobGlrZWx5KGluZm8pKVxcbitcXHRcXHRcXHRcXHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XFxuIFxcdFxcdFxcdG92c191bmxvY2soKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZW0gLT0gTkxBX0FMSUdOKHNpemVvZigqem9uZV9saW1pdCkpO1xcbkBAIC0xNzczLDYgKzE3OTcsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXFx1MDAyNnpvbmVfbGltaXQpO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxcbkBAIC0xNzk2LDEyICsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnpvbmUpKSkge1xcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0XFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XFxuIFxcbiBcXHRcXHRcXHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0XFx0bmV0LCBpbmZvLVxcdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xcbi1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbkBAIC0xODE2LDYgKzE4MzksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbkBAIC0xODI4LDE5ICsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRoZWFkID0gXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXTtcXG4gXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XFxuIFxcdFxcdFxcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby1cXHUwMDNlZGF0YSxcXG4gXFx0XFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZXpvbmUsIGN0X2xpbWl0LVxcdTAwM2VsaW1pdCwgcmVwbHkpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLWV4aXRfZXJyOlxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTg1MCw3ICsxODcxLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcXG5AQCAtMTg2Myw4ICsxODgzLDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbkBAIC0xODg0LDcgKzE5MDQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBza19idWZmICpyZXBseTtcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLFxcbkBAIC0xODk3LDggKzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGN0X2xpbWl0X2luZm8pO1xcbitcXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFxuQEAgLTE5MTgsNyArMTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcXG5AQCAtMTkzMiwxOCArMTk1MSwyMSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFjdF9saW1pdF9pbmZvKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9FTlQ7XFxuK1xcdH0gZWxzZSBpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xcbiBcXHRcXHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXFxuIFxcdFxcdFxcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcXG4gXFx0XFx0XFx0cmVwbHkpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVwbHkpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXG4gXFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xcbiBcXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG5pbmRleCA2OTY2NDBlODhmYTdlLi45M2UxMWU0NjhkMTczIDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG5AQCAtMTcyLDcgKzE3Miw3IEBAIHN0cnVjdCBvdnNfbmV0IHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XFxuICNlbmRpZlxcbiBcXHRib29sIHh0X2xhYmVsO1xcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0ODo1Ny43ODg1MjE3ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MTM0NDYxMTc5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGY4YjMzYjY0YzNhYjlkYmY3NWY3YTVkY2I1ZDNlOGY0ZTkwODYwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTg6NDg6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjVmZTY0YmZmMjU0YTMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaTtcbiBcbitcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK1x0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgKzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTY3OSw3ICsxNjkxLDkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuLVx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdFx0XHRpZiAobGlrZWx5KGluZm8pKVxuK1x0XHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuQEAgLTE2OTUsOCArMTcwOSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbi1cdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRcdFx0aWYgKGxpa2VseShpbmZvKSlcbitcdFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuK1xuK1x0XHRcdGlmICh1bmxpa2VseSghaW5mbykpXG4rXHRcdFx0XHRrZnJlZShjdF9saW1pdCk7XG4gXHRcdH1cbiBcdFx0cmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTtcbiBcdFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKikoKHU4ICopem9uZV9saW1pdCArXG5AQCAtMTcwOSwxMiArMTcyOCwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDE0ICsxNzQzLDE4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cdTAwM2V6b25lX2lkID09XG4gXHRcdFx0XHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbi1cdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0XHRcdGlmIChsaWtlbHkoaW5mbykpXG4rXHRcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4tXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRcdFx0aWYgKGxpa2VseShpbmZvKSlcbitcdFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbiBcdFx0cmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTtcbkBAIC0xNzczLDYgKzE3OTcsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyArMTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICsxODgzLDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggKzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgKzE5MzcsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggKzE5NTEsMjEgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbykge1xuK1x0XHRlcnIgPSAtRU5PRU5UO1xuK1x0fSBlbHNlIGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0cmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgICByZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2VycjtcbiBcbiBcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcbiBcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi45M2UxMWU0NjhkMTczIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTcyLDcgKzE3Miw3IEBAIHN0cnVjdCBvdnNfbmV0IHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgbWFza3NfcmViYWxhbmNlO1xuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ4OjU3Ljc4ODUyMzg3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNTk2MDIyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSQ1UgSW1wbGVtZW50YXRpb24gaW4gT3BlbiB2U3dpdGNoIENvbm50cmFjayBMaW1pdHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBhbmQgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBgY3RfbGltaXRfaW5mb2AgZGF0YSBzdHJ1Y3R1cmUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBgcmN1X3JlcGxhY2VfcG9pbnRlcmAsIGFuZCBgc3luY2hyb25pemVfcmN1YCwgc28gdGhpcyBpcyBhIHNpZ25pZmljYW50IHN5bmNocm9uaXphdGlvbiBjaGFuZ2Ugd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGxvZ2ljLiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBhIGxvdCBvZiBmdW5jdGlvbnMsIG5hbWVseSBgb3ZzX2N0X2xpbWl0X2luaXRgLCBgb3ZzX2N0X2xpbWl0X2V4aXRgLCBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBzbyBpdCdzIGEgcHJldHR5IHBlcnZhc2l2ZSBjaGFuZ2UuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSAtIGludHJvZHVjaW5nIFJDVSBzeW5jaHJvbml6YXRpb24gaW50byB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGltcGxlbWVudGF0aW9uIHdpdGhpbiBPcGVuIHZTd2l0Y2guIEl0IGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZnV6emVkIHRob3JvdWdobHkuIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBpcyBoaWdoLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgaXMgZ2F0ZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAgaW4gYGNvbm50cmFjay5jYC4gVGhhdCdzIHRoZSBwcmltYXJ5IGRlcGVuZGVuY3ksIGFuZCBvZiBjb3Vyc2UsIE9wZW4gdlN3aXRjaCBpdHNlbGYgcmVxdWlyZXMgYENPTkZJR19PUEVOVlNXSVRDSGAuIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AganVzdCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciBidWlsZC10aW1lIG9wdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBJIHN0YXJ0IHNldHRpbmcgdXAgYSBmdXp6aW5nIGVudmlyb25tZW50LiBNYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIHdpbGwgc2F2ZSBtZSBoZWFkYWNoZXMgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyOTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0OTowNC4xNDgxMjgzNzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwODY2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0OTowNC4yMzQyMjM3NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg0MDkzNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBPUEVOVlNXSVRDSCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgZ29hbCBpcyBjbGVhcjogdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIE9wZW4gdlN3aXRjaC4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgZXZlcnl0aGluZyBpdCByZWxpZXMgdXBvbiwgYm90aCBkaXJlY3RseSBhbmQgaW5kaXJlY3RseS4gSSdtIHRoaW5raW5nIGFib3V0IGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBkZXBlbmRlbmN5IGFuYWx5c2lzLiBJIG5lZWQgdG8gY29uc2lkZXIgYm90aCBidWlsZC10aW1lIGFuZCBydW4tdGltZSBkZXBlbmRlbmNpZXMuXG5cbiogICAqKkJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzOioqIFdoYXQgc29mdHdhcmUsIGxpYnJhcmllcywgYW5kIHRvb2xzIGFyZSAqcmVxdWlyZWQqIHRvIGNvbXBpbGUgYW5kIGJ1aWxkIE9wZW4gdlN3aXRjaCBmcm9tIHNvdXJjZT8gVGhpcyB3b3VsZCBpbmNsdWRlIGNvbXBpbGVycywgYnVpbGQgc3lzdGVtcyAobGlrZSBhdXRvdG9vbHMsIENNYWtlLCBldGMuKSwgc3BlY2lmaWMgdmVyc2lvbnMgb2YgbGlicmFyaWVzIChlLmcuLCBzcGVjaWZpYyB2ZXJzaW9ucyBvZiBsaWJwY2FwLCBvcGVuc3NsLCBldGMuKSwgaGVhZGVyIGZpbGVzLCBhbmQgYW55dGhpbmcgZWxzZSB0aGUgYnVpbGQgcHJvY2VzcyBkZW1hbmRzLiBJIHNob3VsZCBiZSBhYmxlIHRvIHNlcGFyYXRlIHRob3NlIGZyb20gYW55IG9wdGlvbmFsIGRlcGVuZGVuY2llcy5cblxuKiAgICoqUnVuLXRpbWUgZGVwZW5kZW5jaWVzOioqIE9uY2UgYnVpbHQgYW5kIHJ1bm5pbmcsIHdoYXQgZG9lcyBPcGVuIHZTd2l0Y2ggKm5lZWQqIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3RpbmcuIFdlJ2xsIGJlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgdGhlIGtlcm5lbCBtb2R1bGVzIChvdnNfdnBvcnQsIGV0Yy4pLCB0aGUgdXNlci1zcGFjZSBkYWVtb25zLCBhbmQgYW55IG90aGVyIHN5c3RlbSBsaWJyYXJpZXMgb3Igc2VydmljZXMgaXQgaW50ZXJhY3RzIHdpdGguIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciB2ZXJzaW9ucyBvZiBrZXJuZWwgbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBhbHNvIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBhbnkgb3B0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIHJlY29tbWVuZGVkLCBidXQgbm90IG5lY2Vzc2FyeS5cblxuSSB3aWxsIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGFuYWx5c2lzLiBJcyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgZW5vdWdoLCBvciB3aWxsIEkgbmVlZCBhIGRldGFpbGVkLCBwYWNrYWdlLWJ5LXBhY2thZ2UgYnJlYWtkb3duPyBUaGUgbGV2ZWwgb2YgZGV0YWlsIHdpbGwgZGVwZW5kIG9uIHRoZSB1bHRpbWF0ZSBvYmplY3RpdmUuIElzIHRoZSBnb2FsIHRvIHRyb3VibGVzaG9vdCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXNzdWUsIHVuZGVyc3RhbmQgY29tcGF0aWJpbGl0eSwgb3IgcHJlcGFyZSBmb3IgYSBzeXN0ZW0gdXBncmFkZT8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIG11bHRpcGxlIGxldmVscyBvZiBkZXRhaWwgdG8gYmUgdGhvcm91Z2guIEkgd2lsbCBoYXZlIHRvIGFwcHJvYWNoIHRoaXMgdGFzayBpbiBhIHN0cnVjdHVyZWQgd2F5LlxuXG5JJ2xsIHN0YXJ0IHdpdGggdGhlIG1vc3Qgb2J2aW91cyBzb3VyY2VzOiB0aGUgT3BlbiB2U3dpdGNoIGRvY3VtZW50YXRpb24sIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgKHRoZSBgY29uZmlndXJlLmFjYCBhbmQgYE1ha2VmaWxlLmFtYCBmaWxlcyBhcmUgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCksIGFuZCBwZXJoYXBzIHRoZSBwYWNrYWdlIHJlcG9zaXRvcmllcyBmb3IgdmFyaW91cyBMaW51eCBkaXN0cmlidXRpb25zLiBJIGNhbiB0aGVuIHVzZSB2YXJpb3VzIHRvb2xzIGxpa2UgYGxkZGAsIGBwa2ctY29uZmlnYCwgYW5kIGRlcGVuZGVuY3kgZ3JhcGggZ2VuZXJhdG9ycyB0byBnZXQgYSBmdWxsZXIgcGljdHVyZS4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgaW5mb3JtYXRpb24gdG8gY29uZmlybSBteSBpbml0aWFsIHN1cHBvc2l0aW9ucyBhbmQgdG8gcHJvZHVjZSBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIuIEZpbmFsbHksIEknbGwgbmVlZCB0byBvcmdhbml6ZSB0aGlzIGluZm9ybWF0aW9uIGluIGEgY2xlYXIgYW5kIGFjY2Vzc2libGUgZm9ybWF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MTEuNzE4MzIwOTU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MTEuNzE4NDE3OTA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MTgwMjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiAtIEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBXZSdyZSBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCwgYW5kIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgd2UncmUgZ29pbmcgdG8gbmVlZCBgT1BFTlZTV0lUQ0hgLCBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGFuZCBgTkZfQ09OTlRSQUNLYC4gU3RhbmRhcmQgZmFyZSwgcmVhbGx5LCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSBtZXRob2RpY2FsLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEknbSB1c2luZywgYW5kIEknbGwgc3RhcnQgd2l0aCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEJlc3QgcHJhY3RpY2UgZGljdGF0ZXMgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBvcHRpb24sIHNvIEknbGwgYmUgb2ZmIHRvIGAvbmV0L25ldGZpbHRlci9LY29uZmlnYC4gTGV0J3MgY29uZmlybSBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIE5vIHN1cnByaXNlcywgcGxlYXNlISBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gYnVpbGQgdXBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MTQuODAwMjIzNTU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzc3NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTE6Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEyLVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ5OjE0Ljg2MjAwNjI4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MDQzNjczMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubmVjdGlvbiBUcmFja2luZyBMaW1pdCBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIHJlcXVpcmVzIGBORl9DT05OVFJBQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBlbmFibGVkLiBHb29kIHRvIGtub3cuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgc3VpdGUgb2YgZnVuY3Rpb25zIHdpdGggYG92c19jdF9saW1pdGAgaW4gdGhlaXIgbmFtZXMuIEkgc2VlOiBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9saW1pdF9pbml0YCwgYG92c19jdF9saW1pdF9leGl0YCwgYW5kIHRoZW4gc2V2ZXJhbCBvdGhlcnMgZGVhbGluZyB3aXRoIHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyB6b25lIGxpbWl0cy4gVGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIHNpbmNlIHRoZXkgd2lsbCBsaWtlbHkgc2VydmUgYXMgZW50cnkgcG9pbnRzLlxuXG5gb3ZzX2N0X2NoZWNrX2xpbWl0YCBpcyBwcm9iYWJseSB0aGUgbW9zdCBpbnRlcmVzdGluZzsgaXQncyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2NvbW1pdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIHN1Z2dlc3RzIGl0J3MgcGFydCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgdGFyZ2V0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZWFsLXRpbWUgaW1wYWN0LCBidXQgaXQgbWlnaHQgYmUgY2FsbGVkIHZlcnkgZnJlcXVlbnRseSwgbWFraW5nIGl0IGEgYml0IFwiaG90XCIgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgaW1wYWN0LiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0OToyMC42NjYzNzcwODVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDY4ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9jaGVja19saW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlxcdFxcdFxcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ5OjIwLjc0MTQ1MDg5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA4MjA2NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIENvbm5lY3Rpb24gVHJhY2tpbmcgTGltaXRzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgZm9yIHRoZXNlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzLiBMb29rcyBsaWtlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMg4oCTIHRoZSBjb21tYW5kIGhhbmRsZXJzLiBUaGV5IHNlZW0gdG8gYmUgdGhlIGtleSBjb250cm9sIHBsYW5lIGZ1bmN0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLlxuXG5UaGUgb3RoZXIgZnVuY3Rpb25zLCBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBhbmQgYG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXRgLCBhcmUganVzdCBzdGF0aWMgaGVscGVycyB1c2VkIGJ5IHRoZSBjb21tYW5kIGhhbmRsZXJzLCBzbyBJIGNhbiBwcm9iYWJseSBpZ25vcmUgdGhlbSBmb3Igbm93LiBJIGFsc28gc2VlIGBvdnNfY3RfY2hlY2tfbGltaXRgIGlzIGNhbGxlZCBieSBgb3ZzX2N0X2NvbW1pdGAsIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50LCBvciBldmVuIGBvdnNfY3RfZXhlY3V0ZWAsIGJ1dCB0aGUgYG92c19jdF9saW1pdF9jbWRfKmAgaGFuZGxlcnMgYXJlIHRoZSBvbmVzIEknbGwgYmUgZGlyZWN0bHkgbW9kaWZ5aW5nLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdG8gY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MjUuMTQ5NjYwNjc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5NjI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODQzPXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2Ny1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg2ODpzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4Njkte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBjdF9saW1pdF9nZW5sX29wc1tdID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODQtXFx0XFx0XFx0XFx0XFx0ICAgICAgICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5ODU6XFx0XFx0LmRvaXQgPSBvdnNfY3RfbGltaXRfY21kX3NldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4Ni1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0OToyNS4yNTI2MjY5NjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3MDc4MzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gT1ZTIENvbm50cmFjayBMaW1pdCBOZXRsaW5rIEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcgYWJvdXQgYmVzdCBwcmFjdGljZXMuIFRoZSBndWlkZWxpbmUgaGVyZSBpcyBjbGVhcjogd2Ugc2hvdWxkIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIE15IGluaXRpYWwgZ3V0IHJlYWN0aW9uIHdhcyB0byBhdm9pZCBkaXJlY3RseSB1c2luZyBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGJlY2F1c2UgaXQgKmlzKiBzdGF0aWMuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhhdCBOZXRsaW5rIGAuZG9pdGAgaGFuZGxlcnMgYXJlIG9mdGVuICpkZWZpbmVkKiBhcyBzdGF0aWMsIHlldCB0aGV5IGVzc2VudGlhbGx5ICphcmUqIHRoZSBlbnRyeXBvaW50cyBmb3IgdGhlIE5ldGxpbmsgY29tbWFuZHMgdGhlbXNlbHZlcy4gVGhlIHN0YXRpYyBuYXR1cmUgY2FuIGNhdXNlIHRvb2xpbmcgaXNzdWVzIHdpdGggdGhpbmdzIGxpa2Ugc3ltYm9sIHJlc29sdXRpb24gZm9yIGRlYnVnZ2VycyBhbmQgZnV6emVycyBsaWtlIHN5emthbGxlciwgYWx0aG91Z2ggc3l6a2FsbGVyIGlzIG9mdGVuIHN0aWxsIGFibGUgdG8gcmVzb2x2ZSB0aGVtIGlmIHRoZXkgYXJlbid0IGlubGluZWQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKm5vbiotc3RhdGljIGFsdGVybmF0aXZlcz8gVGhlIG5ldGxpbmsgZmFtaWx5IGl0c2VsZiBpcyByZWdpc3RlcmVkLi4uIGxldCBtZSBxdWlja2x5IGNoZWNrIHdoZXJlLi4uIEFoLCByaWdodCwgbm90IGluIGEgZnVuY3Rpb24gc3BlY2lmaWMgdG8gdGhpcyBmZWF0dXJlLCBidXQgdmlhIGBkcF9yZWdpc3Rlcl9nZW5sYC4gU28sIEknbSB0aGlua2luZyBJIHNob3VsZCBqdXN0IGJpdGUgdGhlIGJ1bGxldCBhbmQgdXNlIHRob3NlIGZ1bmN0aW9uIGFzIE5ldGxpbmsgaGFuZGxlcnMuIFRoZSBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAgYXJlIHRoZSBtb3N0IGRpcmVjdCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZmVhdHVyZS4gVGhleSdyZSBleGFjdGx5IHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG4uLi4gSG9sZCBvbiwgd2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3NpbmcgYSBtb3JlIGZ1bmRhbWVudGFsIGVudHJ5cG9pbnQuIE9oIHllYWgsIGBvdnNfY3RfZXhlY3V0ZWAgaXMgdGhlIGRhdGFwYXRoIGVudHJ5IHBvaW50IGZvciBjb25udHJhY2sgYWN0aW9uISBTbyBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBjb250aW51ZSByZXZpZXdpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0OTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MzEuMDIzNDEzMjg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMyMjc2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz01MzI9c3RhdGljXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjUzMzpzdHJ1Y3QgbmZfY29ubiAqb3ZzX2N0X2V4ZWN1dGVkKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTM0LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTU2MT1zdGF0aWMgYm9vbCBza2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTU3MS1cXHRpZiAoIWN0KVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo1NzI6XFx0XFx0Y3QgPSBvdnNfY3RfZXhlY3V0ZWQobmV0LCBrZXksIGluZm8sIHNrYiwgXFx1MDAyNmN0X2V4ZWN1dGVkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTczLVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQwLSAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMDQxOmludCBvdnNfY3RfZXhlY3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDItXFx0XFx0ICAgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ5OjMxLjEzNjY0NTAyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODI3NzA4Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubmVjdGlvbiBUcmFja2luZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBtZXRob2RpY2FsbHkuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgb3ZzX2N0X2V4ZWN1dGVgIGlzbid0IHN0YXRpYy4gR29vZC4gTm93LCBsZXQncyBjb25maXJtIGlmIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIEluaXRpYWxseSwgSSBjb25zaWRlcmVkIGluY2x1ZGluZyBgb3ZzX2N0X2V4ZWN1dGVgIGp1c3QgdG8gYmUgZXh0cmEgY2F1dGlvdXMuIEJ1dCwgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnMgaW4gdGhvc2UgbmV0bGluayBoYW5kbGVycyDigJMgdGhleSdyZSB0aGUgb25lcyB0cmlnZ2VyaW5nIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBjb250cm9sIHBsYW5lLiBUaGV5IGFyZSBub3QgaW5saW5lZCwgc2luY2UgbmV0bGluayBoYW5kbGVycyBhcmUgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGdlbmxfc21hbGxfb3BzYCwgYW5kIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gaXQgaXMgc2FmZSB0byBpbmNsdWRlIHRoZW0gZGlyZWN0bHkuXG5cblNvLCBJJ2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBhbmQgYWxzbyBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCBhbmQgYG92c19jdF9leGVjdXRlYCBhcyBmb2N1cyBzeW1ib2xzLlxuXG5JIHRoZW4gZG91YmxlLWNoZWNrZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSBoYXZlIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBgTkVURklMVEVSX0NPTk5DT1VOVGAgb2J2aW91c2x5IHJlbGllcyBvbiBgTkZfQ09OTlRSQUNLYCwgYW5kIGBPUEVOVlNXSVRDSGAgcmVxdWlyZXMgYElORVRgLCBzbyBgT1BFTlZTV0lUQ0hgLCBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGFuZCBgTkZfQ09OTlRSQUNLYCBhcmUgdGhlIGtleSBvbmVzIGhlcmUuXG5cbkxvb2tpbmcgYmFjayBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGFkZGluZyBSQ1UgcHJvdGVjdGlvbiB0byBgY3RfbGltaXRfaW5mb2Agd2l0aGluIHRoZSBgc3RydWN0IG92c19uZXRgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZTsgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIGZvciBmdXp6aW5nLlxuXG5NeSB0aGlua2luZyBpcyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDcsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ5OjM4Ljk2NDM1NTkxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODc3MjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGZvciBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9WUyBjb25udHJhY2sgbG9naWMgYW5kIG5ldGxpbmsgY29udHJvbCBwbGFuZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgZGF0YXBhdGggZXhlY3V0aW9uIHdoaWNoIGNoZWNrcyB0aGVzZSBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGZvciBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9WUyBjb25udHJhY2sgbG9naWMgYW5kIG5ldGxpbmsgY29udHJvbCBwbGFuZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgZGF0YXBhdGggZXhlY3V0aW9uIHdoaWNoIGNoZWNrcyB0aGVzZSBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwlkl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 18:46:56 +0000 UTC FinishedAt: 2026-08-05 18:49:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dd16f1b5720f5dae33a79b5305e188e8290a3973", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT", "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dd16f1b5720f5dae33a79b5305e188e8290a3973", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NETFILTER_CONNCOUNT", "NF_CONNTRACK" ], "series_id": "342cb719-2bf2-4b65-aa14-3d5fc0baf5eb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_limit_cmd_set", "ovs_ct_limit_cmd_del", "ovs_ct_limit_cmd_get", "ovs_ct_execute" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE4OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX2N0X2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGZvciBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9WUyBjb25udHJhY2sgbG9naWMgYW5kIG5ldGxpbmsgY29udHJvbCBwbGFuZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgZGF0YXBhdGggZXhlY3V0aW9uIHdoaWNoIGNoZWNrcyB0aGVzZSBsaW1pdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTg6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZjhiMzNiNjRjM2FiOWRiZjc1ZjdhNWRjYjVkM2U4ZjRlOTA4NjBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxODo0ODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjVmZTY0YmZmMjU0YTMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0dTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9ucztcbiBcdHUzMiBjb25uY291bnRfa2V5O1xuIFxuJiM0MztcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRpZiAoIWN0X2xpbWl0X2luZm8pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICYjNDM7MTU4OSw0NyBAQCBzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKVxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdGludCBpLCBlcnI7XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKVxuJiM0MztcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzID1cbiYjNDM7XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiYjNDM7XHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmICghaW5mby1cdTAwM2VsaW1pdHMpIHtcbiYjNDM7XHRcdGtmcmVlKGluZm8pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSYjNDM7JiM0MzspXG4tXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzW2ldKTtcbiYjNDM7XHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXSk7XG4gXG4tXHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuJiM0MztcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdGlmIChJU19FUlIoaW5mby1cdTAwM2VkYXRhKSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihpbmZvLVx1MDAzZWRhdGEpO1xuJiM0MztcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuJiM0MztcdFx0a2ZyZWUoaW5mbyk7XG4gXHRcdHByX2VycihcJiMzNDtvcGVudnN3aXRjaDogZmFpbGVkIHRvIGluaXQgbmZfY29ubmNvdW50ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdGludCBpO1xuIFxuJiM0MztcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbiYjNDM7XHRcdFx0XHQgICBsb2NrZGVwX292c2xfaXNfaGVsZCgpKTtcbiYjNDM7XHQvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1xuIFx0bmZfY29ubmNvdW50X2Rlc3Ryb3kobmV0LCBpbmZvLVx1MDAzZWRhdGEpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgJiM0MzsxNjc2LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbylcbiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvO1xuIFx0dTE2IHpvbmU7XG4mIzQzO1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNjc5LDcgJiM0MzsxNjkxLDkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuLVx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4mIzQzO1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0XHRcdGlmIChsaWtlbHkoaW5mbykpXG4mIzQzO1x0XHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuQEAgLTE2OTUsOCAmIzQzOzE3MDksMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdFx0Y3RfbGltaXQtXHUwMDNlbGltaXQgPSB6b25lX2xpbWl0LVx1MDAzZWxpbWl0O1xuIFxuIFx0XHRcdG92c19sb2NrKCk7XG4tXHRcdFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcbiYjNDM7XHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRcdFx0aWYgKGxpa2VseShpbmZvKSlcbiYjNDM7XHRcdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseSghaW5mbykpXG4mIzQzO1x0XHRcdFx0a2ZyZWUoY3RfbGltaXQpO1xuIFx0XHR9XG4gXHRcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XG4gXHRcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgJiM0MztcbkBAIC0xNzA5LDEyICYjNDM7MTcyOCwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4mIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdClcbiB7XG4gXHRzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7XG4tXHRpbnQgcmVtO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuJiM0MztcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTcyMywxNCAmIzQzOzE3NDMsMTggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuLVx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuJiM0MztcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuJiM0MztcdFx0XHRpZiAobGlrZWx5KGluZm8pKVxuJiM0MztcdFx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xuIFx0XHRcdG92c191bmxvY2soKTtcbiBcdFx0fSBlbHNlIGlmICh1bmxpa2VseSghY2hlY2tfem9uZV9pZChcbiBcdFx0XHRcdHpvbmVfbGltaXQtXHUwMDNlem9uZV9pZCwgXHUwMDI2em9uZSkpKSB7XG4gXHRcdFx0T1ZTX05MRVJSKHRydWUsIFwmIzM0O3pvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCYjMzQ7KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuLVx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiYjNDM7XHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRcdFx0aWYgKGxpa2VseShpbmZvKSlcbiYjNDM7XHRcdFx0XHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuIFx0XHR9XG4gXHRcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XG5AQCAtMTc3Myw2ICYjNDM7MTc5Nyw3IEBAIHN0YXRpYyBpbnQgX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXHUwMDI2em9uZV9saW1pdCk7XG4gfVxuIFxuJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICYjNDM7MTgyMSwxMCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0XHRcdTAwMjZ6b25lKSkpIHtcbiBcdFx0XHRPVlNfTkxFUlIodHJ1ZSwgXCYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2VcJiMzNDspO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICYjNDM7MTgzOSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyogQ2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jayBoZWxkLiAqL1xuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxuQEAgLTE4MjgsMTkgJiM0MzsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkge1xuIFx0XHRoZWFkID0gXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV07XG4gXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkge1xuIFx0XHRcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby1cdTAwM2VkYXRhLFxuIFx0XHRcdFx0Y3RfbGltaXQtXHUwMDNlem9uZSwgY3RfbGltaXQtXHUwMDNlbGltaXQsIHJlcGx5KTtcbiBcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBleGl0X2VycjtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyAmIzQzOzE4NzEsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULFxuQEAgLTE4NjMsOCAmIzQzOzE4ODMsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbiYjNDM7XHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE4ODQsNyAmIzQzOzE5MDQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLFxuQEAgLTE4OTcsOCAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbiYjNDM7XHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcbiYjNDM7XHRcdFx0XHRcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFxuQEAgLTE5MTgsNyAmIzQzOzE5MzcsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4mIzQzO1x0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcbkBAIC0xOTMyLDE4ICYjNDM7MTk1MSwyMSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRjdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4mIzQzO1x0aWYgKCFjdF9saW1pdF9pbmZvKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PRU5UO1xuJiM0MztcdH0gZWxzZSBpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXG4gXHRcdFx0bmV0LCBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLCBjdF9saW1pdF9pbmZvLFxuIFx0XHRcdHJlcGx5KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0XHRcdFx0ICAgICAgcmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXhpdF9lcnI7XG4gXG4gXHRubGFfbmVzdF9lbmQocmVwbHksIG5sYV9yZXBseSk7XG4gXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmggYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuaW5kZXggNjk2NjQwZTg4ZmE3ZS4uOTNlMTFlNDY4ZDE3MyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaFxuQEAgLTE3Miw3ICYjNDM7MTcyLDcgQEAgc3RydWN0IG92c19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBtYXNrc19yZWJhbGFuY2U7XG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRmOGIzM2I2NGMzYWI5ZGJmNzVmN2E1ZGNiNWQzZThmNGU5MDg2MGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE4OjQ4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCmluZGV4IDk1Njk3ZDRlMTZlNjQuLjVmZTY0YmZmMjU0YTMgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKQEAgLTkzMywxMCAmIzQzOzkzMywxNCBAQCBzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKQogewogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJdTMyIHBlcl96b25lX2xpbWl0LCBjb25uZWN0aW9uczsKIAl1MzIgY29ubmNvdW50X2tleTsKIAomIzQzOwljdF9saW1pdF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWN0X2xpbWl0X2luZm8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAljb25uY291bnRfa2V5ID0gaW5mby0mZ3Q7em9uZS5pZDsKIAogCXBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tJmd0O3pvbmUuaWQpOwpAQCAtMTU4NSw0MCAmIzQzOzE1ODksNDcgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbykKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQogc3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KQogewomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87CiAJaW50IGksIGVycjsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7Ci0JaWYgKCFvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKQomIzQzOwlpbmZvID0ga21hbGxvY19vYmooKmluZm8pOwomIzQzOwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2xpbWl0cyA9CiYjNDM7CWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDsKJiM0MzsJaW5mby0mZ3Q7bGltaXRzID0KIAkJa21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpOwotCWlmICghb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mby0mZ3Q7bGltaXRzKSB7Ci0JCWtmcmVlKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8pOwomIzQzOwlpZiAoIWluZm8tJmd0O2xpbWl0cykgewomIzQzOwkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkmIzQzOyYjNDM7KQotCQlJTklUX0hMSVNUX0hFQUQoJmFtcDtvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHNbaV0pOwomIzQzOwkJSU5JVF9ITElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7bGltaXRzW2ldKTsKIAotCW92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTsKJiM0MzsJaW5mby0mZ3Q7ZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpOwogCi0JaWYgKElTX0VSUihvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtkYXRhKSkgewotCQllcnIgPSBQVFJfRVJSKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8tJmd0O2RhdGEpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvLSZndDtsaW1pdHMpOwotCQlrZnJlZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJaWYgKElTX0VSUihpbmZvLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihpbmZvLSZndDtkYXRhKTsKJiM0MzsJCWtmcmVlKGluZm8tJmd0O2xpbWl0cyk7CiYjNDM7CQlrZnJlZShpbmZvKTsKIAkJcHJfZXJyKCYjMzQ7b3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxuJiMzNDssIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbywgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpCiB7Ci0JY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKJiM0MzsJY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCWludCBpOwogCiYjNDM7CWluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm8sIE5VTEwsCiYjNDM7CQkJCSAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpOwomIzQzOwkvKiBXYWl0IGZvciBSQ1UgcmVhZGVycyB0byBzdG9wIHVzaW5nIHRoZSBDVCBsaW1pdHMuICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwogCW5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby0mZ3Q7ZGF0YSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHsKIAkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmYW1wO2luZm8tJmd0O2xpbWl0c1tpXTsKQEAgLTE2NjUsMTIgJiM0MzsxNjc2LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCwKLQkJCQkgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpCiB7CiAJc3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0OwotCWludCByZW07CiYjNDM7CXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbzsKIAl1MTYgem9uZTsKJiM0MzsJaW50IHJlbTsKIAogCXJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7CiAJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7CkBAIC0xNjc5LDcgJiM0MzsxNjkxLDkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCWlmICh1bmxpa2VseSh6b25lX2xpbWl0LSZndDt6b25lX2lkID09CiAJCQkJT1ZTX1pPTkVfTElNSVRfREVGQVVMVF9aT05FKSkgewogCQkJb3ZzX2xvY2soKTsKLQkJCWluZm8tJmd0O2RlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKJiM0MzsJCQlpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvKTsKJiM0MzsJCQlpZiAobGlrZWx5KGluZm8pKQomIzQzOwkJCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC0mZ3Q7bGltaXQ7CiAJCQlvdnNfdW5sb2NrKCk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoCiAJCQkJem9uZV9saW1pdC0mZ3Q7em9uZV9pZCwgJmFtcDt6b25lKSkpIHsKQEAgLTE2OTUsOCAmIzQzOzE3MDksMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQljdF9saW1pdC0mZ3Q7bGltaXQgPSB6b25lX2xpbWl0LSZndDtsaW1pdDsKIAogCQkJb3ZzX2xvY2soKTsKLQkJCWN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CQkJaWYgKGxpa2VseShpbmZvKSkKJiM0MzsJCQkJY3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTsKIAkJCW92c191bmxvY2soKTsKJiM0MzsKJiM0MzsJCQlpZiAodW5saWtlbHkoIWluZm8pKQomIzQzOwkJCQlrZnJlZShjdF9saW1pdCk7CiAJCX0KIAkJcmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTsKIAkJem9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKikoKHU4ICopem9uZV9saW1pdCAmIzQzOwpAQCAtMTcwOSwxMiAmIzQzOzE3MjgsMTMgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAotCQkJCSAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pCiYjNDM7c3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCkKIHsKIAlzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKnpvbmVfbGltaXQ7Ci0JaW50IHJlbTsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvOwogCXUxNiB6b25lOwomIzQzOwlpbnQgcmVtOwogCiAJcmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTsKIAl6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTsKQEAgLTE3MjMsMTQgJiM0MzsxNzQzLDE4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LAogCQlpZiAodW5saWtlbHkoem9uZV9saW1pdC0mZ3Q7em9uZV9pZCA9PQogCQkJCU9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHsKIAkJCW92c19sb2NrKCk7Ci0JCQlpbmZvLSZndDtkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CQkJaWYgKGxpa2VseShpbmZvKSkKJiM0MzsJCQkJaW5mby0mZ3Q7ZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUOwogCQkJb3ZzX3VubG9jaygpOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKAogCQkJCXpvbmVfbGltaXQtJmd0O3pvbmVfaWQsICZhbXA7em9uZSkpKSB7CiAJCQlPVlNfTkxFUlIodHJ1ZSwgJiMzNDt6b25lIGlkIGlzIG91dCBvZiByYW5nZSYjMzQ7KTsKIAkJfSBlbHNlIHsKIAkJCW92c19sb2NrKCk7Ci0JCQljdF9saW1pdF9kZWwoaW5mbywgem9uZSk7CiYjNDM7CQkJaW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CQkJaWYgKGxpa2VseShpbmZvKSkKJiM0MzsJCQkJY3RfbGltaXRfZGVsKGluZm8sIHpvbmUpOwogCQkJb3ZzX3VubG9jaygpOwogCQl9CiAJCXJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7CkBAIC0xNzczLDYgJiM0MzsxNzk3LDcgQEAgc3RhdGljIGludCBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgJmFtcDt6b25lX2xpbWl0KTsKIH0KIAomIzQzOy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi8KIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsCiAJCQkJICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbywKQEAgLTE3OTYsMTIgJiM0MzsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCQkmYW1wO3pvbmUpKSkgewogCQkJT1ZTX05MRVJSKHRydWUsICYjMzQ7em9uZSBpZCBpcyBvdXQgb2YgcmFuZ2UmIzM0Oyk7CiAJCX0gZWxzZSB7Ci0JCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQlsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTsKIAogCQkJZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoCiAJCQkJbmV0LCBpbmZvLSZndDtkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTE4MTYsNiAmIzQzOzE4MzksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovCiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sCiAJCQkJCSAgIHN0cnVjdCBza19idWZmICpyZXBseSkKQEAgLTE4MjgsMTkgJiM0MzsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyAmIzQzOyYjNDM7aSkgewogCQloZWFkID0gJmFtcDtpbmZvLSZndDtsaW1pdHNbaV07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjdF9saW1pdCwgaGVhZCwgaGxpc3Rfbm9kZSkgewogCQkJZXJyID0gX19vdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQobmV0LCBpbmZvLSZndDtkYXRhLAogCQkJCWN0X2xpbWl0LSZndDt6b25lLCBjdF9saW1pdC0mZ3Q7bGltaXQsIHJlcGx5KTsKIAkJCWlmIChlcnIpCi0JCQkJZ290byBleGl0X2VycjsKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIAotZXhpdF9lcnI6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTg1MCw3ICYjNDM7MTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7CiAJc3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItJmd0O3NrKSwgb3ZzX25ldF9pZCk7Ci0Jc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbzsKIAlpbnQgZXJyOwogCiAJcmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfU0VULApAQCAtMTg2Myw4ICYjNDM7MTg4Myw4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQllcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwKLQkJCQkJICBjdF9saW1pdF9pbmZvKTsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsCiYjNDM7CQkJCQkgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9lcnI7CiAKQEAgLTE4ODQsNyAmIzQzOzE5MDQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLSZndDtzayksIG92c19uZXRfaWQpOwotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtJmd0O2N0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCwKQEAgLTE4OTcsOCAmIzQzOzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCi0JZXJyID0gb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sCi0JCQkJCSAgY3RfbGltaXRfaW5mbyk7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LAomIzQzOwkJCQkJICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZXJyOwogCkBAIC0xOTE4LDcgJiM0MzsxOTM3LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKLQlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LSZndDtjdF9saW1pdF9pbmZvOwomIzQzOwlzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87CiAJaW50IGVycjsKIAogCXJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCwKQEAgLTE5MzIsMTggJiM0MzsxOTUxLDIxIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBleGl0X2VycjsKIAl9CiAKLQlpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkgewomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC0mZ3Q7Y3RfbGltaXRfaW5mbyk7CiYjNDM7CWlmICghY3RfbGltaXRfaW5mbykgewomIzQzOwkJZXJyID0gLUVOT0VOVDsKJiM0MzsJfSBlbHNlIGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7CiAJCWVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdCgKIAkJCW5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbywKIAkJCXJlcGx5KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9lcnI7CiAJfSBlbHNlIHsKIAkJZXJyID0gb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChuZXQsIGN0X2xpbWl0X2luZm8sCiAJCQkJCQkgICAgICByZXBseSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZXJyOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfZXJyOwogCiAJbmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpOwogCWdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKaW5kZXggNjk2NjQwZTg4ZmE3ZS4uOTNlMTFlNDY4ZDE3MyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmgKQEAgLTE3Miw3ICYjNDM7MTcyLDcgQEAgc3RydWN0IG92c19uZXQgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTsKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbzsKJiM0MzsJc3RydWN0IG92c19jdF9saW1pdF9pbmZvIF9fcmN1ICpjdF9saW1pdF9pbmZvOwogI2VuZGlmCiAJYm9vbCB4dF9sYWJlbDsKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSQ1UgSW1wbGVtZW50YXRpb24gaW4gT3BlbiB2U3dpdGNoIENvbm50cmFjayBMaW1pdHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBhbmQgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBgY3RfbGltaXRfaW5mb2AgZGF0YSBzdHJ1Y3R1cmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHVzaW5nIGByY3VfZGVyZWZlcmVuY2VgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLCBhbmQgYHN5bmNocm9uaXplX3JjdWAsIHNvIHRoaXMgaXMgYSBzaWduaWZpY2FudCBzeW5jaHJvbml6YXRpb24gY2hhbmdlIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdCBsb2dpYy4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYSBsb3Qgb2YgZnVuY3Rpb25zLCBuYW1lbHkgYG92c19jdF9saW1pdF9pbml0YCwgYG92c19jdF9saW1pdF9leGl0YCwgYG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCwgc28gaXQmIzM5O3MgYSBwcmV0dHkgcGVydmFzaXZlIGNoYW5nZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSAtIGludHJvZHVjaW5nIFJDVSBzeW5jaHJvbml6YXRpb24gaW50byB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGltcGxlbWVudGF0aW9uIHdpdGhpbiBPcGVuIHZTd2l0Y2guIEl0IGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZnV6emVkIHRob3JvdWdobHkuIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBpcyBoaWdoLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb2RlIGlzIGdhdGVkIGJ5IGAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClgIGluIGBjb25udHJhY2suY2AuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZGVwZW5kZW5jeSwgYW5kIG9mIGNvdXJzZSwgT3BlbiB2U3dpdGNoIGl0c2VsZiByZXF1aXJlcyBgQ09ORklHX09QRU5WU1dJVENIYC4gSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBqdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciBidWlsZC10aW1lIG9wdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBJIHN0YXJ0IHNldHRpbmcgdXAgYSBmdXp6aW5nIGVudmlyb25tZW50LiBNYWtpbmcgc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcyB3aWxsIHNhdmUgbWUgaGVhZGFjaGVzIGxhdGVyIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgT1BFTlZTV0lUQ0ggRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgZ29hbCBpcyBjbGVhcjogdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIE9wZW4gdlN3aXRjaC4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgZXZlcnl0aGluZyBpdCByZWxpZXMgdXBvbiwgYm90aCBkaXJlY3RseSBhbmQgaW5kaXJlY3RseS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgZGVwZW5kZW5jeSBhbmFseXNpcy4gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggYnVpbGQtdGltZSBhbmQgcnVuLXRpbWUgZGVwZW5kZW5jaWVzLgoKKiAgICoqQnVpbGQtdGltZSBkZXBlbmRlbmNpZXM6KiogV2hhdCBzb2Z0d2FyZSwgbGlicmFyaWVzLCBhbmQgdG9vbHMgYXJlICpyZXF1aXJlZCogdG8gY29tcGlsZSBhbmQgYnVpbGQgT3BlbiB2U3dpdGNoIGZyb20gc291cmNlPyBUaGlzIHdvdWxkIGluY2x1ZGUgY29tcGlsZXJzLCBidWlsZCBzeXN0ZW1zIChsaWtlIGF1dG90b29scywgQ01ha2UsIGV0Yy4pLCBzcGVjaWZpYyB2ZXJzaW9ucyBvZiBsaWJyYXJpZXMgKGUuZy4sIHNwZWNpZmljIHZlcnNpb25zIG9mIGxpYnBjYXAsIG9wZW5zc2wsIGV0Yy4pLCBoZWFkZXIgZmlsZXMsIGFuZCBhbnl0aGluZyBlbHNlIHRoZSBidWlsZCBwcm9jZXNzIGRlbWFuZHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gc2VwYXJhdGUgdGhvc2UgZnJvbSBhbnkgb3B0aW9uYWwgZGVwZW5kZW5jaWVzLgoKKiAgICoqUnVuLXRpbWUgZGVwZW5kZW5jaWVzOioqIE9uY2UgYnVpbHQgYW5kIHJ1bm5pbmcsIHdoYXQgZG9lcyBPcGVuIHZTd2l0Y2ggKm5lZWQqIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3RpbmcuIFdlJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoaW5ncyBsaWtlIHRoZSBrZXJuZWwgbW9kdWxlcyAob3ZzX3Zwb3J0LCBldGMuKSwgdGhlIHVzZXItc3BhY2UgZGFlbW9ucywgYW5kIGFueSBvdGhlciBzeXN0ZW0gbGlicmFyaWVzIG9yIHNlcnZpY2VzIGl0IGludGVyYWN0cyB3aXRoLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgdmVyc2lvbnMgb2Yga2VybmVsIG1vZHVsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkgYWxzbyBuZWVkIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgYW55IG9wdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGFyZSByZWNvbW1lbmRlZCwgYnV0IG5vdCBuZWNlc3NhcnkuCgpJIHdpbGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBncmFudWxhcml0eSBvZiB0aGUgYW5hbHlzaXMuIElzIGEgaGlnaC1sZXZlbCBvdmVydmlldyBlbm91Z2gsIG9yIHdpbGwgSSBuZWVkIGEgZGV0YWlsZWQsIHBhY2thZ2UtYnktcGFja2FnZSBicmVha2Rvd24/IFRoZSBsZXZlbCBvZiBkZXRhaWwgd2lsbCBkZXBlbmQgb24gdGhlIHVsdGltYXRlIG9iamVjdGl2ZS4gSXMgdGhlIGdvYWwgdG8gdHJvdWJsZXNob290IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpc3N1ZSwgdW5kZXJzdGFuZCBjb21wYXRpYmlsaXR5LCBvciBwcmVwYXJlIGZvciBhIHN5c3RlbSB1cGdyYWRlPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIG11bHRpcGxlIGxldmVscyBvZiBkZXRhaWwgdG8gYmUgdGhvcm91Z2guIEkgd2lsbCBoYXZlIHRvIGFwcHJvYWNoIHRoaXMgdGFzayBpbiBhIHN0cnVjdHVyZWQgd2F5LgoKSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbW9zdCBvYnZpb3VzIHNvdXJjZXM6IHRoZSBPcGVuIHZTd2l0Y2ggZG9jdW1lbnRhdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiAodGhlIGBjb25maWd1cmUuYWNgIGFuZCBgTWFrZWZpbGUuYW1gIGZpbGVzIGFyZSBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50KSwgYW5kIHBlcmhhcHMgdGhlIHBhY2thZ2UgcmVwb3NpdG9yaWVzIGZvciB2YXJpb3VzIExpbnV4IGRpc3RyaWJ1dGlvbnMuIEkgY2FuIHRoZW4gdXNlIHZhcmlvdXMgdG9vbHMgbGlrZSBgbGRkYCwgYHBrZy1jb25maWdgLCBhbmQgZGVwZW5kZW5jeSBncmFwaCBnZW5lcmF0b3JzIHRvIGdldCBhIGZ1bGxlciBwaWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgaW5mb3JtYXRpb24gdG8gY29uZmlybSBteSBpbml0aWFsIHN1cHBvc2l0aW9ucyBhbmQgdG8gcHJvZHVjZSBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIuIEZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gb3JnYW5pemUgdGhpcyBpbmZvcm1hdGlvbiBpbiBhIGNsZWFyIGFuZCBhY2Nlc3NpYmxlIGZvcm1hdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XG4gIDMyOlx0XHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXG4gIDMzOlx0XHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcbiAgMzQ6XHRcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNlZSBodHRwOi8vb3BlbnZzd2l0Y2gub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2Vyc3BhY2VcbiAgMzc6XHRcdCAgdXRpbGl0aWVzLlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDQwOlx0XHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDgzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gLSBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBXZSYjMzk7cmUgc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQsIGFuZCByaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBTdGFuZGFyZCBmYXJlLCByZWFsbHksIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBtZXRob2RpY2FsLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTttIHVzaW5nLCBhbmQgSSYjMzk7bGwgc3RhcnQgd2l0aCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEJlc3QgcHJhY3RpY2UgZGljdGF0ZXMgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBvcHRpb24sIHNvIEkmIzM5O2xsIGJlIG9mZiB0byBgL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIExldCYjMzk7cyBjb25maXJtIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIE5vIHN1cnByaXNlcywgcGxlYXNlISBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gYnVpbGQgdXBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjExMTpjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIExpbWl0IFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIHJlcXVpcmVzIGBORl9DT05OVFJBQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYCBhcmUgZW5hYmxlZC4gR29vZCB0byBrbm93LgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgc3VpdGUgb2YgZnVuY3Rpb25zIHdpdGggYG92c19jdF9saW1pdGAgaW4gdGhlaXIgbmFtZXMuIEkgc2VlOiBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9saW1pdF9pbml0YCwgYG92c19jdF9saW1pdF9leGl0YCwgYW5kIHRoZW4gc2V2ZXJhbCBvdGhlcnMgZGVhbGluZyB3aXRoIHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyB6b25lIGxpbWl0cy4gVGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIHNpbmNlIHRoZXkgd2lsbCBsaWtlbHkgc2VydmUgYXMgZW50cnkgcG9pbnRzLgoKYG92c19jdF9jaGVja19saW1pdGAgaXMgcHJvYmFibHkgdGhlIG1vc3QgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBvdnNfY3RfY29tbWl0YCBvciBzb21ldGhpbmcgc2ltaWxhciwgd2hpY2ggc3VnZ2VzdHMgaXQmIzM5O3MgcGFydCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgdGFyZ2V0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZWFsLXRpbWUgaW1wYWN0LCBidXQgaXQgbWlnaHQgYmUgY2FsbGVkIHZlcnkgZnJlcXVlbnRseSwgbWFraW5nIGl0IGEgYml0ICYjMzQ7aG90JiMzNDsgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgaW1wYWN0LiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2NoZWNrX2xpbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05MTc9c3RhdGljIHUzMiBjdF9saW1pdF9nZXQoY29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLCB1MTYgem9uZSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMwLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjkzMTpzdGF0aWMgaW50IG92c19jdF9jaGVja19saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMyLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTgwLVx0XHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo5ODE6XHRcdFx0ZXJyID0gb3ZzX2N0X2NoZWNrX2xpbWl0KG5ldCwgc2tiLCBpbmZvKTtcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy05ODItXHRcdFx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzI4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIENvbm5lY3Rpb24gVHJhY2tpbmcgTGltaXRzKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGZvciB0aGVzZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cy4gTG9va3MgbGlrZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIOKAkyB0aGUgY29tbWFuZCBoYW5kbGVycy4gVGhleSBzZWVtIHRvIGJlIHRoZSBrZXkgY29udHJvbCBwbGFuZSBmdW5jdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbi4KClRoZSBvdGhlciBmdW5jdGlvbnMsIGBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdGAsIGFyZSBqdXN0IHN0YXRpYyBoZWxwZXJzIHVzZWQgYnkgdGhlIGNvbW1hbmQgaGFuZGxlcnMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGVtIGZvciBub3cuIEkgYWxzbyBzZWUgYG92c19jdF9jaGVja19saW1pdGAgaXMgY2FsbGVkIGJ5IGBvdnNfY3RfY29tbWl0YCwgd2hpY2ggY291bGQgYmUgcmVsZXZhbnQsIG9yIGV2ZW4gYG92c19jdF9leGVjdXRlYCwgYnV0IHRoZSBgb3ZzX2N0X2xpbWl0X2NtZF8qYCBoYW5kbGVycyBhcmUgdGhlIG9uZXMgSSYjMzk7bGwgYmUgZGlyZWN0bHkgbW9kaWZ5aW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYG92c19jdF9saW1pdF9jbWRfc2V0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiB0byBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2N0X2xpbWl0X2NtZF9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE4NDM9c3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2Ny1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxODY4OnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xODY5LXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGN0X2xpbWl0X2dlbmxfb3BzW10gPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODQtXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5ODU6XHRcdC5kb2l0ID0gb3ZzX2N0X2xpbWl0X2NtZF9zZXQsXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4Ni1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBPVlMgQ29ubnRyYWNrIExpbWl0IE5ldGxpbmsgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCBiZXN0IHByYWN0aWNlcy4gVGhlIGd1aWRlbGluZSBoZXJlIGlzIGNsZWFyOiB3ZSBzaG91bGQgcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBndXQgcmVhY3Rpb24gd2FzIHRvIGF2b2lkIGRpcmVjdGx5IHVzaW5nIGBvdnNfY3RfbGltaXRfY21kX3NldGAgYmVjYXVzZSBpdCAqaXMqIHN0YXRpYy4gQnV0IHRoZW4gSSByZW1lbWJlciB0aGF0IE5ldGxpbmsgYC5kb2l0YCBoYW5kbGVycyBhcmUgb2Z0ZW4gKmRlZmluZWQqIGFzIHN0YXRpYywgeWV0IHRoZXkgZXNzZW50aWFsbHkgKmFyZSogdGhlIGVudHJ5cG9pbnRzIGZvciB0aGUgTmV0bGluayBjb21tYW5kcyB0aGVtc2VsdmVzLiBUaGUgc3RhdGljIG5hdHVyZSBjYW4gY2F1c2UgdG9vbGluZyBpc3N1ZXMgd2l0aCB0aGluZ3MgbGlrZSBzeW1ib2wgcmVzb2x1dGlvbiBmb3IgZGVidWdnZXJzIGFuZCBmdXp6ZXJzIGxpa2Ugc3l6a2FsbGVyLCBhbHRob3VnaCBzeXprYWxsZXIgaXMgb2Z0ZW4gc3RpbGwgYWJsZSB0byByZXNvbHZlIHRoZW0gaWYgdGhleSBhcmVuJiMzOTt0IGlubGluZWQuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICpub24qLXN0YXRpYyBhbHRlcm5hdGl2ZXM/IFRoZSBuZXRsaW5rIGZhbWlseSBpdHNlbGYgaXMgcmVnaXN0ZXJlZC4uLiBsZXQgbWUgcXVpY2tseSBjaGVjayB3aGVyZS4uLiBBaCwgcmlnaHQsIG5vdCBpbiBhIGZ1bmN0aW9uIHNwZWNpZmljIHRvIHRoaXMgZmVhdHVyZSwgYnV0IHZpYSBgZHBfcmVnaXN0ZXJfZ2VubGAuIFNvLCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGp1c3QgYml0ZSB0aGUgYnVsbGV0IGFuZCB1c2UgdGhvc2UgZnVuY3Rpb24gYXMgTmV0bGluayBoYW5kbGVycy4gVGhlIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCBhcmUgdGhlIG1vc3QgZGlyZWN0IGVudHJ5IHBvaW50cyBmb3IgdGhpcyBmZWF0dXJlLiBUaGV5JiMzOTtyZSBleGFjdGx5IHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLgoKLi4uIEhvbGQgb24sIHdhaXQgYSBzZWNvbmQuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhIG1vcmUgZnVuZGFtZW50YWwgZW50cnlwb2ludC4gT2ggeWVhaCwgYG92c19jdF9leGVjdXRlYCBpcyB0aGUgZGF0YXBhdGggZW50cnkgcG9pbnQgZm9yIGNvbm50cmFjayBhY3Rpb24hIFNvIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGNvbnRpbnVlIHJldmlld2luZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NTMyPXN0YXRpY1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjUzMzpzdHJ1Y3QgbmZfY29ubiAqb3ZzX2N0X2V4ZWN1dGVkKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy01MzQtXHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9NTYxPXN0YXRpYyBib29sIHNrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTU3MS1cdGlmICghY3QpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6NTcyOlx0XHRjdCA9IG92c19jdF9leGVjdXRlZChuZXQsIGtleSwgaW5mbywgc2tiLCBcdTAwMjZjdF9leGVjdXRlZCk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTczLVxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz05NjE9c3RhdGljIGludCBvdnNfY3RfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDAtICovXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTA0MTppbnQgb3ZzX2N0X2V4ZWN1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDItXHRcdCAgIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwNwoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA1MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE9wZW4gdlN3aXRjaCBDb25uZWN0aW9uIFRyYWNraW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gbWV0aG9kaWNhbGx5LiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYG92c19jdF9leGVjdXRlYCBpc24mIzM5O3Qgc3RhdGljLiBHb29kLiBOb3csIGxldCYjMzk7cyBjb25maXJtIGlmIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIEluaXRpYWxseSwgSSBjb25zaWRlcmVkIGluY2x1ZGluZyBgb3ZzX2N0X2V4ZWN1dGVgIGp1c3QgdG8gYmUgZXh0cmEgY2F1dGlvdXMuIEJ1dCwgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnMgaW4gdGhvc2UgbmV0bGluayBoYW5kbGVycyDigJMgdGhleSYjMzk7cmUgdGhlIG9uZXMgdHJpZ2dlcmluZyB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgY29udHJvbCBwbGFuZS4gVGhleSBhcmUgbm90IGlubGluZWQsIHNpbmNlIG5ldGxpbmsgaGFuZGxlcnMgYXJlIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBnZW5sX3NtYWxsX29wc2AsIGFuZCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHNvIGl0IGlzIHNhZmUgdG8gaW5jbHVkZSB0aGVtIGRpcmVjdGx5LgoKU28sIEkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBhbmQgYWxzbyBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCBhbmQgYG92c19jdF9leGVjdXRlYCBhcyBmb2N1cyBzeW1ib2xzLgoKSSB0aGVuIGRvdWJsZS1jaGVja2VkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSBgT1BFTlZTV0lUQ0hgLCBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGFuZCBgTkZfQ09OTlRSQUNLYC4gYE5FVEZJTFRFUl9DT05OQ09VTlRgIG9idmlvdXNseSByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AsIGFuZCBgT1BFTlZTV0lUQ0hgIHJlcXVpcmVzIGBJTkVUYCwgc28gYE9QRU5WU1dJVENIYCwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBhbmQgYE5GX0NPTk5UUkFDS2AgYXJlIHRoZSBrZXkgb25lcyBoZXJlLgoKTG9va2luZyBiYWNrIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIHRvIGBjdF9saW1pdF9pbmZvYCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgb3ZzX25ldGAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlOyBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciBmb3IgZnV6emluZy4KCk15IHRoaW5raW5nIGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHN5bmNocm9uaXphdGlvbiBmb3IgT3BlbiB2U3dpdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBPVlMgY29ubnRyYWNrIGxvZ2ljIGFuZCBuZXRsaW5rIGNvbnRyb2wgcGxhbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbW1hbmQgaGFuZGxlcnMgZm9yIHNldHRpbmcvZ2V0dGluZy9kZWxldGluZyBsaW1pdHMsIGFzIHdlbGwgYXMgdGhlIGRhdGFwYXRoIGV4ZWN1dGlvbiB3aGljaCBjaGVja3MgdGhlc2UgbGltaXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX3NldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2RlbCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfbGltaXRfY21kX2dldCYjMzQ7LAogICAgJiMzNDtvdnNfY3RfZXhlY3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ4OjU3LjI2MTMxNTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4NzE4MzIwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGZvciBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9WUyBjb25udHJhY2sgbG9naWMgYW5kIG5ldGxpbmsgY29udHJvbCBwbGFuZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgZGF0YXBhdGggZXhlY3V0aW9uIHdoaWNoIGNoZWNrcyB0aGVzZSBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ4OjU3LjI2MTMyMDc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjYyNDA4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZjhiMzNiNjRjM2FiOWRiZjc1ZjdhNWRjYjVkM2U4ZjRlOTA4NjBiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTg6NDg6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXFxuaW5kZXggOTU2OTdkNGUxNmU2NC4uNWZlNjRiZmYyNTRhMyAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG5AQCAtOTMzLDEwICs5MzMsMTQgQEAgc3RhdGljIGludCBvdnNfY3RfY2hlY2tfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG4tXFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbiBcXHR1MzIgcGVyX3pvbmVfbGltaXQsIGNvbm5lY3Rpb25zO1xcbiBcXHR1MzIgY29ubmNvdW50X2tleTtcXG4gXFxuK1xcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdGlmICghY3RfbGltaXRfaW5mbylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRjb25uY291bnRfa2V5ID0gaW5mby1cXHUwMDNlem9uZS5pZDtcXG4gXFxuIFxcdHBlcl96b25lX2xpbWl0ID0gY3RfbGltaXRfZ2V0KGN0X2xpbWl0X2luZm8sIGluZm8tXFx1MDAzZXpvbmUuaWQpO1xcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4ge1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbi1cXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pXFxuK1xcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XFxuK1xcdGlmICghaW5mbylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XFxuLVxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyA9XFxuK1xcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4rXFx0aW5mby1cXHUwMDNlbGltaXRzID1cXG4gXFx0XFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xcbi1cXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cykge1xcbi1cXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VsaW1pdHMpIHtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpKyspXFxuLVxcdFxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlbGltaXRzW2ldKTtcXG4rXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZpbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbiBcXG4tXFx0b3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xcbitcXHRpbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuIFxcbi1cXHRpZiAoSVNfRVJSKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRhdGEpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSk7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyk7XFxuLVxcdFxcdGtmcmVlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRpZiAoSVNfRVJSKGluZm8tXFx1MDAzZWRhdGEpKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoaW5mby1cXHUwMDNlZGF0YSk7XFxuK1xcdFxcdGtmcmVlKGluZm8tXFx1MDAzZWxpbWl0cyk7XFxuK1xcdFxcdGtmcmVlKGluZm8pO1xcbiBcXHRcXHRwcl9lcnIoXFxcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXFxcblxcXCIsIGVycik7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8sIGluZm8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbitcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0aW5mbyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcXG4rXFx0XFx0XFx0XFx0ICAgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSk7XFxuK1xcdC8qIFdhaXQgZm9yIFJDVSByZWFkZXJzIHRvIHN0b3AgdXNpbmcgdGhlIENUIGxpbWl0cy4gKi9cXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcbiBcXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXFx1MDAzZWRhdGEpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcXG4gXFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcXHUwMDI2aW5mby1cXHUwMDNlbGltaXRzW2ldO1xcbkBAIC0xNjY1LDEyICsxNjc2LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrX3pvbmVfaWQoaW50IHpvbmVfaWQsIHUxNiAqcHpvbmUpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXFxuIHtcXG4gXFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xcbi1cXHRpbnQgcmVtO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdHUxNiB6b25lO1xcbitcXHRpbnQgcmVtO1xcbiBcXG4gXFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcXG4gXFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XFxuQEAgLTE2NzksNyArMTY5MSw5IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cXHUwMDNlem9uZV9pZCA9PVxcbiBcXHRcXHRcXHRcXHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XFxuIFxcdFxcdFxcdG92c19sb2NrKCk7XFxuLVxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4rXFx0XFx0XFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuK1xcdFxcdFxcdGlmIChsaWtlbHkoaW5mbykpXFxuK1xcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSB6b25lX2xpbWl0LVxcdTAwM2VsaW1pdDtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KCFjaGVja196b25lX2lkKFxcbiBcXHRcXHRcXHRcXHR6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkLCBcXHUwMDI2em9uZSkpKSB7XFxuQEAgLTE2OTUsOCArMTcwOSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcXG4gXFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZWxpbWl0ID0gem9uZV9saW1pdC1cXHUwMDNlbGltaXQ7XFxuIFxcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbi1cXHRcXHRcXHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0XFx0XFx0aWYgKGxpa2VseShpbmZvKSlcXG4rXFx0XFx0XFx0XFx0Y3RfbGltaXRfc2V0KGluZm8sIGN0X2xpbWl0KTtcXG4gXFx0XFx0XFx0b3ZzX3VubG9jaygpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KCFpbmZvKSlcXG4rXFx0XFx0XFx0XFx0a2ZyZWUoY3RfbGltaXQpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJlbSAtPSBOTEFfQUxJR04oc2l6ZW9mKCp6b25lX2xpbWl0KSk7XFxuIFxcdFxcdHpvbmVfbGltaXQgPSAoc3RydWN0IG92c196b25lX2xpbWl0ICopKCh1OCAqKXpvbmVfbGltaXQgK1xcbkBAIC0xNzA5LDEyICsxNzI4LDEzIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXFxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXFxuIHtcXG4gXFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xcbi1cXHRpbnQgcmVtO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XFxuIFxcdHUxNiB6b25lO1xcbitcXHRpbnQgcmVtO1xcbiBcXG4gXFx0cmVtID0gTkxBX0FMSUdOKG5sYV9sZW4obmxhX3pvbmVfbGltaXQpKTtcXG4gXFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XFxuQEAgLTE3MjMsMTQgKzE3NDMsMTggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXFxuIFxcdFxcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVxcdTAwM2V6b25lX2lkID09XFxuIFxcdFxcdFxcdFxcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcXG4gXFx0XFx0XFx0b3ZzX2xvY2soKTtcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbitcXHRcXHRcXHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0XFx0XFx0aWYgKGxpa2VseShpbmZvKSlcXG4rXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZGVmYXVsdF9saW1pdCA9IE9WU19DVF9MSU1JVF9ERUZBVUxUO1xcbiBcXHRcXHRcXHRvdnNfdW5sb2NrKCk7XFxuIFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXFxuIFxcdFxcdFxcdFxcdHpvbmVfbGltaXQtXFx1MDAzZXpvbmVfaWQsIFxcdTAwMjZ6b25lKSkpIHtcXG4gXFx0XFx0XFx0T1ZTX05MRVJSKHRydWUsIFxcXCJ6b25lIGlkIGlzIG91dCBvZiByYW5nZVxcXCIpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRvdnNfbG9jaygpO1xcbi1cXHRcXHRcXHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XFxuK1xcdFxcdFxcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbitcXHRcXHRcXHRpZiAobGlrZWx5KGluZm8pKVxcbitcXHRcXHRcXHRcXHRjdF9saW1pdF9kZWwoaW5mbywgem9uZSk7XFxuIFxcdFxcdFxcdG92c191bmxvY2soKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZW0gLT0gTkxBX0FMSUdOKHNpemVvZigqem9uZV9saW1pdCkpO1xcbkBAIC0xNzczLDYgKzE3OTcsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0cmV0dXJuIG5sYV9wdXRfbm9oZHIocmVwbHksIHNpemVvZih6b25lX2xpbWl0KSwgXFx1MDAyNnpvbmVfbGltaXQpO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvLFxcbkBAIC0xNzk2LDEyICsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnpvbmUpKSkge1xcbiBcXHRcXHRcXHRPVlNfTkxFUlIodHJ1ZSwgXFxcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXFxcIik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0XFx0bGltaXQgPSBjdF9saW1pdF9nZXQoaW5mbywgem9uZSk7XFxuIFxcbiBcXHRcXHRcXHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcXG4gXFx0XFx0XFx0XFx0bmV0LCBpbmZvLVxcdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xcbi1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbkBAIC0xODE2LDYgKzE4MzksNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXFxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnJlcGx5KVxcbkBAIC0xODI4LDE5ICsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xcbiBcXHRcXHRoZWFkID0gXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXTtcXG4gXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0X2xpbWl0LCBoZWFkLCBobGlzdF9ub2RlKSB7XFxuIFxcdFxcdFxcdGVyciA9IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KG5ldCwgaW5mby1cXHUwMDNlZGF0YSxcXG4gXFx0XFx0XFx0XFx0Y3RfbGltaXQtXFx1MDAzZXpvbmUsIGN0X2xpbWl0LVxcdTAwM2VsaW1pdCwgcmVwbHkpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLWV4aXRfZXJyOlxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTg1MCw3ICsxODcxLDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7XFxuIFxcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX1NFVCxcXG5AQCAtMTg2Myw4ICsxODgzLDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjdF9saW1pdF9pbmZvKTtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KG92c19uZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcbkBAIC0xODg0LDcgKzE5MDQsNiBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdHN0cnVjdCBza19idWZmICpyZXBseTtcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2tiLVxcdTAwM2VzayksIG92c19uZXRfaWQpO1xcbi1cXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfREVMLFxcbkBAIC0xODk3LDggKzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGN0X2xpbWl0X2luZm8pO1xcbitcXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQob3ZzX25ldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBleGl0X2VycjtcXG4gXFxuQEAgLTE5MTgsNyArMTkzNyw3IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XFxuLVxcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm87XFxuK1xcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0dFVCxcXG5AQCAtMTkzMiwxOCArMTk1MSwyMSBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGdvdG8gZXhpdF9lcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Y3RfbGltaXRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKTtcXG4rXFx0aWYgKCFjdF9saW1pdF9pbmZvKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9FTlQ7XFxuK1xcdH0gZWxzZSBpZiAoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSkge1xcbiBcXHRcXHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoXFxuIFxcdFxcdFxcdG5ldCwgYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSwgY3RfbGltaXRfaW5mbyxcXG4gXFx0XFx0XFx0cmVwbHkpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVwbHkpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGV4aXRfZXJyO1xcbiBcXG4gXFx0bmxhX25lc3RfZW5kKHJlcGx5LCBubGFfcmVwbHkpO1xcbiBcXHRnZW5sbXNnX2VuZChyZXBseSwgb3ZzX3JlcGx5X2hlYWRlcik7XFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG5pbmRleCA2OTY2NDBlODhmYTdlLi45M2UxMWU0NjhkMTczIDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXFxuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcXG5AQCAtMTcyLDcgKzE3Miw3IEBAIHN0cnVjdCBvdnNfbmV0IHtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IGRwX25vdGlmeV93b3JrO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG1hc2tzX3JlYmFsYW5jZTtcXG4gI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG4tXFx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvO1xcbitcXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gX19yY3UgKmN0X2xpbWl0X2luZm87XFxuICNlbmRpZlxcbiBcXHRib29sIHh0X2xhYmVsO1xcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0ODo1Ny43ODg1MjE3ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MTM0NDYxMTc5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgICBcIm92c19jdF9saW1pdF9jbWRfZGVsXCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2dldFwiLFxuICAgIFwib3ZzX2N0X2V4ZWN1dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGY4YjMzYjY0YzNhYjlkYmY3NWY3YTVkY2I1ZDNlOGY0ZTkwODYwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTg6NDg6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjVmZTY0YmZmMjU0YTMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTkzMywxMCArOTMzLDE0IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbi1cdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbitcdGNvbnN0IHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbiBcdHUzMiBwZXJfem9uZV9saW1pdCwgY29ubmVjdGlvbnM7XG4gXHR1MzIgY29ubmNvdW50X2tleTtcbiBcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRjb25uY291bnRfa2V5ID0gaW5mby1cdTAwM2V6b25lLmlkO1xuIFxuIFx0cGVyX3pvbmVfbGltaXQgPSBjdF9saW1pdF9nZXQoY3RfbGltaXRfaW5mbywgaW5mby1cdTAwM2V6b25lLmlkKTtcbkBAIC0xNTg1LDQwICsxNTg5LDQ3IEBAIHN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaSwgZXJyO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4tXHRpZiAoIW92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbylcbitcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbyk7XG4rXHRpZiAoIWluZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbi1cdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMgPVxuK1x0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4rXHRpbmZvLVx1MDAzZWxpbWl0cyA9XG4gXHRcdGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxpc3RfaGVhZCwgQ1RfTElNSVRfSEFTSF9CVUNLRVRTKTtcbi1cdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWxpbWl0cykge1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKCFpbmZvLVx1MDAzZWxpbWl0cykge1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7IGkrKylcbi1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuK1x0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuIFxuLVx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbitcdGluZm8tXHUwMDNlZGF0YSA9IG5mX2Nvbm5jb3VudF9pbml0KG5ldCwgc2l6ZW9mKHUzMikpO1xuIFxuLVx0aWYgKElTX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlZGF0YSk7XG4tXHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHMpO1xuLVx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0aWYgKElTX0VSUihpbmZvLVx1MDAzZWRhdGEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoaW5mby1cdTAwM2VkYXRhKTtcbitcdFx0a2ZyZWUoaW5mby1cdTAwM2VsaW1pdHMpO1xuK1x0XHRrZnJlZShpbmZvKTtcbiBcdFx0cHJfZXJyKFwib3BlbnZzd2l0Y2g6IGZhaWxlZCB0byBpbml0IG5mX2Nvbm5jb3VudCAlZFxcblwiLCBlcnIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgaW5mbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHRpbnQgaTtcbiBcbitcdGluZm8gPSByY3VfcmVwbGFjZV9wb2ludGVyKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbywgTlVMTCxcbitcdFx0XHRcdCAgIGxvY2tkZXBfb3ZzbF9pc19oZWxkKCkpO1xuK1x0LyogV2FpdCBmb3IgUkNVIHJlYWRlcnMgdG8gc3RvcCB1c2luZyB0aGUgQ1QgbGltaXRzLiAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXG4gXHRuZl9jb25uY291bnRfZGVzdHJveShuZXQsIGluZm8tXHUwMDNlZGF0YSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDVF9MSU1JVF9IQVNIX0JVQ0tFVFM7ICsraSkge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuQEAgLTE2NjUsMTIgKzE2NzYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tfem9uZV9pZChpbnQgem9uZV9pZCwgdTE2ICpwem9uZSlcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG92c19jdF9saW1pdF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0KVxuIHtcbiBcdHN0cnVjdCBvdnNfem9uZV9saW1pdCAqem9uZV9saW1pdDtcbi1cdGludCByZW07XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm87XG4gXHR1MTYgem9uZTtcbitcdGludCByZW07XG4gXG4gXHRyZW0gPSBOTEFfQUxJR04obmxhX2xlbihubGFfem9uZV9saW1pdCkpO1xuIFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKilubGFfZGF0YShubGFfem9uZV9saW1pdCk7XG5AQCAtMTY3OSw3ICsxNjkxLDkgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQoc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQsXG4gXHRcdGlmICh1bmxpa2VseSh6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQgPT1cbiBcdFx0XHRcdE9WU19aT05FX0xJTUlUX0RFRkFVTFRfWk9ORSkpIHtcbiBcdFx0XHRvdnNfbG9jaygpO1xuLVx0XHRcdGluZm8tXHUwMDNlZGVmYXVsdF9saW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4rXHRcdFx0aW5mbyA9IG92c2xfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdFx0XHRpZiAobGlrZWx5KGluZm8pKVxuK1x0XHRcdFx0aW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gem9uZV9saW1pdC1cdTAwM2VsaW1pdDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuQEAgLTE2OTUsOCArMTcwOSwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdFx0XHRjdF9saW1pdC1cdTAwM2VsaW1pdCA9IHpvbmVfbGltaXQtXHUwMDNlbGltaXQ7XG4gXG4gXHRcdFx0b3ZzX2xvY2soKTtcbi1cdFx0XHRjdF9saW1pdF9zZXQoaW5mbywgY3RfbGltaXQpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRcdFx0aWYgKGxpa2VseShpbmZvKSlcbitcdFx0XHRcdGN0X2xpbWl0X3NldChpbmZvLCBjdF9saW1pdCk7XG4gXHRcdFx0b3ZzX3VubG9jaygpO1xuK1xuK1x0XHRcdGlmICh1bmxpa2VseSghaW5mbykpXG4rXHRcdFx0XHRrZnJlZShjdF9saW1pdCk7XG4gXHRcdH1cbiBcdFx0cmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTtcbiBcdFx0em9uZV9saW1pdCA9IChzdHJ1Y3Qgb3ZzX3pvbmVfbGltaXQgKikoKHU4ICopem9uZV9saW1pdCArXG5AQCAtMTcwOSwxMiArMTcyOCwxMyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9zZXRfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChzdHJ1Y3QgbmxhdHRyICpubGFfem9uZV9saW1pdCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8pXG4rc3RhdGljIGludCBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoc3RydWN0IG92c19uZXQgKm92c19uZXQsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5sYXR0ciAqbmxhX3pvbmVfbGltaXQpXG4ge1xuIFx0c3RydWN0IG92c196b25lX2xpbWl0ICp6b25lX2xpbWl0O1xuLVx0aW50IHJlbTtcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbztcbiBcdHUxNiB6b25lO1xuK1x0aW50IHJlbTtcbiBcbiBcdHJlbSA9IE5MQV9BTElHTihubGFfbGVuKG5sYV96b25lX2xpbWl0KSk7XG4gXHR6b25lX2xpbWl0ID0gKHN0cnVjdCBvdnNfem9uZV9saW1pdCAqKW5sYV9kYXRhKG5sYV96b25lX2xpbWl0KTtcbkBAIC0xNzIzLDE0ICsxNzQzLDE4IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2RlbF96b25lX2xpbWl0KHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRpZiAodW5saWtlbHkoem9uZV9saW1pdC1cdTAwM2V6b25lX2lkID09XG4gXHRcdFx0XHRPVlNfWk9ORV9MSU1JVF9ERUZBVUxUX1pPTkUpKSB7XG4gXHRcdFx0b3ZzX2xvY2soKTtcbi1cdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbitcdFx0XHRpbmZvID0gb3ZzbF9kZXJlZmVyZW5jZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8pO1xuK1x0XHRcdGlmIChsaWtlbHkoaW5mbykpXG4rXHRcdFx0XHRpbmZvLVx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoIWNoZWNrX3pvbmVfaWQoXG4gXHRcdFx0XHR6b25lX2xpbWl0LVx1MDAzZXpvbmVfaWQsIFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG92c19sb2NrKCk7XG4tXHRcdFx0Y3RfbGltaXRfZGVsKGluZm8sIHpvbmUpO1xuK1x0XHRcdGluZm8gPSBvdnNsX2RlcmVmZXJlbmNlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4rXHRcdFx0aWYgKGxpa2VseShpbmZvKSlcbitcdFx0XHRcdGN0X2xpbWl0X2RlbChpbmZvLCB6b25lKTtcbiBcdFx0XHRvdnNfdW5sb2NrKCk7XG4gXHRcdH1cbiBcdFx0cmVtIC09IE5MQV9BTElHTihzaXplb2YoKnpvbmVfbGltaXQpKTtcbkBAIC0xNzczLDYgKzE3OTcsNyBAQCBzdGF0aWMgaW50IF9fb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiBubGFfcHV0X25vaGRyKHJlcGx5LCBzaXplb2Yoem9uZV9saW1pdCksIFx1MDAyNnpvbmVfbGltaXQpO1xuIH1cbiBcbisvKiBDYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIGhlbGQuICovXG4gc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKm5sYV96b25lX2xpbWl0LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqaW5mbyxcbkBAIC0xNzk2LDEyICsxODIxLDEwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF96b25lX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHRcdFx1MDAyNnpvbmUpKSkge1xuIFx0XHRcdE9WU19OTEVSUih0cnVlLCBcInpvbmUgaWQgaXMgb3V0IG9mIHJhbmdlXCIpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0XHRsaW1pdCA9IGN0X2xpbWl0X2dldChpbmZvLCB6b25lKTtcbiBcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRcdG5ldCwgaW5mby1cdTAwM2VkYXRhLCB6b25lLCBsaW1pdCwgcmVwbHkpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5AQCAtMTgxNiw2ICsxODM5LDcgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIENhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2sgaGVsZC4gKi9cbiBzdGF0aWMgaW50IG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpyZXBseSlcbkBAIC0xODI4LDE5ICsxODUyLDE2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcbiBcdFx0aGVhZCA9IFx1MDAyNmluZm8tXHUwMDNlbGltaXRzW2ldO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3RfbGltaXQsIGhlYWQsIGhsaXN0X25vZGUpIHtcbiBcdFx0XHRlcnIgPSBfX292c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChuZXQsIGluZm8tXHUwMDNlZGF0YSxcbiBcdFx0XHRcdGN0X2xpbWl0LVx1MDAzZXpvbmUsIGN0X2xpbWl0LVx1MDAzZWxpbWl0LCByZXBseSk7XG4gXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXhpdF9lcnI7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXHR9XG4gXG4tZXhpdF9lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE4NTAsNyArMTg3MSw2IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHN0cnVjdCBza19idWZmICpyZXBseTtcbiBcdHN0cnVjdCBvdnNfaGVhZGVyICpvdnNfcmVwbHlfaGVhZGVyO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChza2ItXHUwMDNlc2spLCBvdnNfbmV0X2lkKTtcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbyA9IG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbztcbiBcdGludCBlcnI7XG4gXG4gXHRyZXBseSA9IG92c19jdF9saW1pdF9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX0NUX0xJTUlUX0NNRF9TRVQsXG5AQCAtMTg2Myw4ICsxODgzLDggQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0ZXJyID0gb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0KGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sXG4tXHRcdFx0XHRcdCAgY3RfbGltaXRfaW5mbyk7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfc2V0X3pvbmVfbGltaXQob3ZzX25ldCxcbitcdFx0XHRcdFx0ICBhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXG5AQCAtMTg4NCw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIG92c19uZXRfaWQpO1xuLVx0c3RydWN0IG92c19jdF9saW1pdF9pbmZvICpjdF9saW1pdF9pbmZvID0gb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvO1xuIFx0aW50IGVycjtcbiBcbiBcdHJlcGx5ID0gb3ZzX2N0X2xpbWl0X2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfQ1RfTElNSVRfQ01EX0RFTCxcbkBAIC0xODk3LDggKzE5MTYsOCBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBvdnNfY3RfbGltaXRfZGVsX3pvbmVfbGltaXQoYVtPVlNfQ1RfTElNSVRfQVRUUl9aT05FX0xJTUlUXSxcbi1cdFx0XHRcdFx0ICBjdF9saW1pdF9pbmZvKTtcbitcdGVyciA9IG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdChvdnNfbmV0LFxuK1x0XHRcdFx0XHQgIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBleGl0X2VycjtcbiBcbkBAIC0xOTE4LDcgKzE5MzcsNyBAQCBzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX3JlcGx5X2hlYWRlcjtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7XG4tXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4rXHRzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmN0X2xpbWl0X2luZm87XG4gXHRpbnQgZXJyO1xuIFxuIFx0cmVwbHkgPSBvdnNfY3RfbGltaXRfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19DVF9MSU1JVF9DTURfR0VULFxuQEAgLTE5MzIsMTggKzE5NTEsMjEgQEAgc3RhdGljIGludCBvdnNfY3RfbGltaXRfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIGV4aXRfZXJyO1xuIFx0fVxuIFxuLVx0aWYgKGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0pIHtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGN0X2xpbWl0X2luZm8gPSByY3VfZGVyZWZlcmVuY2Uob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbitcdGlmICghY3RfbGltaXRfaW5mbykge1xuK1x0XHRlcnIgPSAtRU5PRU5UO1xuK1x0fSBlbHNlIGlmIChhW09WU19DVF9MSU1JVF9BVFRSX1pPTkVfTElNSVRdKSB7XG4gXHRcdGVyciA9IG92c19jdF9saW1pdF9nZXRfem9uZV9saW1pdChcbiBcdFx0XHRuZXQsIGFbT1ZTX0NUX0xJTUlUX0FUVFJfWk9ORV9MSU1JVF0sIGN0X2xpbWl0X2luZm8sXG4gXHRcdFx0cmVwbHkpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXhpdF9lcnI7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSBvdnNfY3RfbGltaXRfZ2V0X2FsbF96b25lX2xpbWl0KG5ldCwgY3RfbGltaXRfaW5mbyxcbiBcdFx0XHRcdFx0XHQgICAgICByZXBseSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBleGl0X2VycjtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2VycjtcbiBcbiBcdG5sYV9uZXN0X2VuZChyZXBseSwgbmxhX3JlcGx5KTtcbiBcdGdlbmxtc2dfZW5kKHJlcGx5LCBvdnNfcmVwbHlfaGVhZGVyKTtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaCBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5pbmRleCA2OTY2NDBlODhmYTdlLi45M2UxMWU0NjhkMTczIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmhcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oXG5AQCAtMTcyLDcgKzE3Miw3IEBAIHN0cnVjdCBvdnNfbmV0IHtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBkcF9ub3RpZnlfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgbWFza3NfcmViYWxhbmNlO1xuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyAqY3RfbGltaXRfaW5mbztcbitcdHN0cnVjdCBvdnNfY3RfbGltaXRfaW5mbyBfX3JjdSAqY3RfbGltaXRfaW5mbztcbiAjZW5kaWZcbiBcdGJvb2wgeHRfbGFiZWw7XG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ4OjU3Ljc4ODUyMzg3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNTk2MDIyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSQ1UgSW1wbGVtZW50YXRpb24gaW4gT3BlbiB2U3dpdGNoIENvbm50cmFjayBMaW1pdHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYCBhbmQgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIHRvIHRoZSBgY3RfbGltaXRfaW5mb2AgZGF0YSBzdHJ1Y3R1cmUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZWAsIGByY3VfYXNzaWduX3BvaW50ZXJgLCBgcmN1X3JlcGxhY2VfcG9pbnRlcmAsIGFuZCBgc3luY2hyb25pemVfcmN1YCwgc28gdGhpcyBpcyBhIHNpZ25pZmljYW50IHN5bmNocm9uaXphdGlvbiBjaGFuZ2Ugd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGxvZ2ljLiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBhIGxvdCBvZiBmdW5jdGlvbnMsIG5hbWVseSBgb3ZzX2N0X2xpbWl0X2luaXRgLCBgb3ZzX2N0X2xpbWl0X2V4aXRgLCBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBzbyBpdCdzIGEgcHJldHR5IHBlcnZhc2l2ZSBjaGFuZ2UuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSAtIGludHJvZHVjaW5nIFJDVSBzeW5jaHJvbml6YXRpb24gaW50byB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0IGltcGxlbWVudGF0aW9uIHdpdGhpbiBPcGVuIHZTd2l0Y2guIEl0IGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZnV6emVkIHRob3JvdWdobHkuIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBpcyBoaWdoLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgaXMgZ2F0ZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKWAgaW4gYGNvbm50cmFjay5jYC4gVGhhdCdzIHRoZSBwcmltYXJ5IGRlcGVuZGVuY3ksIGFuZCBvZiBjb3Vyc2UsIE9wZW4gdlN3aXRjaCBpdHNlbGYgcmVxdWlyZXMgYENPTkZJR19PUEVOVlNXSVRDSGAuIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AganVzdCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciBidWlsZC10aW1lIG9wdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBJIHN0YXJ0IHNldHRpbmcgdXAgYSBmdXp6aW5nIGVudmlyb25tZW50LiBNYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIHdpbGwgc2F2ZSBtZSBoZWFkYWNoZXMgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyOTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0OTowNC4xNDgxMjgzNzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwODY2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0OTowNC4yMzQyMjM3NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg0MDkzNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBPUEVOVlNXSVRDSCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgZ29hbCBpcyBjbGVhcjogdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIE9wZW4gdlN3aXRjaC4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgZXZlcnl0aGluZyBpdCByZWxpZXMgdXBvbiwgYm90aCBkaXJlY3RseSBhbmQgaW5kaXJlY3RseS4gSSdtIHRoaW5raW5nIGFib3V0IGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBkZXBlbmRlbmN5IGFuYWx5c2lzLiBJIG5lZWQgdG8gY29uc2lkZXIgYm90aCBidWlsZC10aW1lIGFuZCBydW4tdGltZSBkZXBlbmRlbmNpZXMuXG5cbiogICAqKkJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzOioqIFdoYXQgc29mdHdhcmUsIGxpYnJhcmllcywgYW5kIHRvb2xzIGFyZSAqcmVxdWlyZWQqIHRvIGNvbXBpbGUgYW5kIGJ1aWxkIE9wZW4gdlN3aXRjaCBmcm9tIHNvdXJjZT8gVGhpcyB3b3VsZCBpbmNsdWRlIGNvbXBpbGVycywgYnVpbGQgc3lzdGVtcyAobGlrZSBhdXRvdG9vbHMsIENNYWtlLCBldGMuKSwgc3BlY2lmaWMgdmVyc2lvbnMgb2YgbGlicmFyaWVzIChlLmcuLCBzcGVjaWZpYyB2ZXJzaW9ucyBvZiBsaWJwY2FwLCBvcGVuc3NsLCBldGMuKSwgaGVhZGVyIGZpbGVzLCBhbmQgYW55dGhpbmcgZWxzZSB0aGUgYnVpbGQgcHJvY2VzcyBkZW1hbmRzLiBJIHNob3VsZCBiZSBhYmxlIHRvIHNlcGFyYXRlIHRob3NlIGZyb20gYW55IG9wdGlvbmFsIGRlcGVuZGVuY2llcy5cblxuKiAgICoqUnVuLXRpbWUgZGVwZW5kZW5jaWVzOioqIE9uY2UgYnVpbHQgYW5kIHJ1bm5pbmcsIHdoYXQgZG9lcyBPcGVuIHZTd2l0Y2ggKm5lZWQqIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3RpbmcuIFdlJ2xsIGJlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgdGhlIGtlcm5lbCBtb2R1bGVzIChvdnNfdnBvcnQsIGV0Yy4pLCB0aGUgdXNlci1zcGFjZSBkYWVtb25zLCBhbmQgYW55IG90aGVyIHN5c3RlbSBsaWJyYXJpZXMgb3Igc2VydmljZXMgaXQgaW50ZXJhY3RzIHdpdGguIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciB2ZXJzaW9ucyBvZiBrZXJuZWwgbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBhbHNvIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBhbnkgb3B0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIHJlY29tbWVuZGVkLCBidXQgbm90IG5lY2Vzc2FyeS5cblxuSSB3aWxsIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGFuYWx5c2lzLiBJcyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgZW5vdWdoLCBvciB3aWxsIEkgbmVlZCBhIGRldGFpbGVkLCBwYWNrYWdlLWJ5LXBhY2thZ2UgYnJlYWtkb3duPyBUaGUgbGV2ZWwgb2YgZGV0YWlsIHdpbGwgZGVwZW5kIG9uIHRoZSB1bHRpbWF0ZSBvYmplY3RpdmUuIElzIHRoZSBnb2FsIHRvIHRyb3VibGVzaG9vdCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXNzdWUsIHVuZGVyc3RhbmQgY29tcGF0aWJpbGl0eSwgb3IgcHJlcGFyZSBmb3IgYSBzeXN0ZW0gdXBncmFkZT8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIG11bHRpcGxlIGxldmVscyBvZiBkZXRhaWwgdG8gYmUgdGhvcm91Z2guIEkgd2lsbCBoYXZlIHRvIGFwcHJvYWNoIHRoaXMgdGFzayBpbiBhIHN0cnVjdHVyZWQgd2F5LlxuXG5JJ2xsIHN0YXJ0IHdpdGggdGhlIG1vc3Qgb2J2aW91cyBzb3VyY2VzOiB0aGUgT3BlbiB2U3dpdGNoIGRvY3VtZW50YXRpb24sIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgKHRoZSBgY29uZmlndXJlLmFjYCBhbmQgYE1ha2VmaWxlLmFtYCBmaWxlcyBhcmUgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCksIGFuZCBwZXJoYXBzIHRoZSBwYWNrYWdlIHJlcG9zaXRvcmllcyBmb3IgdmFyaW91cyBMaW51eCBkaXN0cmlidXRpb25zLiBJIGNhbiB0aGVuIHVzZSB2YXJpb3VzIHRvb2xzIGxpa2UgYGxkZGAsIGBwa2ctY29uZmlnYCwgYW5kIGRlcGVuZGVuY3kgZ3JhcGggZ2VuZXJhdG9ycyB0byBnZXQgYSBmdWxsZXIgcGljdHVyZS4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgaW5mb3JtYXRpb24gdG8gY29uZmlybSBteSBpbml0aWFsIHN1cHBvc2l0aW9ucyBhbmQgdG8gcHJvZHVjZSBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIuIEZpbmFsbHksIEknbGwgbmVlZCB0byBvcmdhbml6ZSB0aGlzIGluZm9ybWF0aW9uIGluIGEgY2xlYXIgYW5kIGFjY2Vzc2libGUgZm9ybWF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MTEuNzE4MzIwOTU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MTEuNzE4NDE3OTA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MTgwMjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiAtIEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBXZSdyZSBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCwgYW5kIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgd2UncmUgZ29pbmcgdG8gbmVlZCBgT1BFTlZTV0lUQ0hgLCBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGFuZCBgTkZfQ09OTlRSQUNLYC4gU3RhbmRhcmQgZmFyZSwgcmVhbGx5LCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSBtZXRob2RpY2FsLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEknbSB1c2luZywgYW5kIEknbGwgc3RhcnQgd2l0aCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEJlc3QgcHJhY3RpY2UgZGljdGF0ZXMgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBvcHRpb24sIHNvIEknbGwgYmUgb2ZmIHRvIGAvbmV0L25ldGZpbHRlci9LY29uZmlnYC4gTGV0J3MgY29uZmlybSBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIE5vIHN1cnByaXNlcywgcGxlYXNlISBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gYnVpbGQgdXBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MTQuODAwMjIzNTU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzc3NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MTEwPWlmIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTE6Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEyLVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ5OjE0Ljg2MjAwNjI4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MDQzNjczMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubmVjdGlvbiBUcmFja2luZyBMaW1pdCBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIHJlcXVpcmVzIGBORl9DT05OVFJBQ0tgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgIGFyZSBlbmFibGVkLiBHb29kIHRvIGtub3cuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgc3VpdGUgb2YgZnVuY3Rpb25zIHdpdGggYG92c19jdF9saW1pdGAgaW4gdGhlaXIgbmFtZXMuIEkgc2VlOiBgb3ZzX2N0X2NoZWNrX2xpbWl0YCwgYG92c19jdF9saW1pdF9pbml0YCwgYG92c19jdF9saW1pdF9leGl0YCwgYW5kIHRoZW4gc2V2ZXJhbCBvdGhlcnMgZGVhbGluZyB3aXRoIHNldHRpbmcsIGRlbGV0aW5nLCBhbmQgZ2V0dGluZyB6b25lIGxpbWl0cy4gVGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgLCBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIHNpbmNlIHRoZXkgd2lsbCBsaWtlbHkgc2VydmUgYXMgZW50cnkgcG9pbnRzLlxuXG5gb3ZzX2N0X2NoZWNrX2xpbWl0YCBpcyBwcm9iYWJseSB0aGUgbW9zdCBpbnRlcmVzdGluZzsgaXQncyBjYWxsZWQgZnJvbSBgb3ZzX2N0X2NvbW1pdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIHN1Z2dlc3RzIGl0J3MgcGFydCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGF0aC4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgdGFyZ2V0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZWFsLXRpbWUgaW1wYWN0LCBidXQgaXQgbWlnaHQgYmUgY2FsbGVkIHZlcnkgZnJlcXVlbnRseSwgbWFraW5nIGl0IGEgYml0IFwiaG90XCIgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgaW1wYWN0LiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0OToyMC42NjYzNzcwODVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDY4ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9jaGVja19saW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTkxNz1zdGF0aWMgdTMyIGN0X2xpbWl0X2dldChjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8sIHUxNiB6b25lKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTkzMC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTMxOnN0YXRpYyBpbnQgb3ZzX2N0X2NoZWNrX2xpbWl0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtOTMyLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTYxPXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4MC1cXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6OTgxOlxcdFxcdFxcdGVyciA9IG92c19jdF9jaGVja19saW1pdChuZXQsIHNrYiwgaW5mbyk7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTk4Mi1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ5OjIwLjc0MTQ1MDg5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA4MjA2NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIENvbm5lY3Rpb24gVHJhY2tpbmcgTGltaXRzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgZm9yIHRoZXNlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzLiBMb29rcyBsaWtlIGBvdnNfY3RfbGltaXRfY21kX3NldGAsIGBvdnNfY3RfbGltaXRfY21kX2RlbGAsIGFuZCBgb3ZzX2N0X2xpbWl0X2NtZF9nZXRgIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMg4oCTIHRoZSBjb21tYW5kIGhhbmRsZXJzLiBUaGV5IHNlZW0gdG8gYmUgdGhlIGtleSBjb250cm9sIHBsYW5lIGZ1bmN0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uLlxuXG5UaGUgb3RoZXIgZnVuY3Rpb25zLCBgb3ZzX2N0X2xpbWl0X3NldF96b25lX2xpbWl0YCwgYG92c19jdF9saW1pdF9kZWxfem9uZV9saW1pdGAsIGBvdnNfY3RfbGltaXRfZ2V0X3pvbmVfbGltaXRgLCBhbmQgYG92c19jdF9saW1pdF9nZXRfYWxsX3pvbmVfbGltaXRgLCBhcmUganVzdCBzdGF0aWMgaGVscGVycyB1c2VkIGJ5IHRoZSBjb21tYW5kIGhhbmRsZXJzLCBzbyBJIGNhbiBwcm9iYWJseSBpZ25vcmUgdGhlbSBmb3Igbm93LiBJIGFsc28gc2VlIGBvdnNfY3RfY2hlY2tfbGltaXRgIGlzIGNhbGxlZCBieSBgb3ZzX2N0X2NvbW1pdGAsIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50LCBvciBldmVuIGBvdnNfY3RfZXhlY3V0ZWAsIGJ1dCB0aGUgYG92c19jdF9saW1pdF9jbWRfKmAgaGFuZGxlcnMgYXJlIHRoZSBvbmVzIEknbGwgYmUgZGlyZWN0bHkgbW9kaWZ5aW5nLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdG8gY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MjUuMTQ5NjYwNjc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5NjI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2xpbWl0X2NtZF9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xODQzPXN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2dldF9hbGxfem9uZV9saW1pdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTg2Ny1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTg2ODpzdGF0aWMgaW50IG92c19jdF9saW1pdF9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE4Njkte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE5Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBjdF9saW1pdF9nZW5sX29wc1tdID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5ODQtXFx0XFx0XFx0XFx0XFx0ICAgICAgICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE5ODU6XFx0XFx0LmRvaXQgPSBvdnNfY3RfbGltaXRfY21kX3NldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTk4Ni1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxODo0OToyNS4yNTI2MjY5NjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3MDc4MzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gT1ZTIENvbm50cmFjayBMaW1pdCBOZXRsaW5rIEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcgYWJvdXQgYmVzdCBwcmFjdGljZXMuIFRoZSBndWlkZWxpbmUgaGVyZSBpcyBjbGVhcjogd2Ugc2hvdWxkIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIE15IGluaXRpYWwgZ3V0IHJlYWN0aW9uIHdhcyB0byBhdm9pZCBkaXJlY3RseSB1c2luZyBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgIGJlY2F1c2UgaXQgKmlzKiBzdGF0aWMuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhhdCBOZXRsaW5rIGAuZG9pdGAgaGFuZGxlcnMgYXJlIG9mdGVuICpkZWZpbmVkKiBhcyBzdGF0aWMsIHlldCB0aGV5IGVzc2VudGlhbGx5ICphcmUqIHRoZSBlbnRyeXBvaW50cyBmb3IgdGhlIE5ldGxpbmsgY29tbWFuZHMgdGhlbXNlbHZlcy4gVGhlIHN0YXRpYyBuYXR1cmUgY2FuIGNhdXNlIHRvb2xpbmcgaXNzdWVzIHdpdGggdGhpbmdzIGxpa2Ugc3ltYm9sIHJlc29sdXRpb24gZm9yIGRlYnVnZ2VycyBhbmQgZnV6emVycyBsaWtlIHN5emthbGxlciwgYWx0aG91Z2ggc3l6a2FsbGVyIGlzIG9mdGVuIHN0aWxsIGFibGUgdG8gcmVzb2x2ZSB0aGVtIGlmIHRoZXkgYXJlbid0IGlubGluZWQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKm5vbiotc3RhdGljIGFsdGVybmF0aXZlcz8gVGhlIG5ldGxpbmsgZmFtaWx5IGl0c2VsZiBpcyByZWdpc3RlcmVkLi4uIGxldCBtZSBxdWlja2x5IGNoZWNrIHdoZXJlLi4uIEFoLCByaWdodCwgbm90IGluIGEgZnVuY3Rpb24gc3BlY2lmaWMgdG8gdGhpcyBmZWF0dXJlLCBidXQgdmlhIGBkcF9yZWdpc3Rlcl9nZW5sYC4gU28sIEknbSB0aGlua2luZyBJIHNob3VsZCBqdXN0IGJpdGUgdGhlIGJ1bGxldCBhbmQgdXNlIHRob3NlIGZ1bmN0aW9uIGFzIE5ldGxpbmsgaGFuZGxlcnMuIFRoZSBzdGF0aWMgZnVuY3Rpb25zIGxpa2UgYG92c19jdF9saW1pdF9jbWRfc2V0YCwgYG92c19jdF9saW1pdF9jbWRfZGVsYCwgYW5kIGBvdnNfY3RfbGltaXRfY21kX2dldGAgYXJlIHRoZSBtb3N0IGRpcmVjdCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZmVhdHVyZS4gVGhleSdyZSBleGFjdGx5IHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG4uLi4gSG9sZCBvbiwgd2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3NpbmcgYSBtb3JlIGZ1bmRhbWVudGFsIGVudHJ5cG9pbnQuIE9oIHllYWgsIGBvdnNfY3RfZXhlY3V0ZWAgaXMgdGhlIGRhdGFwYXRoIGVudHJ5IHBvaW50IGZvciBjb25udHJhY2sgYWN0aW9uISBTbyBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBjb250aW51ZSByZXZpZXdpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0OTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTg6NDk6MzEuMDIzNDEzMjg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMyMjc2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3ZzX2N0X2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz01MzI9c3RhdGljXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjUzMzpzdHJ1Y3QgbmZfY29ubiAqb3ZzX2N0X2V4ZWN1dGVkKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTM0LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTU2MT1zdGF0aWMgYm9vbCBza2JfbmZjdF9jYWNoZWQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTU3MS1cXHRpZiAoIWN0KVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzo1NzI6XFx0XFx0Y3QgPSBvdnNfY3RfZXhlY3V0ZWQobmV0LCBrZXksIGluZm8sIHNrYiwgXFx1MDAyNmN0X2V4ZWN1dGVkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtNTczLVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTk2MT1zdGF0aWMgaW50IG92c19jdF9jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDQwLSAqL1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxMDQxOmludCBvdnNfY3RfZXhlY3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwNDItXFx0XFx0ICAgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ5OjMxLjEzNjY0NTAyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODI3NzA4Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBPcGVuIHZTd2l0Y2ggQ29ubmVjdGlvbiBUcmFja2luZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBtZXRob2RpY2FsbHkuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBgb3ZzX2N0X2V4ZWN1dGVgIGlzbid0IHN0YXRpYy4gR29vZC4gTm93LCBsZXQncyBjb25maXJtIGlmIGBvdnNfY3RfbGltaXRfY21kX3NldGAgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIEluaXRpYWxseSwgSSBjb25zaWRlcmVkIGluY2x1ZGluZyBgb3ZzX2N0X2V4ZWN1dGVgIGp1c3QgdG8gYmUgZXh0cmEgY2F1dGlvdXMuIEJ1dCwgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnMgaW4gdGhvc2UgbmV0bGluayBoYW5kbGVycyDigJMgdGhleSdyZSB0aGUgb25lcyB0cmlnZ2VyaW5nIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBjb250cm9sIHBsYW5lLiBUaGV5IGFyZSBub3QgaW5saW5lZCwgc2luY2UgbmV0bGluayBoYW5kbGVycyBhcmUgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGdlbmxfc21hbGxfb3BzYCwgYW5kIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gaXQgaXMgc2FmZSB0byBpbmNsdWRlIHRoZW0gZGlyZWN0bHkuXG5cblNvLCBJJ2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgb3ZzX2N0X2xpbWl0X2NtZF9zZXRgLCBhbmQgYWxzbyBgb3ZzX2N0X2xpbWl0X2NtZF9kZWxgLCBhbmQgYG92c19jdF9saW1pdF9jbWRfZ2V0YCBhbmQgYG92c19jdF9leGVjdXRlYCBhcyBmb2N1cyBzeW1ib2xzLlxuXG5JIHRoZW4gZG91YmxlLWNoZWNrZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSBoYXZlIGBPUEVOVlNXSVRDSGAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCwgYW5kIGBORl9DT05OVFJBQ0tgLiBgTkVURklMVEVSX0NPTk5DT1VOVGAgb2J2aW91c2x5IHJlbGllcyBvbiBgTkZfQ09OTlRSQUNLYCwgYW5kIGBPUEVOVlNXSVRDSGAgcmVxdWlyZXMgYElORVRgLCBzbyBgT1BFTlZTV0lUQ0hgLCBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGFuZCBgTkZfQ09OTlRSQUNLYCBhcmUgdGhlIGtleSBvbmVzIGhlcmUuXG5cbkxvb2tpbmcgYmFjayBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGFkZGluZyBSQ1UgcHJvdGVjdGlvbiB0byBgY3RfbGltaXRfaW5mb2Agd2l0aGluIHRoZSBgc3RydWN0IG92c19uZXRgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZTsgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIGZvciBmdXp6aW5nLlxuXG5NeSB0aGlua2luZyBpcyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBzeW5jaHJvbml6YXRpb24gZm9yIE9wZW4gdlN3aXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIGxpbWl0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgT1ZTIGNvbm50cmFjayBsb2dpYyBhbmQgbmV0bGluayBjb250cm9sIHBsYW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb21tYW5kIGhhbmRsZXJzIGZvciBzZXR0aW5nL2dldHRpbmcvZGVsZXRpbmcgbGltaXRzLCBhcyB3ZWxsIGFzIHRoZSBkYXRhcGF0aCBleGVjdXRpb24gd2hpY2ggY2hlY2tzIHRoZXNlIGxpbWl0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDcsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE4OjQ5OjM4Ljk2NDM1NTkxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODc3MjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGZvciBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9WUyBjb25udHJhY2sgbG9naWMgYW5kIG5ldGxpbmsgY29udHJvbCBwbGFuZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgZGF0YXBhdGggZXhlY3V0aW9uIHdoaWNoIGNoZWNrcyB0aGVzZSBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9saW1pdF9jbWRfc2V0XCIsXG4gICAgXCJvdnNfY3RfbGltaXRfY21kX2RlbFwiLFxuICAgIFwib3ZzX2N0X2xpbWl0X2NtZF9nZXRcIixcbiAgICBcIm92c19jdF9leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGZvciBPcGVuIHZTd2l0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE9WUyBjb25udHJhY2sgbG9naWMgYW5kIG5ldGxpbmsgY29udHJvbCBwbGFuZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVycyBmb3Igc2V0dGluZy9nZXR0aW5nL2RlbGV0aW5nIGxpbWl0cywgYXMgd2VsbCBhcyB0aGUgZGF0YXBhdGggZXhlY3V0aW9uIHdoaWNoIGNoZWNrcyB0aGVzZSBsaW1pdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwlkl[1] Phase: Succeeded StartedAt: 2026-08-05 18:49:50 +0000 UTC FinishedAt: 2026-08-05 18:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 18:49:50 +0000 UTC FinishedAt: 2026-08-05 18:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2] Phase: Succeeded StartedAt: 2026-08-05 18:49:50 +0000 UTC FinishedAt: 2026-08-05 22:47:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 18:49:50 +0000 UTC FinishedAt: 2026-08-05 22:47:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 18:49:50 +0000 UTC FinishedAt: 2026-08-05 18:50:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 18:49:50 +0000 UTC FinishedAt: 2026-08-05 18:49:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowmwlkl/series-workflowmwlkl-convert-artifact-1696253476/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 18:50:11 +0000 UTC FinishedAt: 2026-08-05 19:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 18:50:11 +0000 UTC FinishedAt: 2026-08-05 19:11:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9edd6f53-03a2-41b1-85f4-4b9ad2f14685,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-workflowmwlkl/series-workflowmwlkl-convert-artifact-1696253476/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": "5de54c61-726a-4f52-8fac-69162bffdc2b", "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-workflowmwlkl/series-workflowmwlkl-build-action-3717879906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 18:50:11 +0000 UTC FinishedAt: 2026-08-05 19:10:57 +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:*9edd6f53-03a2-41b1-85f4-4b9ad2f14685,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-workflowmwlkl/series-workflowmwlkl-convert-artifact-1696253476/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": "5de54c61-726a-4f52-8fac-69162bffdc2b", "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-workflowmwlkl/series-workflowmwlkl-build-action-3717879906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 19:11:00 +0000 UTC FinishedAt: 2026-08-05 19:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 19:11:00 +0000 UTC FinishedAt: 2026-08-05 19:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 19:11:00 +0000 UTC FinishedAt: 2026-08-05 19:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 19:11:00 +0000 UTC FinishedAt: 2026-08-05 19:11:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowmwlkl/series-workflowmwlkl-convert-artifact-3312794915/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 19:11:10 +0000 UTC FinishedAt: 2026-08-05 19:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 19:11:10 +0000 UTC FinishedAt: 2026-08-05 19:13:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5de54c61-726a-4f52-8fac-69162bffdc2b,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-workflowmwlkl/series-workflowmwlkl-build-action-3717879906/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-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 19:13:26 +0000 UTC FinishedAt: 2026-08-05 19:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 19:13:26 +0000 UTC FinishedAt: 2026-08-05 19:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 19:13:26 +0000 UTC FinishedAt: 2026-08-05 19:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 19:13:26 +0000 UTC FinishedAt: 2026-08-05 19:43:23 +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:*9edd6f53-03a2-41b1-85f4-4b9ad2f14685,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-workflowmwlkl/series-workflowmwlkl-convert-artifact-3312794915/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": "da6fc22f-818f-4d53-a9e2-774b0eeee38d", "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-workflowmwlkl/series-workflowmwlkl-build-action-3983557079/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 19:13:26 +0000 UTC FinishedAt: 2026-08-05 19:42:51 +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:*9edd6f53-03a2-41b1-85f4-4b9ad2f14685,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-workflowmwlkl/series-workflowmwlkl-convert-artifact-3312794915/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": "da6fc22f-818f-4d53-a9e2-774b0eeee38d", "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-workflowmwlkl/series-workflowmwlkl-build-action-3983557079/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 19:43:23 +0000 UTC FinishedAt: 2026-08-05 19:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 19:43:23 +0000 UTC FinishedAt: 2026-08-05 19:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 19:43:23 +0000 UTC FinishedAt: 2026-08-05 19:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 19:43:23 +0000 UTC FinishedAt: 2026-08-05 19:45:30 +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:*da6fc22f-818f-4d53-a9e2-774b0eeee38d,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-workflowmwlkl/series-workflowmwlkl-build-action-3983557079/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-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 19:45:40 +0000 UTC FinishedAt: 2026-08-05 22:47:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 19:45:40 +0000 UTC FinishedAt: 2026-08-05 22:47:03 +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":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"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:*5de54c61-726a-4f52-8fac-69162bffdc2b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*da6fc22f-818f-4d53-a9e2-774b0eeee38d,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-workflowmwlkl/series-workflowmwlkl-build-action-3717879906/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-workflowmwlkl/series-workflowmwlkl-build-action-3983557079/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 19:45:40 +0000 UTC FinishedAt: 2026-08-05 19:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 19:45:40 +0000 UTC FinishedAt: 2026-08-05 19:45:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"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-workflowmwlkl/series-workflowmwlkl-convert-artifact-2642740284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 19:45:40 +0000 UTC FinishedAt: 2026-08-05 19:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 19:45:40 +0000 UTC FinishedAt: 2026-08-05 19:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 19:45:40 +0000 UTC FinishedAt: 2026-08-05 19:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 19:45:50 +0000 UTC FinishedAt: 2026-08-05 22:47:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwlkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_limit_cmd_set","ovs_ct_limit_cmd_del","ovs_ct_limit_cmd_get","ovs_ct_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd16f1b5720f5dae33a79b5305e188e8290a3973","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NETFILTER_CONNCOUNT","NF_CONNTRACK"],"series_id":"342cb719-2bf2-4b65-aa14-3d5fc0baf5eb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 19:45:50 +0000 UTC FinishedAt: 2026-08-05 22:46:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5de54c61-726a-4f52-8fac-69162bffdc2b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*da6fc22f-818f-4d53-a9e2-774b0eeee38d,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-workflowmwlkl/series-workflowmwlkl-build-action-3717879906/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-workflowmwlkl/series-workflowmwlkl-build-action-3983557079/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-workflowmwlkl/series-workflowmwlkl-convert-artifact-2642740284/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,}