Name: series-workflow6kths Phase: Succeeded StartedAt: 2026-08-22 10:00:59 +0000 UTC FinishedAt: 2026-08-22 11:03:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[0] Phase: Succeeded StartedAt: 2026-08-22 10:00:59 +0000 UTC FinishedAt: 2026-08-22 10:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 10:00:59 +0000 UTC FinishedAt: 2026-08-22 10:22:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d75b48460559423f8c38aafed7a9cdec91d26d57", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d75b48460559423f8c38aafed7a9cdec91d26d57", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "bed53ffd-7330-4078-aa2d-a8bf99d24a8d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vgic_v3_set_redist_base", "vgic_register_redist_iodev", "vgic_unregister_redist_iodev", "__vgic_unassign_redist_iodev", "kvm_vgic_vcpu_destroy", "kvm_vgic_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgICAmIzM0O3ZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O3ZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldiYjMzQ7LAogICAgJiMzNDtrdm1fdmdpY192Y3B1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7a3ZtX3ZnaWNfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciByZWdpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGFuZCByb2xsYmFjayBsb2dpYyBkdXJpbmcgdkNQVSBjcmVhdGlvbiBhbmQgcmVkaXN0cmlidXRvciBiYXNlIGFkZHJlc3MgYXNzaWdubWVudC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfREVWSUNFX0FUVFIpIGFuZCBhZmZlY3RzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZTZiNDcxZTI1YWZhZDNkMGZhOWQ3Y2QxMmE1MWM5MTg3ZGUwZGZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTA6MjA6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmNcbmluZGV4IDkwNzA1Nzg4MWIyNmEuLjgxYWI1YTZiZjhiYzggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jXG5AQCAtNTE5LDI5ICYjNDM7NTE5LDYgQEAgc3RhdGljIHZvaWQgX19rdm1fdmdpY192Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dmdpY19jcHUtXHUwMDNlYXBfbGlzdF9oZWFkKTtcbiBcdGtmcmVlKHZnaWNfY3B1LVx1MDAzZXByaXZhdGVfaXJxcyk7XG4gXHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBOVUxMO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0aGlzIHZDUFUgaXMgYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgYSBmYWlsZWQgY3JlYXRpb25cbi1cdFx0ICogdGhlbiB1bnJlZ2lzdGVyIHRoZSByZWRpc3RyaWJ1dG9yIHRvIGF2b2lkIGxlYXZpbmcgYmVoaW5kIGFcbi1cdFx0ICogZGFuZ2xpbmcgcG9pbnRlciB0byB0aGUgdkNQVSBzdHJ1Y3QuXG4tXHRcdCAqXG4tXHRcdCAqIHZDUFVzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChpLmUuIGFkZGVkIHRvXG4tXHRcdCAqIGt2bS1cdTAwM2V2Y3B1X2FycmF5KSBnZXQgdW5yZWdpc3RlcmVkIGluIGt2bV92Z2ljX2Rlc3Ryb3koKSwgYXNcbi1cdFx0ICogdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGlsZSBob2xkaW5nIGt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrXG4tXHRcdCAqIGluIHRoZSBWTSB0ZWFyZG93biBwYXRoIGFuZCB3b3VsZCBvdGhlcndpc2UgaW50cm9kdWNlIGEgbG9ja1xuLVx0XHQgKiBpbnZlcnNpb24gdy5yLnQuIGt2bS1cdTAwM2VzcmN1LlxuLVx0XHQgKlxuLVx0XHQgKiB2Q1BVcyB0aGF0IGZhaWxlZCBjcmVhdGlvbiBhcmUgdG9ybiBkb3duIG91dHNpZGUgb2YgdGhlXG4tXHRcdCAqIGt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrIGFuZCBkbyBub3QgZ2V0IHVucmVnaXN0ZXJlZCBpblxuLVx0XHQgKiBrdm1fdmdpY19kZXN0cm95KCksIG1lYW5pbmcgaXQgaXMgYm90aCBzYWZlIGFuZCBuZWNlc3NhcnkgdG9cbi1cdFx0ICogZG8gc28gaGVyZS5cbi1cdFx0ICovXG4tXHRcdGlmIChrdm1fZ2V0X3ZjcHVfYnlfaWQodmNwdS1cdTAwM2Vrdm0sIHZjcHUtXHUwMDNldmNwdV9pZCkgIT0gdmNwdSlcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuLVxuLVx0XHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4tXHR9XG4gfVxuIFxuIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01NDksNyAmIzQzOzUyNiwxNiBAQCB2b2lkIGt2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxuJiM0MztcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiYjNDM7XG4gXHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuJiM0MztcdFx0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1x0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiB9XG4gXG5AQCAtNTU5LDIxICYjNDM7NTQ1LDIzIEBAIHZvaWQga3ZtX3ZnaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMylcbiYjNDM7XHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbiYjNDM7XHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdHZnaWNfZGVidWdfZGVzdHJveShrdm0pO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuJiM0MztcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuIFx0XHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcbiYjNDM7XHRcdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxuJiM0MztcdFx0XHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xuJiM0MztcdH1cbiBcbiBcdGt2bV92Z2ljX2Rpc3RfZGVzdHJveShrdm0pO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cbi1cdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxuLVx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbi1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXG5pbmRleCA5MGJlOTk0NDNkZjNiLi40OGMzYjJhNDhjMjAyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xuQEAgLTk3LDYgJiM0Mzs5Nyw5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXG4gXHRwaHlzX2FkZHJfdCAqYWRkcl9wdHIsIGFsaWdubWVudCwgc2l6ZTtcbiBcdHU2NCB1bmRlZl92YWx1ZSA9IFZHSUNfQUREUl9VTkRFRjtcbiBcdHU2NCBhZGRyO1xuJiM0MztcdGJvb2wgcmVkaXN0X3dyaXRlID0gd3JpdGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQoYXR0ci1cdTAwM2VhdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHxcbiYjNDM7XHRcdCBhdHRyLVx1MDAzZWF0dHIgPT0gS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04pO1xuIFx0aW50IHI7XG4gXG4gXHQvKiBSZWFkaW5nIGEgcmVkaXN0cmlidXRvciByZWdpb24gYWRkciBpbXBsaWVzIGdldHRpbmcgdGhlIGluZGV4ICovXG5AQCAtMTA0LDYgJiM0MzsxMDcsMTkgQEAgc3RhdGljIGludCBrdm1fdmdpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0ciwgYm9vbCB3cmlcbiBcdFx0aWYgKGdldF91c2VyKGFkZHIsIHVhZGRyKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgdkNQVSBjYW4gaGF2ZSBhbiBSRCBhc3NpZ25tZW50IGJlZm9yZSBpdCBpcyB2aXNpYmxlIHRvXG4mIzQzO1x0ICoga3ZtX2Zvcl9lYWNoX3ZjcHUoKS4gUmVqZWN0IHJlZGlzdHJpYnV0b3IgdXBkYXRlcyB3aGlsZSB2Q1BVIGNyZWF0aW9uXG4mIzQzO1x0ICogaXMgaW4gcHJvZ3Jlc3MsIHNvIHJvbGxiYWNrIGNhbiByZXNldCBldmVyeSBhc3NpZ25tZW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZWRpc3Rfd3JpdGUpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzICE9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpKSB7XG4mIzQzO1x0XHRcdHIgPSAtRUJVU1k7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9ja19rdm07XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4gXHQgKiBTaW5jZSB3ZSBjYW4mIzM5O3QgaG9sZCBjb25maWdfbG9jayB3aGlsZSByZWdpc3RlcmluZyB0aGUgcmVkaXN0cmlidXRvclxuIFx0ICogaW9kZXZzLCB0YWtlIHRoZSBzbG90c19sb2NrIGltbWVkaWF0ZWx5LlxuQEAgLTIwMSw2ICYjNDM7MjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbiYjNDM7b3V0X3VubG9ja19rdm06XG4mIzQzO1x0aWYgKHJlZGlzdF93cml0ZSlcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0aWYgKCFyIFx1MDAyNlx1MDAyNiAhd3JpdGUpXG4gXHRcdHIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG5pbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuQEAgLTc2Niw2ICYjNDM7NzY2LDE4IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldilcbiBcdHJldHVybiBTWl82NEs7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuJiM0MztcbiYjNDM7XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZy1cdTAwM2VmcmVlX2luZGV4LS07XG4mIzQzO1x0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldiAtIHJlZ2lzdGVyIGEgc2luZ2xlIHJlZGlzdCBpb2RldlxuICAqIEB2Y3B1OiAgICBUaGUgVkNQVSB0byB3aGljaCB0aGUgcmVkaXN0cmlidXRvciBiZWxvbmdzXG5AQCAtODE4LDE2ICYjNDM7ODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZF9kZXYtXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xuIFx0cmRfZGV2LVx1MDAzZXJlZGlzdF92Y3B1ID0gdmNwdTtcbiBcbiYjNDM7XHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuJiM0MztcdHJkcmVnLVx1MDAzZWZyZWVfaW5kZXgmIzQzOyYjNDM7O1xuJiM0MztcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcbiBcdFx0XHRcdCAgICAgIDIgKiBTWl82NEssIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudCh2Y3B1KTtcbiBcbi1cdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXG4tXHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4JiM0MzsmIzQzOztcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG5AQCAtODQxLDYgJiM0Mzs4NTQsNDAgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gfVxuIFxuJiM0Mzt2b2lkIF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuJiM0MztcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcsICppdGVyO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGM7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XG4mIzQzO1xuJiM0MztcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSlcbiYjNDM7XHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSlcbiYjNDM7XHRcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXHUwMDI2a3ZtLVx1MDAzZWFyY2gudmdpYy5yZF9yZWdpb25zLCBsaXN0KVxuJiM0MztcdFx0aXRlci1cdTAwM2VmcmVlX2luZGV4ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG5AQCAtODU1LDE2ICYjNDM7OTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChyZXQpIHtcbi1cdFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cbi1cdFx0aW50IGk7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0dmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIGkpO1xuLVx0XHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTk1MywxNyAmIzQzOzk5MCw4IEBAIHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXG4gXG4gdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHVuc2lnbmVkIGxvbmcgYztcbi1cbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuLVx0LyogR2FyYmFnZSBjb2xsZWN0IHRoZSByZWdpb24gKi9cbi1cdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xuLVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKVxuLVx0XHRcdHZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZHJlZyA9IE5VTEw7XG4tXHR9XG4tXG4gXHRsaXN0X2RlbChcdTAwMjZyZHJlZy1cdTAwM2VsaXN0KTtcbiBcdGtmcmVlKHJkcmVnKTtcbiB9XG5AQCAtOTcyLDYgJiM0MzsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIHtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRyZXQgPSB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oa3ZtLCBpbmRleCwgYWRkciwgY291bnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbkBAIC05ODQsMTIgJiM0MzsxMDE0LDcgQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIFx0ICovXG4gXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuLVxuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuLVx0XHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XHRcdHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaCBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oXG5pbmRleCBmNDVmN2UzZWM0ZDZlLi5lMzJlMmI1NmE0N2VmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oXG5AQCAtMzMzLDYgJiM0MzszMzMsNyBAQCBpbnQgdmdpY192M19zYXZlX3BlbmRpbmdfdGFibGVzKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcbiBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7dm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCB2Z2ljX3YzX2NoZWNrX2Jhc2Uoc3RydWN0IGt2bSAqa3ZtKTtcbiBcbiB2b2lkIHZnaWNfdjNfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuaW5kZXggNDdlMzRiNDNhZmIyOS4uNWEzMGYzY2IwMzliZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5AQCAtNSw2ICYjNDM7NSw3IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BhcmEuaFx1MDAzZVxuQEAgLTEzLDEyICYjNDM7MTQsMjEgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Z2ljLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwcm9jZXNzb3IuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZnaWMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2dpY192My5oXCYjMzQ7XG4gXG4gI2RlZmluZSBOUl9WQ1BVU1x0XHQ0XG4gXG4mIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRVx0R0lDUl9CQVNFX0dQQVxuJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0VcdFxcXG4mIzQzO1x0KFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgJiM0MzsgMiAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9ESVNUX0JBU0VcdFx0XFxcbiYjNDM7XHQoUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSAmIzQzOyBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcbiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFXHRcXFxuJiM0MztcdChSRURJU1RfUkVUUllfRElTVF9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX0RJU1RfU0laRSlcbiYjNDM7XG4gI2RlZmluZSBSRUdfT0ZGU0VUKHZjcHUsIG9mZnNldCkgKCgodTY0KXZjcHUgXHUwMDNjXHUwMDNjIDMyKSB8IG9mZnNldClcbiBcbiAjZGVmaW5lIFZHSUNfREVWX0lTX1YyKF9kKSAoKF9kKSA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjIpXG5AQCAtNjUsNiAmIzQzOzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaXJzdCB0aHJlZSByZWRpc3RyaWJ1dG9ycyBzcGFuIGFkamFjZW50IHJlZ2lvbnMgMCBhbmQgMS4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9WQ1BVUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBiYXNlID0gaSBcdTAwM2MgMyA/IFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgICAgaSAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFIDpcbiYjNDM7XHRcdFx0XHQgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTtcbiYjNDM7XHRcdHU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgJiM0MzsgR0lDUl9UWVBFUikpO1xuJiM0MztcbiYjNDM7XHRcdEdVRVNUX0FTU0VSVF9FUShHSUNSX1RZUEVSX0NQVV9OVU1CRVIodHlwZXIpLCBpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEdVRVNUX0RPTkUoKTtcbiYjNDM7fVxuJiM0MztcbiAvKiB3ZSBkb24mIzM5O3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi9cbiBzdGF0aWMgaW50IHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG5AQCAtNzMsNiAmIzQzOzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fZ2ljIHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlLFxuIFx0XHRcdFx0XHQgICAgICB1MzIgbnJfdmNwdXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB2b2lkICpndWVzdF9jb2RlLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10pXG4ge1xuIFx0c3RydWN0IHZtX2dpYyB2O1xuQEAgLTMzOCw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQsIGk7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgMSwgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXG4gXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXHUwMDI2dik7XG4gXG5AQCAtMzU5LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKVxuIFx0c3RydWN0IHZtX2dpYyB2O1xuIFx0aW50IHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSxcbiYjNDM7XHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC00MTEsNyAmIzQzOzQ0MCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXHR1NjQgYWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbiYjNDM7XHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4mIzQzO1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcbiBcdFx0XHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xuQEAgLTQyMiw3ICYjNDM7NDUyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcbiBcdC8qIHN0ZXAyICovXG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbiYjNDM7XHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4mIzQzO1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFxuIFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTtcbkBAIC00MzYsNyAmIzQzOzQ2Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXG4gXHQvKiBzdGVwIDMgKi9cbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG5AQCAtNDU3LDYgJiM0Mzs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcdHZtX2dpY19kZXN0cm95KFx1MDAyNnYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4mIzQzO1x0c3RydWN0IHVjYWxsIHVjO1xuJiM0MztcdHU2NCBhZGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSwgdmNwdXMpO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMiwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgMCwgMCk7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpO1xuJiM0MztcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4mIzQzO1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXHUwMDI2YWRkcik7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFO1xuJiM0MztcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4mIzQzO1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgXHUwMDI2YWRkcik7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfRElTVF9CQVNFLCAwLCAyKTtcbiYjNDM7XHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4mIzQzO1x0XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZhZGRyKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbiYjNDM7XHRcdCAgICBcJiMzNDtyZWdpc3RlciByZWRpc3QgcmVnaW9uIGNvbGxpZGluZyB3aXRoIGRpc3RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgMCwgMik7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSxcbiYjNDM7XHRcdCB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLVx1MDAzZW1vZGUsXG4mIzQzO1x0XHRcdFx0XHQgMyAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XG4mIzQzO1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSxcbiYjNDM7XHRcdCB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLVx1MDAzZW1vZGUsXG4mIzQzO1x0XHRcdFx0XHQgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9ydW4odmNwdXNbMF0pO1xuJiM0MztcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCBcdTAwMjZ1YykpIHtcbiYjNDM7XHRjYXNlIFVDQUxMX0RPTkU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFVDQUxMX0FCT1JUOlxuJiM0MztcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFVDQUxMX05PTkU6XG4mIzQzO1x0XHRpZiAodmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pXG4mIzQzO1x0XHRcdFRFU1RfRkFJTChcJiMzNDtVbmV4cGVjdGVkIE1NSU8gZXhpdCBhdCAweCVsbHhcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICB2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlbW1pby5waHlzX2FkZHIpO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFRFU1RfRkFJTChcJiMzNDtVbmV4cGVjdGVkIHVjYWxsICVsdSwgZXhpdF9yZWFzb24gJXVcJiMzNDssXG4mIzQzO1x0XHRcdCAgdWMuY21kLCB2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dm1fZ2ljX2Rlc3Ryb3koXHUwMDI2dik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC02MDgsNyAmIzQzOzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBhZGRyO1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIDEsIHZjcHVzKTtcbiYjNDM7XHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSxcbiYjNDM7XHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdC8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi9cbiBcdGFkZHIgPSBtYXhfcGh5c19zaXplIC0gKDMgKiAyICogMHgxMDAwMCk7XG5AQCAtNjQxLDcgJiM0Mzs3MzgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX2l0c19yZWdpb24odm9pZClcbiBcdHU2NCBhZGRyO1xuIFx0aW50IGl0c19mZCwgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuJiM0MztcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0aXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7XG4gXG4gXHRhZGRyID0gMHg0MDEwMDA7XG5AQCAtNjg0LDcgJiM0Mzs3ODIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25hc3NnaWNhcCh2b2lkKVxuIFx0dTMyIHR5cGVyMjtcbiBcdGludCByZXQ7XG4gXG4tXHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4mIzQzO1x0dm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLFxuIFx0XHRcdCAgICBHSUNEX1RZUEVSMiwgXHUwMDI2dHlwZXIyKTtcbiBcdGhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgXHUwMDI2IEdJQ0RfVFlQRVIyX25BU1NHSWNhcDtcbkBAIC05NzgsNiAmIzQzOzEwNzcsNyBAQCB2b2lkIHJ1bl90ZXN0cyh1MzIgZ2ljX2Rldl90eXBlKVxuIFxuIFx0aWYgKFZHSUNfREVWX0lTX1YzKGdpY19kZXZfdHlwZSkpIHtcbiBcdFx0dGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnMoKTtcbiYjNDM7XHRcdHRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSgpO1xuIFx0XHR0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKCk7XG4gXHRcdHRlc3RfdjNfbGFzdF9iaXRfcmVkaXN0X3JlZ2lvbnMoKTtcbiBcdFx0dGVzdF92M19sYXN0X2JpdF9zaW5nbGVfcmRpc3QoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmdpY192M19zZXRfcmVkaXN0X2Jhc2UmIzM0OywKICAgICYjMzQ7dmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldiYjMzQ7LAogICAgJiMzNDtfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O2t2bV92Z2ljX3ZjcHVfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtrdm1fdmdpY19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgcm9sbGJhY2sgbG9naWMgZHVyaW5nIHZDUFUgY3JlYXRpb24gYW5kIHJlZGlzdHJpYnV0b3IgYmFzZSBhZGRyZXNzIGFzc2lnbm1lbnQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fU0VUX0RFVklDRV9BVFRSKSBhbmQgYWZmZWN0cyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IG9uIEFSTTY0LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U2YjQ3MWUyNWFmYWQzZDBmYTlkN2NkMTJhNTFjOTE4N2RlMGRmZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEwOjIwOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMKaW5kZXggOTA3MDU3ODgxYjI2YS4uODFhYjVhNmJmOGJjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jCkBAIC01MTksMjkgJiM0Mzs1MTksNiBAQCBzdGF0aWMgdm9pZCBfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2Z2ljX2NwdS0mZ3Q7YXBfbGlzdF9oZWFkKTsKIAlrZnJlZSh2Z2ljX2NwdS0mZ3Q7cHJpdmF0ZV9pcnFzKTsKIAl2Z2ljX2NwdS0mZ3Q7cHJpdmF0ZV9pcnFzID0gTlVMTDsKLQotCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykgewotCQkvKgotCQkgKiBJZiB0aGlzIHZDUFUgaXMgYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgYSBmYWlsZWQgY3JlYXRpb24KLQkJICogdGhlbiB1bnJlZ2lzdGVyIHRoZSByZWRpc3RyaWJ1dG9yIHRvIGF2b2lkIGxlYXZpbmcgYmVoaW5kIGEKLQkJICogZGFuZ2xpbmcgcG9pbnRlciB0byB0aGUgdkNQVSBzdHJ1Y3QuCi0JCSAqCi0JCSAqIHZDUFVzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChpLmUuIGFkZGVkIHRvCi0JCSAqIGt2bS0mZ3Q7dmNwdV9hcnJheSkgZ2V0IHVucmVnaXN0ZXJlZCBpbiBrdm1fdmdpY19kZXN0cm95KCksIGFzCi0JCSAqIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hpbGUgaG9sZGluZyBrdm0tJmd0O2FyY2guY29uZmlnX2xvY2sKLQkJICogaW4gdGhlIFZNIHRlYXJkb3duIHBhdGggYW5kIHdvdWxkIG90aGVyd2lzZSBpbnRyb2R1Y2UgYSBsb2NrCi0JCSAqIGludmVyc2lvbiB3LnIudC4ga3ZtLSZndDtzcmN1LgotCQkgKgotCQkgKiB2Q1BVcyB0aGF0IGZhaWxlZCBjcmVhdGlvbiBhcmUgdG9ybiBkb3duIG91dHNpZGUgb2YgdGhlCi0JCSAqIGt2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayBhbmQgZG8gbm90IGdldCB1bnJlZ2lzdGVyZWQgaW4KLQkJICoga3ZtX3ZnaWNfZGVzdHJveSgpLCBtZWFuaW5nIGl0IGlzIGJvdGggc2FmZSBhbmQgbmVjZXNzYXJ5IHRvCi0JCSAqIGRvIHNvIGhlcmUuCi0JCSAqLwotCQlpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKHZjcHUtJmd0O2t2bSwgdmNwdS0mZ3Q7dmNwdV9pZCkgIT0gdmNwdSkKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7Ci0KLQkJdmdpY19jcHUtJmd0O3JkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjsKLQl9CiB9CiAKIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTU0OSw3ICYjNDM7NTI2LDE2IEBAIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAKIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKQomIzQzOwkJdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0MzsKIAlfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJCV9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIH0KIApAQCAtNTU5LDIxICYjNDM7NTQ1LDIzIEBAIHZvaWQga3ZtX3ZnaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pCiAJdW5zaWduZWQgbG9uZyBpOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWlmIChrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykKJiM0MzsJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKJiM0MzsJCQl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCiAJdmdpY19kZWJ1Z19kZXN0cm95KGt2bSk7CiAKLQlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewogCQlfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykKJiM0MzsJCQlfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwl9CiAKIAlrdm1fdmdpY19kaXN0X2Rlc3Ryb3koa3ZtKTsKIAogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7Ci0KLQlpZiAoa3ZtLSZndDthcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpCi0JCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7Ci0KIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYwppbmRleCA5MGJlOTk0NDNkZjNiLi40OGMzYjJhNDhjMjAyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMKQEAgLTk3LDYgJiM0Mzs5Nyw5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiAJcGh5c19hZGRyX3QgKmFkZHJfcHRyLCBhbGlnbm1lbnQsIHNpemU7CiAJdTY0IHVuZGVmX3ZhbHVlID0gVkdJQ19BRERSX1VOREVGOwogCXU2NCBhZGRyOwomIzQzOwlib29sIHJlZGlzdF93cml0ZSA9IHdyaXRlICZhbXA7JmFtcDsKJiM0MzsJCShhdHRyLSZndDthdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHwKJiM0MzsJCSBhdHRyLSZndDthdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OKTsKIAlpbnQgcjsKIAogCS8qIFJlYWRpbmcgYSByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBhZGRyIGltcGxpZXMgZ2V0dGluZyB0aGUgaW5kZXggKi8KQEAgLTEwNCw2ICYjNDM7MTA3LDE5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiAJCWlmIChnZXRfdXNlcihhZGRyLCB1YWRkcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHZDUFUgY2FuIGhhdmUgYW4gUkQgYXNzaWdubWVudCBiZWZvcmUgaXQgaXMgdmlzaWJsZSB0bwomIzQzOwkgKiBrdm1fZm9yX2VhY2hfdmNwdSgpLiBSZWplY3QgcmVkaXN0cmlidXRvciB1cGRhdGVzIHdoaWxlIHZDUFUgY3JlYXRpb24KJiM0MzsJICogaXMgaW4gcHJvZ3Jlc3MsIHNvIHJvbGxiYWNrIGNhbiByZXNldCBldmVyeSBhc3NpZ25tZW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlZGlzdF93cml0ZSkgewomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzICE9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpKSB7CiYjNDM7CQkJciA9IC1FQlVTWTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2tfa3ZtOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBTaW5jZSB3ZSBjYW4mIzM5O3QgaG9sZCBjb25maWdfbG9jayB3aGlsZSByZWdpc3RlcmluZyB0aGUgcmVkaXN0cmlidXRvcgogCSAqIGlvZGV2cywgdGFrZSB0aGUgc2xvdHNfbG9jayBpbW1lZGlhdGVseS4KQEAgLTIwMSw2ICYjNDM7MjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIAomIzQzO291dF91bmxvY2tfa3ZtOgomIzQzOwlpZiAocmVkaXN0X3dyaXRlKQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsKIAlpZiAoIXIgJmFtcDsmYW1wOyAhd3JpdGUpCiAJCXIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYwppbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMKQEAgLTc2Niw2ICYjNDM7NzY2LDE4IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldikKIAlyZXR1cm4gU1pfNjRLOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gudmdpY19jcHU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWctJmd0O2ZyZWVfaW5kZXgtLTsKJiM0MzsJX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2CiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25ncwpAQCAtODE4LDE2ICYjNDM7ODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmRfZGV2LSZndDtucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7CiAJcmRfZGV2LSZndDtyZWRpc3RfdmNwdSA9IHZjcHU7CiAKJiM0MzsJLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KJiM0MzsJcmRyZWctJmd0O2ZyZWVfaW5kZXgmIzQzOyYjNDM7OwomIzQzOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAKIAlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSwKIAkJCQkgICAgICAyICogU1pfNjRLLCAmYW1wO3JkX2Rldi0mZ3Q7ZGV2KTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpOwogCi0JLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KLQlyZHJlZy0mZ3Q7ZnJlZV9pbmRleCYjNDM7JiM0Mzs7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKQEAgLTg0MSw2ICYjNDM7ODU0LDQwIEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LSZndDtrdm0sIEtWTV9NTUlPX0JVUywgJmFtcDtyZF9kZXYtJmd0O2Rldik7CiB9CiAKJiM0Mzt2b2lkIF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CXZnaWNfY3B1LSZndDtyZHJlZyA9IE5VTEw7CiYjNDM7CXZnaWNfY3B1LSZndDtyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnLCAqaXRlcjsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGM7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkKJiM0MzsJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkKJiM0MzsJCV9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgJmFtcDtrdm0tJmd0O2FyY2gudmdpYy5yZF9yZWdpb25zLCBsaXN0KQomIzQzOwkJaXRlci0mZ3Q7ZnJlZV9pbmRleCA9IDA7CiYjNDM7CiYjNDM7CXZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwpAQCAtODU1LDE2ICYjNDM7OTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSkKIAkJCWJyZWFrOwogCX0KIAotCWlmIChyZXQpIHsKLQkJLyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi8KLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IGM7IGkmIzQzOyYjNDM7KSB7Ci0JCQl2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7Ci0JCQl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwotCQl9Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTUzLDE3ICYjNDM7OTkwLDggQEAgc3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCwKIAogdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQl1bnNpZ25lZCBsb25nIGM7Ci0KIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAotCS8qIEdhcmJhZ2UgY29sbGVjdCB0aGUgcmVnaW9uICovCi0Ja3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7Ci0JCWlmICh2Y3B1LSZndDthcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKQotCQkJdmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS5yZHJlZyA9IE5VTEw7Ci0JfQotCiAJbGlzdF9kZWwoJmFtcDtyZHJlZy0mZ3Q7bGlzdCk7CiAJa2ZyZWUocmRyZWcpOwogfQpAQCAtOTcyLDYgJiM0MzsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KQogewogCWludCByZXQ7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJcmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwpAQCAtOTg0LDEyICYjNDM7MTAxNCw3IEBAIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCkKIAkgKi8KIAlyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7CiAJaWYgKHJldCkgewotCQlzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZzsKLQotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQkJcmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpOwotCQl2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJCXZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKaW5kZXggZjQ1ZjdlM2VjNGQ2ZS4uZTMyZTJiNTZhNDdlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKQEAgLTMzMyw2ICYjNDM7MzMzLDcgQEAgaW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pOwogaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTsKIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pOwogCiB2b2lkIHZnaWNfdjNfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jCmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMKQEAgLTUsNiAmIzQzOzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKQEAgLTEzLDEyICYjNDM7MTQsMjEgQEAKIAogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Z2ljLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZnaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2dpY192My5oJiMzNDsKIAogI2RlZmluZSBOUl9WQ1BVUwkJNAogCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFCUdJQ1JfQkFTRV9HUEEKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UJXAomIzQzOwkoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzOyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFCQlcCiYjNDM7CShSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKQomIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRQlcCiYjNDM7CShSRURJU1RfUkVUUllfRElTVF9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX0RJU1RfU0laRSkKJiM0MzsKICNkZWZpbmUgUkVHX09GRlNFVCh2Y3B1LCBvZmZzZXQpICgoKHU2NCl2Y3B1ICZsdDsmbHQ7IDMyKSB8IG9mZnNldCkKIAogI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKQpAQCAtNjUsNiAmIzQzOzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwkvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9WQ1BVUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBiYXNlID0gaSAmbHQ7IDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICYjNDM7CiYjNDM7CQkJCSAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOgomIzQzOwkJCQkgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTsKJiM0MzsJCXU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgJiM0MzsgR0lDUl9UWVBFUikpOwomIzQzOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiAvKiB3ZSBkb24mIzM5O3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi8KIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewpAQCAtNzMsNiAmIzQzOzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSwKIAkJCQkJICAgICAgdTMyIG5yX3ZjcHVzLAomIzQzOwkJCQkJICAgICAgdm9pZCAqZ3Vlc3RfY29kZSwKIAkJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKQogewogCXN0cnVjdCB2bV9naWMgdjsKQEAgLTMzOCw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSkKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CiAJaW50IHJldCwgaTsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtMzU5LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKQogCXN0cnVjdCB2bV9naWMgdjsKIAlpbnQgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtNDExLDcgJiM0Mzs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCXU2NCBhZGRyOwogCWludCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKIAkJCSAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7CkBAIC00MjIsNyAmIzQzOzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpCiAKIAkvKiBzdGVwMiAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTsKQEAgLTQzNiw3ICYjNDM7NDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAogCS8qIHN0ZXAgMyAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJcmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLApAQCAtNDU3LDYgJiM0Mzs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTsKJiM0MzsJc3RydWN0IHZtX2dpYyB2OwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCBhZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFLCAwLCAxKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpOwomIzQzOwlyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwKJiM0MzsJCQkJICAgICZhbXA7YWRkcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKJiM0MzsJCSAgICAmIzM0O3JlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJdmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwKJiM0MzsJCSB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLSZndDttb2RlLAomIzQzOwkJCQkJIDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpOwomIzQzOwl2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLAomIzQzOwkJIHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tJmd0O21vZGUsCiYjNDM7CQkJCQkgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTsKJiM0MzsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKJiM0MzsJCQkgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X3J1bih2Y3B1c1swXSk7CiYjNDM7CXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCAmYW1wO3VjKSkgewomIzQzOwljYXNlIFVDQUxMX0RPTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBVQ0FMTF9BQk9SVDoKJiM0MzsJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVUNBTExfTk9ORToKJiM0MzsJCWlmICh2Y3B1c1swXS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKQomIzQzOwkJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseCYjMzQ7LAomIzQzOwkJCQkgIHZjcHVzWzBdLSZndDtydW4tJmd0O21taW8ucGh5c19hZGRyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1JiMzNDssCiYjNDM7CQkJICB1Yy5jbWQsIHZjcHVzWzBdLSZndDtydW4tJmd0O2V4aXRfcmVhc29uKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZCkKIHsKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CkBAIC02MDgsNyAmIzQzOzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKQogCWludCByZXQsIGk7CiAJdTY0IGFkZHI7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAkvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovCiAJYWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTsKQEAgLTY0MSw3ICYjNDM7NzM4LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19pdHNfcmVnaW9uKHZvaWQpCiAJdTY0IGFkZHI7CiAJaW50IGl0c19mZCwgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJaXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7CiAKIAlhZGRyID0gMHg0MDEwMDA7CkBAIC02ODQsNyAmIzQzOzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpCiAJdTMyIHR5cGVyMjsKIAlpbnQgcmV0OwogCi0Jdm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpOwomIzQzOwl2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJa3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUywKIAkJCSAgICBHSUNEX1RZUEVSMiwgJmFtcDt0eXBlcjIpOwogCWhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgJmFtcDsgR0lDRF9UWVBFUjJfbkFTU0dJY2FwOwpAQCAtOTc4LDYgJiM0MzsxMDc3LDcgQEAgdm9pZCBydW5fdGVzdHModTMyIGdpY19kZXZfdHlwZSkKIAogCWlmIChWR0lDX0RFVl9JU19WMyhnaWNfZGV2X3R5cGUpKSB7CiAJCXRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKCk7CiYjNDM7CQl0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTsKIAkJdGVzdF92M190eXBlcl9hY2Nlc3NlcygpOwogCQl0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7CiAJCXRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0ODcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEtWTSBBUk02NCBWR0lDdjMgUmVkaXN0cmlidXRvciBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBBUk02NCBLVk0gVkdJQyBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgbGlrZSBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgZm9yIFZHSUMgdjMuIFNpbmNlIHdlICpjYW4qIGZ1enogS1ZNIEFSTTY0IOKAkyB3ZSYjMzk7dmUgZ290IHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHRoYXQgd29yayBvbiBpdCDigJMgdGhpcyBpcyBhIHByaW1lIHRhcmdldC4KClRoZSBwYXRjaCB0b3VjaGVzIGEgbnVtYmVyIG9mIGZpbGVzOiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY2AsIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jYCwgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgLCBhbmQgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oYC4gVGhpcyBnaXZlcyBhIHN0cm9uZyBjbHVlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIGxvZ2ljLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXNlIGNoYW5nZXMgYXJlIG1vZGlmeWluZyBob3cgcmVkaXN0cmlidXRvciBpb2RldnMgYXJlIHJlZ2lzdGVyZWQsIHVucmVnaXN0ZXJlZCwgYW5kIGhvdyByZWRpc3RyaWJ1dG9yIGFzc2lnbm1lbnRzIGFyZSBoYW5kbGVkLCBpbmNsdWRpbmcgcm9sbGJhY2tzIGFuZCB1bmRvIG9wZXJhdGlvbnMuIEkgc2VlIGZ1bmN0aW9ucyBsaWtlIGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgLCBgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCBhZGRlZCwgd2hpY2ggaXMgYSBnb29kIGluZGljYXRvciBvZiBjb21wbGV4IHN0YXRlIG1hbmFnZW1lbnQuIFRoZXJlJiMzOTtzIGFsc28gYSBjaGVjayBpbiBga3ZtX3ZnaWNfYWRkcmAgdGhhdCByZXN0cmljdHMgcmVkaXN0cmlidXRvciB1cGRhdGVzIGR1cmluZyB2Q1BVIGNyZWF0aW9uLiBTbywgdGhlcmUgaXMgc3RhdGUgdHJhY2tpbmcuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBmb3IgZnV6emluZy4gQWZ0ZXIgZ29pbmcgdGhyb3VnaCB0aGUgY29kZSwgSSBhbSBsb29raW5nIGF0OgoKKiAgIGBrdm1fdmdpY192Y3B1X2Rlc3Ryb3lgIC0gZ2xvYmFsCiogICBga3ZtX3ZnaWNfZGVzdHJveWAgLSBnbG9iYWwKKiAgIGBrdm1fdmdpY19hZGRyYCAtIHN0YXRpYywgYnV0IGxpa2VseSB3ZSBjYW4gdHJpZ2dlciB2aWEgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCBvciBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgCiogICBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgIC0gZ2xvYmFsCiogICBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgIC0gZ2xvYmFsCiogICBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAgLSBnbG9iYWwKKiAgIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCAtIGdsb2JhbAoKSSBjYW4gY29uZmlybSB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzIHRoZSBgQ09ORklHX0tWTWAgS2NvbmZpZyBvcHRpb24uCgpTbywgaW4gY29uY2x1c2lvbiwgdGhpcyBpcyBhIGRlZmluaXRlIGZ1enppbmcgdGFyZ2V0LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZXhwb3NlZCBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gdmlhIGlvY3Rscy4gSSB3aWxsIG5vdyBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIHN5emthbGxlciB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vdmdpYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYz05Mz1zdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaXRlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMtMTUzLVx0XHRpZiAod3JpdGUpIHtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmM6MTU0Olx0XHRcdHIgPSB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShrdm0sIDAsIGFkZHIsIDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xNTUtXHRcdFx0Z290byBvdXQ7XG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xODMtXHRcdFx0ZWxzZVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYzoxODQ6XHRcdFx0XHRyID0gdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoa3ZtLCBpbmRleCxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMtMTg1LVx0XHRcdFx0XHRcdFx0ICAgIGJhc2UsIGNvdW50KTtcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTk5MT12b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05OTgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjk5OTppbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDAte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oPTMzMj1pbnQgdmdpY192M19zYXZlX3BlbmRpbmdfdGFibGVzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozMzM6aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oLTMzNC1pbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU5NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIFZnaWMgQ2xlYW51cCBpbiB0aGUgS1ZNL0FSTTY0IENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGNsZWFuaW5nIHVwIHRoZSBWaXJ0dWFsIEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgKHZHSUMpIGNvZGUsIHNwZWNpZmljYWxseSBvbiBBUk02NCB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSYjMzk7dmUgZ290IGEgZmV3IGZ1bmN0aW9ucyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBleGFtaW5hdGlvbjogYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCwgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldmAsIGBrdm1fdmdpY192Y3B1X2Rlc3Ryb3lgLCBhbmQgYGt2bV92Z2ljX2Rlc3Ryb3lgLiBUaGVzZSBhbGwgc2VlbSBpbnRpbWF0ZWx5IGludm9sdmVkIGluIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGUgdkdJQyByZWRpc3RyaWJ1dG9yIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4gU2VlbXMgbGlrZSBhIHNvbGlkIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiBCZWZvcmUgSSBkaXZlIGludG8gZWFjaCBmdW5jdGlvbiBpbmRpdmlkdWFsbHkgdGhvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBLVk0gc3VwcG9ydCBvbiBBUk02NC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZ1bGx5IGF3YXJlIG9mIGhvdyBLVk0gaXMgY29uZmlndXJlZCwgdGhlIGJ1aWxkIGZsYWdzLCBhbmQgYW55IGRlcGVuZGVuY2llcyBiZWZvcmUgcHJvY2VlZGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGhlbHAgbWUgYXZvaWQgYW55IHBvdGVudGlhbCBtaXNzdGVwcyBvciBvdmVybG9va2luZyBjcml0aWNhbCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXHRib29sIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBLVk1gLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LiBOb3csIEkgbmVlZCB0byBpbW1lZGlhdGVseSBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGUgY29uZmlndXJhdGlvbi4gTXkgZm9jdXMsIGFzIGFsd2F5cywgaXMgb24gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBwbGF0Zm9ybSBzcGVjaWZpY3MuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLVk0gY29uZmlndXJhdGlvbiBmb3IgdGhlIGluY2x1c2lvbiBvZiBgVkdJQ3YzYCBkZXRhaWxzLiBJIGFtIGdvaW5nIHRvIHNlZSB3aGF0IHNvcnQgb2Ygc3BlY2lmaWMgdHVuaW5ncyB3ZSBoYXZlIGluIHBsYWNlIHRoZXJlLiBJcyB0aGVyZSBhIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIGJsb2NrIGZvciBWR0lDdjMsIG9yIGFyZSB0aGUgc2V0dGluZ3MgaW1wbGllZCB0aHJvdWdoIHNvbWUgYnJvYWRlciBzZXR0aW5ncz8gSXTigJlzIGNydWNpYWwgdG8ga25vdyBpZiB3ZSBoYXZlIGV4cGxpY2l0IGNvbnRyb2wgb3IgaWYgd2UmIzM5O3JlIGluaGVyaXRpbmcgZGVmYXVsdHMuIEVpdGhlciB3YXksIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgb3VyIHNldHVwIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipWR0lDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzEKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBBUk02NCBWR0lDdjMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYW55dGhpbmcgZXhvdGljOyBpdCYjMzk7cyBqdXN0IGRlYWxpbmcgd2l0aCBgS1ZNYC4gTGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZy4gVGhlIGtleSBzZWVtcyB0byBiZSB0aGUgYEZvY3VzU3ltYm9sc2AsIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhvc2U6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBga3ZtX3ZnaWNfdmNwdV9kZXN0cm95YCwgYW5kIGBrdm1fdmdpY19kZXN0cm95YC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgZ2xvYmFsIEFQSSBlbnRyeXBvaW50cywgbm90IHN0YXRpYyBvciBpbmxpbmVkLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhYm91dCBob3cgdGhlIEtWTSBBUk02NCBWR0lDdjMgaGFuZGxlcyB0aGUgcmVkaXN0cmlidXRvciByZWdpb24uIEl04oCZcyBhYm91dCBmaXhpbmcgcmFjZXMgYW5kIHJvbGxiYWNrIGlzc3VlcyB0aGF0IHBvcCB1cCB3aGVuIHdlJiMzOTtyZSBjcmVhdGluZyB2Q1BVcyBhbmQgYXNzaWduaW5nIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlZGlzdHJpYnV0b3IuIFRoaXMgbWVhbnMgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCB0aG9zZSBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgaW9jdGxzIOKAkyBzbywgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBvbiBBUk02NC4KCkp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIGBrdm1fdmdpY19hZGRyYC4gQWhhLCB5ZXMsIGl0JiMzOTtzIHN0YXRpYyBpbiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY2AuIEJ1dCBpdCYjMzk7cyBhbHJpZ2h0LCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgIGlzIGdsb2JhbCBhbmQgY2FsbGVkIGZyb20gaXQsIHNvIGl0JiMzOTtzIGFsbCBtYWtpbmcgc2Vuc2UuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpczsgSSYjMzk7bGwgcmVjb3JkIG15IGZpbmRpbmdzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgICAmIzM0O3ZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O3ZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldiYjMzQ7LAogICAgJiMzNDtrdm1fdmdpY192Y3B1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7a3ZtX3ZnaWNfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIEFSTTY0IFZHSUN2MyByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZpeGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHJvbGxiYWNrIGxvZ2ljIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGFuZCByZWRpc3RyaWJ1dG9yIGJhc2UgYWRkcmVzcyBhc3NpZ25tZW50LiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1NFVF9ERVZJQ0VfQVRUUikgYW5kIGFmZmVjdHMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBvbiBBUk02NCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmdpY192M19zZXRfcmVkaXN0X2Jhc2UmIzM0OywKICAgICYjMzQ7dmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldiYjMzQ7LAogICAgJiMzNDtfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O2t2bV92Z2ljX3ZjcHVfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtrdm1fdmdpY19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgcm9sbGJhY2sgbG9naWMgZHVyaW5nIHZDUFUgY3JlYXRpb24gYW5kIHJlZGlzdHJpYnV0b3IgYmFzZSBhZGRyZXNzIGFzc2lnbm1lbnQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fU0VUX0RFVklDRV9BVFRSKSBhbmQgYWZmZWN0cyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IG9uIEFSTTY0LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U2YjQ3MWUyNWFmYWQzZDBmYTlkN2NkMTJhNTFjOTE4N2RlMGRmZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEwOjIwOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMKaW5kZXggOTA3MDU3ODgxYjI2YS4uODFhYjVhNmJmOGJjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jCkBAIC01MTksMjkgJiM0Mzs1MTksNiBAQCBzdGF0aWMgdm9pZCBfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2Z2ljX2NwdS0mZ3Q7YXBfbGlzdF9oZWFkKTsKIAlrZnJlZSh2Z2ljX2NwdS0mZ3Q7cHJpdmF0ZV9pcnFzKTsKIAl2Z2ljX2NwdS0mZ3Q7cHJpdmF0ZV9pcnFzID0gTlVMTDsKLQotCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykgewotCQkvKgotCQkgKiBJZiB0aGlzIHZDUFUgaXMgYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgYSBmYWlsZWQgY3JlYXRpb24KLQkJICogdGhlbiB1bnJlZ2lzdGVyIHRoZSByZWRpc3RyaWJ1dG9yIHRvIGF2b2lkIGxlYXZpbmcgYmVoaW5kIGEKLQkJICogZGFuZ2xpbmcgcG9pbnRlciB0byB0aGUgdkNQVSBzdHJ1Y3QuCi0JCSAqCi0JCSAqIHZDUFVzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChpLmUuIGFkZGVkIHRvCi0JCSAqIGt2bS0mZ3Q7dmNwdV9hcnJheSkgZ2V0IHVucmVnaXN0ZXJlZCBpbiBrdm1fdmdpY19kZXN0cm95KCksIGFzCi0JCSAqIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hpbGUgaG9sZGluZyBrdm0tJmd0O2FyY2guY29uZmlnX2xvY2sKLQkJICogaW4gdGhlIFZNIHRlYXJkb3duIHBhdGggYW5kIHdvdWxkIG90aGVyd2lzZSBpbnRyb2R1Y2UgYSBsb2NrCi0JCSAqIGludmVyc2lvbiB3LnIudC4ga3ZtLSZndDtzcmN1LgotCQkgKgotCQkgKiB2Q1BVcyB0aGF0IGZhaWxlZCBjcmVhdGlvbiBhcmUgdG9ybiBkb3duIG91dHNpZGUgb2YgdGhlCi0JCSAqIGt2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayBhbmQgZG8gbm90IGdldCB1bnJlZ2lzdGVyZWQgaW4KLQkJICoga3ZtX3ZnaWNfZGVzdHJveSgpLCBtZWFuaW5nIGl0IGlzIGJvdGggc2FmZSBhbmQgbmVjZXNzYXJ5IHRvCi0JCSAqIGRvIHNvIGhlcmUuCi0JCSAqLwotCQlpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKHZjcHUtJmd0O2t2bSwgdmNwdS0mZ3Q7dmNwdV9pZCkgIT0gdmNwdSkKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7Ci0KLQkJdmdpY19jcHUtJmd0O3JkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjsKLQl9CiB9CiAKIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTU0OSw3ICYjNDM7NTI2LDE2IEBAIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAKIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKQomIzQzOwkJdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0MzsKIAlfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJCV9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIH0KIApAQCAtNTU5LDIxICYjNDM7NTQ1LDIzIEBAIHZvaWQga3ZtX3ZnaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pCiAJdW5zaWduZWQgbG9uZyBpOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWlmIChrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykKJiM0MzsJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKJiM0MzsJCQl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCiAJdmdpY19kZWJ1Z19kZXN0cm95KGt2bSk7CiAKLQlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewogCQlfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykKJiM0MzsJCQlfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwl9CiAKIAlrdm1fdmdpY19kaXN0X2Rlc3Ryb3koa3ZtKTsKIAogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7Ci0KLQlpZiAoa3ZtLSZndDthcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpCi0JCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7Ci0KIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYwppbmRleCA5MGJlOTk0NDNkZjNiLi40OGMzYjJhNDhjMjAyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMKQEAgLTk3LDYgJiM0Mzs5Nyw5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiAJcGh5c19hZGRyX3QgKmFkZHJfcHRyLCBhbGlnbm1lbnQsIHNpemU7CiAJdTY0IHVuZGVmX3ZhbHVlID0gVkdJQ19BRERSX1VOREVGOwogCXU2NCBhZGRyOwomIzQzOwlib29sIHJlZGlzdF93cml0ZSA9IHdyaXRlICZhbXA7JmFtcDsKJiM0MzsJCShhdHRyLSZndDthdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHwKJiM0MzsJCSBhdHRyLSZndDthdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OKTsKIAlpbnQgcjsKIAogCS8qIFJlYWRpbmcgYSByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBhZGRyIGltcGxpZXMgZ2V0dGluZyB0aGUgaW5kZXggKi8KQEAgLTEwNCw2ICYjNDM7MTA3LDE5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiAJCWlmIChnZXRfdXNlcihhZGRyLCB1YWRkcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHZDUFUgY2FuIGhhdmUgYW4gUkQgYXNzaWdubWVudCBiZWZvcmUgaXQgaXMgdmlzaWJsZSB0bwomIzQzOwkgKiBrdm1fZm9yX2VhY2hfdmNwdSgpLiBSZWplY3QgcmVkaXN0cmlidXRvciB1cGRhdGVzIHdoaWxlIHZDUFUgY3JlYXRpb24KJiM0MzsJICogaXMgaW4gcHJvZ3Jlc3MsIHNvIHJvbGxiYWNrIGNhbiByZXNldCBldmVyeSBhc3NpZ25tZW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlZGlzdF93cml0ZSkgewomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzICE9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpKSB7CiYjNDM7CQkJciA9IC1FQlVTWTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2tfa3ZtOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBTaW5jZSB3ZSBjYW4mIzM5O3QgaG9sZCBjb25maWdfbG9jayB3aGlsZSByZWdpc3RlcmluZyB0aGUgcmVkaXN0cmlidXRvcgogCSAqIGlvZGV2cywgdGFrZSB0aGUgc2xvdHNfbG9jayBpbW1lZGlhdGVseS4KQEAgLTIwMSw2ICYjNDM7MjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIAomIzQzO291dF91bmxvY2tfa3ZtOgomIzQzOwlpZiAocmVkaXN0X3dyaXRlKQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsKIAlpZiAoIXIgJmFtcDsmYW1wOyAhd3JpdGUpCiAJCXIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYwppbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMKQEAgLTc2Niw2ICYjNDM7NzY2LDE4IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldikKIAlyZXR1cm4gU1pfNjRLOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gudmdpY19jcHU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWctJmd0O2ZyZWVfaW5kZXgtLTsKJiM0MzsJX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2CiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25ncwpAQCAtODE4LDE2ICYjNDM7ODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmRfZGV2LSZndDtucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7CiAJcmRfZGV2LSZndDtyZWRpc3RfdmNwdSA9IHZjcHU7CiAKJiM0MzsJLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KJiM0MzsJcmRyZWctJmd0O2ZyZWVfaW5kZXgmIzQzOyYjNDM7OwomIzQzOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAKIAlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSwKIAkJCQkgICAgICAyICogU1pfNjRLLCAmYW1wO3JkX2Rldi0mZ3Q7ZGV2KTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpOwogCi0JLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KLQlyZHJlZy0mZ3Q7ZnJlZV9pbmRleCYjNDM7JiM0Mzs7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKQEAgLTg0MSw2ICYjNDM7ODU0LDQwIEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LSZndDtrdm0sIEtWTV9NTUlPX0JVUywgJmFtcDtyZF9kZXYtJmd0O2Rldik7CiB9CiAKJiM0Mzt2b2lkIF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CXZnaWNfY3B1LSZndDtyZHJlZyA9IE5VTEw7CiYjNDM7CXZnaWNfY3B1LSZndDtyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnLCAqaXRlcjsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGM7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkKJiM0MzsJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkKJiM0MzsJCV9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgJmFtcDtrdm0tJmd0O2FyY2gudmdpYy5yZF9yZWdpb25zLCBsaXN0KQomIzQzOwkJaXRlci0mZ3Q7ZnJlZV9pbmRleCA9IDA7CiYjNDM7CiYjNDM7CXZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwpAQCAtODU1LDE2ICYjNDM7OTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSkKIAkJCWJyZWFrOwogCX0KIAotCWlmIChyZXQpIHsKLQkJLyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi8KLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IGM7IGkmIzQzOyYjNDM7KSB7Ci0JCQl2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7Ci0JCQl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwotCQl9Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTUzLDE3ICYjNDM7OTkwLDggQEAgc3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCwKIAogdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQl1bnNpZ25lZCBsb25nIGM7Ci0KIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAotCS8qIEdhcmJhZ2UgY29sbGVjdCB0aGUgcmVnaW9uICovCi0Ja3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7Ci0JCWlmICh2Y3B1LSZndDthcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKQotCQkJdmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS5yZHJlZyA9IE5VTEw7Ci0JfQotCiAJbGlzdF9kZWwoJmFtcDtyZHJlZy0mZ3Q7bGlzdCk7CiAJa2ZyZWUocmRyZWcpOwogfQpAQCAtOTcyLDYgJiM0MzsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KQogewogCWludCByZXQ7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJcmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwpAQCAtOTg0LDEyICYjNDM7MTAxNCw3IEBAIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCkKIAkgKi8KIAlyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7CiAJaWYgKHJldCkgewotCQlzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZzsKLQotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQkJcmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpOwotCQl2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJCXZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKaW5kZXggZjQ1ZjdlM2VjNGQ2ZS4uZTMyZTJiNTZhNDdlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKQEAgLTMzMyw2ICYjNDM7MzMzLDcgQEAgaW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pOwogaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTsKIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pOwogCiB2b2lkIHZnaWNfdjNfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jCmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMKQEAgLTUsNiAmIzQzOzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKQEAgLTEzLDEyICYjNDM7MTQsMjEgQEAKIAogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Z2ljLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZnaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2dpY192My5oJiMzNDsKIAogI2RlZmluZSBOUl9WQ1BVUwkJNAogCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFCUdJQ1JfQkFTRV9HUEEKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UJXAomIzQzOwkoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzOyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFCQlcCiYjNDM7CShSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKQomIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRQlcCiYjNDM7CShSRURJU1RfUkVUUllfRElTVF9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX0RJU1RfU0laRSkKJiM0MzsKICNkZWZpbmUgUkVHX09GRlNFVCh2Y3B1LCBvZmZzZXQpICgoKHU2NCl2Y3B1ICZsdDsmbHQ7IDMyKSB8IG9mZnNldCkKIAogI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKQpAQCAtNjUsNiAmIzQzOzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwkvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9WQ1BVUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBiYXNlID0gaSAmbHQ7IDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICYjNDM7CiYjNDM7CQkJCSAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOgomIzQzOwkJCQkgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTsKJiM0MzsJCXU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgJiM0MzsgR0lDUl9UWVBFUikpOwomIzQzOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiAvKiB3ZSBkb24mIzM5O3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi8KIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewpAQCAtNzMsNiAmIzQzOzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSwKIAkJCQkJICAgICAgdTMyIG5yX3ZjcHVzLAomIzQzOwkJCQkJICAgICAgdm9pZCAqZ3Vlc3RfY29kZSwKIAkJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKQogewogCXN0cnVjdCB2bV9naWMgdjsKQEAgLTMzOCw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSkKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CiAJaW50IHJldCwgaTsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtMzU5LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKQogCXN0cnVjdCB2bV9naWMgdjsKIAlpbnQgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtNDExLDcgJiM0Mzs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCXU2NCBhZGRyOwogCWludCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKIAkJCSAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7CkBAIC00MjIsNyAmIzQzOzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpCiAKIAkvKiBzdGVwMiAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTsKQEAgLTQzNiw3ICYjNDM7NDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAogCS8qIHN0ZXAgMyAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJcmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLApAQCAtNDU3LDYgJiM0Mzs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTsKJiM0MzsJc3RydWN0IHZtX2dpYyB2OwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCBhZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFLCAwLCAxKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpOwomIzQzOwlyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwKJiM0MzsJCQkJICAgICZhbXA7YWRkcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKJiM0MzsJCSAgICAmIzM0O3JlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJdmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwKJiM0MzsJCSB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLSZndDttb2RlLAomIzQzOwkJCQkJIDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpOwomIzQzOwl2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLAomIzQzOwkJIHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tJmd0O21vZGUsCiYjNDM7CQkJCQkgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTsKJiM0MzsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKJiM0MzsJCQkgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X3J1bih2Y3B1c1swXSk7CiYjNDM7CXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCAmYW1wO3VjKSkgewomIzQzOwljYXNlIFVDQUxMX0RPTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBVQ0FMTF9BQk9SVDoKJiM0MzsJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVUNBTExfTk9ORToKJiM0MzsJCWlmICh2Y3B1c1swXS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKQomIzQzOwkJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseCYjMzQ7LAomIzQzOwkJCQkgIHZjcHVzWzBdLSZndDtydW4tJmd0O21taW8ucGh5c19hZGRyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1JiMzNDssCiYjNDM7CQkJICB1Yy5jbWQsIHZjcHVzWzBdLSZndDtydW4tJmd0O2V4aXRfcmVhc29uKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZCkKIHsKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CkBAIC02MDgsNyAmIzQzOzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKQogCWludCByZXQsIGk7CiAJdTY0IGFkZHI7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAkvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovCiAJYWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTsKQEAgLTY0MSw3ICYjNDM7NzM4LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19pdHNfcmVnaW9uKHZvaWQpCiAJdTY0IGFkZHI7CiAJaW50IGl0c19mZCwgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJaXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7CiAKIAlhZGRyID0gMHg0MDEwMDA7CkBAIC02ODQsNyAmIzQzOzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpCiAJdTMyIHR5cGVyMjsKIAlpbnQgcmV0OwogCi0Jdm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpOwomIzQzOwl2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJa3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUywKIAkJCSAgICBHSUNEX1RZUEVSMiwgJmFtcDt0eXBlcjIpOwogCWhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgJmFtcDsgR0lDRF9UWVBFUjJfbkFTU0dJY2FwOwpAQCAtOTc4LDYgJiM0MzsxMDc3LDcgQEAgdm9pZCBydW5fdGVzdHModTMyIGdpY19kZXZfdHlwZSkKIAogCWlmIChWR0lDX0RFVl9JU19WMyhnaWNfZGV2X3R5cGUpKSB7CiAJCXRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKCk7CiYjNDM7CQl0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTsKIAkJdGVzdF92M190eXBlcl9hY2Nlc3NlcygpOwogCQl0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7CiAJCXRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDg0CgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDE1MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIFZHSUMgdjMgUmVkaXN0cmlidXRvciBJbml0aWFsaXphdGlvbiBhbmQgVGVhcmRvd24gLSBGb2N1c2VkIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0aWdodGVuaW5nIHVwIHRoZSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHByb2NlZHVyZXMsIHNwZWNpZmljYWxseSB0byBoYW5kbGUgc2NlbmFyaW9zIHdoZXJlIHZDUFUgY3JlYXRpb24gZmFpbHMgb3Igc2V0dGluZyB0aGUgcmVkaXN0cmlidXRvciBiYXNlIGZhaWxzLiBUaGUga2V5IGhlcmUgaXMgcm9sbGJhY2suIEl0IHNlZW1zIHRoZSBjb3JlIHByb2JsZW0gaXMgcG90ZW50aWFsbHkgZGFuZ2xpbmcgcG9pbnRlcnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgY29ycnVwdGlvbiBkdXJpbmcgdGhlc2UgZmFpbHVyZSBjYXNlcy4KCk15IGZpcnN0IHRob3VnaHQgd2FzLCBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBiZWluZyBpbnRyb2R1Y2VkPyBBIHF1aWNrIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBzdWdnZXN0cyBubywgd2hpY2ggaXMgYSByZWxpZWYuIFdlJiMzOTtyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgX19rdm1fdmdpY192Y3B1X2Rlc3Ryb3lgLCBga3ZtX3ZnaWNfdmNwdV9kZXN0cm95YCwgYGt2bV92Z2ljX2Rlc3Ryb3lgLCBga3ZtX3ZnaWNfYWRkcmAsIGB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldmAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbmAsIGB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbmAsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLgoKSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIGB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBhbmQgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgdG8gZW5zdXJlIHRoYXQgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSBjbGVhbmVkIHVwIGluIGVycm9yIHBhdGhzLiBUaGUgbmV3IGBrdm1fdmdpY19hZGRyYCBjaGVjayBsb29rcyBsaWtlIGEgc2ltcGxlIGNvbmN1cnJlbmN5IGNoZWNrIHRvIHByZXZlbnQgcmVkaXN0cmlidXRvciB1cGRhdGVzIHdoaWxlIHZDUFUgY3JlYXRpb24gaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCgpBZnRlciBjaGVja2luZyBga3ZtX3ZnaWNfYWRkcmAsIHRoZSBjb2RlIHNlZW1zIHNlbnNpYmxlLiBUaGUgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgYW5kIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCBmdW5jdGlvbnMgYXJlIGp1c3QgcmVzb3VyY2UgY2xlYW51cCwgYW5kIGB2Z2ljX3YzX3JvbGxiYWNrX3JlZGlzdF9yZWdpb25gIGRvZXMgY2xlYW51cCBhY3Jvc3MgYWxsIHZjcHVzLgoKQmFzaWNhbGx5LCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZlbnNpdmUgcGF0Y2g6IGl0JiMzOTtzIG1ha2luZyBzdXJlIHRoYXQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIGR1cmluZyB2Q1BVIGNyZWF0aW9uIG9yIHJlZGlzdHJpYnV0b3Igc2V0dXAsIHdlIHByb3Blcmx5IHJlbGVhc2UgYWxsIHJlc291cmNlcyBhbmQgZG9uJiMzOTt0IGVuZCB1cCB3aXRoIGRhbmdsaW5nIHBvaW50ZXJzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9jayBpbnZlcnNpb24gYnVncy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggKmlzbiYjMzk7dCogYWRkaW5nIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuCgpTbywgZ2l2ZW4gdGhpcyBhbmFseXNpcywgdGhlIHBhdGNoIGxvb2tzIGNsZWFuIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZSwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBuZXcgYXR0YWNrIHN1cmZhY2VzLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXggdG8gaW5jcmVhc2UgdGhlIHJvYnVzdG5lc3MgYW5kIHJlbGlhYmlsaXR5IG9mIHRoZSBWR0lDIHYzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MjA6MjkuMTc1MjY4MjIxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzM5NjE4NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlXCIsXG4gICAgXCJ2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwidmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwiX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldlwiLFxuICAgIFwia3ZtX3ZnaWNfdmNwdV9kZXN0cm95XCIsXG4gICAgXCJrdm1fdmdpY19kZXN0cm95XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gVkdJQyB2MyByZWRpc3RyaWJ1dG9yIGluaXRpYWxpemF0aW9uLCB0ZWFyZG93biwgYW5kIHJvbGxiYWNrIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIHByb3BlciBjbGVhbnVwIGZ1bmN0aW9ucyAoYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbmApIGFuZCBhZGp1c3RzIGxvY2tpbmcgdG8gcHJldmVudCBkYW5nbGluZyBwb2ludGVycyBhbmQgbG9jayBpbnZlcnNpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGZhaWx1cmVzIG9yIHJlZGlzdHJpYnV0b3IgYmFzZSBzZXR1cCBmYWlsdXJlcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgY29uY3VycmVuY3ksIGFuZCBvYmplY3QgbGlmZWN5Y2xlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGFsbG93IHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkYW5nbGluZyBwb2ludGVycywgb3IgZGVhZGxvY2tzKSBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBMT0NLREVQLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciByZWdpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGFuZCByb2xsYmFjayBsb2dpYyBkdXJpbmcgdkNQVSBjcmVhdGlvbiBhbmQgcmVkaXN0cmlidXRvciBiYXNlIGFkZHJlc3MgYXNzaWdubWVudC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfREVWSUNFX0FUVFIpIGFuZCBhZmZlY3RzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIwOjI5LjE3NTI3NDIyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0OTkzNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2U2YjQ3MWUyNWFmYWQzZDBmYTlkN2NkMTJhNTFjOTE4N2RlMGRmZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMDoyMDoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xcbmluZGV4IDkwNzA1Nzg4MWIyNmEuLjgxYWI1YTZiZjhiYzggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmNcXG5AQCAtNTE5LDI5ICs1MTksNiBAQCBzdGF0aWMgdm9pZCBfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ2Z2ljX2NwdS1cXHUwMDNlYXBfbGlzdF9oZWFkKTtcXG4gXFx0a2ZyZWUodmdpY19jcHUtXFx1MDAzZXByaXZhdGVfaXJxcyk7XFxuIFxcdHZnaWNfY3B1LVxcdTAwM2Vwcml2YXRlX2lycXMgPSBOVUxMO1xcbi1cXG4tXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElmIHRoaXMgdkNQVSBpcyBiZWluZyBkZXN0cm95ZWQgYmVjYXVzZSBvZiBhIGZhaWxlZCBjcmVhdGlvblxcbi1cXHRcXHQgKiB0aGVuIHVucmVnaXN0ZXIgdGhlIHJlZGlzdHJpYnV0b3IgdG8gYXZvaWQgbGVhdmluZyBiZWhpbmQgYVxcbi1cXHRcXHQgKiBkYW5nbGluZyBwb2ludGVyIHRvIHRoZSB2Q1BVIHN0cnVjdC5cXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogdkNQVXMgdGhhdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgKGkuZS4gYWRkZWQgdG9cXG4tXFx0XFx0ICoga3ZtLVxcdTAwM2V2Y3B1X2FycmF5KSBnZXQgdW5yZWdpc3RlcmVkIGluIGt2bV92Z2ljX2Rlc3Ryb3koKSwgYXNcXG4tXFx0XFx0ICogdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGlsZSBob2xkaW5nIGt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9ja1xcbi1cXHRcXHQgKiBpbiB0aGUgVk0gdGVhcmRvd24gcGF0aCBhbmQgd291bGQgb3RoZXJ3aXNlIGludHJvZHVjZSBhIGxvY2tcXG4tXFx0XFx0ICogaW52ZXJzaW9uIHcuci50LiBrdm0tXFx1MDAzZXNyY3UuXFxuLVxcdFxcdCAqXFxuLVxcdFxcdCAqIHZDUFVzIHRoYXQgZmFpbGVkIGNyZWF0aW9uIGFyZSB0b3JuIGRvd24gb3V0c2lkZSBvZiB0aGVcXG4tXFx0XFx0ICoga3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrIGFuZCBkbyBub3QgZ2V0IHVucmVnaXN0ZXJlZCBpblxcbi1cXHRcXHQgKiBrdm1fdmdpY19kZXN0cm95KCksIG1lYW5pbmcgaXQgaXMgYm90aCBzYWZlIGFuZCBuZWNlc3NhcnkgdG9cXG4tXFx0XFx0ICogZG8gc28gaGVyZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChrdm1fZ2V0X3ZjcHVfYnlfaWQodmNwdS1cXHUwMDNla3ZtLCB2Y3B1LVxcdTAwM2V2Y3B1X2lkKSAhPSB2Y3B1KVxcbi1cXHRcXHRcXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbi1cXG4tXFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4tXFx0fVxcbiB9XFxuIFxcbiB2b2lkIGt2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTU0OSw3ICs1MjYsMTYgQEAgdm9pZCBrdm1fdmdpY192Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXFxuK1xcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuK1xcbiBcXHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcXG4rXFxuK1xcdGlmIChrdm0tXFx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXHRcXHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuK1xcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiB9XFxuIFxcbkBAIC01NTksMjEgKzU0NSwyMyBAQCB2b2lkIGt2bV92Z2ljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXFxuK1xcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcXG4rXFx0XFx0XFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIFxcbiBcXHR2Z2ljX2RlYnVnX2Rlc3Ryb3koa3ZtKTtcXG4gXFxuLVxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XFxuIFxcdFxcdF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xcbitcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXFxuK1xcdFxcdFxcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuK1xcdH1cXG4gXFxuIFxcdGt2bV92Z2ljX2Rpc3RfZGVzdHJveShrdm0pO1xcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXG4tXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxcbi1cXHRcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXFxuLVxcdFxcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuLVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXFxuaW5kZXggOTBiZTk5NDQzZGYzYi4uNDhjM2IyYTQ4YzIwMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xcbkBAIC05Nyw2ICs5Nyw5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXFxuIFxcdHBoeXNfYWRkcl90ICphZGRyX3B0ciwgYWxpZ25tZW50LCBzaXplO1xcbiBcXHR1NjQgdW5kZWZfdmFsdWUgPSBWR0lDX0FERFJfVU5ERUY7XFxuIFxcdHU2NCBhZGRyO1xcbitcXHRib29sIHJlZGlzdF93cml0ZSA9IHdyaXRlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdChhdHRyLVxcdTAwM2VhdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHxcXG4rXFx0XFx0IGF0dHItXFx1MDAzZWF0dHIgPT0gS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04pO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qIFJlYWRpbmcgYSByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBhZGRyIGltcGxpZXMgZ2V0dGluZyB0aGUgaW5kZXggKi9cXG5AQCAtMTA0LDYgKzEwNywxOSBAQCBzdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaVxcbiBcXHRcXHRpZiAoZ2V0X3VzZXIoYWRkciwgdWFkZHIpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEEgdkNQVSBjYW4gaGF2ZSBhbiBSRCBhc3NpZ25tZW50IGJlZm9yZSBpdCBpcyB2aXNpYmxlIHRvXFxuK1xcdCAqIGt2bV9mb3JfZWFjaF92Y3B1KCkuIFJlamVjdCByZWRpc3RyaWJ1dG9yIHVwZGF0ZXMgd2hpbGUgdkNQVSBjcmVhdGlvblxcbitcXHQgKiBpcyBpbiBwcm9ncmVzcywgc28gcm9sbGJhY2sgY2FuIHJlc2V0IGV2ZXJ5IGFzc2lnbm1lbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAocmVkaXN0X3dyaXRlKSB7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWNyZWF0ZWRfdmNwdXMgIT0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKSkge1xcbitcXHRcXHRcXHRyID0gLUVCVVNZO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2tfa3ZtO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNpbmNlIHdlIGNhbid0IGhvbGQgY29uZmlnX2xvY2sgd2hpbGUgcmVnaXN0ZXJpbmcgdGhlIHJlZGlzdHJpYnV0b3JcXG4gXFx0ICogaW9kZXZzLCB0YWtlIHRoZSBzbG90c19sb2NrIGltbWVkaWF0ZWx5LlxcbkBAIC0yMDEsNiArMjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXFxuIG91dDpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiBcXG4rb3V0X3VubG9ja19rdm06XFxuK1xcdGlmIChyZWRpc3Rfd3JpdGUpXFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdGlmICghciBcXHUwMDI2XFx1MDAyNiAhd3JpdGUpXFxuIFxcdFxcdHIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcXG5pbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXFxuQEAgLTc2Niw2ICs3NjYsMTggQEAgdW5zaWduZWQgaW50IHZnaWNfdjNfaW5pdF9kaXN0X2lvZGV2KHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gU1pfNjRLO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuK1xcbitcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWctXFx1MDAzZWZyZWVfaW5kZXgtLTtcXG4rXFx0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XFxuICAqIEB2Y3B1OiAgICBUaGUgVkNQVSB0byB3aGljaCB0aGUgcmVkaXN0cmlidXRvciBiZWxvbmdzXFxuQEAgLTgxOCwxNiArODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJkX2Rldi1cXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xcbiBcXHRyZF9kZXYtXFx1MDAzZXJlZGlzdF92Y3B1ID0gdmNwdTtcXG4gXFxuK1xcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXFxuK1xcdHJkcmVnLVxcdTAwM2VmcmVlX2luZGV4Kys7XFxuK1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIFxcbiBcXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgMiAqIFNaXzY0SywgXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0dmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpO1xcbiBcXG4tXFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cXG4tXFx0cmRyZWctXFx1MDAzZWZyZWVfaW5kZXgrKztcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiByZXQ7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuQEAgLTg0MSw2ICs4NTQsNDAgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0a3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LVxcdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG4rdm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXG4rXFx0dmdpY19jcHUtXFx1MDAzZXJkcmVnID0gTlVMTDtcXG4rXFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxcbit7XFxuK1xcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnLCAqaXRlcjtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHR1bnNpZ25lZCBsb25nIGM7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXG4rXFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xcbitcXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKVxcbitcXHRcXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKVxcbitcXHRcXHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZnaWMucmRfcmVnaW9ucywgbGlzdClcXG4rXFx0XFx0aXRlci1cXHUwMDNlZnJlZV9pbmRleCA9IDA7XFxuK1xcbitcXHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuQEAgLTg1NSwxNiArOTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cXG4tXFx0XFx0aW50IGk7XFxuLVxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYzsgaSsrKSB7XFxuLVxcdFxcdFxcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcXG4tXFx0XFx0XFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC05NTMsMTcgKzk5MCw4IEBAIHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXFxuIFxcbiB2b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHR1bnNpZ25lZCBsb25nIGM7XFxuLVxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiBcXG4tXFx0LyogR2FyYmFnZSBjb2xsZWN0IHRoZSByZWdpb24gKi9cXG4tXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7XFxuLVxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKVxcbi1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4gXFx0bGlzdF9kZWwoXFx1MDAyNnJkcmVnLVxcdTAwM2VsaXN0KTtcXG4gXFx0a2ZyZWUocmRyZWcpO1xcbiB9XFxuQEAgLTk3Miw2ICsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbitcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFx0cmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbkBAIC05ODQsMTIgKzEwMTQsNyBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuLVxcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXHRcXHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XFxuLVxcdFxcdHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuK1xcdFxcdHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmggYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxcbmluZGV4IGY0NWY3ZTNlYzRkNmUuLmUzMmUyYjU2YTQ3ZWYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmhcXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxcbkBAIC0zMzMsNiArMzMzLDcgQEAgaW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbiBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpO1xcbiBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK3ZvaWQgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXG4gdm9pZCB2Z2ljX3YzX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXFxuaW5kZXggNDdlMzRiNDNhZmIyOS4uNWEzMGYzY2IwMzliZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcXG5AQCAtNSw2ICs1LDcgQEBcXG4gICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGFyYS5oXFx1MDAzZVxcbkBAIC0xMywxMiArMTQsMjEgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJnaWMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInByb2Nlc3Nvci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmdpYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZ2ljX3YzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIE5SX1ZDUFVTXFx0XFx0NFxcbiBcXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFXFx0R0lDUl9CQVNFX0dQQVxcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0VcXHRcXFxcXFxuK1xcdChSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICsgMiAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9ESVNUX0JBU0VcXHRcXHRcXFxcXFxuK1xcdChSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICsgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpXFxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRVxcdFxcXFxcXG4rXFx0KFJFRElTVF9SRVRSWV9ESVNUX0JBU0UgKyBLVk1fVkdJQ19WM19ESVNUX1NJWkUpXFxuK1xcbiAjZGVmaW5lIFJFR19PRkZTRVQodmNwdSwgb2Zmc2V0KSAoKCh1NjQpdmNwdSBcXHUwMDNjXFx1MDAzYyAzMikgfCBvZmZzZXQpXFxuIFxcbiAjZGVmaW5lIFZHSUNfREVWX0lTX1YyKF9kKSAoKF9kKSA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjIpXFxuQEAgLTY1LDYgKzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdC8qIFRoZSBmaXJzdCB0aHJlZSByZWRpc3RyaWJ1dG9ycyBzcGFuIGFkamFjZW50IHJlZ2lvbnMgMCBhbmQgMS4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX1ZDUFVTOyBpKyspIHtcXG4rXFx0XFx0dTY0IGJhc2UgPSBpIFxcdTAwM2MgMyA/IFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgK1xcbitcXHRcXHRcXHRcXHQgICAgICAgaSAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFIDpcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0U7XFxuK1xcdFxcdHU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgKyBHSUNSX1RZUEVSKSk7XFxuK1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEoR0lDUl9UWVBFUl9DUFVfTlVNQkVSKHR5cGVyKSwgaSk7XFxuK1xcdH1cXG4rXFxuK1xcdEdVRVNUX0RPTkUoKTtcXG4rfVxcbitcXG4gLyogd2UgZG9uJ3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi9cXG4gc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG5AQCAtNzMsNiArMTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIG5yX3ZjcHVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICpndWVzdF9jb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10pXFxuIHtcXG4gXFx0c3RydWN0IHZtX2dpYyB2O1xcbkBAIC0zMzgsNyArMzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSlcXG4gXFx0c3RydWN0IHZtX2dpYyB2O1xcbiBcXHRpbnQgcmV0LCBpO1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIHZjcHVzKTtcXG4rXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcXG4gXFxuIFxcdHN1YnRlc3RfZGlzdF9yZGlzdChcXHUwMDI2dik7XFxuIFxcbkBAIC0zNTksNyArMzg3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92Y3B1c190aGVuX3ZnaWModTMyIGdpY19kZXZfdHlwZSlcXG4gXFx0c3RydWN0IHZtX2dpYyB2O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB2Y3B1cyk7XFxuIFxcbiBcXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXFx1MDAyNnYpO1xcbiBcXG5AQCAtNDExLDcgKzQ0MCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXFxuIFxcdHU2NCBhZGRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXFx1MDAyNnYpO1xcbiBcXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxcbiBcXHRcXHRcXHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xcbkBAIC00MjIsNyArNDUyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcXG4gXFxuIFxcdC8qIHN0ZXAyICovXFxuIFxcbi1cXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcXG4rXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxcbitcXHRcXHRcXHRcXHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcXG4gXFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcXHUwMDI2dik7XFxuIFxcbiBcXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpO1xcbkBAIC00MzYsNyArNDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcXG4gXFxuIFxcdC8qIHN0ZXAgMyAqL1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXFx1MDAyNnYpO1xcbiBcXG4gXFx0cmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxcbkBAIC00NTcsNiArNDg5LDcwIEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXFxuIFxcdHZtX2dpY19kZXN0cm95KFxcdTAwMjZ2KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tOUl9WQ1BVU107XFxuK1xcdHN0cnVjdCB2bV9naWMgdjtcXG4rXFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXHR1NjQgYWRkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jaGVja19yZWRpc3RfcmV0cnksIHZjcHVzKTtcXG4rXFxuK1xcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTtcXG4rXFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcXG4rXFx0XFx0XFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcXHUwMDI2YWRkcik7XFxuK1xcbitcXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSwgMCwgMSk7XFxuK1xcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXFx1MDAyNmFkZHIpO1xcbitcXG4rXFx0YWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7XFxuK1xcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgXFx1MDAyNmFkZHIpO1xcbitcXG4rXFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpO1xcbitcXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZhZGRyKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0IFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG4rXFx0XFx0ICAgIFxcXCJyZWdpc3RlciByZWRpc3QgcmVnaW9uIGNvbGxpZGluZyB3aXRoIGRpc3RcXFwiKTtcXG4rXFxuK1xcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCAwLCAyKTtcXG4rXFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcXG4rXFx0XFx0XFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcXHUwMDI2YWRkcik7XFxuK1xcbitcXHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLFxcbitcXHRcXHQgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS1cXHUwMDNlbW9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0IDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xcbitcXHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLFxcbitcXHRcXHQgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS1cXHUwMDNlbW9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XFxuK1xcbitcXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxcbitcXHRcXHRcXHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xcbitcXG4rXFx0dmNwdV9ydW4odmNwdXNbMF0pO1xcbitcXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1c1swXSwgXFx1MDAyNnVjKSkge1xcbitcXHRjYXNlIFVDQUxMX0RPTkU6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFVDQUxMX0FCT1JUOlxcbitcXHRcXHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgVUNBTExfTk9ORTpcXG4rXFx0XFx0aWYgKHZjcHVzWzBdLVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pXFxuK1xcdFxcdFxcdFRFU1RfRkFJTChcXFwiVW5leHBlY3RlZCBNTUlPIGV4aXQgYXQgMHglbGx4XFxcIixcXG4rXFx0XFx0XFx0XFx0ICB2Y3B1c1swXS1cXHUwMDNlcnVuLVxcdTAwM2VtbWlvLnBoeXNfYWRkcik7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRURVNUX0ZBSUwoXFxcIlVuZXhwZWN0ZWQgdWNhbGwgJWx1LCBleGl0X3JlYXNvbiAldVxcXCIsXFxuK1xcdFxcdFxcdCAgdWMuY21kLCB2Y3B1c1swXS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbik7XFxuK1xcdH1cXG4rXFxuK1xcdHZtX2dpY19kZXN0cm95KFxcdTAwMjZ2KTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB2bV9naWMgdjtcXG5AQCAtNjA4LDcgKzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKVxcbiBcXHRpbnQgcmV0LCBpO1xcbiBcXHR1NjQgYWRkcjtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCBndWVzdF9jb2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIHZjcHVzKTtcXG4gXFxuIFxcdC8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi9cXG4gXFx0YWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTtcXG5AQCAtNjQxLDcgKzczOCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfaXRzX3JlZ2lvbih2b2lkKVxcbiBcXHR1NjQgYWRkcjtcXG4gXFx0aW50IGl0c19mZCwgcmV0O1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdGl0c19mZCA9IGt2bV9jcmVhdGVfZGV2aWNlKHYudm0sIEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19JVFMpO1xcbiBcXG4gXFx0YWRkciA9IDB4NDAxMDAwO1xcbkBAIC02ODQsNyArNzgyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uYXNzZ2ljYXAodm9pZClcXG4gXFx0dTMyIHR5cGVyMjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcXG4rXFx0dm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLFxcbiBcXHRcXHRcXHQgICAgR0lDRF9UWVBFUjIsIFxcdTAwMjZ0eXBlcjIpO1xcbiBcXHRoYXNfbmFzc2dpY2FwID0gdHlwZXIyIFxcdTAwMjYgR0lDRF9UWVBFUjJfbkFTU0dJY2FwO1xcbkBAIC05NzgsNiArMTA3Nyw3IEBAIHZvaWQgcnVuX3Rlc3RzKHUzMiBnaWNfZGV2X3R5cGUpXFxuIFxcbiBcXHRpZiAoVkdJQ19ERVZfSVNfVjMoZ2ljX2Rldl90eXBlKSkge1xcbiBcXHRcXHR0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucygpO1xcbitcXHRcXHR0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTtcXG4gXFx0XFx0dGVzdF92M190eXBlcl9hY2Nlc3NlcygpO1xcbiBcXHRcXHR0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7XFxuIFxcdFxcdHRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIwOjI5LjY4MTA3NjE3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3NDgzOTc3ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlXCIsXG4gICAgXCJ2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwidmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwiX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldlwiLFxuICAgIFwia3ZtX3ZnaWNfdmNwdV9kZXN0cm95XCIsXG4gICAgXCJrdm1fdmdpY19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciByZWdpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGFuZCByb2xsYmFjayBsb2dpYyBkdXJpbmcgdkNQVSBjcmVhdGlvbiBhbmQgcmVkaXN0cmlidXRvciBiYXNlIGFkZHJlc3MgYXNzaWdubWVudC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfREVWSUNFX0FUVFIpIGFuZCBhZmZlY3RzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlNmI0NzFlMjVhZmFkM2QwZmE5ZDdjZDEyYTUxYzkxODdkZTBkZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMDoyMDoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jXG5pbmRleCA5MDcwNTc4ODFiMjZhLi44MWFiNWE2YmY4YmM4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xuQEAgLTUxOSwyOSArNTE5LDYgQEAgc3RhdGljIHZvaWQgX19rdm1fdmdpY192Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dmdpY19jcHUtXHUwMDNlYXBfbGlzdF9oZWFkKTtcbiBcdGtmcmVlKHZnaWNfY3B1LVx1MDAzZXByaXZhdGVfaXJxcyk7XG4gXHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBOVUxMO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0aGlzIHZDUFUgaXMgYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgYSBmYWlsZWQgY3JlYXRpb25cbi1cdFx0ICogdGhlbiB1bnJlZ2lzdGVyIHRoZSByZWRpc3RyaWJ1dG9yIHRvIGF2b2lkIGxlYXZpbmcgYmVoaW5kIGFcbi1cdFx0ICogZGFuZ2xpbmcgcG9pbnRlciB0byB0aGUgdkNQVSBzdHJ1Y3QuXG4tXHRcdCAqXG4tXHRcdCAqIHZDUFVzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChpLmUuIGFkZGVkIHRvXG4tXHRcdCAqIGt2bS1cdTAwM2V2Y3B1X2FycmF5KSBnZXQgdW5yZWdpc3RlcmVkIGluIGt2bV92Z2ljX2Rlc3Ryb3koKSwgYXNcbi1cdFx0ICogdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGlsZSBob2xkaW5nIGt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrXG4tXHRcdCAqIGluIHRoZSBWTSB0ZWFyZG93biBwYXRoIGFuZCB3b3VsZCBvdGhlcndpc2UgaW50cm9kdWNlIGEgbG9ja1xuLVx0XHQgKiBpbnZlcnNpb24gdy5yLnQuIGt2bS1cdTAwM2VzcmN1LlxuLVx0XHQgKlxuLVx0XHQgKiB2Q1BVcyB0aGF0IGZhaWxlZCBjcmVhdGlvbiBhcmUgdG9ybiBkb3duIG91dHNpZGUgb2YgdGhlXG4tXHRcdCAqIGt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrIGFuZCBkbyBub3QgZ2V0IHVucmVnaXN0ZXJlZCBpblxuLVx0XHQgKiBrdm1fdmdpY19kZXN0cm95KCksIG1lYW5pbmcgaXQgaXMgYm90aCBzYWZlIGFuZCBuZWNlc3NhcnkgdG9cbi1cdFx0ICogZG8gc28gaGVyZS5cbi1cdFx0ICovXG4tXHRcdGlmIChrdm1fZ2V0X3ZjcHVfYnlfaWQodmNwdS1cdTAwM2Vrdm0sIHZjcHUtXHUwMDNldmNwdV9pZCkgIT0gdmNwdSlcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuLVxuLVx0XHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4tXHR9XG4gfVxuIFxuIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01NDksNyArNTI2LDE2IEBAIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRpZiAoa3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMylcbitcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcbiBcdF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuK1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXHRcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIH1cbiBcbkBAIC01NTksMjEgKzU0NSwyMyBAQCB2b2lkIGt2bV92Z2ljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRpZiAoa3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMylcbitcdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuK1x0XHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdHZnaWNfZGVidWdfZGVzdHJveShrdm0pO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuK1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XG4gXHRcdF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMylcbitcdFx0XHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1x0fVxuIFxuIFx0a3ZtX3ZnaWNfZGlzdF9kZXN0cm95KGt2bSk7XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVxuLVx0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXG4tXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuLVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmNcbmluZGV4IDkwYmU5OTQ0M2RmM2IuLjQ4YzNiMmE0OGMyMDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXG5AQCAtOTcsNiArOTcsOSBAQCBzdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaVxuIFx0cGh5c19hZGRyX3QgKmFkZHJfcHRyLCBhbGlnbm1lbnQsIHNpemU7XG4gXHR1NjQgdW5kZWZfdmFsdWUgPSBWR0lDX0FERFJfVU5ERUY7XG4gXHR1NjQgYWRkcjtcbitcdGJvb2wgcmVkaXN0X3dyaXRlID0gd3JpdGUgXHUwMDI2XHUwMDI2XG4rXHRcdChhdHRyLVx1MDAzZWF0dHIgPT0gS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVCB8fFxuK1x0XHQgYXR0ci1cdTAwM2VhdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OKTtcbiBcdGludCByO1xuIFxuIFx0LyogUmVhZGluZyBhIHJlZGlzdHJpYnV0b3IgcmVnaW9uIGFkZHIgaW1wbGllcyBnZXR0aW5nIHRoZSBpbmRleCAqL1xuQEAgLTEwNCw2ICsxMDcsMTkgQEAgc3RhdGljIGludCBrdm1fdmdpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0ciwgYm9vbCB3cmlcbiBcdFx0aWYgKGdldF91c2VyKGFkZHIsIHVhZGRyKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbitcdC8qXG4rXHQgKiBBIHZDUFUgY2FuIGhhdmUgYW4gUkQgYXNzaWdubWVudCBiZWZvcmUgaXQgaXMgdmlzaWJsZSB0b1xuK1x0ICoga3ZtX2Zvcl9lYWNoX3ZjcHUoKS4gUmVqZWN0IHJlZGlzdHJpYnV0b3IgdXBkYXRlcyB3aGlsZSB2Q1BVIGNyZWF0aW9uXG4rXHQgKiBpcyBpbiBwcm9ncmVzcywgc28gcm9sbGJhY2sgY2FuIHJlc2V0IGV2ZXJ5IGFzc2lnbm1lbnQuXG4rXHQgKi9cbitcdGlmIChyZWRpc3Rfd3JpdGUpIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4rXHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cyAhPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKSkge1xuK1x0XHRcdHIgPSAtRUJVU1k7XG4rXHRcdFx0Z290byBvdXRfdW5sb2NrX2t2bTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFNpbmNlIHdlIGNhbid0IGhvbGQgY29uZmlnX2xvY2sgd2hpbGUgcmVnaXN0ZXJpbmcgdGhlIHJlZGlzdHJpYnV0b3JcbiBcdCAqIGlvZGV2cywgdGFrZSB0aGUgc2xvdHNfbG9jayBpbW1lZGlhdGVseS5cbkBAIC0yMDEsNiArMjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbitvdXRfdW5sb2NrX2t2bTpcbitcdGlmIChyZWRpc3Rfd3JpdGUpXG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4rXG4gXHRpZiAoIXIgXHUwMDI2XHUwMDI2ICF3cml0ZSlcbiBcdFx0ciA9ICBwdXRfdXNlcihhZGRyLCB1YWRkcik7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbmluZGV4IDU5MTNhMjBkODMwMTkuLmRjODYwMTc4MTA1ZDkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG5AQCAtNzY2LDYgKzc2NiwxOCBAQCB1bnNpZ25lZCBpbnQgdmdpY192M19pbml0X2Rpc3RfaW9kZXYoc3RydWN0IHZnaWNfaW9fZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gU1pfNjRLO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1xuK1x0dmdpY19jcHUtXHUwMDNlcmRyZWctXHUwMDNlZnJlZV9pbmRleC0tO1xuK1x0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbit9XG4rXG4gLyoqXG4gICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXZcbiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25nc1xuQEAgLTgxOCwxNiArODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZF9kZXYtXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xuIFx0cmRfZGV2LVx1MDAzZXJlZGlzdF92Y3B1ID0gdmNwdTtcbiBcbitcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXG4rXHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4Kys7XG4rXG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0cmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fTU1JT19CVVMsIHJkX2Jhc2UsXG4gXHRcdFx0XHQgICAgICAyICogU1pfNjRLLCBcdTAwMjZyZF9kZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudCh2Y3B1KTtcbiBcbi1cdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXG4tXHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4Kys7XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiByZXQ7XG4gXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG5AQCAtODQxLDYgKzg1NCw0MCBAQCB2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LVx1MDAzZWt2bSwgS1ZNX01NSU9fQlVTLCBcdTAwMjZyZF9kZXYtXHUwMDNlZGV2KTtcbiB9XG4gXG4rdm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbitcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxuK3tcbitcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnLCAqaXRlcjtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHVuc2lnbmVkIGxvbmcgYztcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1xuK1x0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuK1xuK1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKVxuK1x0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSlcbitcdFx0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXHUwMDI2a3ZtLVx1MDAzZWFyY2gudmdpYy5yZF9yZWdpb25zLCBsaXN0KVxuK1x0XHRpdGVyLVx1MDAzZWZyZWVfaW5kZXggPSAwO1xuK1xuK1x0dmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuQEAgLTg1NSwxNiArOTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChyZXQpIHtcbi1cdFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cbi1cdFx0aW50IGk7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGM7IGkrKykge1xuLVx0XHRcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC05NTMsMTcgKzk5MCw4IEBAIHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXG4gXG4gdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHVuc2lnbmVkIGxvbmcgYztcbi1cbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuLVx0LyogR2FyYmFnZSBjb2xsZWN0IHRoZSByZWdpb24gKi9cbi1cdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xuLVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKVxuLVx0XHRcdHZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZHJlZyA9IE5VTEw7XG4tXHR9XG4tXG4gXHRsaXN0X2RlbChcdTAwMjZyZHJlZy1cdTAwM2VsaXN0KTtcbiBcdGtmcmVlKHJkcmVnKTtcbiB9XG5AQCAtOTcyLDYgKzEwMDAsOCBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXG4ge1xuIFx0aW50IHJldDtcbiBcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRyZXQgPSB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oa3ZtLCBpbmRleCwgYWRkciwgY291bnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbkBAIC05ODQsMTIgKzEwMTQsNyBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXG4gXHQgKi9cbiBcdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XG4tXG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVx0XHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XG4tXHRcdHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0XHR2Z2ljX3YzX3JvbGxiYWNrX3JlZGlzdF9yZWdpb24oa3ZtLCBpbmRleCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmggYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxuaW5kZXggZjQ1ZjdlM2VjNGQ2ZS4uZTMyZTJiNTZhNDdlZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxuQEAgLTMzMyw2ICszMzMsNyBAQCBpbnQgdmdpY192M19zYXZlX3BlbmRpbmdfdGFibGVzKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcbiBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbit2b2lkIF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pO1xuIFxuIHZvaWQgdmdpY192M19sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5pbmRleCA0N2UzNGI0M2FmYjI5Li41YTMwZjNjYjAzOWJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbkBAIC01LDYgKzUsNyBAQFxuICAqIENvcHlyaWdodCAoQykgMjAyMCwgUmVkIEhhdCwgSW5jLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BhcmEuaFx1MDAzZVxuQEAgLTEzLDEyICsxNCwyMSBAQFxuIFxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJnaWMuaFwiXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4gI2luY2x1ZGUgXCJ2Z2ljLmhcIlxuICNpbmNsdWRlIFwiZ2ljX3YzLmhcIlxuIFxuICNkZWZpbmUgTlJfVkNQVVNcdFx0NFxuIFxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRVx0R0lDUl9CQVNFX0dQQVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRVx0XFxcbitcdChSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICsgMiAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX0RJU1RfQkFTRVx0XHRcXFxuK1x0KFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UgKyBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0VcdFxcXG4rXHQoUkVESVNUX1JFVFJZX0RJU1RfQkFTRSArIEtWTV9WR0lDX1YzX0RJU1RfU0laRSlcbitcbiAjZGVmaW5lIFJFR19PRkZTRVQodmNwdSwgb2Zmc2V0KSAoKCh1NjQpdmNwdSBcdTAwM2NcdTAwM2MgMzIpIHwgb2Zmc2V0KVxuIFxuICNkZWZpbmUgVkdJQ19ERVZfSVNfVjIoX2QpICgoX2QpID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMilcbkBAIC02NSw2ICs3NSwyMyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0LyogVGhlIGZpcnN0IHRocmVlIHJlZGlzdHJpYnV0b3JzIHNwYW4gYWRqYWNlbnQgcmVnaW9ucyAwIGFuZCAxLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfVkNQVVM7IGkrKykge1xuK1x0XHR1NjQgYmFzZSA9IGkgXHUwMDNjIDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICtcbitcdFx0XHRcdCAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOlxuK1x0XHRcdFx0ICAgICAgIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0U7XG4rXHRcdHU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgKyBHSUNSX1RZUEVSKSk7XG4rXG4rXHRcdEdVRVNUX0FTU0VSVF9FUShHSUNSX1RZUEVSX0NQVV9OVU1CRVIodHlwZXIpLCBpKTtcbitcdH1cbitcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4gLyogd2UgZG9uJ3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi9cbiBzdGF0aWMgaW50IHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG5AQCAtNzMsNiArMTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHN0cnVjdCB2bV9naWMgdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHUzMiBucl92Y3B1cyxcbitcdFx0XHRcdFx0ICAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC0zMzgsNyArMzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQsIGk7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgMSwgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC0zNTksNyArMzg3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92Y3B1c190aGVuX3ZnaWModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSxcbitcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0c3VidGVzdF9kaXN0X3JkaXN0KFx1MDAyNnYpO1xuIFxuQEAgLTQxMSw3ICs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuIFx0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG5AQCAtNDIyLDcgKzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXG4gXHQvKiBzdGVwMiAqL1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpO1xuQEAgLTQzNiw3ICs0NjcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFxuIFx0Lyogc3RlcCAzICovXG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcbiBcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbkBAIC00NTcsNiArNDg5LDcwIEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tOUl9WQ1BVU107XG4rXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXHR1NjQgYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSwgdmNwdXMpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDIsIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsIDAsIDApO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgXHUwMDI2YWRkcik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX0RJU1RfQkFTRSwgMCwgMik7XG4rXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sXG4rXHRcdFx0XHQgICAgXHUwMDI2YWRkcik7XG4rXHRURVNUX0FTU0VSVChyZXQgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbitcdFx0ICAgIFwicmVnaXN0ZXIgcmVkaXN0IHJlZ2lvbiBjb2xsaWRpbmcgd2l0aCBkaXN0XCIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSxcbitcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbitcdFx0XHRcdFx0IDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xuK1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSxcbitcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbitcdFx0XHRcdFx0IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XG4rXG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuK1x0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG4rXG4rXHR2Y3B1X3J1bih2Y3B1c1swXSk7XG4rXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1c1swXSwgXHUwMDI2dWMpKSB7XG4rXHRjYXNlIFVDQUxMX0RPTkU6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbitcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9OT05FOlxuK1x0XHRpZiAodmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pXG4rXHRcdFx0VEVTVF9GQUlMKFwiVW5leHBlY3RlZCBNTUlPIGV4aXQgYXQgMHglbGx4XCIsXG4rXHRcdFx0XHQgIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VtbWlvLnBoeXNfYWRkcik7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0ZGVmYXVsdDpcbitcdFx0VEVTVF9GQUlMKFwiVW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1XCIsXG4rXHRcdFx0ICB1Yy5jbWQsIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbik7XG4rXHR9XG4rXG4rXHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC02MDgsNyArNzA0LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfaXBhX3JhbmdlX2NoZWNrX2F0X3ZjcHVfcnVuKHZvaWQpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGFkZHI7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIDEsIGd1ZXN0X2NvZGUsXG4rXHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdC8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi9cbiBcdGFkZHIgPSBtYXhfcGh5c19zaXplIC0gKDMgKiAyICogMHgxMDAwMCk7XG5AQCAtNjQxLDcgKzczOCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfaXRzX3JlZ2lvbih2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgaXRzX2ZkLCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0aXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7XG4gXG4gXHRhZGRyID0gMHg0MDEwMDA7XG5AQCAtNjg0LDcgKzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpXG4gXHR1MzIgdHlwZXIyO1xuIFx0aW50IHJldDtcbiBcbi1cdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLFxuIFx0XHRcdCAgICBHSUNEX1RZUEVSMiwgXHUwMDI2dHlwZXIyKTtcbiBcdGhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgXHUwMDI2IEdJQ0RfVFlQRVIyX25BU1NHSWNhcDtcbkBAIC05NzgsNiArMTA3Nyw3IEBAIHZvaWQgcnVuX3Rlc3RzKHUzMiBnaWNfZGV2X3R5cGUpXG4gXG4gXHRpZiAoVkdJQ19ERVZfSVNfVjMoZ2ljX2Rldl90eXBlKSkge1xuIFx0XHR0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucygpO1xuK1x0XHR0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTtcbiBcdFx0dGVzdF92M190eXBlcl9hY2Nlc3NlcygpO1xuIFx0XHR0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7XG4gXHRcdHRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDoyMDoyOS42ODEwNzc5NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ4OTU1MjIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogS1ZNIEFSTTY0IFZHSUN2MyBSZWRpc3RyaWJ1dG9yIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBBUk02NCBLVk0gVkdJQyBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCdzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBsaWtlIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBmb3IgVkdJQyB2My4gU2luY2Ugd2UgKmNhbiogZnV6eiBLVk0gQVJNNjQg4oCTIHdlJ3ZlIGdvdCB0b29scyBsaWtlIHN5emthbGxlciB0aGF0IHdvcmsgb24gaXQg4oCTIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgbnVtYmVyIG9mIGZpbGVzOiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY2AsIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jYCwgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgLCBhbmQgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oYC4gVGhpcyBnaXZlcyBhIHN0cm9uZyBjbHVlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIGxvZ2ljLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlc2UgY2hhbmdlcyBhcmUgbW9kaWZ5aW5nIGhvdyByZWRpc3RyaWJ1dG9yIGlvZGV2cyBhcmUgcmVnaXN0ZXJlZCwgdW5yZWdpc3RlcmVkLCBhbmQgaG93IHJlZGlzdHJpYnV0b3IgYXNzaWdubWVudHMgYXJlIGhhbmRsZWQsIGluY2x1ZGluZyByb2xsYmFja3MgYW5kIHVuZG8gb3BlcmF0aW9ucy4gSSBzZWUgZnVuY3Rpb25zIGxpa2UgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYW5kIGB2Z2ljX3YzX3JvbGxiYWNrX3JlZGlzdF9yZWdpb25gIGFkZGVkLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIGNvbXBsZXggc3RhdGUgbWFuYWdlbWVudC4gVGhlcmUncyBhbHNvIGEgY2hlY2sgaW4gYGt2bV92Z2ljX2FkZHJgIHRoYXQgcmVzdHJpY3RzIHJlZGlzdHJpYnV0b3IgdXBkYXRlcyBkdXJpbmcgdkNQVSBjcmVhdGlvbi4gU28sIHRoZXJlIGlzIHN0YXRlIHRyYWNraW5nLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBmb3IgZnV6emluZy4gQWZ0ZXIgZ29pbmcgdGhyb3VnaCB0aGUgY29kZSwgSSBhbSBsb29raW5nIGF0OlxuXG4qICAgYGt2bV92Z2ljX3ZjcHVfZGVzdHJveWAgLSBnbG9iYWxcbiogICBga3ZtX3ZnaWNfZGVzdHJveWAgLSBnbG9iYWxcbiogICBga3ZtX3ZnaWNfYWRkcmAgLSBzdGF0aWMsIGJ1dCBsaWtlbHkgd2UgY2FuIHRyaWdnZXIgdmlhIGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAgb3IgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YFxuKiAgIGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAgLSBnbG9iYWxcbiogICBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgIC0gZ2xvYmFsXG4qICAgYHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgIC0gZ2xvYmFsXG4qICAgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgIC0gZ2xvYmFsXG5cbkkgY2FuIGNvbmZpcm0gdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyB0aGUgYENPTkZJR19LVk1gIEtjb25maWcgb3B0aW9uLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgdGhpcyBpcyBhIGRlZmluaXRlIGZ1enppbmcgdGFyZ2V0LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZXhwb3NlZCBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gdmlhIGlvY3Rscy4gSSB3aWxsIG5vdyBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIHN5emthbGxlciB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDg3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MjE6NDAuMTcwNjMzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkwMzcwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmdpY192M19zZXRfcmVkaXN0X2Jhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYz05Mz1zdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaXRlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xNTMtXFx0XFx0aWYgKHdyaXRlKSB7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYzoxNTQ6XFx0XFx0XFx0ciA9IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKGt2bSwgMCwgYWRkciwgMCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xNTUtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTE4My1cXHRcXHRcXHRlbHNlXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYzoxODQ6XFx0XFx0XFx0XFx0ciA9IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKGt2bSwgaW5kZXgsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xODUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJhc2UsIGNvdW50KTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9OTkxPXZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTk4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTk5OmludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDAte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmg9MzMyPWludCB2Z2ljX3YzX3NhdmVfcGVuZGluZ190YWJsZXMoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozMzM6aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaC0zMzQtaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjQwLjYyOTY3OTUzN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDQyODY3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgVmdpYyBDbGVhbnVwIGluIHRoZSBLVk0vQVJNNjQgQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGNsZWFuaW5nIHVwIHRoZSBWaXJ0dWFsIEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgKHZHSUMpIGNvZGUsIHNwZWNpZmljYWxseSBvbiBBUk02NCB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSd2ZSBnb3QgYSBmZXcgZnVuY3Rpb25zIHRoYXQgaW1tZWRpYXRlbHkganVtcCBvdXQgYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIGV4YW1pbmF0aW9uOiBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLCBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYGt2bV92Z2ljX3ZjcHVfZGVzdHJveWAsIGFuZCBga3ZtX3ZnaWNfZGVzdHJveWAuIFRoZXNlIGFsbCBzZWVtIGludGltYXRlbHkgaW52b2x2ZWQgaW4gdGhlIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHRoZSB2R0lDIHJlZGlzdHJpYnV0b3IgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBTZWVtcyBsaWtlIGEgc29saWQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEJlZm9yZSBJIGRpdmUgaW50byBlYWNoIGZ1bmN0aW9uIGluZGl2aWR1YWxseSB0aG91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIEtWTSBzdXBwb3J0IG9uIEFSTTY0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmdWxseSBhd2FyZSBvZiBob3cgS1ZNIGlzIGNvbmZpZ3VyZWQsIHRoZSBidWlsZCBmbGFncywgYW5kIGFueSBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBoZWxwIG1lIGF2b2lkIGFueSBwb3RlbnRpYWwgbWlzc3RlcHMgb3Igb3Zlcmxvb2tpbmcgY3JpdGljYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjQ2LjA3Mzk2ODg5NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkzNjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDoyMTo0Ni4xMjA5MTQ3NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE5NTA2NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBLVk1gLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIE5vdywgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb25maWd1cmF0aW9uLiBNeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIHBsYXRmb3JtIHNwZWNpZmljcy4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtWTSBjb25maWd1cmF0aW9uIGZvciB0aGUgaW5jbHVzaW9uIG9mIGBWR0lDdjNgIGRldGFpbHMuIEkgYW0gZ29pbmcgdG8gc2VlIHdoYXQgc29ydCBvZiBzcGVjaWZpYyB0dW5pbmdzIHdlIGhhdmUgaW4gcGxhY2UgdGhlcmUuIElzIHRoZXJlIGEgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gYmxvY2sgZm9yIFZHSUN2Mywgb3IgYXJlIHRoZSBzZXR0aW5ncyBpbXBsaWVkIHRocm91Z2ggc29tZSBicm9hZGVyIHNldHRpbmdzPyBJdOKAmXMgY3J1Y2lhbCB0byBrbm93IGlmIHdlIGhhdmUgZXhwbGljaXQgY29udHJvbCBvciBpZiB3ZSdyZSBpbmhlcml0aW5nIGRlZmF1bHRzLiBFaXRoZXIgd2F5LCBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgb3VyIHNldHVwIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjQ5Ljc0MDQyMzQ5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYyMTE4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipWR0lDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjQ5Ljc4NzA1NjMxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyOTcxMTMxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIEFSTTY0IFZHSUN2MyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYW55dGhpbmcgZXhvdGljOyBpdCdzIGp1c3QgZGVhbGluZyB3aXRoIGBLVk1gLiBMZXQgbWUgbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcuIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIGBGb2N1c1N5bWJvbHNgLCBsZXQncyBkb3VibGUgY2hlY2sgdGhvc2U6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBga3ZtX3ZnaWNfdmNwdV9kZXN0cm95YCwgYW5kIGBrdm1fdmdpY19kZXN0cm95YC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgZ2xvYmFsIEFQSSBlbnRyeXBvaW50cywgbm90IHN0YXRpYyBvciBpbmxpbmVkLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFib3V0IGhvdyB0aGUgS1ZNIEFSTTY0IFZHSUN2MyBoYW5kbGVzIHRoZSByZWRpc3RyaWJ1dG9yIHJlZ2lvbi4gSXTigJlzIGFib3V0IGZpeGluZyByYWNlcyBhbmQgcm9sbGJhY2sgaXNzdWVzIHRoYXQgcG9wIHVwIHdoZW4gd2UncmUgY3JlYXRpbmcgdkNQVXMgYW5kIGFzc2lnbmluZyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZWRpc3RyaWJ1dG9yLiBUaGlzIG1lYW5zIHVzZXJzcGFjZSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggdGhvc2UgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RscyDigJMgc28sIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQuXG5cbkp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIGBrdm1fdmdpY19hZGRyYC4gQWhhLCB5ZXMsIGl0J3Mgc3RhdGljIGluIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jYC4gQnV0IGl0J3MgYWxyaWdodCwgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCBpcyBnbG9iYWwgYW5kIGNhbGxlZCBmcm9tIGl0LCBzbyBpdCdzIGFsbCBtYWtpbmcgc2Vuc2UuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXM7IEknbGwgcmVjb3JkIG15IGZpbmRpbmdzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMzEsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjU3LjA4NDE3MzA3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODc3MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZVwiLFxuICAgIFwidmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcInZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcIl9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZcIixcbiAgICBcImt2bV92Z2ljX3ZjcHVfZGVzdHJveVwiLFxuICAgIFwia3ZtX3ZnaWNfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgcm9sbGJhY2sgbG9naWMgZHVyaW5nIHZDUFUgY3JlYXRpb24gYW5kIHJlZGlzdHJpYnV0b3IgYmFzZSBhZGRyZXNzIGFzc2lnbm1lbnQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fU0VUX0RFVklDRV9BVFRSKSBhbmQgYWZmZWN0cyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IG9uIEFSTTY0LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlXCIsXG4gICAgXCJ2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwidmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwiX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldlwiLFxuICAgIFwia3ZtX3ZnaWNfdmNwdV9kZXN0cm95XCIsXG4gICAgXCJrdm1fdmdpY19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciByZWdpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGFuZCByb2xsYmFjayBsb2dpYyBkdXJpbmcgdkNQVSBjcmVhdGlvbiBhbmQgcmVkaXN0cmlidXRvciBiYXNlIGFkZHJlc3MgYXNzaWdubWVudC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfREVWSUNFX0FUVFIpIGFuZCBhZmZlY3RzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjU3LjE2NTA1OTMwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDk4MTcyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDoyMTo1Ny4xNjU1ODUyNjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTczNDkyODc3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTZiNDcxZTI1YWZhZDNkMGZhOWQ3Y2QxMmE1MWM5MTg3ZGUwZGZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTA6MjA6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xuaW5kZXggOTA3MDU3ODgxYjI2YS4uODFhYjVhNmJmOGJjOCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmNcbkBAIC01MTksMjkgKzUxOSw2IEBAIHN0YXRpYyB2b2lkIF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZnaWNfY3B1LVx1MDAzZWFwX2xpc3RfaGVhZCk7XG4gXHRrZnJlZSh2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMpO1xuIFx0dmdpY19jcHUtXHUwMDNlcHJpdmF0ZV9pcnFzID0gTlVMTDtcbi1cbi1cdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpIHtcbi1cdFx0Lypcbi1cdFx0ICogSWYgdGhpcyB2Q1BVIGlzIGJlaW5nIGRlc3Ryb3llZCBiZWNhdXNlIG9mIGEgZmFpbGVkIGNyZWF0aW9uXG4tXHRcdCAqIHRoZW4gdW5yZWdpc3RlciB0aGUgcmVkaXN0cmlidXRvciB0byBhdm9pZCBsZWF2aW5nIGJlaGluZCBhXG4tXHRcdCAqIGRhbmdsaW5nIHBvaW50ZXIgdG8gdGhlIHZDUFUgc3RydWN0LlxuLVx0XHQgKlxuLVx0XHQgKiB2Q1BVcyB0aGF0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZCAoaS5lLiBhZGRlZCB0b1xuLVx0XHQgKiBrdm0tXHUwMDNldmNwdV9hcnJheSkgZ2V0IHVucmVnaXN0ZXJlZCBpbiBrdm1fdmdpY19kZXN0cm95KCksIGFzXG4tXHRcdCAqIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hpbGUgaG9sZGluZyBrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9ja1xuLVx0XHQgKiBpbiB0aGUgVk0gdGVhcmRvd24gcGF0aCBhbmQgd291bGQgb3RoZXJ3aXNlIGludHJvZHVjZSBhIGxvY2tcbi1cdFx0ICogaW52ZXJzaW9uIHcuci50LiBrdm0tXHUwMDNlc3JjdS5cbi1cdFx0ICpcbi1cdFx0ICogdkNQVXMgdGhhdCBmYWlsZWQgY3JlYXRpb24gYXJlIHRvcm4gZG93biBvdXRzaWRlIG9mIHRoZVxuLVx0XHQgKiBrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayBhbmQgZG8gbm90IGdldCB1bnJlZ2lzdGVyZWQgaW5cbi1cdFx0ICoga3ZtX3ZnaWNfZGVzdHJveSgpLCBtZWFuaW5nIGl0IGlzIGJvdGggc2FmZSBhbmQgbmVjZXNzYXJ5IHRvXG4tXHRcdCAqIGRvIHNvIGhlcmUuXG4tXHRcdCAqL1xuLVx0XHRpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKHZjcHUtXHUwMDNla3ZtLCB2Y3B1LVx1MDAzZXZjcHVfaWQpICE9IHZjcHUpXG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbi1cbi1cdFx0dmdpY19jcHUtXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xuLVx0fVxuIH1cbiBcbiB2b2lkIGt2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNTQ5LDcgKzUyNiwxNiBAQCB2b2lkIGt2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXG4rXHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rXG4gXHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcbitcbitcdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0XHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiB9XG4gXG5AQCAtNTU5LDIxICs1NDUsMjMgQEAgdm9pZCBrdm1fdmdpY19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXG4rXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbitcdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHR2Z2ljX2RlYnVnX2Rlc3Ryb3koa3ZtKTtcbiBcbi1cdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuIFx0XHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcbitcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXG4rXHRcdFx0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcdH1cbiBcbiBcdGt2bV92Z2ljX2Rpc3RfZGVzdHJveShrdm0pO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cbi1cdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxuLVx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbi1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXG5pbmRleCA5MGJlOTk0NDNkZjNiLi40OGMzYjJhNDhjMjAyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xuQEAgLTk3LDYgKzk3LDkgQEAgc3RhdGljIGludCBrdm1fdmdpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0ciwgYm9vbCB3cmlcbiBcdHBoeXNfYWRkcl90ICphZGRyX3B0ciwgYWxpZ25tZW50LCBzaXplO1xuIFx0dTY0IHVuZGVmX3ZhbHVlID0gVkdJQ19BRERSX1VOREVGO1xuIFx0dTY0IGFkZHI7XG4rXHRib29sIHJlZGlzdF93cml0ZSA9IHdyaXRlIFx1MDAyNlx1MDAyNlxuK1x0XHQoYXR0ci1cdTAwM2VhdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHxcbitcdFx0IGF0dHItXHUwMDNlYXR0ciA9PSBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTik7XG4gXHRpbnQgcjtcbiBcbiBcdC8qIFJlYWRpbmcgYSByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBhZGRyIGltcGxpZXMgZ2V0dGluZyB0aGUgaW5kZXggKi9cbkBAIC0xMDQsNiArMTA3LDE5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXG4gXHRcdGlmIChnZXRfdXNlcihhZGRyLCB1YWRkcikpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4rXHQvKlxuK1x0ICogQSB2Q1BVIGNhbiBoYXZlIGFuIFJEIGFzc2lnbm1lbnQgYmVmb3JlIGl0IGlzIHZpc2libGUgdG9cbitcdCAqIGt2bV9mb3JfZWFjaF92Y3B1KCkuIFJlamVjdCByZWRpc3RyaWJ1dG9yIHVwZGF0ZXMgd2hpbGUgdkNQVSBjcmVhdGlvblxuK1x0ICogaXMgaW4gcHJvZ3Jlc3MsIHNvIHJvbGxiYWNrIGNhbiByZXNldCBldmVyeSBhc3NpZ25tZW50LlxuK1x0ICovXG4rXHRpZiAocmVkaXN0X3dyaXRlKSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMgIT0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cykpIHtcbitcdFx0XHRyID0gLUVCVVNZO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9ja19rdm07XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qXG4gXHQgKiBTaW5jZSB3ZSBjYW4ndCBob2xkIGNvbmZpZ19sb2NrIHdoaWxlIHJlZ2lzdGVyaW5nIHRoZSByZWRpc3RyaWJ1dG9yXG4gXHQgKiBpb2RldnMsIHRha2UgdGhlIHNsb3RzX2xvY2sgaW1tZWRpYXRlbHkuXG5AQCAtMjAxLDYgKzIxNywxMCBAQCBzdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaVxuIG91dDpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4rb3V0X3VubG9ja19rdm06XG4rXHRpZiAocmVkaXN0X3dyaXRlKVxuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1xuIFx0aWYgKCFyIFx1MDAyNlx1MDAyNiAhd3JpdGUpXG4gXHRcdHIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG5pbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuQEAgLTc2Niw2ICs3NjYsMTggQEAgdW5zaWduZWQgaW50IHZnaWNfdjNfaW5pdF9kaXN0X2lvZGV2KHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIFNaXzY0SztcbiB9XG4gXG4rc3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdHZnaWNfY3B1LVx1MDAzZXJkcmVnLVx1MDAzZWZyZWVfaW5kZXgtLTtcbitcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rfVxuK1xuIC8qKlxuICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XG4gICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcbkBAIC04MTgsMTYgKzgzMCwxNyBAQCBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmRfZGV2LVx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTtcbiBcdHJkX2Rldi1cdTAwM2VyZWRpc3RfdmNwdSA9IHZjcHU7XG4gXG4rXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuK1x0cmRyZWctXHUwMDNlZnJlZV9pbmRleCsrO1xuK1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxuIFx0XHRcdFx0ICAgICAgMiAqIFNaXzY0SywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XG4gXG4tXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuLVx0cmRyZWctXHUwMDNlZnJlZV9pbmRleCsrO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuQEAgLTg0MSw2ICs4NTQsNDAgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gfVxuIFxuK3ZvaWQgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4rXHR2Z2ljX2NwdS1cdTAwM2VyZHJlZyA9IE5VTEw7XG4rXHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleClcbit7XG4rXHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZywgKml0ZXI7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1bnNpZ25lZCBsb25nIGM7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcbitcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSlcbitcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4rXHRrdm1fZm9yX2VhY2hfdmNwdShjLCB2Y3B1LCBrdm0pXG4rXHRcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZnaWMucmRfcmVnaW9ucywgbGlzdClcbitcdFx0aXRlci1cdTAwM2VmcmVlX2luZGV4ID0gMDtcbitcbitcdHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpO1xuK31cbitcbiBzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbkBAIC04NTUsMTYgKzkwMiw2IEBAIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAocmV0KSB7XG4tXHRcdC8qIFRoZSBjdXJyZW50IGMgZmFpbGVkLCBzbyBpdGVyYXRlIG92ZXIgdGhlIHByZXZpb3VzIG9uZXMuICovXG4tXHRcdGludCBpO1xuLVxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjOyBpKyspIHtcbi1cdFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtOTUzLDE3ICs5OTAsOCBAQCBzdGF0aWMgaW50IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHVpbnQzMl90IGluZGV4LFxuIFxuIHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nIGM7XG4tXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbi1cdC8qIEdhcmJhZ2UgY29sbGVjdCB0aGUgcmVnaW9uICovXG4tXHRrdm1fZm9yX2VhY2hfdmNwdShjLCB2Y3B1LCBrdm0pIHtcbi1cdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZHJlZyA9PSByZHJlZylcbi1cdFx0XHR2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUucmRyZWcgPSBOVUxMO1xuLVx0fVxuLVxuIFx0bGlzdF9kZWwoXHUwMDI2cmRyZWctXHUwMDNlbGlzdCk7XG4gXHRrZnJlZShyZHJlZyk7XG4gfVxuQEAgLTk3Miw2ICsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIHtcbiBcdGludCByZXQ7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFx0cmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG5AQCAtOTg0LDEyICsxMDE0LDcgQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIFx0ICovXG4gXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuLVxuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuLVx0XHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcdFx0dmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmhcbmluZGV4IGY0NWY3ZTNlYzRkNmUuLmUzMmUyYjU2YTQ3ZWYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmhcbkBAIC0zMzMsNiArMzMzLDcgQEAgaW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCk7XG4gaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rdm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCB2Z2ljX3YzX2NoZWNrX2Jhc2Uoc3RydWN0IGt2bSAqa3ZtKTtcbiBcbiB2b2lkIHZnaWNfdjNfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuaW5kZXggNDdlMzRiNDNhZmIyOS4uNWEzMGYzY2IwMzliZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5AQCAtNSw2ICs1LDcgQEBcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIFJlZCBIYXQsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbkBAIC0xMywxMiArMTQsMjEgQEBcbiBcbiAjaW5jbHVkZSBcInRlc3RfdXRpbC5oXCJcbiAjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwiZ2ljLmhcIlxuICNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuICNpbmNsdWRlIFwidmdpYy5oXCJcbiAjaW5jbHVkZSBcImdpY192My5oXCJcbiBcbiAjZGVmaW5lIE5SX1ZDUFVTXHRcdDRcbiBcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0VcdEdJQ1JfQkFTRV9HUEFcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0VcdFxcXG4rXHQoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSArIDIgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9ESVNUX0JBU0VcdFx0XFxcbitcdChSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICsgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFXHRcXFxuK1x0KFJFRElTVF9SRVRSWV9ESVNUX0JBU0UgKyBLVk1fVkdJQ19WM19ESVNUX1NJWkUpXG4rXG4gI2RlZmluZSBSRUdfT0ZGU0VUKHZjcHUsIG9mZnNldCkgKCgodTY0KXZjcHUgXHUwMDNjXHUwMDNjIDMyKSB8IG9mZnNldClcbiBcbiAjZGVmaW5lIFZHSUNfREVWX0lTX1YyKF9kKSAoKF9kKSA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjIpXG5AQCAtNjUsNiArNzUsMjMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZClcbit7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdC8qIFRoZSBmaXJzdCB0aHJlZSByZWRpc3RyaWJ1dG9ycyBzcGFuIGFkamFjZW50IHJlZ2lvbnMgMCBhbmQgMS4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1ZDUFVTOyBpKyspIHtcbitcdFx0dTY0IGJhc2UgPSBpIFx1MDAzYyAzID8gUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSArXG4rXHRcdFx0XHQgICAgICAgaSAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFIDpcbitcdFx0XHRcdCAgICAgICBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFO1xuK1x0XHR1NjQgdHlwZXIgPSByZWFkcSgodm9pZCAqKSh1bnNpZ25lZCBsb25nKShiYXNlICsgR0lDUl9UWVBFUikpO1xuK1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEoR0lDUl9UWVBFUl9DUFVfTlVNQkVSKHR5cGVyKSwgaSk7XG4rXHR9XG4rXG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuIC8qIHdlIGRvbid0IHdhbnQgdG8gYXNzZXJ0IG9uIHJ1biBleGVjdXRpb24sIGhlbmNlIHRoYXQgaGVscGVyICovXG4gc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuQEAgLTczLDYgKzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fZ2ljIHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlLFxuIFx0XHRcdFx0XHQgICAgICB1MzIgbnJfdmNwdXMsXG4rXHRcdFx0XHRcdCAgICAgIHZvaWQgKmd1ZXN0X2NvZGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbXSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG5AQCAtMzM4LDcgKzM2Niw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190aGVuX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUpXG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4gXHRpbnQgcmV0LCBpO1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXG4gXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXHUwMDI2dik7XG4gXG5AQCAtMzU5LDcgKzM4Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmNwdXNfdGhlbl92Z2ljKHUzMiBnaWNfZGV2X3R5cGUpXG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIGd1ZXN0X2NvZGUsXG4rXHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC00MTEsNyArNDQwLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcdHU2NCBhZGRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcbiBcdFx0XHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xuQEAgLTQyMiw3ICs0NTIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFxuIFx0Lyogc3RlcDIgKi9cbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFxuIFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTtcbkBAIC00MzYsNyArNDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcbiBcdC8qIHN0ZXAgMyAqL1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG5AQCAtNDU3LDYgKzQ4OSw3MCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFx0dm1fZ2ljX2Rlc3Ryb3koXHUwMDI2dik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbTlJfVkNQVVNdO1xuK1x0c3RydWN0IHZtX2dpYyB2O1xuK1x0c3RydWN0IHVjYWxsIHVjO1xuK1x0dTY0IGFkZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jaGVja19yZWRpc3RfcmV0cnksIHZjcHVzKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTtcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFLCAwLCAxKTtcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX0RJU1QsIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpO1xuK1x0cmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLFxuK1x0XHRcdFx0ICAgIFx1MDAyNmFkZHIpO1xuK1x0VEVTVF9BU1NFUlQocmV0IFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4rXHRcdCAgICBcInJlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdFwiKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCAwLCAyKTtcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbitcbitcdHZpcnRfbWFwKHYudm0sIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsXG4rXHRcdCB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLVx1MDAzZW1vZGUsXG4rXHRcdFx0XHRcdCAzICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcbitcdHZpcnRfbWFwKHYudm0sIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsXG4rXHRcdCB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLVx1MDAzZW1vZGUsXG4rXHRcdFx0XHRcdCBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xuK1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcbitcdFx0XHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xuK1xuK1x0dmNwdV9ydW4odmNwdXNbMF0pO1xuK1x0c3dpdGNoIChnZXRfdWNhbGwodmNwdXNbMF0sIFx1MDAyNnVjKSkge1xuK1x0Y2FzZSBVQ0FMTF9ET05FOlxuK1x0XHRicmVhaztcbitcdGNhc2UgVUNBTExfQUJPUlQ6XG4rXHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgVUNBTExfTk9ORTpcbitcdFx0aWYgKHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKVxuK1x0XHRcdFRFU1RfRkFJTChcIlVuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseFwiLFxuK1x0XHRcdFx0ICB2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlbW1pby5waHlzX2FkZHIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGRlZmF1bHQ6XG4rXHRcdFRFU1RfRkFJTChcIlVuZXhwZWN0ZWQgdWNhbGwgJWx1LCBleGl0X3JlYXNvbiAldVwiLFxuK1x0XHRcdCAgdWMuY21kLCB2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24pO1xuK1x0fVxuK1xuK1x0dm1fZ2ljX2Rlc3Ryb3koXHUwMDI2dik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZClcbiB7XG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG5AQCAtNjA4LDcgKzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBhZGRyO1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIDEsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCBndWVzdF9jb2RlLFxuK1x0XHRcdFx0ICAgICB2Y3B1cyk7XG4gXG4gXHQvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovXG4gXHRhZGRyID0gbWF4X3BoeXNfc2l6ZSAtICgzICogMiAqIDB4MTAwMDApO1xuQEAgLTY0MSw3ICs3MzgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX2l0c19yZWdpb24odm9pZClcbiBcdHU2NCBhZGRyO1xuIFx0aW50IGl0c19mZCwgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdGl0c19mZCA9IGt2bV9jcmVhdGVfZGV2aWNlKHYudm0sIEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19JVFMpO1xuIFxuIFx0YWRkciA9IDB4NDAxMDAwO1xuQEAgLTY4NCw3ICs3ODIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25hc3NnaWNhcCh2b2lkKVxuIFx0dTMyIHR5cGVyMjtcbiBcdGludCByZXQ7XG4gXG4tXHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0a3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUyxcbiBcdFx0XHQgICAgR0lDRF9UWVBFUjIsIFx1MDAyNnR5cGVyMik7XG4gXHRoYXNfbmFzc2dpY2FwID0gdHlwZXIyIFx1MDAyNiBHSUNEX1RZUEVSMl9uQVNTR0ljYXA7XG5AQCAtOTc4LDYgKzEwNzcsNyBAQCB2b2lkIHJ1bl90ZXN0cyh1MzIgZ2ljX2Rldl90eXBlKVxuIFxuIFx0aWYgKFZHSUNfREVWX0lTX1YzKGdpY19kZXZfdHlwZSkpIHtcbiBcdFx0dGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnMoKTtcbitcdFx0dGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KCk7XG4gXHRcdHRlc3RfdjNfdHlwZXJfYWNjZXNzZXMoKTtcbiBcdFx0dGVzdF92M19sYXN0X2JpdF9yZWRpc3RfcmVnaW9ucygpO1xuIFx0XHR0ZXN0X3YzX2xhc3RfYml0X3NpbmdsZV9yZGlzdCgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MjE6NTcuMTY1NTg2MTAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzQ5MjYzMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBWR0lDIHYzIFJlZGlzdHJpYnV0b3IgSW5pdGlhbGl6YXRpb24gYW5kIFRlYXJkb3duIC0gRm9jdXNlZCBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZ2h0ZW5pbmcgdXAgdGhlIFZHSUMgdjMgcmVkaXN0cmlidXRvciBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcHJvY2VkdXJlcywgc3BlY2lmaWNhbGx5IHRvIGhhbmRsZSBzY2VuYXJpb3Mgd2hlcmUgdkNQVSBjcmVhdGlvbiBmYWlscyBvciBzZXR0aW5nIHRoZSByZWRpc3RyaWJ1dG9yIGJhc2UgZmFpbHMuIFRoZSBrZXkgaGVyZSBpcyByb2xsYmFjay4gSXQgc2VlbXMgdGhlIGNvcmUgcHJvYmxlbSBpcyBwb3RlbnRpYWxseSBkYW5nbGluZyBwb2ludGVycyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBjb3JydXB0aW9uIGR1cmluZyB0aGVzZSBmYWlsdXJlIGNhc2VzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IHdhcywgYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgYmVpbmcgaW50cm9kdWNlZD8gQSBxdWljayBsb29rIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgc3VnZ2VzdHMgbm8sIHdoaWNoIGlzIGEgcmVsaWVmLiBXZSdyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgX19rdm1fdmdpY192Y3B1X2Rlc3Ryb3lgLCBga3ZtX3ZnaWNfdmNwdV9kZXN0cm95YCwgYGt2bV92Z2ljX2Rlc3Ryb3lgLCBga3ZtX3ZnaWNfYWRkcmAsIGB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldmAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbmAsIGB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbmAsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRpbmcgYHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCB0byBlbnN1cmUgdGhhdCByZXNvdXJjZXMgYXJlIHByb3Blcmx5IGNsZWFuZWQgdXAgaW4gZXJyb3IgcGF0aHMuIFRoZSBuZXcgYGt2bV92Z2ljX2FkZHJgIGNoZWNrIGxvb2tzIGxpa2UgYSBzaW1wbGUgY29uY3VycmVuY3kgY2hlY2sgdG8gcHJldmVudCByZWRpc3RyaWJ1dG9yIHVwZGF0ZXMgd2hpbGUgdkNQVSBjcmVhdGlvbiBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cblxuQWZ0ZXIgY2hlY2tpbmcgYGt2bV92Z2ljX2FkZHJgLCB0aGUgY29kZSBzZWVtcyBzZW5zaWJsZS4gVGhlIGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgIGFuZCBgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldmAgZnVuY3Rpb25zIGFyZSBqdXN0IHJlc291cmNlIGNsZWFudXAsIGFuZCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCBkb2VzIGNsZWFudXAgYWNyb3NzIGFsbCB2Y3B1cy5cblxuQmFzaWNhbGx5LCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZlbnNpdmUgcGF0Y2g6IGl0J3MgbWFraW5nIHN1cmUgdGhhdCBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IgZHVyaW5nIHZDUFUgY3JlYXRpb24gb3IgcmVkaXN0cmlidXRvciBzZXR1cCwgd2UgcHJvcGVybHkgcmVsZWFzZSBhbGwgcmVzb3VyY2VzIGFuZCBkb24ndCBlbmQgdXAgd2l0aCBkYW5nbGluZyBwb2ludGVycywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2sgaW52ZXJzaW9uIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoICppc24ndCogYWRkaW5nIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuXG5cblNvLCBnaXZlbiB0aGlzIGFuYWx5c2lzLCB0aGUgcGF0Y2ggbG9va3MgY2xlYW4gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCBhbmQgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgbmV3IGF0dGFjayBzdXJmYWNlcy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4IHRvIGluY3JlYXNlIHRoZSByb2J1c3RuZXNzIGFuZCByZWxpYWJpbGl0eSBvZiB0aGUgVkdJQyB2MyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDg0LCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDoyMjoxNC41MTQ4NTIzNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gVkdJQyB2MyByZWRpc3RyaWJ1dG9yIGluaXRpYWxpemF0aW9uLCB0ZWFyZG93biwgYW5kIHJvbGxiYWNrIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIHByb3BlciBjbGVhbnVwIGZ1bmN0aW9ucyAoYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbmApIGFuZCBhZGp1c3RzIGxvY2tpbmcgdG8gcHJldmVudCBkYW5nbGluZyBwb2ludGVycyBhbmQgbG9jayBpbnZlcnNpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGZhaWx1cmVzIG9yIHJlZGlzdHJpYnV0b3IgYmFzZSBzZXR1cCBmYWlsdXJlcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgY29uY3VycmVuY3ksIGFuZCBvYmplY3QgbGlmZWN5Y2xlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGFsbG93IHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkYW5nbGluZyBwb2ludGVycywgb3IgZGVhZGxvY2tzKSBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBMT0NLREVQLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kths[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 10:00:59 +0000 UTC FinishedAt: 2026-08-22 10:22:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d75b48460559423f8c38aafed7a9cdec91d26d57", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d75b48460559423f8c38aafed7a9cdec91d26d57", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "bed53ffd-7330-4078-aa2d-a8bf99d24a8d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vgic_v3_set_redist_base", "vgic_register_redist_iodev", "vgic_unregister_redist_iodev", "__vgic_unassign_redist_iodev", "kvm_vgic_vcpu_destroy", "kvm_vgic_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgICAmIzM0O3ZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O3ZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldiYjMzQ7LAogICAgJiMzNDtrdm1fdmdpY192Y3B1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7a3ZtX3ZnaWNfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciByZWdpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGFuZCByb2xsYmFjayBsb2dpYyBkdXJpbmcgdkNQVSBjcmVhdGlvbiBhbmQgcmVkaXN0cmlidXRvciBiYXNlIGFkZHJlc3MgYXNzaWdubWVudC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfREVWSUNFX0FUVFIpIGFuZCBhZmZlY3RzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZTZiNDcxZTI1YWZhZDNkMGZhOWQ3Y2QxMmE1MWM5MTg3ZGUwZGZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTA6MjA6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmNcbmluZGV4IDkwNzA1Nzg4MWIyNmEuLjgxYWI1YTZiZjhiYzggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jXG5AQCAtNTE5LDI5ICYjNDM7NTE5LDYgQEAgc3RhdGljIHZvaWQgX19rdm1fdmdpY192Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dmdpY19jcHUtXHUwMDNlYXBfbGlzdF9oZWFkKTtcbiBcdGtmcmVlKHZnaWNfY3B1LVx1MDAzZXByaXZhdGVfaXJxcyk7XG4gXHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBOVUxMO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0aGlzIHZDUFUgaXMgYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgYSBmYWlsZWQgY3JlYXRpb25cbi1cdFx0ICogdGhlbiB1bnJlZ2lzdGVyIHRoZSByZWRpc3RyaWJ1dG9yIHRvIGF2b2lkIGxlYXZpbmcgYmVoaW5kIGFcbi1cdFx0ICogZGFuZ2xpbmcgcG9pbnRlciB0byB0aGUgdkNQVSBzdHJ1Y3QuXG4tXHRcdCAqXG4tXHRcdCAqIHZDUFVzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChpLmUuIGFkZGVkIHRvXG4tXHRcdCAqIGt2bS1cdTAwM2V2Y3B1X2FycmF5KSBnZXQgdW5yZWdpc3RlcmVkIGluIGt2bV92Z2ljX2Rlc3Ryb3koKSwgYXNcbi1cdFx0ICogdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGlsZSBob2xkaW5nIGt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrXG4tXHRcdCAqIGluIHRoZSBWTSB0ZWFyZG93biBwYXRoIGFuZCB3b3VsZCBvdGhlcndpc2UgaW50cm9kdWNlIGEgbG9ja1xuLVx0XHQgKiBpbnZlcnNpb24gdy5yLnQuIGt2bS1cdTAwM2VzcmN1LlxuLVx0XHQgKlxuLVx0XHQgKiB2Q1BVcyB0aGF0IGZhaWxlZCBjcmVhdGlvbiBhcmUgdG9ybiBkb3duIG91dHNpZGUgb2YgdGhlXG4tXHRcdCAqIGt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrIGFuZCBkbyBub3QgZ2V0IHVucmVnaXN0ZXJlZCBpblxuLVx0XHQgKiBrdm1fdmdpY19kZXN0cm95KCksIG1lYW5pbmcgaXQgaXMgYm90aCBzYWZlIGFuZCBuZWNlc3NhcnkgdG9cbi1cdFx0ICogZG8gc28gaGVyZS5cbi1cdFx0ICovXG4tXHRcdGlmIChrdm1fZ2V0X3ZjcHVfYnlfaWQodmNwdS1cdTAwM2Vrdm0sIHZjcHUtXHUwMDNldmNwdV9pZCkgIT0gdmNwdSlcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuLVxuLVx0XHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4tXHR9XG4gfVxuIFxuIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01NDksNyAmIzQzOzUyNiwxNiBAQCB2b2lkIGt2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxuJiM0MztcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiYjNDM7XG4gXHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuJiM0MztcdFx0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1x0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiB9XG4gXG5AQCAtNTU5LDIxICYjNDM7NTQ1LDIzIEBAIHZvaWQga3ZtX3ZnaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMylcbiYjNDM7XHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbiYjNDM7XHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdHZnaWNfZGVidWdfZGVzdHJveShrdm0pO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuJiM0MztcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuIFx0XHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcbiYjNDM7XHRcdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxuJiM0MztcdFx0XHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xuJiM0MztcdH1cbiBcbiBcdGt2bV92Z2ljX2Rpc3RfZGVzdHJveShrdm0pO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cbi1cdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxuLVx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbi1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXG5pbmRleCA5MGJlOTk0NDNkZjNiLi40OGMzYjJhNDhjMjAyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xuQEAgLTk3LDYgJiM0Mzs5Nyw5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXG4gXHRwaHlzX2FkZHJfdCAqYWRkcl9wdHIsIGFsaWdubWVudCwgc2l6ZTtcbiBcdHU2NCB1bmRlZl92YWx1ZSA9IFZHSUNfQUREUl9VTkRFRjtcbiBcdHU2NCBhZGRyO1xuJiM0MztcdGJvb2wgcmVkaXN0X3dyaXRlID0gd3JpdGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQoYXR0ci1cdTAwM2VhdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHxcbiYjNDM7XHRcdCBhdHRyLVx1MDAzZWF0dHIgPT0gS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04pO1xuIFx0aW50IHI7XG4gXG4gXHQvKiBSZWFkaW5nIGEgcmVkaXN0cmlidXRvciByZWdpb24gYWRkciBpbXBsaWVzIGdldHRpbmcgdGhlIGluZGV4ICovXG5AQCAtMTA0LDYgJiM0MzsxMDcsMTkgQEAgc3RhdGljIGludCBrdm1fdmdpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0ciwgYm9vbCB3cmlcbiBcdFx0aWYgKGdldF91c2VyKGFkZHIsIHVhZGRyKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgdkNQVSBjYW4gaGF2ZSBhbiBSRCBhc3NpZ25tZW50IGJlZm9yZSBpdCBpcyB2aXNpYmxlIHRvXG4mIzQzO1x0ICoga3ZtX2Zvcl9lYWNoX3ZjcHUoKS4gUmVqZWN0IHJlZGlzdHJpYnV0b3IgdXBkYXRlcyB3aGlsZSB2Q1BVIGNyZWF0aW9uXG4mIzQzO1x0ICogaXMgaW4gcHJvZ3Jlc3MsIHNvIHJvbGxiYWNrIGNhbiByZXNldCBldmVyeSBhc3NpZ25tZW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZWRpc3Rfd3JpdGUpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzICE9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpKSB7XG4mIzQzO1x0XHRcdHIgPSAtRUJVU1k7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9ja19rdm07XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4gXHQgKiBTaW5jZSB3ZSBjYW4mIzM5O3QgaG9sZCBjb25maWdfbG9jayB3aGlsZSByZWdpc3RlcmluZyB0aGUgcmVkaXN0cmlidXRvclxuIFx0ICogaW9kZXZzLCB0YWtlIHRoZSBzbG90c19sb2NrIGltbWVkaWF0ZWx5LlxuQEAgLTIwMSw2ICYjNDM7MjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbiYjNDM7b3V0X3VubG9ja19rdm06XG4mIzQzO1x0aWYgKHJlZGlzdF93cml0ZSlcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0aWYgKCFyIFx1MDAyNlx1MDAyNiAhd3JpdGUpXG4gXHRcdHIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG5pbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuQEAgLTc2Niw2ICYjNDM7NzY2LDE4IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldilcbiBcdHJldHVybiBTWl82NEs7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuJiM0MztcbiYjNDM7XHR2Z2ljX2NwdS1cdTAwM2VyZHJlZy1cdTAwM2VmcmVlX2luZGV4LS07XG4mIzQzO1x0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldiAtIHJlZ2lzdGVyIGEgc2luZ2xlIHJlZGlzdCBpb2RldlxuICAqIEB2Y3B1OiAgICBUaGUgVkNQVSB0byB3aGljaCB0aGUgcmVkaXN0cmlidXRvciBiZWxvbmdzXG5AQCAtODE4LDE2ICYjNDM7ODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZF9kZXYtXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xuIFx0cmRfZGV2LVx1MDAzZXJlZGlzdF92Y3B1ID0gdmNwdTtcbiBcbiYjNDM7XHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuJiM0MztcdHJkcmVnLVx1MDAzZWZyZWVfaW5kZXgmIzQzOyYjNDM7O1xuJiM0MztcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcbiBcdFx0XHRcdCAgICAgIDIgKiBTWl82NEssIFx1MDAyNnJkX2Rldi1cdTAwM2VkZXYpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudCh2Y3B1KTtcbiBcbi1cdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXG4tXHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4JiM0MzsmIzQzOztcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG5AQCAtODQxLDYgJiM0Mzs4NTQsNDAgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gfVxuIFxuJiM0Mzt2b2lkIF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0dmdpY19jcHUtXHUwMDNlcmRyZWcgPSBOVUxMO1xuJiM0MztcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcsICppdGVyO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGM7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XG4mIzQzO1xuJiM0MztcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSlcbiYjNDM7XHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSlcbiYjNDM7XHRcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXHUwMDI2a3ZtLVx1MDAzZWFyY2gudmdpYy5yZF9yZWdpb25zLCBsaXN0KVxuJiM0MztcdFx0aXRlci1cdTAwM2VmcmVlX2luZGV4ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG5AQCAtODU1LDE2ICYjNDM7OTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChyZXQpIHtcbi1cdFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cbi1cdFx0aW50IGk7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0dmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIGkpO1xuLVx0XHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTk1MywxNyAmIzQzOzk5MCw4IEBAIHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXG4gXG4gdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHVuc2lnbmVkIGxvbmcgYztcbi1cbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuLVx0LyogR2FyYmFnZSBjb2xsZWN0IHRoZSByZWdpb24gKi9cbi1cdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xuLVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKVxuLVx0XHRcdHZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZHJlZyA9IE5VTEw7XG4tXHR9XG4tXG4gXHRsaXN0X2RlbChcdTAwMjZyZHJlZy1cdTAwM2VsaXN0KTtcbiBcdGtmcmVlKHJkcmVnKTtcbiB9XG5AQCAtOTcyLDYgJiM0MzsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIHtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRyZXQgPSB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oa3ZtLCBpbmRleCwgYWRkciwgY291bnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbkBAIC05ODQsMTIgJiM0MzsxMDE0LDcgQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIFx0ICovXG4gXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuLVxuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuLVx0XHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XHRcdHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaCBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oXG5pbmRleCBmNDVmN2UzZWM0ZDZlLi5lMzJlMmI1NmE0N2VmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oXG5AQCAtMzMzLDYgJiM0MzszMzMsNyBAQCBpbnQgdmdpY192M19zYXZlX3BlbmRpbmdfdGFibGVzKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcbiBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7dm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCB2Z2ljX3YzX2NoZWNrX2Jhc2Uoc3RydWN0IGt2bSAqa3ZtKTtcbiBcbiB2b2lkIHZnaWNfdjNfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuaW5kZXggNDdlMzRiNDNhZmIyOS4uNWEzMGYzY2IwMzliZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5AQCAtNSw2ICYjNDM7NSw3IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BhcmEuaFx1MDAzZVxuQEAgLTEzLDEyICYjNDM7MTQsMjEgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Z2ljLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwcm9jZXNzb3IuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZnaWMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2dpY192My5oXCYjMzQ7XG4gXG4gI2RlZmluZSBOUl9WQ1BVU1x0XHQ0XG4gXG4mIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRVx0R0lDUl9CQVNFX0dQQVxuJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0VcdFxcXG4mIzQzO1x0KFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgJiM0MzsgMiAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9ESVNUX0JBU0VcdFx0XFxcbiYjNDM7XHQoUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSAmIzQzOyBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcbiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFXHRcXFxuJiM0MztcdChSRURJU1RfUkVUUllfRElTVF9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX0RJU1RfU0laRSlcbiYjNDM7XG4gI2RlZmluZSBSRUdfT0ZGU0VUKHZjcHUsIG9mZnNldCkgKCgodTY0KXZjcHUgXHUwMDNjXHUwMDNjIDMyKSB8IG9mZnNldClcbiBcbiAjZGVmaW5lIFZHSUNfREVWX0lTX1YyKF9kKSAoKF9kKSA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjIpXG5AQCAtNjUsNiAmIzQzOzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaXJzdCB0aHJlZSByZWRpc3RyaWJ1dG9ycyBzcGFuIGFkamFjZW50IHJlZ2lvbnMgMCBhbmQgMS4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9WQ1BVUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBiYXNlID0gaSBcdTAwM2MgMyA/IFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAgICAgaSAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFIDpcbiYjNDM7XHRcdFx0XHQgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTtcbiYjNDM7XHRcdHU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgJiM0MzsgR0lDUl9UWVBFUikpO1xuJiM0MztcbiYjNDM7XHRcdEdVRVNUX0FTU0VSVF9FUShHSUNSX1RZUEVSX0NQVV9OVU1CRVIodHlwZXIpLCBpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEdVRVNUX0RPTkUoKTtcbiYjNDM7fVxuJiM0MztcbiAvKiB3ZSBkb24mIzM5O3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi9cbiBzdGF0aWMgaW50IHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG5AQCAtNzMsNiAmIzQzOzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fZ2ljIHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlLFxuIFx0XHRcdFx0XHQgICAgICB1MzIgbnJfdmNwdXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB2b2lkICpndWVzdF9jb2RlLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10pXG4ge1xuIFx0c3RydWN0IHZtX2dpYyB2O1xuQEAgLTMzOCw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQsIGk7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgMSwgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXG4gXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXHUwMDI2dik7XG4gXG5AQCAtMzU5LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKVxuIFx0c3RydWN0IHZtX2dpYyB2O1xuIFx0aW50IHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSxcbiYjNDM7XHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC00MTEsNyAmIzQzOzQ0MCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXHR1NjQgYWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbiYjNDM7XHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4mIzQzO1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcbiBcdFx0XHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xuQEAgLTQyMiw3ICYjNDM7NDUyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcbiBcdC8qIHN0ZXAyICovXG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbiYjNDM7XHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4mIzQzO1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFxuIFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTtcbkBAIC00MzYsNyAmIzQzOzQ2Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXG4gXHQvKiBzdGVwIDMgKi9cbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG5AQCAtNDU3LDYgJiM0Mzs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcdHZtX2dpY19kZXN0cm95KFx1MDAyNnYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4mIzQzO1x0c3RydWN0IHVjYWxsIHVjO1xuJiM0MztcdHU2NCBhZGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSwgdmNwdXMpO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMiwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgMCwgMCk7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpO1xuJiM0MztcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4mIzQzO1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXHUwMDI2YWRkcik7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFO1xuJiM0MztcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4mIzQzO1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgXHUwMDI2YWRkcik7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfRElTVF9CQVNFLCAwLCAyKTtcbiYjNDM7XHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4mIzQzO1x0XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZhZGRyKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbiYjNDM7XHRcdCAgICBcJiMzNDtyZWdpc3RlciByZWRpc3QgcmVnaW9uIGNvbGxpZGluZyB3aXRoIGRpc3RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgMCwgMik7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbiYjNDM7XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSxcbiYjNDM7XHRcdCB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLVx1MDAzZW1vZGUsXG4mIzQzO1x0XHRcdFx0XHQgMyAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XG4mIzQzO1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSxcbiYjNDM7XHRcdCB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLVx1MDAzZW1vZGUsXG4mIzQzO1x0XHRcdFx0XHQgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgIEtWTV9ERVZfQVJNX1ZHSUNfQ1RSTF9JTklULCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9ydW4odmNwdXNbMF0pO1xuJiM0MztcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCBcdTAwMjZ1YykpIHtcbiYjNDM7XHRjYXNlIFVDQUxMX0RPTkU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFVDQUxMX0FCT1JUOlxuJiM0MztcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFVDQUxMX05PTkU6XG4mIzQzO1x0XHRpZiAodmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pXG4mIzQzO1x0XHRcdFRFU1RfRkFJTChcJiMzNDtVbmV4cGVjdGVkIE1NSU8gZXhpdCBhdCAweCVsbHhcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICB2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlbW1pby5waHlzX2FkZHIpO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFRFU1RfRkFJTChcJiMzNDtVbmV4cGVjdGVkIHVjYWxsICVsdSwgZXhpdF9yZWFzb24gJXVcJiMzNDssXG4mIzQzO1x0XHRcdCAgdWMuY21kLCB2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dm1fZ2ljX2Rlc3Ryb3koXHUwMDI2dik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC02MDgsNyAmIzQzOzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBhZGRyO1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIDEsIHZjcHVzKTtcbiYjNDM7XHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSxcbiYjNDM7XHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdC8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi9cbiBcdGFkZHIgPSBtYXhfcGh5c19zaXplIC0gKDMgKiAyICogMHgxMDAwMCk7XG5AQCAtNjQxLDcgJiM0Mzs3MzgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX2l0c19yZWdpb24odm9pZClcbiBcdHU2NCBhZGRyO1xuIFx0aW50IGl0c19mZCwgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4mIzQzO1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuJiM0MztcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0aXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7XG4gXG4gXHRhZGRyID0gMHg0MDEwMDA7XG5AQCAtNjg0LDcgJiM0Mzs3ODIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25hc3NnaWNhcCh2b2lkKVxuIFx0dTMyIHR5cGVyMjtcbiBcdGludCByZXQ7XG4gXG4tXHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4mIzQzO1x0dm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLFxuIFx0XHRcdCAgICBHSUNEX1RZUEVSMiwgXHUwMDI2dHlwZXIyKTtcbiBcdGhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgXHUwMDI2IEdJQ0RfVFlQRVIyX25BU1NHSWNhcDtcbkBAIC05NzgsNiAmIzQzOzEwNzcsNyBAQCB2b2lkIHJ1bl90ZXN0cyh1MzIgZ2ljX2Rldl90eXBlKVxuIFxuIFx0aWYgKFZHSUNfREVWX0lTX1YzKGdpY19kZXZfdHlwZSkpIHtcbiBcdFx0dGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnMoKTtcbiYjNDM7XHRcdHRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSgpO1xuIFx0XHR0ZXN0X3YzX3R5cGVyX2FjY2Vzc2VzKCk7XG4gXHRcdHRlc3RfdjNfbGFzdF9iaXRfcmVkaXN0X3JlZ2lvbnMoKTtcbiBcdFx0dGVzdF92M19sYXN0X2JpdF9zaW5nbGVfcmRpc3QoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmdpY192M19zZXRfcmVkaXN0X2Jhc2UmIzM0OywKICAgICYjMzQ7dmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldiYjMzQ7LAogICAgJiMzNDtfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O2t2bV92Z2ljX3ZjcHVfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtrdm1fdmdpY19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgcm9sbGJhY2sgbG9naWMgZHVyaW5nIHZDUFUgY3JlYXRpb24gYW5kIHJlZGlzdHJpYnV0b3IgYmFzZSBhZGRyZXNzIGFzc2lnbm1lbnQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fU0VUX0RFVklDRV9BVFRSKSBhbmQgYWZmZWN0cyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IG9uIEFSTTY0LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U2YjQ3MWUyNWFmYWQzZDBmYTlkN2NkMTJhNTFjOTE4N2RlMGRmZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEwOjIwOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMKaW5kZXggOTA3MDU3ODgxYjI2YS4uODFhYjVhNmJmOGJjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jCkBAIC01MTksMjkgJiM0Mzs1MTksNiBAQCBzdGF0aWMgdm9pZCBfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2Z2ljX2NwdS0mZ3Q7YXBfbGlzdF9oZWFkKTsKIAlrZnJlZSh2Z2ljX2NwdS0mZ3Q7cHJpdmF0ZV9pcnFzKTsKIAl2Z2ljX2NwdS0mZ3Q7cHJpdmF0ZV9pcnFzID0gTlVMTDsKLQotCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykgewotCQkvKgotCQkgKiBJZiB0aGlzIHZDUFUgaXMgYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgYSBmYWlsZWQgY3JlYXRpb24KLQkJICogdGhlbiB1bnJlZ2lzdGVyIHRoZSByZWRpc3RyaWJ1dG9yIHRvIGF2b2lkIGxlYXZpbmcgYmVoaW5kIGEKLQkJICogZGFuZ2xpbmcgcG9pbnRlciB0byB0aGUgdkNQVSBzdHJ1Y3QuCi0JCSAqCi0JCSAqIHZDUFVzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChpLmUuIGFkZGVkIHRvCi0JCSAqIGt2bS0mZ3Q7dmNwdV9hcnJheSkgZ2V0IHVucmVnaXN0ZXJlZCBpbiBrdm1fdmdpY19kZXN0cm95KCksIGFzCi0JCSAqIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hpbGUgaG9sZGluZyBrdm0tJmd0O2FyY2guY29uZmlnX2xvY2sKLQkJICogaW4gdGhlIFZNIHRlYXJkb3duIHBhdGggYW5kIHdvdWxkIG90aGVyd2lzZSBpbnRyb2R1Y2UgYSBsb2NrCi0JCSAqIGludmVyc2lvbiB3LnIudC4ga3ZtLSZndDtzcmN1LgotCQkgKgotCQkgKiB2Q1BVcyB0aGF0IGZhaWxlZCBjcmVhdGlvbiBhcmUgdG9ybiBkb3duIG91dHNpZGUgb2YgdGhlCi0JCSAqIGt2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayBhbmQgZG8gbm90IGdldCB1bnJlZ2lzdGVyZWQgaW4KLQkJICoga3ZtX3ZnaWNfZGVzdHJveSgpLCBtZWFuaW5nIGl0IGlzIGJvdGggc2FmZSBhbmQgbmVjZXNzYXJ5IHRvCi0JCSAqIGRvIHNvIGhlcmUuCi0JCSAqLwotCQlpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKHZjcHUtJmd0O2t2bSwgdmNwdS0mZ3Q7dmNwdV9pZCkgIT0gdmNwdSkKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7Ci0KLQkJdmdpY19jcHUtJmd0O3JkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjsKLQl9CiB9CiAKIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTU0OSw3ICYjNDM7NTI2LDE2IEBAIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAKIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKQomIzQzOwkJdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0MzsKIAlfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJCV9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIH0KIApAQCAtNTU5LDIxICYjNDM7NTQ1LDIzIEBAIHZvaWQga3ZtX3ZnaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pCiAJdW5zaWduZWQgbG9uZyBpOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWlmIChrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykKJiM0MzsJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKJiM0MzsJCQl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCiAJdmdpY19kZWJ1Z19kZXN0cm95KGt2bSk7CiAKLQlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewogCQlfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykKJiM0MzsJCQlfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwl9CiAKIAlrdm1fdmdpY19kaXN0X2Rlc3Ryb3koa3ZtKTsKIAogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7Ci0KLQlpZiAoa3ZtLSZndDthcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpCi0JCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7Ci0KIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYwppbmRleCA5MGJlOTk0NDNkZjNiLi40OGMzYjJhNDhjMjAyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMKQEAgLTk3LDYgJiM0Mzs5Nyw5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiAJcGh5c19hZGRyX3QgKmFkZHJfcHRyLCBhbGlnbm1lbnQsIHNpemU7CiAJdTY0IHVuZGVmX3ZhbHVlID0gVkdJQ19BRERSX1VOREVGOwogCXU2NCBhZGRyOwomIzQzOwlib29sIHJlZGlzdF93cml0ZSA9IHdyaXRlICZhbXA7JmFtcDsKJiM0MzsJCShhdHRyLSZndDthdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHwKJiM0MzsJCSBhdHRyLSZndDthdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OKTsKIAlpbnQgcjsKIAogCS8qIFJlYWRpbmcgYSByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBhZGRyIGltcGxpZXMgZ2V0dGluZyB0aGUgaW5kZXggKi8KQEAgLTEwNCw2ICYjNDM7MTA3LDE5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiAJCWlmIChnZXRfdXNlcihhZGRyLCB1YWRkcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHZDUFUgY2FuIGhhdmUgYW4gUkQgYXNzaWdubWVudCBiZWZvcmUgaXQgaXMgdmlzaWJsZSB0bwomIzQzOwkgKiBrdm1fZm9yX2VhY2hfdmNwdSgpLiBSZWplY3QgcmVkaXN0cmlidXRvciB1cGRhdGVzIHdoaWxlIHZDUFUgY3JlYXRpb24KJiM0MzsJICogaXMgaW4gcHJvZ3Jlc3MsIHNvIHJvbGxiYWNrIGNhbiByZXNldCBldmVyeSBhc3NpZ25tZW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlZGlzdF93cml0ZSkgewomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzICE9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpKSB7CiYjNDM7CQkJciA9IC1FQlVTWTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2tfa3ZtOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBTaW5jZSB3ZSBjYW4mIzM5O3QgaG9sZCBjb25maWdfbG9jayB3aGlsZSByZWdpc3RlcmluZyB0aGUgcmVkaXN0cmlidXRvcgogCSAqIGlvZGV2cywgdGFrZSB0aGUgc2xvdHNfbG9jayBpbW1lZGlhdGVseS4KQEAgLTIwMSw2ICYjNDM7MjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIAomIzQzO291dF91bmxvY2tfa3ZtOgomIzQzOwlpZiAocmVkaXN0X3dyaXRlKQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsKIAlpZiAoIXIgJmFtcDsmYW1wOyAhd3JpdGUpCiAJCXIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYwppbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMKQEAgLTc2Niw2ICYjNDM7NzY2LDE4IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldikKIAlyZXR1cm4gU1pfNjRLOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gudmdpY19jcHU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWctJmd0O2ZyZWVfaW5kZXgtLTsKJiM0MzsJX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2CiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25ncwpAQCAtODE4LDE2ICYjNDM7ODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmRfZGV2LSZndDtucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7CiAJcmRfZGV2LSZndDtyZWRpc3RfdmNwdSA9IHZjcHU7CiAKJiM0MzsJLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KJiM0MzsJcmRyZWctJmd0O2ZyZWVfaW5kZXgmIzQzOyYjNDM7OwomIzQzOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAKIAlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSwKIAkJCQkgICAgICAyICogU1pfNjRLLCAmYW1wO3JkX2Rldi0mZ3Q7ZGV2KTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpOwogCi0JLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KLQlyZHJlZy0mZ3Q7ZnJlZV9pbmRleCYjNDM7JiM0Mzs7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKQEAgLTg0MSw2ICYjNDM7ODU0LDQwIEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LSZndDtrdm0sIEtWTV9NTUlPX0JVUywgJmFtcDtyZF9kZXYtJmd0O2Rldik7CiB9CiAKJiM0Mzt2b2lkIF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CXZnaWNfY3B1LSZndDtyZHJlZyA9IE5VTEw7CiYjNDM7CXZnaWNfY3B1LSZndDtyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnLCAqaXRlcjsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGM7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkKJiM0MzsJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkKJiM0MzsJCV9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgJmFtcDtrdm0tJmd0O2FyY2gudmdpYy5yZF9yZWdpb25zLCBsaXN0KQomIzQzOwkJaXRlci0mZ3Q7ZnJlZV9pbmRleCA9IDA7CiYjNDM7CiYjNDM7CXZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwpAQCAtODU1LDE2ICYjNDM7OTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSkKIAkJCWJyZWFrOwogCX0KIAotCWlmIChyZXQpIHsKLQkJLyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi8KLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IGM7IGkmIzQzOyYjNDM7KSB7Ci0JCQl2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7Ci0JCQl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwotCQl9Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTUzLDE3ICYjNDM7OTkwLDggQEAgc3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCwKIAogdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQl1bnNpZ25lZCBsb25nIGM7Ci0KIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAotCS8qIEdhcmJhZ2UgY29sbGVjdCB0aGUgcmVnaW9uICovCi0Ja3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7Ci0JCWlmICh2Y3B1LSZndDthcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKQotCQkJdmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS5yZHJlZyA9IE5VTEw7Ci0JfQotCiAJbGlzdF9kZWwoJmFtcDtyZHJlZy0mZ3Q7bGlzdCk7CiAJa2ZyZWUocmRyZWcpOwogfQpAQCAtOTcyLDYgJiM0MzsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KQogewogCWludCByZXQ7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJcmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwpAQCAtOTg0LDEyICYjNDM7MTAxNCw3IEBAIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCkKIAkgKi8KIAlyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7CiAJaWYgKHJldCkgewotCQlzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZzsKLQotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQkJcmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpOwotCQl2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJCXZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKaW5kZXggZjQ1ZjdlM2VjNGQ2ZS4uZTMyZTJiNTZhNDdlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKQEAgLTMzMyw2ICYjNDM7MzMzLDcgQEAgaW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pOwogaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTsKIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pOwogCiB2b2lkIHZnaWNfdjNfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jCmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMKQEAgLTUsNiAmIzQzOzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKQEAgLTEzLDEyICYjNDM7MTQsMjEgQEAKIAogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Z2ljLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZnaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2dpY192My5oJiMzNDsKIAogI2RlZmluZSBOUl9WQ1BVUwkJNAogCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFCUdJQ1JfQkFTRV9HUEEKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UJXAomIzQzOwkoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzOyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFCQlcCiYjNDM7CShSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKQomIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRQlcCiYjNDM7CShSRURJU1RfUkVUUllfRElTVF9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX0RJU1RfU0laRSkKJiM0MzsKICNkZWZpbmUgUkVHX09GRlNFVCh2Y3B1LCBvZmZzZXQpICgoKHU2NCl2Y3B1ICZsdDsmbHQ7IDMyKSB8IG9mZnNldCkKIAogI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKQpAQCAtNjUsNiAmIzQzOzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwkvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9WQ1BVUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBiYXNlID0gaSAmbHQ7IDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICYjNDM7CiYjNDM7CQkJCSAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOgomIzQzOwkJCQkgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTsKJiM0MzsJCXU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgJiM0MzsgR0lDUl9UWVBFUikpOwomIzQzOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiAvKiB3ZSBkb24mIzM5O3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi8KIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewpAQCAtNzMsNiAmIzQzOzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSwKIAkJCQkJICAgICAgdTMyIG5yX3ZjcHVzLAomIzQzOwkJCQkJICAgICAgdm9pZCAqZ3Vlc3RfY29kZSwKIAkJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKQogewogCXN0cnVjdCB2bV9naWMgdjsKQEAgLTMzOCw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSkKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CiAJaW50IHJldCwgaTsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtMzU5LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKQogCXN0cnVjdCB2bV9naWMgdjsKIAlpbnQgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtNDExLDcgJiM0Mzs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCXU2NCBhZGRyOwogCWludCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKIAkJCSAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7CkBAIC00MjIsNyAmIzQzOzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpCiAKIAkvKiBzdGVwMiAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTsKQEAgLTQzNiw3ICYjNDM7NDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAogCS8qIHN0ZXAgMyAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJcmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLApAQCAtNDU3LDYgJiM0Mzs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTsKJiM0MzsJc3RydWN0IHZtX2dpYyB2OwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCBhZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFLCAwLCAxKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpOwomIzQzOwlyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwKJiM0MzsJCQkJICAgICZhbXA7YWRkcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKJiM0MzsJCSAgICAmIzM0O3JlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJdmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwKJiM0MzsJCSB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLSZndDttb2RlLAomIzQzOwkJCQkJIDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpOwomIzQzOwl2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLAomIzQzOwkJIHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tJmd0O21vZGUsCiYjNDM7CQkJCQkgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTsKJiM0MzsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKJiM0MzsJCQkgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X3J1bih2Y3B1c1swXSk7CiYjNDM7CXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCAmYW1wO3VjKSkgewomIzQzOwljYXNlIFVDQUxMX0RPTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBVQ0FMTF9BQk9SVDoKJiM0MzsJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVUNBTExfTk9ORToKJiM0MzsJCWlmICh2Y3B1c1swXS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKQomIzQzOwkJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseCYjMzQ7LAomIzQzOwkJCQkgIHZjcHVzWzBdLSZndDtydW4tJmd0O21taW8ucGh5c19hZGRyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1JiMzNDssCiYjNDM7CQkJICB1Yy5jbWQsIHZjcHVzWzBdLSZndDtydW4tJmd0O2V4aXRfcmVhc29uKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZCkKIHsKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CkBAIC02MDgsNyAmIzQzOzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKQogCWludCByZXQsIGk7CiAJdTY0IGFkZHI7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAkvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovCiAJYWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTsKQEAgLTY0MSw3ICYjNDM7NzM4LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19pdHNfcmVnaW9uKHZvaWQpCiAJdTY0IGFkZHI7CiAJaW50IGl0c19mZCwgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJaXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7CiAKIAlhZGRyID0gMHg0MDEwMDA7CkBAIC02ODQsNyAmIzQzOzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpCiAJdTMyIHR5cGVyMjsKIAlpbnQgcmV0OwogCi0Jdm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpOwomIzQzOwl2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJa3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUywKIAkJCSAgICBHSUNEX1RZUEVSMiwgJmFtcDt0eXBlcjIpOwogCWhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgJmFtcDsgR0lDRF9UWVBFUjJfbkFTU0dJY2FwOwpAQCAtOTc4LDYgJiM0MzsxMDc3LDcgQEAgdm9pZCBydW5fdGVzdHModTMyIGdpY19kZXZfdHlwZSkKIAogCWlmIChWR0lDX0RFVl9JU19WMyhnaWNfZGV2X3R5cGUpKSB7CiAJCXRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKCk7CiYjNDM7CQl0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTsKIAkJdGVzdF92M190eXBlcl9hY2Nlc3NlcygpOwogCQl0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7CiAJCXRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0ODcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEtWTSBBUk02NCBWR0lDdjMgUmVkaXN0cmlidXRvciBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBBUk02NCBLVk0gVkdJQyBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgbGlrZSBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgZm9yIFZHSUMgdjMuIFNpbmNlIHdlICpjYW4qIGZ1enogS1ZNIEFSTTY0IOKAkyB3ZSYjMzk7dmUgZ290IHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHRoYXQgd29yayBvbiBpdCDigJMgdGhpcyBpcyBhIHByaW1lIHRhcmdldC4KClRoZSBwYXRjaCB0b3VjaGVzIGEgbnVtYmVyIG9mIGZpbGVzOiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY2AsIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jYCwgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgLCBhbmQgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oYC4gVGhpcyBnaXZlcyBhIHN0cm9uZyBjbHVlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIGxvZ2ljLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXNlIGNoYW5nZXMgYXJlIG1vZGlmeWluZyBob3cgcmVkaXN0cmlidXRvciBpb2RldnMgYXJlIHJlZ2lzdGVyZWQsIHVucmVnaXN0ZXJlZCwgYW5kIGhvdyByZWRpc3RyaWJ1dG9yIGFzc2lnbm1lbnRzIGFyZSBoYW5kbGVkLCBpbmNsdWRpbmcgcm9sbGJhY2tzIGFuZCB1bmRvIG9wZXJhdGlvbnMuIEkgc2VlIGZ1bmN0aW9ucyBsaWtlIGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgLCBgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCBhZGRlZCwgd2hpY2ggaXMgYSBnb29kIGluZGljYXRvciBvZiBjb21wbGV4IHN0YXRlIG1hbmFnZW1lbnQuIFRoZXJlJiMzOTtzIGFsc28gYSBjaGVjayBpbiBga3ZtX3ZnaWNfYWRkcmAgdGhhdCByZXN0cmljdHMgcmVkaXN0cmlidXRvciB1cGRhdGVzIGR1cmluZyB2Q1BVIGNyZWF0aW9uLiBTbywgdGhlcmUgaXMgc3RhdGUgdHJhY2tpbmcuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBmb3IgZnV6emluZy4gQWZ0ZXIgZ29pbmcgdGhyb3VnaCB0aGUgY29kZSwgSSBhbSBsb29raW5nIGF0OgoKKiAgIGBrdm1fdmdpY192Y3B1X2Rlc3Ryb3lgIC0gZ2xvYmFsCiogICBga3ZtX3ZnaWNfZGVzdHJveWAgLSBnbG9iYWwKKiAgIGBrdm1fdmdpY19hZGRyYCAtIHN0YXRpYywgYnV0IGxpa2VseSB3ZSBjYW4gdHJpZ2dlciB2aWEgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCBvciBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgCiogICBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgIC0gZ2xvYmFsCiogICBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgIC0gZ2xvYmFsCiogICBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAgLSBnbG9iYWwKKiAgIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCAtIGdsb2JhbAoKSSBjYW4gY29uZmlybSB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzIHRoZSBgQ09ORklHX0tWTWAgS2NvbmZpZyBvcHRpb24uCgpTbywgaW4gY29uY2x1c2lvbiwgdGhpcyBpcyBhIGRlZmluaXRlIGZ1enppbmcgdGFyZ2V0LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZXhwb3NlZCBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gdmlhIGlvY3Rscy4gSSB3aWxsIG5vdyBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIHN5emthbGxlciB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vdmdpYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYz05Mz1zdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaXRlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMtMTUzLVx0XHRpZiAod3JpdGUpIHtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmM6MTU0Olx0XHRcdHIgPSB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShrdm0sIDAsIGFkZHIsIDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xNTUtXHRcdFx0Z290byBvdXQ7XG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xODMtXHRcdFx0ZWxzZVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYzoxODQ6XHRcdFx0XHRyID0gdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoa3ZtLCBpbmRleCxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMtMTg1LVx0XHRcdFx0XHRcdFx0ICAgIGJhc2UsIGNvdW50KTtcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTk5MT12b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05OTgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjk5OTppbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDAte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oPTMzMj1pbnQgdmdpY192M19zYXZlX3BlbmRpbmdfdGFibGVzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozMzM6aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oLTMzNC1pbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU5NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIFZnaWMgQ2xlYW51cCBpbiB0aGUgS1ZNL0FSTTY0IENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGNsZWFuaW5nIHVwIHRoZSBWaXJ0dWFsIEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgKHZHSUMpIGNvZGUsIHNwZWNpZmljYWxseSBvbiBBUk02NCB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSYjMzk7dmUgZ290IGEgZmV3IGZ1bmN0aW9ucyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBleGFtaW5hdGlvbjogYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCwgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldmAsIGBrdm1fdmdpY192Y3B1X2Rlc3Ryb3lgLCBhbmQgYGt2bV92Z2ljX2Rlc3Ryb3lgLiBUaGVzZSBhbGwgc2VlbSBpbnRpbWF0ZWx5IGludm9sdmVkIGluIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGUgdkdJQyByZWRpc3RyaWJ1dG9yIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4gU2VlbXMgbGlrZSBhIHNvbGlkIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiBCZWZvcmUgSSBkaXZlIGludG8gZWFjaCBmdW5jdGlvbiBpbmRpdmlkdWFsbHkgdGhvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBLVk0gc3VwcG9ydCBvbiBBUk02NC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZ1bGx5IGF3YXJlIG9mIGhvdyBLVk0gaXMgY29uZmlndXJlZCwgdGhlIGJ1aWxkIGZsYWdzLCBhbmQgYW55IGRlcGVuZGVuY2llcyBiZWZvcmUgcHJvY2VlZGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGhlbHAgbWUgYXZvaWQgYW55IHBvdGVudGlhbCBtaXNzdGVwcyBvciBvdmVybG9va2luZyBjcml0aWNhbCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXHRib29sIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBLVk1gLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LiBOb3csIEkgbmVlZCB0byBpbW1lZGlhdGVseSBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGUgY29uZmlndXJhdGlvbi4gTXkgZm9jdXMsIGFzIGFsd2F5cywgaXMgb24gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBwbGF0Zm9ybSBzcGVjaWZpY3MuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHN5c3RlbSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLVk0gY29uZmlndXJhdGlvbiBmb3IgdGhlIGluY2x1c2lvbiBvZiBgVkdJQ3YzYCBkZXRhaWxzLiBJIGFtIGdvaW5nIHRvIHNlZSB3aGF0IHNvcnQgb2Ygc3BlY2lmaWMgdHVuaW5ncyB3ZSBoYXZlIGluIHBsYWNlIHRoZXJlLiBJcyB0aGVyZSBhIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIGJsb2NrIGZvciBWR0lDdjMsIG9yIGFyZSB0aGUgc2V0dGluZ3MgaW1wbGllZCB0aHJvdWdoIHNvbWUgYnJvYWRlciBzZXR0aW5ncz8gSXTigJlzIGNydWNpYWwgdG8ga25vdyBpZiB3ZSBoYXZlIGV4cGxpY2l0IGNvbnRyb2wgb3IgaWYgd2UmIzM5O3JlIGluaGVyaXRpbmcgZGVmYXVsdHMuIEVpdGhlciB3YXksIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgb3VyIHNldHVwIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipWR0lDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzEKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBBUk02NCBWR0lDdjMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYW55dGhpbmcgZXhvdGljOyBpdCYjMzk7cyBqdXN0IGRlYWxpbmcgd2l0aCBgS1ZNYC4gTGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZy4gVGhlIGtleSBzZWVtcyB0byBiZSB0aGUgYEZvY3VzU3ltYm9sc2AsIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhvc2U6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBga3ZtX3ZnaWNfdmNwdV9kZXN0cm95YCwgYW5kIGBrdm1fdmdpY19kZXN0cm95YC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgZ2xvYmFsIEFQSSBlbnRyeXBvaW50cywgbm90IHN0YXRpYyBvciBpbmxpbmVkLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhYm91dCBob3cgdGhlIEtWTSBBUk02NCBWR0lDdjMgaGFuZGxlcyB0aGUgcmVkaXN0cmlidXRvciByZWdpb24uIEl04oCZcyBhYm91dCBmaXhpbmcgcmFjZXMgYW5kIHJvbGxiYWNrIGlzc3VlcyB0aGF0IHBvcCB1cCB3aGVuIHdlJiMzOTtyZSBjcmVhdGluZyB2Q1BVcyBhbmQgYXNzaWduaW5nIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlZGlzdHJpYnV0b3IuIFRoaXMgbWVhbnMgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCB0aG9zZSBgS1ZNX1NFVF9ERVZJQ0VfQVRUUmAgaW9jdGxzIOKAkyBzbywgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBvbiBBUk02NC4KCkp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIGBrdm1fdmdpY19hZGRyYC4gQWhhLCB5ZXMsIGl0JiMzOTtzIHN0YXRpYyBpbiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY2AuIEJ1dCBpdCYjMzk7cyBhbHJpZ2h0LCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgIGlzIGdsb2JhbCBhbmQgY2FsbGVkIGZyb20gaXQsIHNvIGl0JiMzOTtzIGFsbCBtYWtpbmcgc2Vuc2UuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpczsgSSYjMzk7bGwgcmVjb3JkIG15IGZpbmRpbmdzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlJiMzNDssCiAgICAmIzM0O3ZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O3ZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldiYjMzQ7LAogICAgJiMzNDtrdm1fdmdpY192Y3B1X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7a3ZtX3ZnaWNfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIEFSTTY0IFZHSUN2MyByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZpeGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHJvbGxiYWNrIGxvZ2ljIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGFuZCByZWRpc3RyaWJ1dG9yIGJhc2UgYWRkcmVzcyBhc3NpZ25tZW50LiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1NFVF9ERVZJQ0VfQVRUUikgYW5kIGFmZmVjdHMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBvbiBBUk02NCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmdpY192M19zZXRfcmVkaXN0X2Jhc2UmIzM0OywKICAgICYjMzQ7dmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYmIzM0OywKICAgICYjMzQ7dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldiYjMzQ7LAogICAgJiMzNDtfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2JiMzNDssCiAgICAmIzM0O2t2bV92Z2ljX3ZjcHVfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtrdm1fdmdpY19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgcm9sbGJhY2sgbG9naWMgZHVyaW5nIHZDUFUgY3JlYXRpb24gYW5kIHJlZGlzdHJpYnV0b3IgYmFzZSBhZGRyZXNzIGFzc2lnbm1lbnQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fU0VUX0RFVklDRV9BVFRSKSBhbmQgYWZmZWN0cyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IG9uIEFSTTY0LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U2YjQ3MWUyNWFmYWQzZDBmYTlkN2NkMTJhNTFjOTE4N2RlMGRmZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEwOjIwOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMKaW5kZXggOTA3MDU3ODgxYjI2YS4uODFhYjVhNmJmOGJjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jCkBAIC01MTksMjkgJiM0Mzs1MTksNiBAQCBzdGF0aWMgdm9pZCBfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2Z2ljX2NwdS0mZ3Q7YXBfbGlzdF9oZWFkKTsKIAlrZnJlZSh2Z2ljX2NwdS0mZ3Q7cHJpdmF0ZV9pcnFzKTsKIAl2Z2ljX2NwdS0mZ3Q7cHJpdmF0ZV9pcnFzID0gTlVMTDsKLQotCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykgewotCQkvKgotCQkgKiBJZiB0aGlzIHZDUFUgaXMgYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgYSBmYWlsZWQgY3JlYXRpb24KLQkJICogdGhlbiB1bnJlZ2lzdGVyIHRoZSByZWRpc3RyaWJ1dG9yIHRvIGF2b2lkIGxlYXZpbmcgYmVoaW5kIGEKLQkJICogZGFuZ2xpbmcgcG9pbnRlciB0byB0aGUgdkNQVSBzdHJ1Y3QuCi0JCSAqCi0JCSAqIHZDUFVzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChpLmUuIGFkZGVkIHRvCi0JCSAqIGt2bS0mZ3Q7dmNwdV9hcnJheSkgZ2V0IHVucmVnaXN0ZXJlZCBpbiBrdm1fdmdpY19kZXN0cm95KCksIGFzCi0JCSAqIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hpbGUgaG9sZGluZyBrdm0tJmd0O2FyY2guY29uZmlnX2xvY2sKLQkJICogaW4gdGhlIFZNIHRlYXJkb3duIHBhdGggYW5kIHdvdWxkIG90aGVyd2lzZSBpbnRyb2R1Y2UgYSBsb2NrCi0JCSAqIGludmVyc2lvbiB3LnIudC4ga3ZtLSZndDtzcmN1LgotCQkgKgotCQkgKiB2Q1BVcyB0aGF0IGZhaWxlZCBjcmVhdGlvbiBhcmUgdG9ybiBkb3duIG91dHNpZGUgb2YgdGhlCi0JCSAqIGt2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayBhbmQgZG8gbm90IGdldCB1bnJlZ2lzdGVyZWQgaW4KLQkJICoga3ZtX3ZnaWNfZGVzdHJveSgpLCBtZWFuaW5nIGl0IGlzIGJvdGggc2FmZSBhbmQgbmVjZXNzYXJ5IHRvCi0JCSAqIGRvIHNvIGhlcmUuCi0JCSAqLwotCQlpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKHZjcHUtJmd0O2t2bSwgdmNwdS0mZ3Q7dmNwdV9pZCkgIT0gdmNwdSkKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7Ci0KLQkJdmdpY19jcHUtJmd0O3JkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjsKLQl9CiB9CiAKIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTU0OSw3ICYjNDM7NTI2LDE2IEBAIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAKIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKQomIzQzOwkJdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0MzsKIAlfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJCV9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIH0KIApAQCAtNTU5LDIxICYjNDM7NTQ1LDIzIEBAIHZvaWQga3ZtX3ZnaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pCiAJdW5zaWduZWQgbG9uZyBpOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWlmIChrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykKJiM0MzsJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKJiM0MzsJCQl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCiAJdmdpY19kZWJ1Z19kZXN0cm95KGt2bSk7CiAKLQlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewogCQlfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykKJiM0MzsJCQlfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpOwomIzQzOwl9CiAKIAlrdm1fdmdpY19kaXN0X2Rlc3Ryb3koa3ZtKTsKIAogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7Ci0KLQlpZiAoa3ZtLSZndDthcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpCi0JCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKLQkJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7Ci0KIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYwppbmRleCA5MGJlOTk0NDNkZjNiLi40OGMzYjJhNDhjMjAyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMKQEAgLTk3LDYgJiM0Mzs5Nyw5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiAJcGh5c19hZGRyX3QgKmFkZHJfcHRyLCBhbGlnbm1lbnQsIHNpemU7CiAJdTY0IHVuZGVmX3ZhbHVlID0gVkdJQ19BRERSX1VOREVGOwogCXU2NCBhZGRyOwomIzQzOwlib29sIHJlZGlzdF93cml0ZSA9IHdyaXRlICZhbXA7JmFtcDsKJiM0MzsJCShhdHRyLSZndDthdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHwKJiM0MzsJCSBhdHRyLSZndDthdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OKTsKIAlpbnQgcjsKIAogCS8qIFJlYWRpbmcgYSByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBhZGRyIGltcGxpZXMgZ2V0dGluZyB0aGUgaW5kZXggKi8KQEAgLTEwNCw2ICYjNDM7MTA3LDE5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiAJCWlmIChnZXRfdXNlcihhZGRyLCB1YWRkcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHZDUFUgY2FuIGhhdmUgYW4gUkQgYXNzaWdubWVudCBiZWZvcmUgaXQgaXMgdmlzaWJsZSB0bwomIzQzOwkgKiBrdm1fZm9yX2VhY2hfdmNwdSgpLiBSZWplY3QgcmVkaXN0cmlidXRvciB1cGRhdGVzIHdoaWxlIHZDUFUgY3JlYXRpb24KJiM0MzsJICogaXMgaW4gcHJvZ3Jlc3MsIHNvIHJvbGxiYWNrIGNhbiByZXNldCBldmVyeSBhc3NpZ25tZW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlZGlzdF93cml0ZSkgewomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAoa3ZtLSZndDtjcmVhdGVkX3ZjcHVzICE9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpKSB7CiYjNDM7CQkJciA9IC1FQlVTWTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2tfa3ZtOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBTaW5jZSB3ZSBjYW4mIzM5O3QgaG9sZCBjb25maWdfbG9jayB3aGlsZSByZWdpc3RlcmluZyB0aGUgcmVkaXN0cmlidXRvcgogCSAqIGlvZGV2cywgdGFrZSB0aGUgc2xvdHNfbG9jayBpbW1lZGlhdGVseS4KQEAgLTIwMSw2ICYjNDM7MjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKIAomIzQzO291dF91bmxvY2tfa3ZtOgomIzQzOwlpZiAocmVkaXN0X3dyaXRlKQomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsKIAlpZiAoIXIgJmFtcDsmYW1wOyAhd3JpdGUpCiAJCXIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYwppbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMKQEAgLTc2Niw2ICYjNDM7NzY2LDE4IEBAIHVuc2lnbmVkIGludCB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldihzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmRldikKIAlyZXR1cm4gU1pfNjRLOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gudmdpY19jcHU7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwl2Z2ljX2NwdS0mZ3Q7cmRyZWctJmd0O2ZyZWVfaW5kZXgtLTsKJiM0MzsJX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2CiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25ncwpAQCAtODE4LDE2ICYjNDM7ODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmRfZGV2LSZndDtucl9yZWdpb25zID0gQVJSQVlfU0laRSh2Z2ljX3YzX3JkX3JlZ2lzdGVycyk7CiAJcmRfZGV2LSZndDtyZWRpc3RfdmNwdSA9IHZjcHU7CiAKJiM0MzsJLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KJiM0MzsJcmRyZWctJmd0O2ZyZWVfaW5kZXgmIzQzOyYjNDM7OwomIzQzOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAKIAlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSwKIAkJCQkgICAgICAyICogU1pfNjRLLCAmYW1wO3JkX2Rldi0mZ3Q7ZGV2KTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpOwogCi0JLyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi8KLQlyZHJlZy0mZ3Q7ZnJlZV9pbmRleCYjNDM7JiM0Mzs7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKQEAgLTg0MSw2ICYjNDM7ODU0LDQwIEBAIHZvaWQgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LSZndDtrdm0sIEtWTV9NTUlPX0JVUywgJmFtcDtyZF9kZXYtJmd0O2Rldik7CiB9CiAKJiM0Mzt2b2lkIF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CXZnaWNfY3B1LSZndDtyZHJlZyA9IE5VTEw7CiYjNDM7CXZnaWNfY3B1LSZndDtyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnLCAqaXRlcjsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIGM7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwomIzQzOwlyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkKJiM0MzsJCXZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CWt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkKJiM0MzsJCV9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgJmFtcDtrdm0tJmd0O2FyY2gudmdpYy5yZF9yZWdpb25zLCBsaXN0KQomIzQzOwkJaXRlci0mZ3Q7ZnJlZV9pbmRleCA9IDA7CiYjNDM7CiYjNDM7CXZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwpAQCAtODU1LDE2ICYjNDM7OTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSkKIAkJCWJyZWFrOwogCX0KIAotCWlmIChyZXQpIHsKLQkJLyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi8KLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IGM7IGkmIzQzOyYjNDM7KSB7Ci0JCQl2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7Ci0JCQl2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpOwotCQl9Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTUzLDE3ICYjNDM7OTkwLDggQEAgc3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCwKIAogdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQl1bnNpZ25lZCBsb25nIGM7Ci0KIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAotCS8qIEdhcmJhZ2UgY29sbGVjdCB0aGUgcmVnaW9uICovCi0Ja3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7Ci0JCWlmICh2Y3B1LSZndDthcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKQotCQkJdmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS5yZHJlZyA9IE5VTEw7Ci0JfQotCiAJbGlzdF9kZWwoJmFtcDtyZHJlZy0mZ3Q7bGlzdCk7CiAJa2ZyZWUocmRyZWcpOwogfQpAQCAtOTcyLDYgJiM0MzsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KQogewogCWludCByZXQ7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiAJcmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwpAQCAtOTg0LDEyICYjNDM7MTAxNCw3IEBAIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCkKIAkgKi8KIAlyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7CiAJaWYgKHJldCkgewotCQlzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZzsKLQotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQkJcmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpOwotCQl2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsJCXZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKaW5kZXggZjQ1ZjdlM2VjNGQ2ZS4uZTMyZTJiNTZhNDdlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmgKQEAgLTMzMyw2ICYjNDM7MzMzLDcgQEAgaW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pOwogaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTsKIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pOwogCiB2b2lkIHZnaWNfdjNfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jCmluZGV4IDQ3ZTM0YjQzYWZiMjkuLjVhMzBmM2NiMDM5YmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmMKQEAgLTUsNiAmIzQzOzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuCiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKQEAgLTEzLDEyICYjNDM7MTQsMjEgQEAKIAogI2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Z2ljLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZnaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2dpY192My5oJiMzNDsKIAogI2RlZmluZSBOUl9WQ1BVUwkJNAogCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFCUdJQ1JfQkFTRV9HUEEKJiM0MzsjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UJXAomIzQzOwkoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSAmIzQzOyAyICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpCiYjNDM7I2RlZmluZSBSRURJU1RfUkVUUllfRElTVF9CQVNFCQlcCiYjNDM7CShSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKQomIzQzOyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRQlcCiYjNDM7CShSRURJU1RfUkVUUllfRElTVF9CQVNFICYjNDM7IEtWTV9WR0lDX1YzX0RJU1RfU0laRSkKJiM0MzsKICNkZWZpbmUgUkVHX09GRlNFVCh2Y3B1LCBvZmZzZXQpICgoKHU2NCl2Y3B1ICZsdDsmbHQ7IDMyKSB8IG9mZnNldCkKIAogI2RlZmluZSBWR0lDX0RFVl9JU19WMihfZCkgKChfZCkgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyKQpAQCAtNjUsNiAmIzQzOzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKIAlHVUVTVF9ET05FKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwkvKiBUaGUgZmlyc3QgdGhyZWUgcmVkaXN0cmlidXRvcnMgc3BhbiBhZGphY2VudCByZWdpb25zIDAgYW5kIDEuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9WQ1BVUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBiYXNlID0gaSAmbHQ7IDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICYjNDM7CiYjNDM7CQkJCSAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOgomIzQzOwkJCQkgICAgICAgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRTsKJiM0MzsJCXU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgJiM0MzsgR0lDUl9UWVBFUikpOwomIzQzOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKEdJQ1JfVFlQRVJfQ1BVX05VTUJFUih0eXBlciksIGkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiAvKiB3ZSBkb24mIzM5O3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi8KIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewpAQCAtNzMsNiAmIzQzOzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSwKIAkJCQkJICAgICAgdTMyIG5yX3ZjcHVzLAomIzQzOwkJCQkJICAgICAgdm9pZCAqZ3Vlc3RfY29kZSwKIAkJCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKQogewogCXN0cnVjdCB2bV9naWMgdjsKQEAgLTMzOCw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSkKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CiAJaW50IHJldCwgaTsKIAotCXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtMzU5LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ZjcHVzX3RoZW5fdmdpYyh1MzIgZ2ljX2Rldl90eXBlKQogCXN0cnVjdCB2bV9naWMgdjsKIAlpbnQgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAlzdWJ0ZXN0X2Rpc3RfcmRpc3QoJmFtcDt2KTsKIApAQCAtNDExLDcgJiM0Mzs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKQogCXU2NCBhZGRyOwogCWludCByZXQ7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTsKJiM0MzsJdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTsKIAlzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKCZhbXA7dik7CiAJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKIAkJCSAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7CkBAIC00MjIsNyAmIzQzOzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpCiAKIAkvKiBzdGVwMiAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTsKQEAgLTQzNiw3ICYjNDM7NDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAogCS8qIHN0ZXAgMyAqLwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJc3VidGVzdF92M19yZWRpc3RfcmVnaW9ucygmYW1wO3YpOwogCiAJcmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLApAQCAtNDU3LDYgJiM0Mzs0ODksNzAgQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZCkKIAl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW05SX1ZDUFVTXTsKJiM0MzsJc3RydWN0IHZtX2dpYyB2OwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCBhZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsCiYjNDM7CQkJCSAgICAgZ3Vlc3RfY2hlY2tfcmVkaXN0X3JldHJ5LCB2Y3B1cyk7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFLCAwLCAxKTsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiwKJiM0MzsJCQkgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sICZhbXA7YWRkcik7CiYjNDM7CiYjNDM7CWFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpOwomIzQzOwlyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsCiYjNDM7CQkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwKJiM0MzsJCQkJICAgICZhbXA7YWRkcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKJiM0MzsJCSAgICAmIzM0O3JlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpOwomIzQzOwlrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLAomIzQzOwkJCSAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgJmFtcDthZGRyKTsKJiM0MzsKJiM0MzsJdmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwKJiM0MzsJCSB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLSZndDttb2RlLAomIzQzOwkJCQkJIDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpOwomIzQzOwl2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLAomIzQzOwkJIHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tJmd0O21vZGUsCiYjNDM7CQkJCQkgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTsKJiM0MzsKJiM0MzsJa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCwKJiM0MzsJCQkgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X3J1bih2Y3B1c1swXSk7CiYjNDM7CXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHVzWzBdLCAmYW1wO3VjKSkgewomIzQzOwljYXNlIFVDQUxMX0RPTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBVQ0FMTF9BQk9SVDoKJiM0MzsJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVUNBTExfTk9ORToKJiM0MzsJCWlmICh2Y3B1c1swXS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKQomIzQzOwkJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseCYjMzQ7LAomIzQzOwkJCQkgIHZjcHVzWzBdLSZndDtydW4tJmd0O21taW8ucGh5c19hZGRyKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1JiMzNDssCiYjNDM7CQkJICB1Yy5jbWQsIHZjcHVzWzBdLSZndDtydW4tJmd0O2V4aXRfcmVhc29uKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2bV9naWNfZGVzdHJveSgmYW1wO3YpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZCkKIHsKIAlzdHJ1Y3Qgdm1fZ2ljIHY7CkBAIC02MDgsNyAmIzQzOzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKQogCWludCByZXQsIGk7CiAJdTY0IGFkZHI7CiAKLQl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpOwomIzQzOwl2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgZ3Vlc3RfY29kZSwKJiM0MzsJCQkJICAgICB2Y3B1cyk7CiAKIAkvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovCiAJYWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTsKQEAgLTY0MSw3ICYjNDM7NzM4LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19pdHNfcmVnaW9uKHZvaWQpCiAJdTY0IGFkZHI7CiAJaW50IGl0c19mZCwgcmV0OwogCi0JdiA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7CiYjNDM7CXYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywKJiM0MzsJCQkJICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJaXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7CiAKIAlhZGRyID0gMHg0MDEwMDA7CkBAIC02ODQsNyAmIzQzOzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpCiAJdTMyIHR5cGVyMjsKIAlpbnQgcmV0OwogCi0Jdm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpOwomIzQzOwl2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLAomIzQzOwkJCQkgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7CiAJa3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUywKIAkJCSAgICBHSUNEX1RZUEVSMiwgJmFtcDt0eXBlcjIpOwogCWhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgJmFtcDsgR0lDRF9UWVBFUjJfbkFTU0dJY2FwOwpAQCAtOTc4LDYgJiM0MzsxMDc3LDcgQEAgdm9pZCBydW5fdGVzdHModTMyIGdpY19kZXZfdHlwZSkKIAogCWlmIChWR0lDX0RFVl9JU19WMyhnaWNfZGV2X3R5cGUpKSB7CiAJCXRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKCk7CiYjNDM7CQl0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTsKIAkJdGVzdF92M190eXBlcl9hY2Nlc3NlcygpOwogCQl0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7CiAJCXRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDg0CgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDE1MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIFZHSUMgdjMgUmVkaXN0cmlidXRvciBJbml0aWFsaXphdGlvbiBhbmQgVGVhcmRvd24gLSBGb2N1c2VkIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0aWdodGVuaW5nIHVwIHRoZSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHByb2NlZHVyZXMsIHNwZWNpZmljYWxseSB0byBoYW5kbGUgc2NlbmFyaW9zIHdoZXJlIHZDUFUgY3JlYXRpb24gZmFpbHMgb3Igc2V0dGluZyB0aGUgcmVkaXN0cmlidXRvciBiYXNlIGZhaWxzLiBUaGUga2V5IGhlcmUgaXMgcm9sbGJhY2suIEl0IHNlZW1zIHRoZSBjb3JlIHByb2JsZW0gaXMgcG90ZW50aWFsbHkgZGFuZ2xpbmcgcG9pbnRlcnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgY29ycnVwdGlvbiBkdXJpbmcgdGhlc2UgZmFpbHVyZSBjYXNlcy4KCk15IGZpcnN0IHRob3VnaHQgd2FzLCBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBiZWluZyBpbnRyb2R1Y2VkPyBBIHF1aWNrIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBzdWdnZXN0cyBubywgd2hpY2ggaXMgYSByZWxpZWYuIFdlJiMzOTtyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgX19rdm1fdmdpY192Y3B1X2Rlc3Ryb3lgLCBga3ZtX3ZnaWNfdmNwdV9kZXN0cm95YCwgYGt2bV92Z2ljX2Rlc3Ryb3lgLCBga3ZtX3ZnaWNfYWRkcmAsIGB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldmAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbmAsIGB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbmAsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLgoKSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIGB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBhbmQgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgdG8gZW5zdXJlIHRoYXQgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSBjbGVhbmVkIHVwIGluIGVycm9yIHBhdGhzLiBUaGUgbmV3IGBrdm1fdmdpY19hZGRyYCBjaGVjayBsb29rcyBsaWtlIGEgc2ltcGxlIGNvbmN1cnJlbmN5IGNoZWNrIHRvIHByZXZlbnQgcmVkaXN0cmlidXRvciB1cGRhdGVzIHdoaWxlIHZDUFUgY3JlYXRpb24gaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCgpBZnRlciBjaGVja2luZyBga3ZtX3ZnaWNfYWRkcmAsIHRoZSBjb2RlIHNlZW1zIHNlbnNpYmxlLiBUaGUgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAgYW5kIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCBmdW5jdGlvbnMgYXJlIGp1c3QgcmVzb3VyY2UgY2xlYW51cCwgYW5kIGB2Z2ljX3YzX3JvbGxiYWNrX3JlZGlzdF9yZWdpb25gIGRvZXMgY2xlYW51cCBhY3Jvc3MgYWxsIHZjcHVzLgoKQmFzaWNhbGx5LCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZlbnNpdmUgcGF0Y2g6IGl0JiMzOTtzIG1ha2luZyBzdXJlIHRoYXQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIGR1cmluZyB2Q1BVIGNyZWF0aW9uIG9yIHJlZGlzdHJpYnV0b3Igc2V0dXAsIHdlIHByb3Blcmx5IHJlbGVhc2UgYWxsIHJlc291cmNlcyBhbmQgZG9uJiMzOTt0IGVuZCB1cCB3aXRoIGRhbmdsaW5nIHBvaW50ZXJzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9jayBpbnZlcnNpb24gYnVncy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggKmlzbiYjMzk7dCogYWRkaW5nIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuCgpTbywgZ2l2ZW4gdGhpcyBhbmFseXNpcywgdGhlIHBhdGNoIGxvb2tzIGNsZWFuIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZSwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBuZXcgYXR0YWNrIHN1cmZhY2VzLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXggdG8gaW5jcmVhc2UgdGhlIHJvYnVzdG5lc3MgYW5kIHJlbGlhYmlsaXR5IG9mIHRoZSBWR0lDIHYzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MjA6MjkuMTc1MjY4MjIxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzM5NjE4NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlXCIsXG4gICAgXCJ2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwidmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwiX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldlwiLFxuICAgIFwia3ZtX3ZnaWNfdmNwdV9kZXN0cm95XCIsXG4gICAgXCJrdm1fdmdpY19kZXN0cm95XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gVkdJQyB2MyByZWRpc3RyaWJ1dG9yIGluaXRpYWxpemF0aW9uLCB0ZWFyZG93biwgYW5kIHJvbGxiYWNrIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIHByb3BlciBjbGVhbnVwIGZ1bmN0aW9ucyAoYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbmApIGFuZCBhZGp1c3RzIGxvY2tpbmcgdG8gcHJldmVudCBkYW5nbGluZyBwb2ludGVycyBhbmQgbG9jayBpbnZlcnNpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGZhaWx1cmVzIG9yIHJlZGlzdHJpYnV0b3IgYmFzZSBzZXR1cCBmYWlsdXJlcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgY29uY3VycmVuY3ksIGFuZCBvYmplY3QgbGlmZWN5Y2xlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGFsbG93IHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkYW5nbGluZyBwb2ludGVycywgb3IgZGVhZGxvY2tzKSBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBMT0NLREVQLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciByZWdpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGFuZCByb2xsYmFjayBsb2dpYyBkdXJpbmcgdkNQVSBjcmVhdGlvbiBhbmQgcmVkaXN0cmlidXRvciBiYXNlIGFkZHJlc3MgYXNzaWdubWVudC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfREVWSUNFX0FUVFIpIGFuZCBhZmZlY3RzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIwOjI5LjE3NTI3NDIyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0OTkzNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2U2YjQ3MWUyNWFmYWQzZDBmYTlkN2NkMTJhNTFjOTE4N2RlMGRmZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMDoyMDoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xcbmluZGV4IDkwNzA1Nzg4MWIyNmEuLjgxYWI1YTZiZjhiYzggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmNcXG5AQCAtNTE5LDI5ICs1MTksNiBAQCBzdGF0aWMgdm9pZCBfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ2Z2ljX2NwdS1cXHUwMDNlYXBfbGlzdF9oZWFkKTtcXG4gXFx0a2ZyZWUodmdpY19jcHUtXFx1MDAzZXByaXZhdGVfaXJxcyk7XFxuIFxcdHZnaWNfY3B1LVxcdTAwM2Vwcml2YXRlX2lycXMgPSBOVUxMO1xcbi1cXG4tXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElmIHRoaXMgdkNQVSBpcyBiZWluZyBkZXN0cm95ZWQgYmVjYXVzZSBvZiBhIGZhaWxlZCBjcmVhdGlvblxcbi1cXHRcXHQgKiB0aGVuIHVucmVnaXN0ZXIgdGhlIHJlZGlzdHJpYnV0b3IgdG8gYXZvaWQgbGVhdmluZyBiZWhpbmQgYVxcbi1cXHRcXHQgKiBkYW5nbGluZyBwb2ludGVyIHRvIHRoZSB2Q1BVIHN0cnVjdC5cXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogdkNQVXMgdGhhdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgKGkuZS4gYWRkZWQgdG9cXG4tXFx0XFx0ICoga3ZtLVxcdTAwM2V2Y3B1X2FycmF5KSBnZXQgdW5yZWdpc3RlcmVkIGluIGt2bV92Z2ljX2Rlc3Ryb3koKSwgYXNcXG4tXFx0XFx0ICogdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGlsZSBob2xkaW5nIGt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9ja1xcbi1cXHRcXHQgKiBpbiB0aGUgVk0gdGVhcmRvd24gcGF0aCBhbmQgd291bGQgb3RoZXJ3aXNlIGludHJvZHVjZSBhIGxvY2tcXG4tXFx0XFx0ICogaW52ZXJzaW9uIHcuci50LiBrdm0tXFx1MDAzZXNyY3UuXFxuLVxcdFxcdCAqXFxuLVxcdFxcdCAqIHZDUFVzIHRoYXQgZmFpbGVkIGNyZWF0aW9uIGFyZSB0b3JuIGRvd24gb3V0c2lkZSBvZiB0aGVcXG4tXFx0XFx0ICoga3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrIGFuZCBkbyBub3QgZ2V0IHVucmVnaXN0ZXJlZCBpblxcbi1cXHRcXHQgKiBrdm1fdmdpY19kZXN0cm95KCksIG1lYW5pbmcgaXQgaXMgYm90aCBzYWZlIGFuZCBuZWNlc3NhcnkgdG9cXG4tXFx0XFx0ICogZG8gc28gaGVyZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChrdm1fZ2V0X3ZjcHVfYnlfaWQodmNwdS1cXHUwMDNla3ZtLCB2Y3B1LVxcdTAwM2V2Y3B1X2lkKSAhPSB2Y3B1KVxcbi1cXHRcXHRcXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbi1cXG4tXFx0XFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4tXFx0fVxcbiB9XFxuIFxcbiB2b2lkIGt2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTU0OSw3ICs1MjYsMTYgQEAgdm9pZCBrdm1fdmdpY192Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXFxuK1xcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuK1xcbiBcXHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcXG4rXFxuK1xcdGlmIChrdm0tXFx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXHRcXHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuK1xcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiB9XFxuIFxcbkBAIC01NTksMjEgKzU0NSwyMyBAQCB2b2lkIGt2bV92Z2ljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXFxuK1xcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcXG4rXFx0XFx0XFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIFxcbiBcXHR2Z2ljX2RlYnVnX2Rlc3Ryb3koa3ZtKTtcXG4gXFxuLVxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XFxuIFxcdFxcdF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xcbitcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXFxuK1xcdFxcdFxcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuK1xcdH1cXG4gXFxuIFxcdGt2bV92Z2ljX2Rpc3RfZGVzdHJveShrdm0pO1xcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXG4tXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxcbi1cXHRcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXFxuLVxcdFxcdFxcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XFxuLVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXFxuaW5kZXggOTBiZTk5NDQzZGYzYi4uNDhjM2IyYTQ4YzIwMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xcbkBAIC05Nyw2ICs5Nyw5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXFxuIFxcdHBoeXNfYWRkcl90ICphZGRyX3B0ciwgYWxpZ25tZW50LCBzaXplO1xcbiBcXHR1NjQgdW5kZWZfdmFsdWUgPSBWR0lDX0FERFJfVU5ERUY7XFxuIFxcdHU2NCBhZGRyO1xcbitcXHRib29sIHJlZGlzdF93cml0ZSA9IHdyaXRlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdChhdHRyLVxcdTAwM2VhdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHxcXG4rXFx0XFx0IGF0dHItXFx1MDAzZWF0dHIgPT0gS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04pO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qIFJlYWRpbmcgYSByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBhZGRyIGltcGxpZXMgZ2V0dGluZyB0aGUgaW5kZXggKi9cXG5AQCAtMTA0LDYgKzEwNywxOSBAQCBzdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaVxcbiBcXHRcXHRpZiAoZ2V0X3VzZXIoYWRkciwgdWFkZHIpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEEgdkNQVSBjYW4gaGF2ZSBhbiBSRCBhc3NpZ25tZW50IGJlZm9yZSBpdCBpcyB2aXNpYmxlIHRvXFxuK1xcdCAqIGt2bV9mb3JfZWFjaF92Y3B1KCkuIFJlamVjdCByZWRpc3RyaWJ1dG9yIHVwZGF0ZXMgd2hpbGUgdkNQVSBjcmVhdGlvblxcbitcXHQgKiBpcyBpbiBwcm9ncmVzcywgc28gcm9sbGJhY2sgY2FuIHJlc2V0IGV2ZXJ5IGFzc2lnbm1lbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAocmVkaXN0X3dyaXRlKSB7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWNyZWF0ZWRfdmNwdXMgIT0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKSkge1xcbitcXHRcXHRcXHRyID0gLUVCVVNZO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2tfa3ZtO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNpbmNlIHdlIGNhbid0IGhvbGQgY29uZmlnX2xvY2sgd2hpbGUgcmVnaXN0ZXJpbmcgdGhlIHJlZGlzdHJpYnV0b3JcXG4gXFx0ICogaW9kZXZzLCB0YWtlIHRoZSBzbG90c19sb2NrIGltbWVkaWF0ZWx5LlxcbkBAIC0yMDEsNiArMjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXFxuIG91dDpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiBcXG4rb3V0X3VubG9ja19rdm06XFxuK1xcdGlmIChyZWRpc3Rfd3JpdGUpXFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdGlmICghciBcXHUwMDI2XFx1MDAyNiAhd3JpdGUpXFxuIFxcdFxcdHIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcXG5pbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXFxuQEAgLTc2Niw2ICs3NjYsMTggQEAgdW5zaWduZWQgaW50IHZnaWNfdjNfaW5pdF9kaXN0X2lvZGV2KHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gU1pfNjRLO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuK1xcbitcXHR2Z2ljX2NwdS1cXHUwMDNlcmRyZWctXFx1MDAzZWZyZWVfaW5kZXgtLTtcXG4rXFx0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XFxuICAqIEB2Y3B1OiAgICBUaGUgVkNQVSB0byB3aGljaCB0aGUgcmVkaXN0cmlidXRvciBiZWxvbmdzXFxuQEAgLTgxOCwxNiArODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJkX2Rldi1cXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xcbiBcXHRyZF9kZXYtXFx1MDAzZXJlZGlzdF92Y3B1ID0gdmNwdTtcXG4gXFxuK1xcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXFxuK1xcdHJkcmVnLVxcdTAwM2VmcmVlX2luZGV4Kys7XFxuK1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIFxcbiBcXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9NTUlPX0JVUywgcmRfYmFzZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgMiAqIFNaXzY0SywgXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0dmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHZjcHUpO1xcbiBcXG4tXFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKi9cXG4tXFx0cmRyZWctXFx1MDAzZWZyZWVfaW5kZXgrKztcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiByZXQ7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuQEAgLTg0MSw2ICs4NTQsNDAgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0a3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LVxcdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXFx1MDAyNnJkX2Rldi1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG4rdm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHU7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXG4rXFx0dmdpY19jcHUtXFx1MDAzZXJkcmVnID0gTlVMTDtcXG4rXFx0dmdpY19jcHUtXFx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxcbit7XFxuK1xcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnLCAqaXRlcjtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHR1bnNpZ25lZCBsb25nIGM7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXG4rXFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xcbitcXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKVxcbitcXHRcXHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKVxcbitcXHRcXHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZnaWMucmRfcmVnaW9ucywgbGlzdClcXG4rXFx0XFx0aXRlci1cXHUwMDNlZnJlZV9pbmRleCA9IDA7XFxuK1xcbitcXHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuQEAgLTg1NSwxNiArOTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cXG4tXFx0XFx0aW50IGk7XFxuLVxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYzsgaSsrKSB7XFxuLVxcdFxcdFxcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcXG4tXFx0XFx0XFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC05NTMsMTcgKzk5MCw4IEBAIHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXFxuIFxcbiB2b2lkIHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWcpXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHR1bnNpZ25lZCBsb25nIGM7XFxuLVxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiBcXG4tXFx0LyogR2FyYmFnZSBjb2xsZWN0IHRoZSByZWdpb24gKi9cXG4tXFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKSB7XFxuLVxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKVxcbi1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4gXFx0bGlzdF9kZWwoXFx1MDAyNnJkcmVnLVxcdTAwM2VsaXN0KTtcXG4gXFx0a2ZyZWUocmRyZWcpO1xcbiB9XFxuQEAgLTk3Miw2ICsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbitcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFx0cmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbkBAIC05ODQsMTIgKzEwMTQsNyBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XFxuLVxcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbi1cXHRcXHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XFxuLVxcdFxcdHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuK1xcdFxcdHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihrdm0sIGluZGV4KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmggYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxcbmluZGV4IGY0NWY3ZTNlYzRkNmUuLmUzMmUyYjU2YTQ3ZWYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmhcXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxcbkBAIC0zMzMsNiArMzMzLDcgQEAgaW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbiBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpO1xcbiBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK3ZvaWQgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXG4gdm9pZCB2Z2ljX3YzX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXFxuaW5kZXggNDdlMzRiNDNhZmIyOS4uNWEzMGYzY2IwMzliZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcXG5AQCAtNSw2ICs1LDcgQEBcXG4gICogQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGFyYS5oXFx1MDAzZVxcbkBAIC0xMywxMiArMTQsMjEgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJnaWMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInByb2Nlc3Nvci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmdpYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZ2ljX3YzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIE5SX1ZDUFVTXFx0XFx0NFxcbiBcXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFXFx0R0lDUl9CQVNFX0dQQVxcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0VcXHRcXFxcXFxuK1xcdChSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICsgMiAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9ESVNUX0JBU0VcXHRcXHRcXFxcXFxuK1xcdChSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICsgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpXFxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRVxcdFxcXFxcXG4rXFx0KFJFRElTVF9SRVRSWV9ESVNUX0JBU0UgKyBLVk1fVkdJQ19WM19ESVNUX1NJWkUpXFxuK1xcbiAjZGVmaW5lIFJFR19PRkZTRVQodmNwdSwgb2Zmc2V0KSAoKCh1NjQpdmNwdSBcXHUwMDNjXFx1MDAzYyAzMikgfCBvZmZzZXQpXFxuIFxcbiAjZGVmaW5lIFZHSUNfREVWX0lTX1YyKF9kKSAoKF9kKSA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjIpXFxuQEAgLTY1LDYgKzc1LDIzIEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcXG4gXFx0R1VFU1RfRE9ORSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdC8qIFRoZSBmaXJzdCB0aHJlZSByZWRpc3RyaWJ1dG9ycyBzcGFuIGFkamFjZW50IHJlZ2lvbnMgMCBhbmQgMS4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX1ZDUFVTOyBpKyspIHtcXG4rXFx0XFx0dTY0IGJhc2UgPSBpIFxcdTAwM2MgMyA/IFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UgK1xcbitcXHRcXHRcXHRcXHQgICAgICAgaSAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFIDpcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0U7XFxuK1xcdFxcdHU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgKyBHSUNSX1RZUEVSKSk7XFxuK1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEoR0lDUl9UWVBFUl9DUFVfTlVNQkVSKHR5cGVyKSwgaSk7XFxuK1xcdH1cXG4rXFxuK1xcdEdVRVNUX0RPTkUoKTtcXG4rfVxcbitcXG4gLyogd2UgZG9uJ3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi9cXG4gc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG5AQCAtNzMsNiArMTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgc3RydWN0IHZtX2dpYyB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXModTMyIGdpY19kZXZfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIG5yX3ZjcHVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICpndWVzdF9jb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW10pXFxuIHtcXG4gXFx0c3RydWN0IHZtX2dpYyB2O1xcbkBAIC0zMzgsNyArMzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSlcXG4gXFx0c3RydWN0IHZtX2dpYyB2O1xcbiBcXHRpbnQgcmV0LCBpO1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIHZjcHVzKTtcXG4rXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcXG4gXFxuIFxcdHN1YnRlc3RfZGlzdF9yZGlzdChcXHUwMDI2dik7XFxuIFxcbkBAIC0zNTksNyArMzg3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92Y3B1c190aGVuX3ZnaWModTMyIGdpY19kZXZfdHlwZSlcXG4gXFx0c3RydWN0IHZtX2dpYyB2O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB2Y3B1cyk7XFxuIFxcbiBcXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXFx1MDAyNnYpO1xcbiBcXG5AQCAtNDExLDcgKzQ0MCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXFxuIFxcdHU2NCBhZGRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXFx1MDAyNnYpO1xcbiBcXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxcbiBcXHRcXHRcXHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xcbkBAIC00MjIsNyArNDUyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcXG4gXFxuIFxcdC8qIHN0ZXAyICovXFxuIFxcbi1cXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcXG4rXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxcbitcXHRcXHRcXHRcXHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcXG4gXFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcXHUwMDI2dik7XFxuIFxcbiBcXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpO1xcbkBAIC00MzYsNyArNDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcXG4gXFxuIFxcdC8qIHN0ZXAgMyAqL1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXFx1MDAyNnYpO1xcbiBcXG4gXFx0cmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxcbkBAIC00NTcsNiArNDg5LDcwIEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXFxuIFxcdHZtX2dpY19kZXN0cm95KFxcdTAwMjZ2KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tOUl9WQ1BVU107XFxuK1xcdHN0cnVjdCB2bV9naWMgdjtcXG4rXFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXHR1NjQgYWRkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jaGVja19yZWRpc3RfcmV0cnksIHZjcHVzKTtcXG4rXFxuK1xcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTtcXG4rXFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcXG4rXFx0XFx0XFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcXHUwMDI2YWRkcik7XFxuK1xcbitcXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRSwgMCwgMSk7XFxuK1xcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTiwgXFx1MDAyNmFkZHIpO1xcbitcXG4rXFx0YWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7XFxuK1xcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgXFx1MDAyNmFkZHIpO1xcbitcXG4rXFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpO1xcbitcXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXFxuK1xcdFxcdFxcdFxcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZhZGRyKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0IFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTCxcXG4rXFx0XFx0ICAgIFxcXCJyZWdpc3RlciByZWRpc3QgcmVnaW9uIGNvbGxpZGluZyB3aXRoIGRpc3RcXFwiKTtcXG4rXFxuK1xcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCAwLCAyKTtcXG4rXFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcXG4rXFx0XFx0XFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcXHUwMDI2YWRkcik7XFxuK1xcbitcXHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLFxcbitcXHRcXHQgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS1cXHUwMDNlbW9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0IDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xcbitcXHR2aXJ0X21hcCh2LnZtLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLFxcbitcXHRcXHQgdm1fY2FsY19udW1fZ3Vlc3RfcGFnZXModi52bS1cXHUwMDNlbW9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XFxuK1xcbitcXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxcbitcXHRcXHRcXHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xcbitcXG4rXFx0dmNwdV9ydW4odmNwdXNbMF0pO1xcbitcXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1c1swXSwgXFx1MDAyNnVjKSkge1xcbitcXHRjYXNlIFVDQUxMX0RPTkU6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFVDQUxMX0FCT1JUOlxcbitcXHRcXHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgVUNBTExfTk9ORTpcXG4rXFx0XFx0aWYgKHZjcHVzWzBdLVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pXFxuK1xcdFxcdFxcdFRFU1RfRkFJTChcXFwiVW5leHBlY3RlZCBNTUlPIGV4aXQgYXQgMHglbGx4XFxcIixcXG4rXFx0XFx0XFx0XFx0ICB2Y3B1c1swXS1cXHUwMDNlcnVuLVxcdTAwM2VtbWlvLnBoeXNfYWRkcik7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRURVNUX0ZBSUwoXFxcIlVuZXhwZWN0ZWQgdWNhbGwgJWx1LCBleGl0X3JlYXNvbiAldVxcXCIsXFxuK1xcdFxcdFxcdCAgdWMuY21kLCB2Y3B1c1swXS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbik7XFxuK1xcdH1cXG4rXFxuK1xcdHZtX2dpY19kZXN0cm95KFxcdTAwMjZ2KTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB2bV9naWMgdjtcXG5AQCAtNjA4LDcgKzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKVxcbiBcXHRpbnQgcmV0LCBpO1xcbiBcXHR1NjQgYWRkcjtcXG4gXFxuLVxcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCBndWVzdF9jb2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIHZjcHVzKTtcXG4gXFxuIFxcdC8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi9cXG4gXFx0YWRkciA9IG1heF9waHlzX3NpemUgLSAoMyAqIDIgKiAweDEwMDAwKTtcXG5AQCAtNjQxLDcgKzczOCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfaXRzX3JlZ2lvbih2b2lkKVxcbiBcXHR1NjQgYWRkcjtcXG4gXFx0aW50IGl0c19mZCwgcmV0O1xcbiBcXG4tXFx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XFxuK1xcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XFxuIFxcdGl0c19mZCA9IGt2bV9jcmVhdGVfZGV2aWNlKHYudm0sIEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19JVFMpO1xcbiBcXG4gXFx0YWRkciA9IDB4NDAxMDAwO1xcbkBAIC02ODQsNyArNzgyLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uYXNzZ2ljYXAodm9pZClcXG4gXFx0dTMyIHR5cGVyMjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcXG4rXFx0dm0gPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xcbiBcXHRrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLFxcbiBcXHRcXHRcXHQgICAgR0lDRF9UWVBFUjIsIFxcdTAwMjZ0eXBlcjIpO1xcbiBcXHRoYXNfbmFzc2dpY2FwID0gdHlwZXIyIFxcdTAwMjYgR0lDRF9UWVBFUjJfbkFTU0dJY2FwO1xcbkBAIC05NzgsNiArMTA3Nyw3IEBAIHZvaWQgcnVuX3Rlc3RzKHUzMiBnaWNfZGV2X3R5cGUpXFxuIFxcbiBcXHRpZiAoVkdJQ19ERVZfSVNfVjMoZ2ljX2Rldl90eXBlKSkge1xcbiBcXHRcXHR0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucygpO1xcbitcXHRcXHR0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTtcXG4gXFx0XFx0dGVzdF92M190eXBlcl9hY2Nlc3NlcygpO1xcbiBcXHRcXHR0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7XFxuIFxcdFxcdHRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIwOjI5LjY4MTA3NjE3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3NDgzOTc3ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlXCIsXG4gICAgXCJ2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwidmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwiX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldlwiLFxuICAgIFwia3ZtX3ZnaWNfdmNwdV9kZXN0cm95XCIsXG4gICAgXCJrdm1fdmdpY19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciByZWdpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGFuZCByb2xsYmFjayBsb2dpYyBkdXJpbmcgdkNQVSBjcmVhdGlvbiBhbmQgcmVkaXN0cmlidXRvciBiYXNlIGFkZHJlc3MgYXNzaWdubWVudC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfREVWSUNFX0FUVFIpIGFuZCBhZmZlY3RzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlNmI0NzFlMjVhZmFkM2QwZmE5ZDdjZDEyYTUxYzkxODdkZTBkZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMDoyMDoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jXG5pbmRleCA5MDcwNTc4ODFiMjZhLi44MWFiNWE2YmY4YmM4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xuQEAgLTUxOSwyOSArNTE5LDYgQEAgc3RhdGljIHZvaWQgX19rdm1fdmdpY192Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dmdpY19jcHUtXHUwMDNlYXBfbGlzdF9oZWFkKTtcbiBcdGtmcmVlKHZnaWNfY3B1LVx1MDAzZXByaXZhdGVfaXJxcyk7XG4gXHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBOVUxMO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMykge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0aGlzIHZDUFUgaXMgYmVpbmcgZGVzdHJveWVkIGJlY2F1c2Ugb2YgYSBmYWlsZWQgY3JlYXRpb25cbi1cdFx0ICogdGhlbiB1bnJlZ2lzdGVyIHRoZSByZWRpc3RyaWJ1dG9yIHRvIGF2b2lkIGxlYXZpbmcgYmVoaW5kIGFcbi1cdFx0ICogZGFuZ2xpbmcgcG9pbnRlciB0byB0aGUgdkNQVSBzdHJ1Y3QuXG4tXHRcdCAqXG4tXHRcdCAqIHZDUFVzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChpLmUuIGFkZGVkIHRvXG4tXHRcdCAqIGt2bS1cdTAwM2V2Y3B1X2FycmF5KSBnZXQgdW5yZWdpc3RlcmVkIGluIGt2bV92Z2ljX2Rlc3Ryb3koKSwgYXNcbi1cdFx0ICogdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGlsZSBob2xkaW5nIGt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrXG4tXHRcdCAqIGluIHRoZSBWTSB0ZWFyZG93biBwYXRoIGFuZCB3b3VsZCBvdGhlcndpc2UgaW50cm9kdWNlIGEgbG9ja1xuLVx0XHQgKiBpbnZlcnNpb24gdy5yLnQuIGt2bS1cdTAwM2VzcmN1LlxuLVx0XHQgKlxuLVx0XHQgKiB2Q1BVcyB0aGF0IGZhaWxlZCBjcmVhdGlvbiBhcmUgdG9ybiBkb3duIG91dHNpZGUgb2YgdGhlXG4tXHRcdCAqIGt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrIGFuZCBkbyBub3QgZ2V0IHVucmVnaXN0ZXJlZCBpblxuLVx0XHQgKiBrdm1fdmdpY19kZXN0cm95KCksIG1lYW5pbmcgaXQgaXMgYm90aCBzYWZlIGFuZCBuZWNlc3NhcnkgdG9cbi1cdFx0ICogZG8gc28gaGVyZS5cbi1cdFx0ICovXG4tXHRcdGlmIChrdm1fZ2V0X3ZjcHVfYnlfaWQodmNwdS1cdTAwM2Vrdm0sIHZjcHUtXHUwMDNldmNwdV9pZCkgIT0gdmNwdSlcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuLVxuLVx0XHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4tXHR9XG4gfVxuIFxuIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01NDksNyArNTI2LDE2IEBAIHZvaWQga3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRpZiAoa3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMylcbitcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcbiBcdF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuK1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXHRcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIH1cbiBcbkBAIC01NTksMjEgKzU0NSwyMyBAQCB2b2lkIGt2bV92Z2ljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRpZiAoa3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMylcbitcdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuK1x0XHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdHZnaWNfZGVidWdfZGVzdHJveShrdm0pO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKVxuK1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XG4gXHRcdF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHZjcHUpO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gudmdpYy52Z2ljX21vZGVsID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMylcbitcdFx0XHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1x0fVxuIFxuIFx0a3ZtX3ZnaWNfZGlzdF9kZXN0cm95KGt2bSk7XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVxuLVx0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXG4tXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuLVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmNcbmluZGV4IDkwYmU5OTQ0M2RmM2IuLjQ4YzNiMmE0OGMyMDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXG5AQCAtOTcsNiArOTcsOSBAQCBzdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaVxuIFx0cGh5c19hZGRyX3QgKmFkZHJfcHRyLCBhbGlnbm1lbnQsIHNpemU7XG4gXHR1NjQgdW5kZWZfdmFsdWUgPSBWR0lDX0FERFJfVU5ERUY7XG4gXHR1NjQgYWRkcjtcbitcdGJvb2wgcmVkaXN0X3dyaXRlID0gd3JpdGUgXHUwMDI2XHUwMDI2XG4rXHRcdChhdHRyLVx1MDAzZWF0dHIgPT0gS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVCB8fFxuK1x0XHQgYXR0ci1cdTAwM2VhdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OKTtcbiBcdGludCByO1xuIFxuIFx0LyogUmVhZGluZyBhIHJlZGlzdHJpYnV0b3IgcmVnaW9uIGFkZHIgaW1wbGllcyBnZXR0aW5nIHRoZSBpbmRleCAqL1xuQEAgLTEwNCw2ICsxMDcsMTkgQEAgc3RhdGljIGludCBrdm1fdmdpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0ciwgYm9vbCB3cmlcbiBcdFx0aWYgKGdldF91c2VyKGFkZHIsIHVhZGRyKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbitcdC8qXG4rXHQgKiBBIHZDUFUgY2FuIGhhdmUgYW4gUkQgYXNzaWdubWVudCBiZWZvcmUgaXQgaXMgdmlzaWJsZSB0b1xuK1x0ICoga3ZtX2Zvcl9lYWNoX3ZjcHUoKS4gUmVqZWN0IHJlZGlzdHJpYnV0b3IgdXBkYXRlcyB3aGlsZSB2Q1BVIGNyZWF0aW9uXG4rXHQgKiBpcyBpbiBwcm9ncmVzcywgc28gcm9sbGJhY2sgY2FuIHJlc2V0IGV2ZXJ5IGFzc2lnbm1lbnQuXG4rXHQgKi9cbitcdGlmIChyZWRpc3Rfd3JpdGUpIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4rXHRcdGlmIChrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cyAhPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKSkge1xuK1x0XHRcdHIgPSAtRUJVU1k7XG4rXHRcdFx0Z290byBvdXRfdW5sb2NrX2t2bTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFNpbmNlIHdlIGNhbid0IGhvbGQgY29uZmlnX2xvY2sgd2hpbGUgcmVnaXN0ZXJpbmcgdGhlIHJlZGlzdHJpYnV0b3JcbiBcdCAqIGlvZGV2cywgdGFrZSB0aGUgc2xvdHNfbG9jayBpbW1lZGlhdGVseS5cbkBAIC0yMDEsNiArMjE3LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbitvdXRfdW5sb2NrX2t2bTpcbitcdGlmIChyZWRpc3Rfd3JpdGUpXG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4rXG4gXHRpZiAoIXIgXHUwMDI2XHUwMDI2ICF3cml0ZSlcbiBcdFx0ciA9ICBwdXRfdXNlcihhZGRyLCB1YWRkcik7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNcbmluZGV4IDU5MTNhMjBkODMwMTkuLmRjODYwMTc4MTA1ZDkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG5AQCAtNzY2LDYgKzc2NiwxOCBAQCB1bnNpZ25lZCBpbnQgdmdpY192M19pbml0X2Rpc3RfaW9kZXYoc3RydWN0IHZnaWNfaW9fZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gU1pfNjRLO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHU7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1xuK1x0dmdpY19jcHUtXHUwMDNlcmRyZWctXHUwMDNlZnJlZV9pbmRleC0tO1xuK1x0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbit9XG4rXG4gLyoqXG4gICogdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYgLSByZWdpc3RlciBhIHNpbmdsZSByZWRpc3QgaW9kZXZcbiAgKiBAdmNwdTogICAgVGhlIFZDUFUgdG8gd2hpY2ggdGhlIHJlZGlzdHJpYnV0b3IgYmVsb25nc1xuQEAgLTgxOCwxNiArODMwLDE3IEBAIGludCB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZF9kZXYtXHUwMDNlbnJfcmVnaW9ucyA9IEFSUkFZX1NJWkUodmdpY192M19yZF9yZWdpc3RlcnMpO1xuIFx0cmRfZGV2LVx1MDAzZXJlZGlzdF92Y3B1ID0gdmNwdTtcbiBcbitcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXG4rXHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4Kys7XG4rXG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0cmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fTU1JT19CVVMsIHJkX2Jhc2UsXG4gXHRcdFx0XHQgICAgICAyICogU1pfNjRLLCBcdTAwMjZyZF9kZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudCh2Y3B1KTtcbiBcbi1cdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrICovXG4tXHRyZHJlZy1cdTAwM2VmcmVlX2luZGV4Kys7XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiByZXQ7XG4gXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG5AQCAtODQxLDYgKzg1NCw0MCBAQCB2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldih2Y3B1LVx1MDAzZWt2bSwgS1ZNX01NSU9fQlVTLCBcdTAwMjZyZF9kZXYtXHUwMDNlZGV2KTtcbiB9XG4gXG4rdm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdHZnaWNfY3B1LVx1MDAzZXJkcmVnID0gTlVMTDtcbitcdHZnaWNfY3B1LVx1MDAzZXJkX2lvZGV2LmJhc2VfYWRkciA9IFZHSUNfQUREUl9VTkRFRjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxuK3tcbitcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnLCAqaXRlcjtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHVuc2lnbmVkIGxvbmcgYztcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1xuK1x0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuK1xuK1x0a3ZtX2Zvcl9lYWNoX3ZjcHUoYywgdmNwdSwga3ZtKVxuK1x0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSlcbitcdFx0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXHUwMDI2a3ZtLVx1MDAzZWFyY2gudmdpYy5yZF9yZWdpb25zLCBsaXN0KVxuK1x0XHRpdGVyLVx1MDAzZWZyZWVfaW5kZXggPSAwO1xuK1xuK1x0dmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oa3ZtLCByZHJlZyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuQEAgLTg1NSwxNiArOTAyLDYgQEAgc3RhdGljIGludCB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChyZXQpIHtcbi1cdFx0LyogVGhlIGN1cnJlbnQgYyBmYWlsZWQsIHNvIGl0ZXJhdGUgb3ZlciB0aGUgcHJldmlvdXMgb25lcy4gKi9cbi1cdFx0aW50IGk7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGM7IGkrKykge1xuLVx0XHRcdHZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcbi1cdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC05NTMsMTcgKzk5MCw4IEBAIHN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXG4gXG4gdm9pZCB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHVuc2lnbmVkIGxvbmcgYztcbi1cbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuLVx0LyogR2FyYmFnZSBjb2xsZWN0IHRoZSByZWdpb24gKi9cbi1cdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSkge1xuLVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnJkcmVnID09IHJkcmVnKVxuLVx0XHRcdHZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZHJlZyA9IE5VTEw7XG4tXHR9XG4tXG4gXHRsaXN0X2RlbChcdTAwMjZyZHJlZy1cdTAwM2VsaXN0KTtcbiBcdGtmcmVlKHJkcmVnKTtcbiB9XG5AQCAtOTcyLDYgKzEwMDAsOCBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXG4ge1xuIFx0aW50IHJldDtcbiBcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXHRyZXQgPSB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oa3ZtLCBpbmRleCwgYWRkciwgY291bnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbkBAIC05ODQsMTIgKzEwMTQsNyBAQCBpbnQgdmdpY192M19zZXRfcmVkaXN0X2Jhc2Uoc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgsIHU2NCBhZGRyLCB1MzIgY291bnQpXG4gXHQgKi9cbiBcdHJldCA9IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoa3ZtKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0c3RydWN0IHZnaWNfcmVkaXN0X3JlZ2lvbiAqcmRyZWc7XG4tXG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVx0XHRyZHJlZyA9IHZnaWNfdjNfcmRpc3RfcmVnaW9uX2Zyb21faW5kZXgoa3ZtLCBpbmRleCk7XG4tXHRcdHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0XHR2Z2ljX3YzX3JvbGxiYWNrX3JlZGlzdF9yZWdpb24oa3ZtLCBpbmRleCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmggYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxuaW5kZXggZjQ1ZjdlM2VjNGQ2ZS4uZTMyZTJiNTZhNDdlZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oXG4rKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxuQEAgLTMzMyw2ICszMzMsNyBAQCBpbnQgdmdpY192M19zYXZlX3BlbmRpbmdfdGFibGVzKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcbiBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbit2b2lkIF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIHZnaWNfdjNfY2hlY2tfYmFzZShzdHJ1Y3Qga3ZtICprdm0pO1xuIFxuIHZvaWQgdmdpY192M19sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5pbmRleCA0N2UzNGI0M2FmYjI5Li41YTMwZjNjYjAzOWJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19pbml0LmNcbkBAIC01LDYgKzUsNyBAQFxuICAqIENvcHlyaWdodCAoQykgMjAyMCwgUmVkIEhhdCwgSW5jLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BhcmEuaFx1MDAzZVxuQEAgLTEzLDEyICsxNCwyMSBAQFxuIFxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJnaWMuaFwiXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4gI2luY2x1ZGUgXCJ2Z2ljLmhcIlxuICNpbmNsdWRlIFwiZ2ljX3YzLmhcIlxuIFxuICNkZWZpbmUgTlJfVkNQVVNcdFx0NFxuIFxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRVx0R0lDUl9CQVNFX0dQQVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX1JFR0lPTjFfQkFTRVx0XFxcbitcdChSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICsgMiAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKVxuKyNkZWZpbmUgUkVESVNUX1JFVFJZX0RJU1RfQkFTRVx0XHRcXFxuK1x0KFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UgKyBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0VcdFxcXG4rXHQoUkVESVNUX1JFVFJZX0RJU1RfQkFTRSArIEtWTV9WR0lDX1YzX0RJU1RfU0laRSlcbitcbiAjZGVmaW5lIFJFR19PRkZTRVQodmNwdSwgb2Zmc2V0KSAoKCh1NjQpdmNwdSBcdTAwM2NcdTAwM2MgMzIpIHwgb2Zmc2V0KVxuIFxuICNkZWZpbmUgVkdJQ19ERVZfSVNfVjIoX2QpICgoX2QpID09IEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMilcbkBAIC02NSw2ICs3NSwyMyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0LyogVGhlIGZpcnN0IHRocmVlIHJlZGlzdHJpYnV0b3JzIHNwYW4gYWRqYWNlbnQgcmVnaW9ucyAwIGFuZCAxLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfVkNQVVM7IGkrKykge1xuK1x0XHR1NjQgYmFzZSA9IGkgXHUwMDNjIDMgPyBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFICtcbitcdFx0XHRcdCAgICAgICBpICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUgOlxuK1x0XHRcdFx0ICAgICAgIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0U7XG4rXHRcdHU2NCB0eXBlciA9IHJlYWRxKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGJhc2UgKyBHSUNSX1RZUEVSKSk7XG4rXG4rXHRcdEdVRVNUX0FTU0VSVF9FUShHSUNSX1RZUEVSX0NQVV9OVU1CRVIodHlwZXIpLCBpKTtcbitcdH1cbitcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4gLyogd2UgZG9uJ3Qgd2FudCB0byBhc3NlcnQgb24gcnVuIGV4ZWN1dGlvbiwgaGVuY2UgdGhhdCBoZWxwZXIgKi9cbiBzdGF0aWMgaW50IHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG5AQCAtNzMsNiArMTAwLDcgQEAgc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHN0cnVjdCB2bV9naWMgdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHUzMiBucl92Y3B1cyxcbitcdFx0XHRcdFx0ICAgICAgdm9pZCAqZ3Vlc3RfY29kZSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tdKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC0zMzgsNyArMzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF92Z2ljX3RoZW5fdmNwdXModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQsIGk7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgMSwgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC0zNTksNyArMzg3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92Y3B1c190aGVuX3ZnaWModTMyIGdpY19kZXZfdHlwZSlcbiBcdHN0cnVjdCB2bV9naWMgdjtcbiBcdGludCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCBOUl9WQ1BVUywgZ3Vlc3RfY29kZSxcbitcdFx0XHRcdCAgICAgdmNwdXMpO1xuIFxuIFx0c3VidGVzdF9kaXN0X3JkaXN0KFx1MDAyNnYpO1xuIFxuQEAgLTQxMSw3ICs0NDAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuIFx0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG5AQCAtNDIyLDcgKzQ1Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXG4gXHQvKiBzdGVwMiAqL1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgMHgyODAwMDAsIDAsIDIpO1xuQEAgLTQzNiw3ICs0NjcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFxuIFx0Lyogc3RlcCAzICovXG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0c3VidGVzdF92M19yZWRpc3RfcmVnaW9ucyhcdTAwMjZ2KTtcbiBcbiBcdHJldCA9IF9fa3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbkBAIC00NTcsNiArNDg5LDcwIEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmV3X3JlZGlzdF9yZWdpb25zKHZvaWQpXG4gXHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tOUl9WQ1BVU107XG4rXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXHR1NjQgYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NoZWNrX3JlZGlzdF9yZXRyeSwgdmNwdXMpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDIsIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsIDAsIDApO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0UsIDAsIDEpO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRVRSWV9ESVNUX0JBU0U7XG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdCAgICBLVk1fVkdJQ19WM19BRERSX1RZUEVfRElTVCwgXHUwMDI2YWRkcik7XG4rXG4rXHRhZGRyID0gUkVESVNUX1JFR0lPTl9BVFRSX0FERFIoMSwgUkVESVNUX1JFVFJZX0RJU1RfQkFTRSwgMCwgMik7XG4rXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sXG4rXHRcdFx0XHQgICAgXHUwMDI2YWRkcik7XG4rXHRURVNUX0FTU0VSVChyZXQgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbitcdFx0ICAgIFwicmVnaXN0ZXIgcmVkaXN0IHJlZ2lvbiBjb2xsaWRpbmcgd2l0aCBkaXN0XCIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIDAsIDIpO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX1JFRElTVF9SRUdJT04sIFx1MDAyNmFkZHIpO1xuK1xuK1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSxcbitcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbitcdFx0XHRcdFx0IDMgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xuK1x0dmlydF9tYXAodi52bSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSwgUkVESVNUX1JFVFJZX1JFR0lPTjJfQkFTRSxcbitcdFx0IHZtX2NhbGNfbnVtX2d1ZXN0X3BhZ2VzKHYudm0tXHUwMDNlbW9kZSxcbitcdFx0XHRcdFx0IEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFKSk7XG4rXG4rXHRrdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9DVFJMLFxuK1x0XHRcdCAgICBLVk1fREVWX0FSTV9WR0lDX0NUUkxfSU5JVCwgTlVMTCk7XG4rXG4rXHR2Y3B1X3J1bih2Y3B1c1swXSk7XG4rXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1c1swXSwgXHUwMDI2dWMpKSB7XG4rXHRjYXNlIFVDQUxMX0RPTkU6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9BQk9SVDpcbitcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBVQ0FMTF9OT05FOlxuK1x0XHRpZiAodmNwdXNbMF0tXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX01NSU8pXG4rXHRcdFx0VEVTVF9GQUlMKFwiVW5leHBlY3RlZCBNTUlPIGV4aXQgYXQgMHglbGx4XCIsXG4rXHRcdFx0XHQgIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VtbWlvLnBoeXNfYWRkcik7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0ZGVmYXVsdDpcbitcdFx0VEVTVF9GQUlMKFwiVW5leHBlY3RlZCB1Y2FsbCAlbHUsIGV4aXRfcmVhc29uICV1XCIsXG4rXHRcdFx0ICB1Yy5jbWQsIHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbik7XG4rXHR9XG4rXG4rXHR2bV9naWNfZGVzdHJveShcdTAwMjZ2KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF92M190eXBlcl9hY2Nlc3Nlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB2bV9naWMgdjtcbkBAIC02MDgsNyArNzA0LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19yZWRpc3RfaXBhX3JhbmdlX2NoZWNrX2F0X3ZjcHVfcnVuKHZvaWQpXG4gXHRpbnQgcmV0LCBpO1xuIFx0dTY0IGFkZHI7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgMSwgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIDEsIGd1ZXN0X2NvZGUsXG4rXHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdC8qIFNldCBzcGFjZSBmb3IgMyByZWRpc3RzLCB3ZSBoYXZlIDEgdmNwdSwgc28gdGhpcyBzdWNjZWVkcy4gKi9cbiBcdGFkZHIgPSBtYXhfcGh5c19zaXplIC0gKDMgKiAyICogMHgxMDAwMCk7XG5AQCAtNjQxLDcgKzczOCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfaXRzX3JlZ2lvbih2b2lkKVxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgaXRzX2ZkLCByZXQ7XG4gXG4tXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUyxcbitcdFx0XHRcdCAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0aXRzX2ZkID0ga3ZtX2NyZWF0ZV9kZXZpY2Uodi52bSwgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX0lUUyk7XG4gXG4gXHRhZGRyID0gMHg0MDEwMDA7XG5AQCAtNjg0LDcgKzc4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfbmFzc2dpY2FwKHZvaWQpXG4gXHR1MzIgdHlwZXIyO1xuIFx0aW50IHJldDtcbiBcbi1cdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsIHZjcHVzKTtcbitcdHZtID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRrdm1fZGV2aWNlX2F0dHJfZ2V0KHZtLmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfRElTVF9SRUdTLFxuIFx0XHRcdCAgICBHSUNEX1RZUEVSMiwgXHUwMDI2dHlwZXIyKTtcbiBcdGhhc19uYXNzZ2ljYXAgPSB0eXBlcjIgXHUwMDI2IEdJQ0RfVFlQRVIyX25BU1NHSWNhcDtcbkBAIC05NzgsNiArMTA3Nyw3IEBAIHZvaWQgcnVuX3Rlc3RzKHUzMiBnaWNfZGV2X3R5cGUpXG4gXG4gXHRpZiAoVkdJQ19ERVZfSVNfVjMoZ2ljX2Rldl90eXBlKSkge1xuIFx0XHR0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucygpO1xuK1x0XHR0ZXN0X3YzX3JlZGlzdF9yZWdpb25fcmV0cnkoKTtcbiBcdFx0dGVzdF92M190eXBlcl9hY2Nlc3NlcygpO1xuIFx0XHR0ZXN0X3YzX2xhc3RfYml0X3JlZGlzdF9yZWdpb25zKCk7XG4gXHRcdHRlc3RfdjNfbGFzdF9iaXRfc2luZ2xlX3JkaXN0KCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDoyMDoyOS42ODEwNzc5NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ4OTU1MjIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogS1ZNIEFSTTY0IFZHSUN2MyBSZWRpc3RyaWJ1dG9yIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBBUk02NCBLVk0gVkdJQyBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCdzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBsaWtlIGBLVk1fU0VUX0RFVklDRV9BVFRSYCBmb3IgVkdJQyB2My4gU2luY2Ugd2UgKmNhbiogZnV6eiBLVk0gQVJNNjQg4oCTIHdlJ3ZlIGdvdCB0b29scyBsaWtlIHN5emthbGxlciB0aGF0IHdvcmsgb24gaXQg4oCTIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgbnVtYmVyIG9mIGZpbGVzOiBgYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY2AsIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jYCwgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmNgLCBhbmQgYGFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oYC4gVGhpcyBnaXZlcyBhIHN0cm9uZyBjbHVlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIGxvZ2ljLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlc2UgY2hhbmdlcyBhcmUgbW9kaWZ5aW5nIGhvdyByZWRpc3RyaWJ1dG9yIGlvZGV2cyBhcmUgcmVnaXN0ZXJlZCwgdW5yZWdpc3RlcmVkLCBhbmQgaG93IHJlZGlzdHJpYnV0b3IgYXNzaWdubWVudHMgYXJlIGhhbmRsZWQsIGluY2x1ZGluZyByb2xsYmFja3MgYW5kIHVuZG8gb3BlcmF0aW9ucy4gSSBzZWUgZnVuY3Rpb25zIGxpa2UgYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYW5kIGB2Z2ljX3YzX3JvbGxiYWNrX3JlZGlzdF9yZWdpb25gIGFkZGVkLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIGNvbXBsZXggc3RhdGUgbWFuYWdlbWVudC4gVGhlcmUncyBhbHNvIGEgY2hlY2sgaW4gYGt2bV92Z2ljX2FkZHJgIHRoYXQgcmVzdHJpY3RzIHJlZGlzdHJpYnV0b3IgdXBkYXRlcyBkdXJpbmcgdkNQVSBjcmVhdGlvbi4gU28sIHRoZXJlIGlzIHN0YXRlIHRyYWNraW5nLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBmb3IgZnV6emluZy4gQWZ0ZXIgZ29pbmcgdGhyb3VnaCB0aGUgY29kZSwgSSBhbSBsb29raW5nIGF0OlxuXG4qICAgYGt2bV92Z2ljX3ZjcHVfZGVzdHJveWAgLSBnbG9iYWxcbiogICBga3ZtX3ZnaWNfZGVzdHJveWAgLSBnbG9iYWxcbiogICBga3ZtX3ZnaWNfYWRkcmAgLSBzdGF0aWMsIGJ1dCBsaWtlbHkgd2UgY2FuIHRyaWdnZXIgdmlhIGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAgb3IgYHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2YFxuKiAgIGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAgLSBnbG9iYWxcbiogICBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgIC0gZ2xvYmFsXG4qICAgYHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgIC0gZ2xvYmFsXG4qICAgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgIC0gZ2xvYmFsXG5cbkkgY2FuIGNvbmZpcm0gdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyB0aGUgYENPTkZJR19LVk1gIEtjb25maWcgb3B0aW9uLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgdGhpcyBpcyBhIGRlZmluaXRlIGZ1enppbmcgdGFyZ2V0LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZXhwb3NlZCBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24gdmlhIGlvY3Rscy4gSSB3aWxsIG5vdyBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIHN5emthbGxlciB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDg3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MjE6NDAuMTcwNjMzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkwMzcwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmdpY192M19zZXRfcmVkaXN0X2Jhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYz05Mz1zdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaXRlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xNTMtXFx0XFx0aWYgKHdyaXRlKSB7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYzoxNTQ6XFx0XFx0XFx0ciA9IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKGt2bSwgMCwgYWRkciwgMCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xNTUtXFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jLTE4My1cXHRcXHRcXHRlbHNlXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYzoxODQ6XFx0XFx0XFx0XFx0ciA9IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKGt2bSwgaW5kZXgsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuYy0xODUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJhc2UsIGNvdW50KTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9OTkxPXZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMtOTk4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTk5OmludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudClcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTEwMDAte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmg9MzMyPWludCB2Z2ljX3YzX3NhdmVfcGVuZGluZ190YWJsZXMoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaDozMzM6aW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaC0zMzQtaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjQwLjYyOTY3OTUzN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDQyODY3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgVmdpYyBDbGVhbnVwIGluIHRoZSBLVk0vQVJNNjQgQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGNsZWFuaW5nIHVwIHRoZSBWaXJ0dWFsIEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgKHZHSUMpIGNvZGUsIHNwZWNpZmljYWxseSBvbiBBUk02NCB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSd2ZSBnb3QgYSBmZXcgZnVuY3Rpb25zIHRoYXQgaW1tZWRpYXRlbHkganVtcCBvdXQgYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIGV4YW1pbmF0aW9uOiBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLCBgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgdmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYGt2bV92Z2ljX3ZjcHVfZGVzdHJveWAsIGFuZCBga3ZtX3ZnaWNfZGVzdHJveWAuIFRoZXNlIGFsbCBzZWVtIGludGltYXRlbHkgaW52b2x2ZWQgaW4gdGhlIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHRoZSB2R0lDIHJlZGlzdHJpYnV0b3IgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBTZWVtcyBsaWtlIGEgc29saWQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEJlZm9yZSBJIGRpdmUgaW50byBlYWNoIGZ1bmN0aW9uIGluZGl2aWR1YWxseSB0aG91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIEtWTSBzdXBwb3J0IG9uIEFSTTY0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmdWxseSBhd2FyZSBvZiBob3cgS1ZNIGlzIGNvbmZpZ3VyZWQsIHRoZSBidWlsZCBmbGFncywgYW5kIGFueSBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBoZWxwIG1lIGF2b2lkIGFueSBwb3RlbnRpYWwgbWlzc3RlcHMgb3Igb3Zlcmxvb2tpbmcgY3JpdGljYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjQ2LjA3Mzk2ODg5NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkzNjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDoyMTo0Ni4xMjA5MTQ3NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE5NTA2NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBLVk1gLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIE5vdywgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb25maWd1cmF0aW9uLiBNeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIHBsYXRmb3JtIHNwZWNpZmljcy4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtWTSBjb25maWd1cmF0aW9uIGZvciB0aGUgaW5jbHVzaW9uIG9mIGBWR0lDdjNgIGRldGFpbHMuIEkgYW0gZ29pbmcgdG8gc2VlIHdoYXQgc29ydCBvZiBzcGVjaWZpYyB0dW5pbmdzIHdlIGhhdmUgaW4gcGxhY2UgdGhlcmUuIElzIHRoZXJlIGEgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gYmxvY2sgZm9yIFZHSUN2Mywgb3IgYXJlIHRoZSBzZXR0aW5ncyBpbXBsaWVkIHRocm91Z2ggc29tZSBicm9hZGVyIHNldHRpbmdzPyBJdOKAmXMgY3J1Y2lhbCB0byBrbm93IGlmIHdlIGhhdmUgZXhwbGljaXQgY29udHJvbCBvciBpZiB3ZSdyZSBpbmhlcml0aW5nIGRlZmF1bHRzLiBFaXRoZXIgd2F5LCBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgb3VyIHNldHVwIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjQ5Ljc0MDQyMzQ5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYyMTE4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipWR0lDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjQ5Ljc4NzA1NjMxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyOTcxMTMxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIEFSTTY0IFZHSUN2MyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYW55dGhpbmcgZXhvdGljOyBpdCdzIGp1c3QgZGVhbGluZyB3aXRoIGBLVk1gLiBMZXQgbWUgbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcuIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIGBGb2N1c1N5bWJvbHNgLCBsZXQncyBkb3VibGUgY2hlY2sgdGhvc2U6IGB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZWAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBga3ZtX3ZnaWNfdmNwdV9kZXN0cm95YCwgYW5kIGBrdm1fdmdpY19kZXN0cm95YC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgZ2xvYmFsIEFQSSBlbnRyeXBvaW50cywgbm90IHN0YXRpYyBvciBpbmxpbmVkLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFib3V0IGhvdyB0aGUgS1ZNIEFSTTY0IFZHSUN2MyBoYW5kbGVzIHRoZSByZWRpc3RyaWJ1dG9yIHJlZ2lvbi4gSXTigJlzIGFib3V0IGZpeGluZyByYWNlcyBhbmQgcm9sbGJhY2sgaXNzdWVzIHRoYXQgcG9wIHVwIHdoZW4gd2UncmUgY3JlYXRpbmcgdkNQVXMgYW5kIGFzc2lnbmluZyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZWRpc3RyaWJ1dG9yLiBUaGlzIG1lYW5zIHVzZXJzcGFjZSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggdGhvc2UgYEtWTV9TRVRfREVWSUNFX0FUVFJgIGlvY3RscyDigJMgc28sIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQuXG5cbkp1c3QgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIGBrdm1fdmdpY19hZGRyYC4gQWhhLCB5ZXMsIGl0J3Mgc3RhdGljIGluIGBhcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jYC4gQnV0IGl0J3MgYWxyaWdodCwgYHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlYCBpcyBnbG9iYWwgYW5kIGNhbGxlZCBmcm9tIGl0LCBzbyBpdCdzIGFsbCBtYWtpbmcgc2Vuc2UuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXM7IEknbGwgcmVjb3JkIG15IGZpbmRpbmdzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMzEsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjU3LjA4NDE3MzA3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODc3MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZVwiLFxuICAgIFwidmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcInZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZcIixcbiAgICBcIl9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZcIixcbiAgICBcImt2bV92Z2ljX3ZjcHVfZGVzdHJveVwiLFxuICAgIFwia3ZtX3ZnaWNfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gQVJNNjQgVkdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgcm9sbGJhY2sgbG9naWMgZHVyaW5nIHZDUFUgY3JlYXRpb24gYW5kIHJlZGlzdHJpYnV0b3IgYmFzZSBhZGRyZXNzIGFzc2lnbm1lbnQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fU0VUX0RFVklDRV9BVFRSKSBhbmQgYWZmZWN0cyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IG9uIEFSTTY0LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlXCIsXG4gICAgXCJ2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwidmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2RldlwiLFxuICAgIFwiX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldlwiLFxuICAgIFwia3ZtX3ZnaWNfdmNwdV9kZXN0cm95XCIsXG4gICAgXCJrdm1fdmdpY19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBBUk02NCBWR0lDdjMgcmVkaXN0cmlidXRvciByZWdpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGFuZCByb2xsYmFjayBsb2dpYyBkdXJpbmcgdkNQVSBjcmVhdGlvbiBhbmQgcmVkaXN0cmlidXRvciBiYXNlIGFkZHJlc3MgYXNzaWdubWVudC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TRVRfREVWSUNFX0FUVFIpIGFuZCBhZmZlY3RzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gQVJNNjQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjIxOjU3LjE2NTA1OTMwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDk4MTcyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDoyMTo1Ny4xNjU1ODUyNjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTczNDkyODc3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTZiNDcxZTI1YWZhZDNkMGZhOWQ3Y2QxMmE1MWM5MTg3ZGUwZGZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTA6MjA6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuY1xuaW5kZXggOTA3MDU3ODgxYjI2YS4uODFhYjVhNmJmOGJjOCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmNcbkBAIC01MTksMjkgKzUxOSw2IEBAIHN0YXRpYyB2b2lkIF9fa3ZtX3ZnaWNfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZnaWNfY3B1LVx1MDAzZWFwX2xpc3RfaGVhZCk7XG4gXHRrZnJlZSh2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMpO1xuIFx0dmdpY19jcHUtXHUwMDNlcHJpdmF0ZV9pcnFzID0gTlVMTDtcbi1cbi1cdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpIHtcbi1cdFx0Lypcbi1cdFx0ICogSWYgdGhpcyB2Q1BVIGlzIGJlaW5nIGRlc3Ryb3llZCBiZWNhdXNlIG9mIGEgZmFpbGVkIGNyZWF0aW9uXG4tXHRcdCAqIHRoZW4gdW5yZWdpc3RlciB0aGUgcmVkaXN0cmlidXRvciB0byBhdm9pZCBsZWF2aW5nIGJlaGluZCBhXG4tXHRcdCAqIGRhbmdsaW5nIHBvaW50ZXIgdG8gdGhlIHZDUFUgc3RydWN0LlxuLVx0XHQgKlxuLVx0XHQgKiB2Q1BVcyB0aGF0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZCAoaS5lLiBhZGRlZCB0b1xuLVx0XHQgKiBrdm0tXHUwMDNldmNwdV9hcnJheSkgZ2V0IHVucmVnaXN0ZXJlZCBpbiBrdm1fdmdpY19kZXN0cm95KCksIGFzXG4tXHRcdCAqIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hpbGUgaG9sZGluZyBrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9ja1xuLVx0XHQgKiBpbiB0aGUgVk0gdGVhcmRvd24gcGF0aCBhbmQgd291bGQgb3RoZXJ3aXNlIGludHJvZHVjZSBhIGxvY2tcbi1cdFx0ICogaW52ZXJzaW9uIHcuci50LiBrdm0tXHUwMDNlc3JjdS5cbi1cdFx0ICpcbi1cdFx0ICogdkNQVXMgdGhhdCBmYWlsZWQgY3JlYXRpb24gYXJlIHRvcm4gZG93biBvdXRzaWRlIG9mIHRoZVxuLVx0XHQgKiBrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayBhbmQgZG8gbm90IGdldCB1bnJlZ2lzdGVyZWQgaW5cbi1cdFx0ICoga3ZtX3ZnaWNfZGVzdHJveSgpLCBtZWFuaW5nIGl0IGlzIGJvdGggc2FmZSBhbmQgbmVjZXNzYXJ5IHRvXG4tXHRcdCAqIGRvIHNvIGhlcmUuXG4tXHRcdCAqL1xuLVx0XHRpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKHZjcHUtXHUwMDNla3ZtLCB2Y3B1LVx1MDAzZXZjcHVfaWQpICE9IHZjcHUpXG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbi1cbi1cdFx0dmdpY19jcHUtXHUwMDNlcmRfaW9kZXYuYmFzZV9hZGRyID0gVkdJQ19BRERSX1VOREVGO1xuLVx0fVxuIH1cbiBcbiB2b2lkIGt2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNTQ5LDcgKzUyNiwxNiBAQCB2b2lkIGt2bV92Z2ljX3ZjcHVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXG4rXHRcdHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rXG4gXHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcbitcbitcdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0XHRfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiB9XG4gXG5AQCAtNTU5LDIxICs1NDUsMjMgQEAgdm9pZCBrdm1fdmdpY19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXG4rXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbitcdFx0XHR2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHZjcHUpO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHR2Z2ljX2RlYnVnX2Rlc3Ryb3koa3ZtKTtcbiBcbi1cdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSlcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuIFx0XHRfX2t2bV92Z2ljX3ZjcHVfZGVzdHJveSh2Y3B1KTtcbitcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLnZnaWMudmdpY19tb2RlbCA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMpXG4rXHRcdFx0X192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcdH1cbiBcbiBcdGt2bV92Z2ljX2Rpc3RfZGVzdHJveShrdm0pO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cbi1cdGlmIChrdm0tXHUwMDNlYXJjaC52Z2ljLnZnaWNfbW9kZWwgPT0gS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzKVxuLVx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pXG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbi1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1rdm0tZGV2aWNlLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMta3ZtLWRldmljZS5jXG5pbmRleCA5MGJlOTk0NDNkZjNiLi40OGMzYjJhNDhjMjAyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWt2bS1kZXZpY2UuY1xuQEAgLTk3LDYgKzk3LDkgQEAgc3RhdGljIGludCBrdm1fdmdpY19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0ciwgYm9vbCB3cmlcbiBcdHBoeXNfYWRkcl90ICphZGRyX3B0ciwgYWxpZ25tZW50LCBzaXplO1xuIFx0dTY0IHVuZGVmX3ZhbHVlID0gVkdJQ19BRERSX1VOREVGO1xuIFx0dTY0IGFkZHI7XG4rXHRib29sIHJlZGlzdF93cml0ZSA9IHdyaXRlIFx1MDAyNlx1MDAyNlxuK1x0XHQoYXR0ci1cdTAwM2VhdHRyID09IEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1QgfHxcbitcdFx0IGF0dHItXHUwMDNlYXR0ciA9PSBLVk1fVkdJQ19WM19BRERSX1RZUEVfUkVESVNUX1JFR0lPTik7XG4gXHRpbnQgcjtcbiBcbiBcdC8qIFJlYWRpbmcgYSByZWRpc3RyaWJ1dG9yIHJlZ2lvbiBhZGRyIGltcGxpZXMgZ2V0dGluZyB0aGUgaW5kZXggKi9cbkBAIC0xMDQsNiArMTA3LDE5IEBAIHN0YXRpYyBpbnQga3ZtX3ZnaWNfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsIGJvb2wgd3JpXG4gXHRcdGlmIChnZXRfdXNlcihhZGRyLCB1YWRkcikpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4rXHQvKlxuK1x0ICogQSB2Q1BVIGNhbiBoYXZlIGFuIFJEIGFzc2lnbm1lbnQgYmVmb3JlIGl0IGlzIHZpc2libGUgdG9cbitcdCAqIGt2bV9mb3JfZWFjaF92Y3B1KCkuIFJlamVjdCByZWRpc3RyaWJ1dG9yIHVwZGF0ZXMgd2hpbGUgdkNQVSBjcmVhdGlvblxuK1x0ICogaXMgaW4gcHJvZ3Jlc3MsIHNvIHJvbGxiYWNrIGNhbiByZXNldCBldmVyeSBhc3NpZ25tZW50LlxuK1x0ICovXG4rXHRpZiAocmVkaXN0X3dyaXRlKSB7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMgIT0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cykpIHtcbitcdFx0XHRyID0gLUVCVVNZO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9ja19rdm07XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qXG4gXHQgKiBTaW5jZSB3ZSBjYW4ndCBob2xkIGNvbmZpZ19sb2NrIHdoaWxlIHJlZ2lzdGVyaW5nIHRoZSByZWRpc3RyaWJ1dG9yXG4gXHQgKiBpb2RldnMsIHRha2UgdGhlIHNsb3RzX2xvY2sgaW1tZWRpYXRlbHkuXG5AQCAtMjAxLDYgKzIxNywxMCBAQCBzdGF0aWMgaW50IGt2bV92Z2ljX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyLCBib29sIHdyaVxuIG91dDpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4rb3V0X3VubG9ja19rdm06XG4rXHRpZiAocmVkaXN0X3dyaXRlKVxuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1xuIFx0aWYgKCFyIFx1MDAyNlx1MDAyNiAhd3JpdGUpXG4gXHRcdHIgPSAgcHV0X3VzZXIoYWRkciwgdWFkZHIpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmMgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jXG5pbmRleCA1OTEzYTIwZDgzMDE5Li5kYzg2MDE3ODEwNWQ5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuY1xuQEAgLTc2Niw2ICs3NjYsMTggQEAgdW5zaWduZWQgaW50IHZnaWNfdjNfaW5pdF9kaXN0X2lvZGV2KHN0cnVjdCB2Z2ljX2lvX2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIFNaXzY0SztcbiB9XG4gXG4rc3RhdGljIHZvaWQgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmdpY19jcHUgKnZnaWNfY3B1ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdHZnaWNfY3B1LVx1MDAzZXJkcmVnLVx1MDAzZWZyZWVfaW5kZXgtLTtcbitcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rfVxuK1xuIC8qKlxuICAqIHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2IC0gcmVnaXN0ZXIgYSBzaW5nbGUgcmVkaXN0IGlvZGV2XG4gICogQHZjcHU6ICAgIFRoZSBWQ1BVIHRvIHdoaWNoIHRoZSByZWRpc3RyaWJ1dG9yIGJlbG9uZ3NcbkBAIC04MTgsMTYgKzgzMCwxNyBAQCBpbnQgdmdpY19yZWdpc3Rlcl9yZWRpc3RfaW9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmRfZGV2LVx1MDAzZW5yX3JlZ2lvbnMgPSBBUlJBWV9TSVpFKHZnaWNfdjNfcmRfcmVnaXN0ZXJzKTtcbiBcdHJkX2Rldi1cdTAwM2VyZWRpc3RfdmNwdSA9IHZjcHU7XG4gXG4rXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuK1x0cmRyZWctXHUwMDNlZnJlZV9pbmRleCsrO1xuK1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCByZF9iYXNlLFxuIFx0XHRcdFx0ICAgICAgMiAqIFNaXzY0SywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHR2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnQodmNwdSk7XG4gXG4tXHQvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAqL1xuLVx0cmRyZWctXHUwMDNlZnJlZV9pbmRleCsrO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuQEAgLTg0MSw2ICs4NTQsNDAgQEAgdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYodmNwdS1cdTAwM2Vrdm0sIEtWTV9NTUlPX0JVUywgXHUwMDI2cmRfZGV2LVx1MDAzZWRldik7XG4gfVxuIFxuK3ZvaWQgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZnaWNfY3B1ICp2Z2ljX2NwdSA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4rXHR2Z2ljX2NwdS1cdTAwM2VyZHJlZyA9IE5VTEw7XG4rXHR2Z2ljX2NwdS1cdTAwM2VyZF9pb2Rldi5iYXNlX2FkZHIgPSBWR0lDX0FERFJfVU5ERUY7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleClcbit7XG4rXHRzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZywgKml0ZXI7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1bnNpZ25lZCBsb25nIGM7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcbitcdHJkcmVnID0gdmdpY192M19yZGlzdF9yZWdpb25fZnJvbV9pbmRleChrdm0sIGluZGV4KTtcbitcbitcdGt2bV9mb3JfZWFjaF92Y3B1KGMsIHZjcHUsIGt2bSlcbitcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4rXG4rXHRrdm1fZm9yX2VhY2hfdmNwdShjLCB2Y3B1LCBrdm0pXG4rXHRcdF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXYodmNwdSk7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZnaWMucmRfcmVnaW9ucywgbGlzdClcbitcdFx0aXRlci1cdTAwM2VmcmVlX2luZGV4ID0gMDtcbitcbitcdHZnaWNfdjNfZnJlZV9yZWRpc3RfcmVnaW9uKGt2bSwgcmRyZWcpO1xuK31cbitcbiBzdGF0aWMgaW50IHZnaWNfcmVnaXN0ZXJfYWxsX3JlZGlzdF9pb2RldnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbkBAIC04NTUsMTYgKzkwMiw2IEBAIHN0YXRpYyBpbnQgdmdpY19yZWdpc3Rlcl9hbGxfcmVkaXN0X2lvZGV2cyhzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAocmV0KSB7XG4tXHRcdC8qIFRoZSBjdXJyZW50IGMgZmFpbGVkLCBzbyBpdGVyYXRlIG92ZXIgdGhlIHByZXZpb3VzIG9uZXMuICovXG4tXHRcdGludCBpO1xuLVxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjOyBpKyspIHtcbi1cdFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XG4tXHRcdFx0dmdpY191bnJlZ2lzdGVyX3JlZGlzdF9pb2Rldih2Y3B1KTtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtOTUzLDE3ICs5OTAsOCBAQCBzdGF0aWMgaW50IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHVpbnQzMl90IGluZGV4LFxuIFxuIHZvaWQgdmdpY192M19mcmVlX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdmdpY19yZWRpc3RfcmVnaW9uICpyZHJlZylcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nIGM7XG4tXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbi1cdC8qIEdhcmJhZ2UgY29sbGVjdCB0aGUgcmVnaW9uICovXG4tXHRrdm1fZm9yX2VhY2hfdmNwdShjLCB2Y3B1LCBrdm0pIHtcbi1cdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS5yZHJlZyA9PSByZHJlZylcbi1cdFx0XHR2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUucmRyZWcgPSBOVUxMO1xuLVx0fVxuLVxuIFx0bGlzdF9kZWwoXHUwMDI2cmRyZWctXHUwMDNlbGlzdCk7XG4gXHRrZnJlZShyZHJlZyk7XG4gfVxuQEAgLTk3Miw2ICsxMDAwLDggQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIHtcbiBcdGludCByZXQ7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFx0cmV0ID0gdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgsIGFkZHIsIGNvdW50KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG5AQCAtOTg0LDEyICsxMDE0LDcgQEAgaW50IHZnaWNfdjNfc2V0X3JlZGlzdF9iYXNlKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4LCB1NjQgYWRkciwgdTMyIGNvdW50KVxuIFx0ICovXG4gXHRyZXQgPSB2Z2ljX3JlZ2lzdGVyX2FsbF9yZWRpc3RfaW9kZXZzKGt2bSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHN0cnVjdCB2Z2ljX3JlZGlzdF9yZWdpb24gKnJkcmVnO1xuLVxuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdFx0cmRyZWcgPSB2Z2ljX3YzX3JkaXN0X3JlZ2lvbl9mcm9tX2luZGV4KGt2bSwgaW5kZXgpO1xuLVx0XHR2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbihrdm0sIHJkcmVnKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcdFx0dmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uKGt2bSwgaW5kZXgpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy5oIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmhcbmluZGV4IGY0NWY3ZTNlYzRkNmUuLmUzMmUyYjU2YTQ3ZWYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMuaFxuKysrIGIvYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLmhcbkBAIC0zMzMsNiArMzMzLDcgQEAgaW50IHZnaWNfdjNfc2F2ZV9wZW5kaW5nX3RhYmxlcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCB2Z2ljX3YzX3NldF9yZWRpc3RfYmFzZShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbmRleCwgdTY0IGFkZHIsIHUzMiBjb3VudCk7XG4gaW50IHZnaWNfcmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2Z2ljX3VucmVnaXN0ZXJfcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rdm9pZCBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCB2Z2ljX3YzX2NoZWNrX2Jhc2Uoc3RydWN0IGt2bSAqa3ZtKTtcbiBcbiB2b2lkIHZnaWNfdjNfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuaW5kZXggNDdlMzRiNDNhZmIyOS4uNWEzMGYzY2IwMzliZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2luaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfaW5pdC5jXG5AQCAtNSw2ICs1LDcgQEBcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIFJlZCBIYXQsIEluYy5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbkBAIC0xMywxMiArMTQsMjEgQEBcbiBcbiAjaW5jbHVkZSBcInRlc3RfdXRpbC5oXCJcbiAjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwiZ2ljLmhcIlxuICNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuICNpbmNsdWRlIFwidmdpYy5oXCJcbiAjaW5jbHVkZSBcImdpY192My5oXCJcbiBcbiAjZGVmaW5lIE5SX1ZDUFVTXHRcdDRcbiBcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0VcdEdJQ1JfQkFTRV9HUEFcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9SRUdJT04xX0JBU0VcdFxcXG4rXHQoUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSArIDIgKiBLVk1fVkdJQ19WM19SRURJU1RfU0laRSlcbisjZGVmaW5lIFJFRElTVF9SRVRSWV9ESVNUX0JBU0VcdFx0XFxcbitcdChSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFICsgS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpXG4rI2RlZmluZSBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFXHRcXFxuK1x0KFJFRElTVF9SRVRSWV9ESVNUX0JBU0UgKyBLVk1fVkdJQ19WM19ESVNUX1NJWkUpXG4rXG4gI2RlZmluZSBSRUdfT0ZGU0VUKHZjcHUsIG9mZnNldCkgKCgodTY0KXZjcHUgXHUwMDNjXHUwMDNjIDMyKSB8IG9mZnNldClcbiBcbiAjZGVmaW5lIFZHSUNfREVWX0lTX1YyKF9kKSAoKF9kKSA9PSBLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjIpXG5AQCAtNjUsNiArNzUsMjMgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBndWVzdF9jaGVja19yZWRpc3RfcmV0cnkodm9pZClcbit7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdC8qIFRoZSBmaXJzdCB0aHJlZSByZWRpc3RyaWJ1dG9ycyBzcGFuIGFkamFjZW50IHJlZ2lvbnMgMCBhbmQgMS4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1ZDUFVTOyBpKyspIHtcbitcdFx0dTY0IGJhc2UgPSBpIFx1MDAzYyAzID8gUkVESVNUX1JFVFJZX1JFR0lPTjBfQkFTRSArXG4rXHRcdFx0XHQgICAgICAgaSAqIEtWTV9WR0lDX1YzX1JFRElTVF9TSVpFIDpcbitcdFx0XHRcdCAgICAgICBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFO1xuK1x0XHR1NjQgdHlwZXIgPSByZWFkcSgodm9pZCAqKSh1bnNpZ25lZCBsb25nKShiYXNlICsgR0lDUl9UWVBFUikpO1xuK1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEoR0lDUl9UWVBFUl9DUFVfTlVNQkVSKHR5cGVyKSwgaSk7XG4rXHR9XG4rXG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuIC8qIHdlIGRvbid0IHdhbnQgdG8gYXNzZXJ0IG9uIHJ1biBleGVjdXRpb24sIGhlbmNlIHRoYXQgaGVscGVyICovXG4gc3RhdGljIGludCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuQEAgLTczLDYgKzEwMCw3IEBAIHN0YXRpYyBpbnQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fZ2ljIHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyh1MzIgZ2ljX2Rldl90eXBlLFxuIFx0XHRcdFx0XHQgICAgICB1MzIgbnJfdmNwdXMsXG4rXHRcdFx0XHRcdCAgICAgIHZvaWQgKmd1ZXN0X2NvZGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbXSlcbiB7XG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG5AQCAtMzM4LDcgKzM2Niw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmdpY190aGVuX3ZjcHVzKHUzMiBnaWNfZGV2X3R5cGUpXG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4gXHRpbnQgcmV0LCBpO1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIDEsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoZ2ljX2Rldl90eXBlLCAxLCBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXG4gXHRzdWJ0ZXN0X2Rpc3RfcmRpc3QoXHUwMDI2dik7XG4gXG5AQCAtMzU5LDcgKzM4Nyw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdmNwdXNfdGhlbl92Z2ljKHUzMiBnaWNfZGV2X3R5cGUpXG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhnaWNfZGV2X3R5cGUsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKGdpY19kZXZfdHlwZSwgTlJfVkNQVVMsIGd1ZXN0X2NvZGUsXG4rXHRcdFx0XHQgICAgIHZjcHVzKTtcbiBcbiBcdHN1YnRlc3RfZGlzdF9yZGlzdChcdTAwMjZ2KTtcbiBcbkBAIC00MTEsNyArNDQwLDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcdHU2NCBhZGRyO1xuIFx0aW50IHJldDtcbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFx0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcbiBcdFx0XHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xuQEAgLTQyMiw3ICs0NTIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFxuIFx0Lyogc3RlcDIgKi9cbiBcbi1cdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCBOUl9WQ1BVUywgdmNwdXMpO1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jb2RlLCB2Y3B1cyk7XG4gXHRzdWJ0ZXN0X3YzX3JlZGlzdF9yZWdpb25zKFx1MDAyNnYpO1xuIFxuIFx0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIDB4MjgwMDAwLCAwLCAyKTtcbkBAIC00MzYsNyArNDY3LDggQEAgc3RhdGljIHZvaWQgdGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnModm9pZClcbiBcbiBcdC8qIHN0ZXAgMyAqL1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdHN1YnRlc3RfdjNfcmVkaXN0X3JlZ2lvbnMoXHUwMDI2dik7XG4gXG4gXHRyZXQgPSBfX2t2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG5AQCAtNDU3LDYgKzQ4OSw3MCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25ld19yZWRpc3RfcmVnaW9ucyh2b2lkKVxuIFx0dm1fZ2ljX2Rlc3Ryb3koXHUwMDI2dik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X3JlZ2lvbl9yZXRyeSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbTlJfVkNQVVNdO1xuK1x0c3RydWN0IHZtX2dpYyB2O1xuK1x0c3RydWN0IHVjYWxsIHVjO1xuK1x0dTY0IGFkZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICBndWVzdF9jaGVja19yZWRpc3RfcmV0cnksIHZjcHVzKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigyLCBSRURJU1RfUkVUUllfUkVHSU9OMF9CQVNFLCAwLCAwKTtcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMV9CQVNFLCAwLCAxKTtcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVUUllfRElTVF9CQVNFO1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUixcbitcdFx0XHQgICAgS1ZNX1ZHSUNfVjNfQUREUl9UWVBFX0RJU1QsIFx1MDAyNmFkZHIpO1xuK1xuK1x0YWRkciA9IFJFRElTVF9SRUdJT05fQVRUUl9BRERSKDEsIFJFRElTVF9SRVRSWV9ESVNUX0JBU0UsIDAsIDIpO1xuK1x0cmV0ID0gX19rdm1fZGV2aWNlX2F0dHJfc2V0KHYuZ2ljX2ZkLCBLVk1fREVWX0FSTV9WR0lDX0dSUF9BRERSLFxuK1x0XHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLFxuK1x0XHRcdFx0ICAgIFx1MDAyNmFkZHIpO1xuK1x0VEVTVF9BU1NFUlQocmV0IFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4rXHRcdCAgICBcInJlZ2lzdGVyIHJlZGlzdCByZWdpb24gY29sbGlkaW5nIHdpdGggZGlzdFwiKTtcbitcbitcdGFkZHIgPSBSRURJU1RfUkVHSU9OX0FUVFJfQUREUigxLCBSRURJU1RfUkVUUllfUkVHSU9OMl9CQVNFLCAwLCAyKTtcbitcdGt2bV9kZXZpY2VfYXR0cl9zZXQodi5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIsXG4rXHRcdFx0ICAgIEtWTV9WR0lDX1YzX0FERFJfVFlQRV9SRURJU1RfUkVHSU9OLCBcdTAwMjZhZGRyKTtcbitcbitcdHZpcnRfbWFwKHYudm0sIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsIFJFRElTVF9SRVRSWV9SRUdJT04wX0JBU0UsXG4rXHRcdCB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLVx1MDAzZW1vZGUsXG4rXHRcdFx0XHRcdCAzICogS1ZNX1ZHSUNfVjNfUkVESVNUX1NJWkUpKTtcbitcdHZpcnRfbWFwKHYudm0sIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsIFJFRElTVF9SRVRSWV9SRUdJT04yX0JBU0UsXG4rXHRcdCB2bV9jYWxjX251bV9ndWVzdF9wYWdlcyh2LnZtLVx1MDAzZW1vZGUsXG4rXHRcdFx0XHRcdCBLVk1fVkdJQ19WM19SRURJU1RfU0laRSkpO1xuK1xuK1x0a3ZtX2RldmljZV9hdHRyX3NldCh2LmdpY19mZCwgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQ1RSTCxcbitcdFx0XHQgICAgS1ZNX0RFVl9BUk1fVkdJQ19DVFJMX0lOSVQsIE5VTEwpO1xuK1xuK1x0dmNwdV9ydW4odmNwdXNbMF0pO1xuK1x0c3dpdGNoIChnZXRfdWNhbGwodmNwdXNbMF0sIFx1MDAyNnVjKSkge1xuK1x0Y2FzZSBVQ0FMTF9ET05FOlxuK1x0XHRicmVhaztcbitcdGNhc2UgVUNBTExfQUJPUlQ6XG4rXHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgVUNBTExfTk9ORTpcbitcdFx0aWYgKHZjcHVzWzBdLVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9NTUlPKVxuK1x0XHRcdFRFU1RfRkFJTChcIlVuZXhwZWN0ZWQgTU1JTyBleGl0IGF0IDB4JWxseFwiLFxuK1x0XHRcdFx0ICB2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlbW1pby5waHlzX2FkZHIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGRlZmF1bHQ6XG4rXHRcdFRFU1RfRkFJTChcIlVuZXhwZWN0ZWQgdWNhbGwgJWx1LCBleGl0X3JlYXNvbiAldVwiLFxuK1x0XHRcdCAgdWMuY21kLCB2Y3B1c1swXS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24pO1xuK1x0fVxuK1xuK1x0dm1fZ2ljX2Rlc3Ryb3koXHUwMDI2dik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfdjNfdHlwZXJfYWNjZXNzZXModm9pZClcbiB7XG4gXHRzdHJ1Y3Qgdm1fZ2ljIHY7XG5AQCAtNjA4LDcgKzcwNCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfdjNfcmVkaXN0X2lwYV9yYW5nZV9jaGVja19hdF92Y3B1X3J1bih2b2lkKVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBhZGRyO1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIDEsIHZjcHVzKTtcbitcdHYgPSB2bV9naWNfY3JlYXRlX3dpdGhfdmNwdXMoS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YzLCAxLCBndWVzdF9jb2RlLFxuK1x0XHRcdFx0ICAgICB2Y3B1cyk7XG4gXG4gXHQvKiBTZXQgc3BhY2UgZm9yIDMgcmVkaXN0cywgd2UgaGF2ZSAxIHZjcHUsIHNvIHRoaXMgc3VjY2VlZHMuICovXG4gXHRhZGRyID0gbWF4X3BoeXNfc2l6ZSAtICgzICogMiAqIDB4MTAwMDApO1xuQEAgLTY0MSw3ICs3MzgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX2l0c19yZWdpb24odm9pZClcbiBcdHU2NCBhZGRyO1xuIFx0aW50IGl0c19mZCwgcmV0O1xuIFxuLVx0diA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2ID0gdm1fZ2ljX2NyZWF0ZV93aXRoX3ZjcHVzKEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMywgTlJfVkNQVVMsXG4rXHRcdFx0XHQgICAgIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiBcdGl0c19mZCA9IGt2bV9jcmVhdGVfZGV2aWNlKHYudm0sIEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19JVFMpO1xuIFxuIFx0YWRkciA9IDB4NDAxMDAwO1xuQEAgLTY4NCw3ICs3ODIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3YzX25hc3NnaWNhcCh2b2lkKVxuIFx0dTMyIHR5cGVyMjtcbiBcdGludCByZXQ7XG4gXG4tXHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLCB2Y3B1cyk7XG4rXHR2bSA9IHZtX2dpY19jcmVhdGVfd2l0aF92Y3B1cyhLVk1fREVWX1RZUEVfQVJNX1ZHSUNfVjMsIE5SX1ZDUFVTLFxuK1x0XHRcdFx0ICAgICAgZ3Vlc3RfY29kZSwgdmNwdXMpO1xuIFx0a3ZtX2RldmljZV9hdHRyX2dldCh2bS5naWNfZmQsIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUyxcbiBcdFx0XHQgICAgR0lDRF9UWVBFUjIsIFx1MDAyNnR5cGVyMik7XG4gXHRoYXNfbmFzc2dpY2FwID0gdHlwZXIyIFx1MDAyNiBHSUNEX1RZUEVSMl9uQVNTR0ljYXA7XG5AQCAtOTc4LDYgKzEwNzcsNyBAQCB2b2lkIHJ1bl90ZXN0cyh1MzIgZ2ljX2Rldl90eXBlKVxuIFxuIFx0aWYgKFZHSUNfREVWX0lTX1YzKGdpY19kZXZfdHlwZSkpIHtcbiBcdFx0dGVzdF92M19uZXdfcmVkaXN0X3JlZ2lvbnMoKTtcbitcdFx0dGVzdF92M19yZWRpc3RfcmVnaW9uX3JldHJ5KCk7XG4gXHRcdHRlc3RfdjNfdHlwZXJfYWNjZXNzZXMoKTtcbiBcdFx0dGVzdF92M19sYXN0X2JpdF9yZWRpc3RfcmVnaW9ucygpO1xuIFx0XHR0ZXN0X3YzX2xhc3RfYml0X3NpbmdsZV9yZGlzdCgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MjE6NTcuMTY1NTg2MTAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzQ5MjYzMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBWR0lDIHYzIFJlZGlzdHJpYnV0b3IgSW5pdGlhbGl6YXRpb24gYW5kIFRlYXJkb3duIC0gRm9jdXNlZCBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZ2h0ZW5pbmcgdXAgdGhlIFZHSUMgdjMgcmVkaXN0cmlidXRvciBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcHJvY2VkdXJlcywgc3BlY2lmaWNhbGx5IHRvIGhhbmRsZSBzY2VuYXJpb3Mgd2hlcmUgdkNQVSBjcmVhdGlvbiBmYWlscyBvciBzZXR0aW5nIHRoZSByZWRpc3RyaWJ1dG9yIGJhc2UgZmFpbHMuIFRoZSBrZXkgaGVyZSBpcyByb2xsYmFjay4gSXQgc2VlbXMgdGhlIGNvcmUgcHJvYmxlbSBpcyBwb3RlbnRpYWxseSBkYW5nbGluZyBwb2ludGVycyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBjb3JydXB0aW9uIGR1cmluZyB0aGVzZSBmYWlsdXJlIGNhc2VzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IHdhcywgYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgYmVpbmcgaW50cm9kdWNlZD8gQSBxdWljayBsb29rIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgc3VnZ2VzdHMgbm8sIHdoaWNoIGlzIGEgcmVsaWVmLiBXZSdyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgX19rdm1fdmdpY192Y3B1X2Rlc3Ryb3lgLCBga3ZtX3ZnaWNfdmNwdV9kZXN0cm95YCwgYGt2bV92Z2ljX2Rlc3Ryb3lgLCBga3ZtX3ZnaWNfYWRkcmAsIGB2Z2ljX3YzX2luaXRfZGlzdF9pb2RldmAsIGB2Z2ljX3JlZ2lzdGVyX3JlZGlzdF9pb2RldmAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbmAsIGB2Z2ljX3YzX2ZyZWVfcmVkaXN0X3JlZ2lvbmAsIGFuZCBgdmdpY192M19zZXRfcmVkaXN0X2Jhc2VgLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRpbmcgYHZnaWNfdW5yZWdpc3Rlcl9yZWRpc3RfaW9kZXZgLCBgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldmAsIGFuZCBgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCB0byBlbnN1cmUgdGhhdCByZXNvdXJjZXMgYXJlIHByb3Blcmx5IGNsZWFuZWQgdXAgaW4gZXJyb3IgcGF0aHMuIFRoZSBuZXcgYGt2bV92Z2ljX2FkZHJgIGNoZWNrIGxvb2tzIGxpa2UgYSBzaW1wbGUgY29uY3VycmVuY3kgY2hlY2sgdG8gcHJldmVudCByZWRpc3RyaWJ1dG9yIHVwZGF0ZXMgd2hpbGUgdkNQVSBjcmVhdGlvbiBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cblxuQWZ0ZXIgY2hlY2tpbmcgYGt2bV92Z2ljX2FkZHJgLCB0aGUgY29kZSBzZWVtcyBzZW5zaWJsZS4gVGhlIGB2Z2ljX3VuZG9fcmVkaXN0X2Fzc2lnbm1lbnRgIGFuZCBgX192Z2ljX3VuYXNzaWduX3JlZGlzdF9pb2RldmAgZnVuY3Rpb25zIGFyZSBqdXN0IHJlc291cmNlIGNsZWFudXAsIGFuZCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCBkb2VzIGNsZWFudXAgYWNyb3NzIGFsbCB2Y3B1cy5cblxuQmFzaWNhbGx5LCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZlbnNpdmUgcGF0Y2g6IGl0J3MgbWFraW5nIHN1cmUgdGhhdCBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IgZHVyaW5nIHZDUFUgY3JlYXRpb24gb3IgcmVkaXN0cmlidXRvciBzZXR1cCwgd2UgcHJvcGVybHkgcmVsZWFzZSBhbGwgcmVzb3VyY2VzIGFuZCBkb24ndCBlbmQgdXAgd2l0aCBkYW5nbGluZyBwb2ludGVycywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2sgaW52ZXJzaW9uIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoICppc24ndCogYWRkaW5nIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMuXG5cblNvLCBnaXZlbiB0aGlzIGFuYWx5c2lzLCB0aGUgcGF0Y2ggbG9va3MgY2xlYW4gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCBhbmQgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgbmV3IGF0dGFjayBzdXJmYWNlcy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZml4IHRvIGluY3JlYXNlIHRoZSByb2J1c3RuZXNzIGFuZCByZWxpYWJpbGl0eSBvZiB0aGUgVkdJQyB2MyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDg0LCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDoyMjoxNC41MTQ4NTIzNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWR0lDIHYzIHJlZGlzdHJpYnV0b3IgaW5pdGlhbGl6YXRpb24sIHRlYXJkb3duLCBhbmQgcm9sbGJhY2sgbG9naWMuIEl0IGludHJvZHVjZXMgcHJvcGVyIGNsZWFudXAgZnVuY3Rpb25zIChgdmdpY191bmRvX3JlZGlzdF9hc3NpZ25tZW50YCwgYF9fdmdpY191bmFzc2lnbl9yZWRpc3RfaW9kZXZgLCBgdmdpY192M19yb2xsYmFja19yZWRpc3RfcmVnaW9uYCkgYW5kIGFkanVzdHMgbG9ja2luZyB0byBwcmV2ZW50IGRhbmdsaW5nIHBvaW50ZXJzIGFuZCBsb2NrIGludmVyc2lvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24gZmFpbHVyZXMgb3IgcmVkaXN0cmlidXRvciBiYXNlIHNldHVwIGZhaWx1cmVzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIG9iamVjdCBsaWZlY3ljbGUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciBkZWFkbG9ja3MpIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIExPQ0tERVAuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gVkdJQyB2MyByZWRpc3RyaWJ1dG9yIGluaXRpYWxpemF0aW9uLCB0ZWFyZG93biwgYW5kIHJvbGxiYWNrIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIHByb3BlciBjbGVhbnVwIGZ1bmN0aW9ucyAoYHZnaWNfdW5kb19yZWRpc3RfYXNzaWdubWVudGAsIGBfX3ZnaWNfdW5hc3NpZ25fcmVkaXN0X2lvZGV2YCwgYHZnaWNfdjNfcm9sbGJhY2tfcmVkaXN0X3JlZ2lvbmApIGFuZCBhZGp1c3RzIGxvY2tpbmcgdG8gcHJldmVudCBkYW5nbGluZyBwb2ludGVycyBhbmQgbG9jayBpbnZlcnNpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGZhaWx1cmVzIG9yIHJlZGlzdHJpYnV0b3IgYmFzZSBzZXR1cCBmYWlsdXJlcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgY29uY3VycmVuY3ksIGFuZCBvYmplY3QgbGlmZWN5Y2xlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGFsbG93IHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkYW5nbGluZyBwb2ludGVycywgb3IgZGVhZGxvY2tzKSBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBMT0NLREVQLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kths[1] Phase: Succeeded StartedAt: 2026-08-22 10:22:26 +0000 UTC FinishedAt: 2026-08-22 10:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 10:22:26 +0000 UTC FinishedAt: 2026-08-22 10:22:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2] Phase: Succeeded StartedAt: 2026-08-22 10:22:26 +0000 UTC FinishedAt: 2026-08-22 11:03:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 10:22:26 +0000 UTC FinishedAt: 2026-08-22 11:03:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 10:22:26 +0000 UTC FinishedAt: 2026-08-22 10:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 10:22:26 +0000 UTC FinishedAt: 2026-08-22 10:22:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow6kths/series-workflow6kths-convert-artifact-2097063884/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 10:22:36 +0000 UTC FinishedAt: 2026-08-22 10:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 10:22:36 +0000 UTC FinishedAt: 2026-08-22 10:40:17 +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:*8ec4d4c3-3c2a-4487-a47e-5724218e9aee,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-workflow6kths/series-workflow6kths-convert-artifact-2097063884/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": "510a6d24-fa35-4b42-b201-45b89e5c025a", "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-workflow6kths/series-workflow6kths-build-action-1926014458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 10:22:36 +0000 UTC FinishedAt: 2026-08-22 10:40:10 +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:*8ec4d4c3-3c2a-4487-a47e-5724218e9aee,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-workflow6kths/series-workflow6kths-convert-artifact-2097063884/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": "510a6d24-fa35-4b42-b201-45b89e5c025a", "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-workflow6kths/series-workflow6kths-build-action-1926014458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 10:40:17 +0000 UTC FinishedAt: 2026-08-22 10:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 10:40:17 +0000 UTC FinishedAt: 2026-08-22 10:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 10:40:17 +0000 UTC FinishedAt: 2026-08-22 10:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 10:40:17 +0000 UTC FinishedAt: 2026-08-22 10:40:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow6kths/series-workflow6kths-convert-artifact-2011363851/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 10:40:27 +0000 UTC FinishedAt: 2026-08-22 10:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 10:40:27 +0000 UTC FinishedAt: 2026-08-22 10:42:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*510a6d24-fa35-4b42-b201-45b89e5c025a,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-workflow6kths/series-workflow6kths-build-action-1926014458/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-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 10:42:33 +0000 UTC FinishedAt: 2026-08-22 10:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 10:42:33 +0000 UTC FinishedAt: 2026-08-22 10:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 10:42:33 +0000 UTC FinishedAt: 2026-08-22 10:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 10:42:33 +0000 UTC FinishedAt: 2026-08-22 10:59:08 +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:*8ec4d4c3-3c2a-4487-a47e-5724218e9aee,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-workflow6kths/series-workflow6kths-convert-artifact-2011363851/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": "c98fa1ca-88dd-4af8-b951-fc9d70e48aa0", "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-workflow6kths/series-workflow6kths-build-action-385718447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 10:42:33 +0000 UTC FinishedAt: 2026-08-22 10:58:58 +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:*8ec4d4c3-3c2a-4487-a47e-5724218e9aee,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-workflow6kths/series-workflow6kths-convert-artifact-2011363851/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": "c98fa1ca-88dd-4af8-b951-fc9d70e48aa0", "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-workflow6kths/series-workflow6kths-build-action-385718447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 10:59:08 +0000 UTC FinishedAt: 2026-08-22 10:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 10:59:08 +0000 UTC FinishedAt: 2026-08-22 10:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 10:59:08 +0000 UTC FinishedAt: 2026-08-22 11:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 10:59:08 +0000 UTC FinishedAt: 2026-08-22 11:00:48 +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:*c98fa1ca-88dd-4af8-b951-fc9d70e48aa0,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-workflow6kths/series-workflow6kths-build-action-385718447/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-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 11:00:58 +0000 UTC FinishedAt: 2026-08-22 11:03:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 11:00:58 +0000 UTC FinishedAt: 2026-08-22 11:03:42 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"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:*510a6d24-fa35-4b42-b201-45b89e5c025a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c98fa1ca-88dd-4af8-b951-fc9d70e48aa0,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-workflow6kths/series-workflow6kths-build-action-1926014458/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-workflow6kths/series-workflow6kths-build-action-385718447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 11:00:58 +0000 UTC FinishedAt: 2026-08-22 11:01:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 11:00:58 +0000 UTC FinishedAt: 2026-08-22 11:01:03 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"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-workflow6kths/series-workflow6kths-convert-artifact-2384649892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 11:00:58 +0000 UTC FinishedAt: 2026-08-22 11:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 11:00:58 +0000 UTC FinishedAt: 2026-08-22 11:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 11:00:58 +0000 UTC FinishedAt: 2026-08-22 11:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 11:01:08 +0000 UTC FinishedAt: 2026-08-22 11:03:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6kths[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vgic_v3_set_redist_base","vgic_register_redist_iodev","vgic_unregister_redist_iodev","__vgic_unassign_redist_iodev","kvm_vgic_vcpu_destroy","kvm_vgic_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d75b48460559423f8c38aafed7a9cdec91d26d57","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"bed53ffd-7330-4078-aa2d-a8bf99d24a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 11:01:08 +0000 UTC FinishedAt: 2026-08-22 11:03:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*510a6d24-fa35-4b42-b201-45b89e5c025a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c98fa1ca-88dd-4af8-b951-fc9d70e48aa0,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-workflow6kths/series-workflow6kths-build-action-1926014458/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-workflow6kths/series-workflow6kths-build-action-385718447/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-workflow6kths/series-workflow6kths-convert-artifact-2384649892/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,}